From 065a57e4452a58ca15cf49fc1f706345089d3015 Mon Sep 17 00:00:00 2001 From: g-battaglia Date: Wed, 18 Mar 2026 15:22:06 +0100 Subject: [PATCH] Port lazydocker to lazyapple for Apple Container runtime Rewrite of lazydocker to work with Apple's native container CLI instead of Docker. - Replace Docker SDK with Apple Container CLI wrapper - Remove docker-compose/services/projects support - 4 panels: Containers, Images, Volumes, Networks - Remove all Docker Go dependencies - Rename binary to lazyapple - Update README with install and usage instructions --- .gitignore | 2 + README.md | 387 +- go.mod | 48 +- go.sum | 165 +- lazycontainer | Bin 0 -> 9407634 bytes main.go | 27 +- pkg/app/app.go | 33 +- pkg/cheatsheet/generate.go | 10 +- pkg/commands/apple_types.go | 171 + pkg/commands/container.go | 175 +- pkg/commands/container_client.go | 632 + pkg/commands/container_cmd.go | 167 + pkg/commands/container_stats.go | 172 +- pkg/commands/container_stats_test.go | 17 - pkg/commands/docker.go | 569 - pkg/commands/docker_host_unix.go | 7 - pkg/commands/docker_host_windows.go | 5 - pkg/commands/docker_test.go | 63 - pkg/commands/dummies.go | 52 - pkg/commands/image.go | 145 +- pkg/commands/network.go | 47 +- pkg/commands/os.go | 4 +- pkg/commands/os_test.go | 355 - pkg/commands/project.go | 5 - pkg/commands/service.go | 84 - pkg/commands/ssh/ssh.go | 159 - pkg/commands/ssh/ssh_test.go | 109 - pkg/commands/volume.go | 55 +- pkg/config/app_config.go | 451 +- pkg/config/app_config_test.go | 46 - pkg/gui/app_status_manager.go | 2 +- pkg/gui/arrangement.go | 37 +- pkg/gui/container_logs.go | 104 +- pkg/gui/containers_panel.go | 515 +- pkg/gui/custom_commands.go | 8 +- pkg/gui/gocui.go | 2 +- pkg/gui/gui.go | 160 +- pkg/gui/images_panel.go | 140 +- pkg/gui/keybindings.go | 152 +- pkg/gui/menu_panel.go | 8 +- pkg/gui/networks_panel.go | 55 +- pkg/gui/options_menu_panel.go | 2 +- pkg/gui/panels.go | 12 +- pkg/gui/panels/context_state.go | 2 +- pkg/gui/panels/side_list_panel.go | 4 +- pkg/gui/presentation/container_stats.go | 14 +- pkg/gui/presentation/containers.go | 107 +- pkg/gui/presentation/images.go | 6 +- pkg/gui/presentation/menu_items.go | 2 +- pkg/gui/presentation/networks.go | 4 +- pkg/gui/presentation/projects.go | 7 - pkg/gui/presentation/services.go | 43 - pkg/gui/presentation/volumes.go | 7 +- pkg/gui/project_panel.go | 230 - pkg/gui/services_panel.go | 559 - pkg/gui/sort_container_test.go | 103 +- pkg/gui/subprocess.go | 2 +- pkg/gui/tasks_adapter.go | 2 +- pkg/gui/view_helpers.go | 6 +- pkg/gui/views.go | 47 +- pkg/gui/volumes_panel.go | 65 +- pkg/i18n/chinese.go | 10 +- pkg/i18n/dutch.go | 10 +- pkg/i18n/english.go | 28 +- pkg/i18n/french.go | 10 +- pkg/i18n/german.go | 10 +- pkg/i18n/i18n.go | 2 +- pkg/i18n/polish.go | 4 +- pkg/i18n/portuguese.go | 10 +- pkg/i18n/spanish.go | 10 +- pkg/i18n/turkish.go | 8 +- pkg/log/log.go | 2 +- pkg/tasks/tasks.go | 2 +- scripts/cheatsheet/main.go | 2 +- .../translations/get_required_translations.go | 2 +- .../mergo/.deepsource.toml | 2 +- .../imdario => dario.cat}/mergo/.gitignore | 3 + .../imdario => dario.cat}/mergo/.travis.yml | 0 .../mergo/CODE_OF_CONDUCT.md | 0 .../mergo/CONTRIBUTING.md | 0 vendor/dario.cat/mergo/FUNDING.json | 7 + .../imdario => dario.cat}/mergo/LICENSE | 0 .../imdario => dario.cat}/mergo/README.md | 125 +- .../imdario => dario.cat}/mergo/SECURITY.md | 4 +- .../imdario => dario.cat}/mergo/doc.go | 43 +- .../imdario => dario.cat}/mergo/map.go | 2 +- .../imdario => dario.cat}/mergo/merge.go | 2 +- .../imdario => dario.cat}/mergo/mergo.go | 0 .../Microsoft/go-winio/.gitattributes | 1 - .../github.com/Microsoft/go-winio/.gitignore | 10 - .../Microsoft/go-winio/.golangci.yml | 147 - .../github.com/Microsoft/go-winio/CODEOWNERS | 1 - vendor/github.com/Microsoft/go-winio/LICENSE | 22 - .../github.com/Microsoft/go-winio/README.md | 89 - .../github.com/Microsoft/go-winio/SECURITY.md | 41 - .../github.com/Microsoft/go-winio/backup.go | 287 - vendor/github.com/Microsoft/go-winio/doc.go | 22 - vendor/github.com/Microsoft/go-winio/ea.go | 137 - vendor/github.com/Microsoft/go-winio/file.go | 320 - .../github.com/Microsoft/go-winio/fileinfo.go | 106 - .../github.com/Microsoft/go-winio/hvsock.go | 582 - .../Microsoft/go-winio/internal/fs/doc.go | 2 - .../Microsoft/go-winio/internal/fs/fs.go | 262 - .../go-winio/internal/fs/security.go | 12 - .../go-winio/internal/fs/zsyscall_windows.go | 61 - .../go-winio/internal/socket/rawaddr.go | 20 - .../go-winio/internal/socket/socket.go | 177 - .../internal/socket/zsyscall_windows.go | 69 - .../go-winio/internal/stringbuffer/wstring.go | 132 - vendor/github.com/Microsoft/go-winio/pipe.go | 586 - .../Microsoft/go-winio/pkg/guid/guid.go | 232 - .../go-winio/pkg/guid/guid_nonwindows.go | 16 - .../go-winio/pkg/guid/guid_windows.go | 13 - .../go-winio/pkg/guid/variant_string.go | 27 - .../Microsoft/go-winio/privilege.go | 196 - .../github.com/Microsoft/go-winio/reparse.go | 131 - vendor/github.com/Microsoft/go-winio/sd.go | 133 - .../github.com/Microsoft/go-winio/syscall.go | 5 - .../Microsoft/go-winio/zsyscall_windows.go | 378 - vendor/github.com/containerd/errdefs/LICENSE | 191 - .../github.com/containerd/errdefs/README.md | 13 - .../github.com/containerd/errdefs/errors.go | 443 - .../github.com/containerd/errdefs/pkg/LICENSE | 191 - .../containerd/errdefs/pkg/errhttp/http.go | 96 - .../errdefs/pkg/internal/cause/cause.go | 33 - .../github.com/containerd/errdefs/resolve.go | 147 - .../github.com/containerd/log/.golangci.yml | 30 - vendor/github.com/containerd/log/LICENSE | 191 - vendor/github.com/containerd/log/README.md | 17 - vendor/github.com/containerd/log/context.go | 182 - .../distribution/reference/.gitattributes | 1 - .../distribution/reference/.gitignore | 2 - .../distribution/reference/.golangci.yml | 18 - .../distribution/reference/CODE-OF-CONDUCT.md | 5 - .../distribution/reference/CONTRIBUTING.md | 114 - .../distribution/reference/GOVERNANCE.md | 144 - .../github.com/distribution/reference/LICENSE | 202 - .../distribution/reference/MAINTAINERS | 26 - .../distribution/reference/Makefile | 25 - .../distribution/reference/README.md | 30 - .../distribution/reference/SECURITY.md | 7 - .../reference/distribution-logo.svg | 1 - .../distribution/reference/helpers.go | 42 - .../distribution/reference/normalize.go | 255 - .../distribution/reference/reference.go | 432 - .../distribution/reference/regexp.go | 163 - .../github.com/distribution/reference/sort.go | 75 - vendor/github.com/docker/cli/AUTHORS | 910 -- vendor/github.com/docker/cli/LICENSE | 191 - vendor/github.com/docker/cli/NOTICE | 19 - .../docker/cli/cli/config/config.go | 172 - .../docker/cli/cli/config/configfile/file.go | 354 - .../cli/cli/config/configfile/file_unix.go | 35 - .../cli/cli/config/configfile/file_windows.go | 5 - .../cli/cli/config/credentials/credentials.go | 17 - .../cli/config/credentials/default_store.go | 22 - .../credentials/default_store_darwin.go | 5 - .../config/credentials/default_store_linux.go | 13 - .../credentials/default_store_unsupported.go | 7 - .../credentials/default_store_windows.go | 5 - .../cli/cli/config/credentials/file_store.go | 86 - .../cli/config/credentials/native_store.go | 147 - .../docker/cli/cli/config/types/authconfig.go | 22 - .../cli/connhelper/commandconn/commandconn.go | 289 - .../connhelper/commandconn/pdeathsig_linux.go | 10 - .../commandconn/pdeathsig_nolinux.go | 9 - .../connhelper/commandconn/session_unix.go | 13 - .../connhelper/commandconn/session_windows.go | 8 - .../docker/cli/cli/connhelper/connhelper.go | 81 - .../docker/cli/cli/connhelper/ssh/ssh.go | 63 - .../cli/cli/context/docker/constants.go | 6 - .../docker/cli/cli/context/docker/load.go | 149 - .../docker/cli/cli/context/endpoint.go | 7 - .../docker/cli/cli/context/store/doc.go | 32 - .../docker/cli/cli/context/store/io_utils.go | 29 - .../cli/cli/context/store/metadatastore.go | 167 - .../docker/cli/cli/context/store/store.go | 507 - .../cli/cli/context/store/storeconfig.go | 56 - .../docker/cli/cli/context/store/tlsstore.go | 96 - .../docker/cli/cli/context/tlsdata.go | 98 - .../docker/docker-credential-helpers/LICENSE | 20 - .../client/client.go | 114 - .../client/command.go | 54 - .../credentials/credentials.go | 209 - .../credentials/error.go | 124 - .../credentials/helper.go | 14 - .../credentials/version.go | 16 - vendor/github.com/docker/docker/AUTHORS | 2496 --- vendor/github.com/docker/docker/LICENSE | 191 - vendor/github.com/docker/docker/NOTICE | 19 - vendor/github.com/docker/docker/api/README.md | 42 - vendor/github.com/docker/docker/api/common.go | 20 - .../docker/docker/api/swagger-gen.yaml | 12 - .../github.com/docker/docker/api/swagger.yaml | 13379 ---------------- .../docker/docker/api/types/blkiodev/blkio.go | 23 - .../docker/docker/api/types/build/build.go | 91 - .../docker/docker/api/types/build/cache.go | 52 - .../docker/api/types/build/disk_usage.go | 10 - .../docker/api/types/checkpoint/list.go | 7 - .../docker/api/types/checkpoint/options.go | 19 - .../docker/docker/api/types/client.go | 85 - .../docker/api/types/common/id_response.go | 13 - .../docker/api/types/container/change_type.go | 15 - .../api/types/container/change_types.go | 23 - .../docker/api/types/container/commit.go | 7 - .../docker/api/types/container/config.go | 73 - .../docker/api/types/container/container.go | 188 - .../api/types/container/create_request.go | 13 - .../api/types/container/create_response.go | 19 - .../docker/api/types/container/disk_usage.go | 10 - .../docker/api/types/container/errors.go | 9 - .../docker/docker/api/types/container/exec.go | 53 - .../api/types/container/filesystem_change.go | 19 - .../docker/api/types/container/health.go | 50 - .../docker/api/types/container/hostconfig.go | 506 - .../api/types/container/hostconfig_unix.go | 45 - .../api/types/container/hostconfig_windows.go | 47 - .../api/types/container/network_settings.go | 85 - .../docker/api/types/container/options.go | 67 - .../docker/docker/api/types/container/port.go | 23 - .../docker/api/types/container/state.go | 64 - .../docker/api/types/container/stats.go | 177 - .../api/types/container/top_response.go | 18 - .../api/types/container/update_response.go | 14 - .../api/types/container/wait_exit_error.go | 12 - .../api/types/container/wait_response.go | 18 - .../api/types/container/waitcondition.go | 22 - .../docker/docker/api/types/error_response.go | 13 - .../docker/api/types/error_response_ext.go | 6 - .../docker/docker/api/types/events/events.go | 139 - .../docker/docker/api/types/filters/errors.go | 24 - .../api/types/filters/filters_deprecated.go | 61 - .../docker/docker/api/types/filters/parse.go | 302 - .../docker/api/types/image/delete_response.go | 15 - .../docker/api/types/image/disk_usage.go | 10 - .../docker/docker/api/types/image/image.go | 47 - .../docker/api/types/image/image_history.go | 36 - .../docker/api/types/image/image_inspect.go | 146 - .../docker/docker/api/types/image/manifest.go | 99 - .../docker/docker/api/types/image/opts.go | 124 - .../docker/docker/api/types/image/summary.go | 101 - .../docker/docker/api/types/mount/mount.go | 157 - .../api/types/network/create_response.go | 19 - .../docker/api/types/network/endpoint.go | 151 - .../docker/docker/api/types/network/ipam.go | 173 - .../docker/api/types/network/network.go | 168 - .../docker/docker/api/types/plugin.go | 207 - .../docker/docker/api/types/plugin_device.go | 25 - .../docker/docker/api/types/plugin_env.go | 25 - .../docker/api/types/plugin_interface_type.go | 21 - .../docker/docker/api/types/plugin_mount.go | 37 - .../docker/api/types/plugin_responses.go | 71 - .../docker/api/types/registry/authconfig.go | 112 - .../docker/api/types/registry/authenticate.go | 21 - .../docker/api/types/registry/registry.go | 122 - .../docker/api/types/registry/search.go | 48 - .../docker/api/types/storage/driver_data.go | 23 - .../docker/api/types/strslice/strslice.go | 30 - .../docker/docker/api/types/swarm/common.go | 48 - .../docker/docker/api/types/swarm/config.go | 62 - .../docker/api/types/swarm/container.go | 119 - .../docker/docker/api/types/swarm/network.go | 121 - .../docker/docker/api/types/swarm/node.go | 151 - .../docker/docker/api/types/swarm/runtime.go | 37 - .../docker/api/types/swarm/runtime/runtime.go | 27 - .../docker/docker/api/types/swarm/secret.go | 66 - .../docker/docker/api/types/swarm/service.go | 272 - .../types/swarm/service_create_response.go | 20 - .../types/swarm/service_update_response.go | 12 - .../docker/docker/api/types/swarm/swarm.go | 244 - .../docker/docker/api/types/swarm/task.go | 230 - .../docker/docker/api/types/system/info.go | 174 - .../docker/docker/api/types/system/runtime.go | 20 - .../docker/api/types/system/security_opts.go | 48 - .../docker/docker/api/types/time/timestamp.go | 131 - .../docker/docker/api/types/types.go | 103 - .../docker/api/types/types_deprecated.go | 242 - .../docker/api/types/versions/compare.go | 65 - .../docker/api/types/volume/cluster_volume.go | 420 - .../docker/api/types/volume/create_options.go | 29 - .../docker/api/types/volume/disk_usage.go | 10 - .../docker/api/types/volume/list_response.go | 18 - .../docker/docker/api/types/volume/options.go | 15 - .../docker/docker/api/types/volume/volume.go | 75 - .../docker/api/types/volume/volume_update.go | 7 - .../github.com/docker/docker/client/README.md | 38 - .../docker/docker/client/build_cancel.go | 16 - .../docker/docker/client/build_prune.go | 56 - .../docker/docker/client/checkpoint.go | 18 - .../docker/docker/client/checkpoint_create.go | 19 - .../docker/docker/client/checkpoint_delete.go | 25 - .../docker/docker/client/checkpoint_list.go | 28 - .../github.com/docker/docker/client/client.go | 476 - .../docker/docker/client/client_deprecated.go | 27 - .../docker/docker/client/client_interfaces.go | 237 - .../docker/docker/client/client_unix.go | 18 - .../docker/docker/client/client_windows.go | 17 - .../docker/docker/client/config_create.go | 24 - .../docker/docker/client/config_inspect.go | 37 - .../docker/docker/client/config_list.go | 37 - .../docker/docker/client/config_remove.go | 17 - .../docker/docker/client/config_update.go | 24 - .../docker/docker/client/container_attach.go | 65 - .../docker/docker/client/container_commit.go | 60 - .../docker/docker/client/container_copy.go | 104 - .../docker/docker/client/container_create.go | 168 - .../docker/docker/client/container_diff.go | 30 - .../docker/docker/client/container_exec.go | 81 - .../docker/docker/client/container_export.go | 24 - .../docker/docker/client/container_inspect.go | 57 - .../docker/docker/client/container_kill.go | 23 - .../docker/docker/client/container_list.go | 56 - .../docker/docker/client/container_logs.go | 85 - .../docker/docker/client/container_pause.go | 15 - .../docker/docker/client/container_prune.go | 35 - .../docker/docker/client/container_remove.go | 32 - .../docker/docker/client/container_rename.go | 20 - .../docker/docker/client/container_resize.go | 38 - .../docker/docker/client/container_restart.go | 41 - .../docker/docker/client/container_start.go | 28 - .../docker/docker/client/container_stats.go | 56 - .../docker/docker/client/container_stop.go | 45 - .../docker/docker/client/container_top.go | 33 - .../docker/docker/client/container_unpause.go | 15 - .../docker/docker/client/container_update.go | 26 - .../docker/docker/client/container_wait.go | 122 - .../docker/docker/client/disk_usage.go | 33 - .../docker/client/distribution_inspect.go | 39 - .../docker/docker/client/envvars.go | 90 - .../github.com/docker/docker/client/errors.go | 129 - .../github.com/docker/docker/client/events.go | 100 - .../github.com/docker/docker/client/hijack.go | 139 - .../docker/docker/client/image_build.go | 182 - .../docker/docker/client/image_create.go | 40 - .../docker/docker/client/image_history.go | 56 - .../docker/client/image_history_opts.go | 19 - .../docker/docker/client/image_import.go | 48 - .../docker/docker/client/image_inspect.go | 76 - .../docker/client/image_inspect_opts.go | 62 - .../docker/docker/client/image_list.go | 67 - .../docker/docker/client/image_load.go | 54 - .../docker/docker/client/image_load_opts.go | 41 - .../docker/docker/client/image_prune.go | 35 - .../docker/docker/client/image_pull.go | 64 - .../docker/docker/client/image_push.go | 81 - .../docker/docker/client/image_remove.go | 39 - .../docker/docker/client/image_save.go | 41 - .../docker/docker/client/image_save_opts.go | 33 - .../docker/docker/client/image_search.go | 54 - .../docker/docker/client/image_tag.go | 37 - .../github.com/docker/docker/client/info.go | 26 - .../github.com/docker/docker/client/login.go | 24 - .../docker/docker/client/network_connect.go | 28 - .../docker/docker/client/network_create.go | 40 - .../docker/client/network_disconnect.go | 28 - .../docker/docker/client/network_inspect.go | 47 - .../docker/docker/client/network_list.go | 32 - .../docker/docker/client/network_prune.go | 35 - .../docker/docker/client/network_remove.go | 14 - .../docker/docker/client/node_inspect.go | 33 - .../docker/docker/client/node_list.go | 34 - .../docker/docker/client/node_remove.go | 25 - .../docker/docker/client/node_update.go | 22 - .../docker/docker/client/options.go | 240 - .../github.com/docker/docker/client/ping.go | 81 - .../docker/docker/client/plugin_create.go | 23 - .../docker/docker/client/plugin_disable.go | 23 - .../docker/docker/client/plugin_enable.go | 23 - .../docker/docker/client/plugin_inspect.go | 32 - .../docker/docker/client/plugin_install.go | 117 - .../docker/docker/client/plugin_list.go | 33 - .../docker/docker/client/plugin_push.go | 24 - .../docker/docker/client/plugin_remove.go | 25 - .../docker/docker/client/plugin_set.go | 17 - .../docker/docker/client/plugin_upgrade.go | 47 - .../docker/docker/client/request.go | 322 - .../docker/docker/client/secret_create.go | 24 - .../docker/docker/client/secret_inspect.go | 37 - .../docker/docker/client/secret_list.go | 37 - .../docker/docker/client/secret_remove.go | 17 - .../docker/docker/client/secret_update.go | 24 - .../docker/docker/client/service_create.go | 212 - .../docker/docker/client/service_inspect.go | 38 - .../docker/docker/client/service_list.go | 38 - .../docker/docker/client/service_logs.go | 57 - .../docker/docker/client/service_remove.go | 15 - .../docker/docker/client/service_update.go | 89 - .../docker/client/swarm_get_unlock_key.go | 21 - .../docker/docker/client/swarm_init.go | 21 - .../docker/docker/client/swarm_inspect.go | 21 - .../docker/docker/client/swarm_join.go | 14 - .../docker/docker/client/swarm_leave.go | 17 - .../docker/docker/client/swarm_unlock.go | 14 - .../docker/docker/client/swarm_update.go | 21 - .../docker/docker/client/task_inspect.go | 34 - .../docker/docker/client/task_list.go | 34 - .../docker/docker/client/task_logs.go | 51 - .../github.com/docker/docker/client/utils.go | 83 - .../docker/docker/client/version.go | 21 - .../docker/docker/client/volume_create.go | 21 - .../docker/docker/client/volume_inspect.go | 40 - .../docker/docker/client/volume_list.go | 33 - .../docker/docker/client/volume_prune.go | 35 - .../docker/docker/client/volume_remove.go | 34 - .../docker/docker/client/volume_update.go | 28 - .../github.com/docker/docker/errdefs/defs.go | 69 - .../github.com/docker/docker/errdefs/doc.go | 8 - .../docker/docker/errdefs/helpers.go | 309 - .../docker/docker/errdefs/http_helpers.go | 49 - vendor/github.com/docker/docker/errdefs/is.go | 78 - .../pkg/ioutils/fswriters_deprecated.go | 44 - .../docker/docker/pkg/ioutils/readers.go | 118 - .../docker/docker/pkg/ioutils/writeflusher.go | 96 - .../docker/docker/pkg/ioutils/writers.go | 28 - .../docker/docker/pkg/stdcopy/stdcopy.go | 190 - .../github.com/docker/go-connections/LICENSE | 191 - .../docker/go-connections/nat/nat.go | 240 - .../docker/go-connections/nat/parse.go | 33 - .../docker/go-connections/nat/sort.go | 96 - .../docker/go-connections/sockets/README.md | 0 .../go-connections/sockets/inmem_socket.go | 81 - .../docker/go-connections/sockets/proxy.go | 28 - .../docker/go-connections/sockets/sockets.go | 37 - .../go-connections/sockets/sockets_unix.go | 39 - .../go-connections/sockets/sockets_windows.go | 28 - .../go-connections/sockets/tcp_socket.go | 22 - .../go-connections/sockets/unix_socket.go | 126 - .../go-connections/tlsconfig/certpool.go | 16 - .../docker/go-connections/tlsconfig/config.go | 261 - .../tlsconfig/config_client_ciphers.go | 14 - .../docker/go-units/CONTRIBUTING.md | 67 - vendor/github.com/docker/go-units/LICENSE | 191 - vendor/github.com/docker/go-units/MAINTAINERS | 46 - vendor/github.com/docker/go-units/README.md | 16 - vendor/github.com/docker/go-units/circle.yml | 11 - vendor/github.com/docker/go-units/duration.go | 35 - vendor/github.com/docker/go-units/size.go | 154 - vendor/github.com/docker/go-units/ulimit.go | 123 - .../github.com/felixge/httpsnoop/.gitignore | 0 .../github.com/felixge/httpsnoop/LICENSE.txt | 19 - vendor/github.com/felixge/httpsnoop/Makefile | 10 - vendor/github.com/felixge/httpsnoop/README.md | 95 - .../felixge/httpsnoop/capture_metrics.go | 86 - vendor/github.com/felixge/httpsnoop/docs.go | 10 - .../httpsnoop/wrap_generated_gteq_1.8.go | 436 - .../httpsnoop/wrap_generated_lt_1.8.go | 278 - .../github.com/fvbommel/sortorder/.gitignore | 19 - vendor/github.com/fvbommel/sortorder/LICENSE | 17 - .../github.com/fvbommel/sortorder/README.md | 9 - vendor/github.com/fvbommel/sortorder/doc.go | 5 - .../github.com/fvbommel/sortorder/natsort.go | 76 - vendor/github.com/go-logr/logr/.golangci.yaml | 26 - vendor/github.com/go-logr/logr/CHANGELOG.md | 6 - .../github.com/go-logr/logr/CONTRIBUTING.md | 17 - vendor/github.com/go-logr/logr/LICENSE | 201 - vendor/github.com/go-logr/logr/README.md | 407 - vendor/github.com/go-logr/logr/SECURITY.md | 18 - vendor/github.com/go-logr/logr/context.go | 33 - .../github.com/go-logr/logr/context_noslog.go | 49 - .../github.com/go-logr/logr/context_slog.go | 83 - vendor/github.com/go-logr/logr/discard.go | 24 - vendor/github.com/go-logr/logr/funcr/funcr.go | 914 -- .../github.com/go-logr/logr/funcr/slogsink.go | 105 - vendor/github.com/go-logr/logr/logr.go | 520 - vendor/github.com/go-logr/logr/sloghandler.go | 192 - vendor/github.com/go-logr/logr/slogr.go | 100 - vendor/github.com/go-logr/logr/slogsink.go | 120 - vendor/github.com/go-logr/stdr/LICENSE | 201 - vendor/github.com/go-logr/stdr/README.md | 6 - vendor/github.com/go-logr/stdr/stdr.go | 170 - .../github.com/moby/docker-image-spec/LICENSE | 201 - .../docker-image-spec/specs-go/v1/image.go | 54 - .../github.com/moby/sys/atomicwriter/LICENSE | 202 - .../moby/sys/atomicwriter/atomicwriter.go | 245 - vendor/github.com/moby/sys/sequential/LICENSE | 202 - vendor/github.com/moby/sys/sequential/doc.go | 15 - .../moby/sys/sequential/sequential_unix.go | 26 - .../moby/sys/sequential/sequential_windows.go | 162 - .../opencontainers/go-digest/.mailmap | 4 - .../opencontainers/go-digest/.pullapprove.yml | 28 - .../opencontainers/go-digest/.travis.yml | 5 - .../opencontainers/go-digest/CONTRIBUTING.md | 72 - .../opencontainers/go-digest/LICENSE | 192 - .../opencontainers/go-digest/LICENSE.docs | 425 - .../opencontainers/go-digest/MAINTAINERS | 5 - .../opencontainers/go-digest/README.md | 96 - .../opencontainers/go-digest/algorithm.go | 193 - .../opencontainers/go-digest/digest.go | 157 - .../opencontainers/go-digest/digester.go | 40 - .../opencontainers/go-digest/doc.go | 62 - .../opencontainers/go-digest/verifiers.go | 46 - .../opencontainers/image-spec/LICENSE | 191 - .../image-spec/specs-go/v1/annotations.go | 62 - .../image-spec/specs-go/v1/config.go | 111 - .../image-spec/specs-go/v1/descriptor.go | 80 - .../image-spec/specs-go/v1/index.go | 38 - .../image-spec/specs-go/v1/layout.go | 32 - .../image-spec/specs-go/v1/manifest.go | 41 - .../image-spec/specs-go/v1/mediatype.go | 85 - .../image-spec/specs-go/version.go | 32 - .../image-spec/specs-go/versioned.go | 23 - vendor/github.com/pkg/errors/.gitignore | 24 - vendor/github.com/pkg/errors/.travis.yml | 10 - vendor/github.com/pkg/errors/LICENSE | 23 - vendor/github.com/pkg/errors/Makefile | 44 - vendor/github.com/pkg/errors/README.md | 59 - vendor/github.com/pkg/errors/appveyor.yml | 32 - vendor/github.com/pkg/errors/errors.go | 288 - vendor/github.com/pkg/errors/go113.go | 38 - vendor/github.com/pkg/errors/stack.go | 177 - .../instrumentation/net/http/otelhttp/LICENSE | 201 - .../net/http/otelhttp/client.go | 50 - .../net/http/otelhttp/common.go | 41 - .../net/http/otelhttp/config.go | 196 - .../instrumentation/net/http/otelhttp/doc.go | 7 - .../net/http/otelhttp/handler.go | 258 - .../net/http/otelhttp/internal/semconv/env.go | 82 - .../http/otelhttp/internal/semconv/util.go | 91 - .../http/otelhttp/internal/semconv/v1.20.0.go | 74 - .../http/otelhttp/internal/semconv/v1.24.0.go | 197 - .../http/otelhttp/internal/semconvutil/gen.go | 10 - .../otelhttp/internal/semconvutil/httpconv.go | 575 - .../otelhttp/internal/semconvutil/netconv.go | 205 - .../net/http/otelhttp/labeler.go | 58 - .../net/http/otelhttp/transport.go | 277 - .../net/http/otelhttp/version.go | 17 - .../instrumentation/net/http/otelhttp/wrap.go | 99 - .../go.opentelemetry.io/otel/.codespellignore | 9 - vendor/go.opentelemetry.io/otel/.codespellrc | 10 - .../go.opentelemetry.io/otel/.gitattributes | 3 - vendor/go.opentelemetry.io/otel/.gitignore | 22 - vendor/go.opentelemetry.io/otel/.golangci.yml | 302 - vendor/go.opentelemetry.io/otel/.lycheeignore | 6 - .../otel/.markdownlint.yaml | 29 - vendor/go.opentelemetry.io/otel/CHANGELOG.md | 3099 ---- vendor/go.opentelemetry.io/otel/CODEOWNERS | 17 - .../go.opentelemetry.io/otel/CONTRIBUTING.md | 658 - vendor/go.opentelemetry.io/otel/LICENSE | 201 - vendor/go.opentelemetry.io/otel/Makefile | 301 - vendor/go.opentelemetry.io/otel/README.md | 109 - vendor/go.opentelemetry.io/otel/RELEASING.md | 145 - vendor/go.opentelemetry.io/otel/VERSIONING.md | 224 - .../otel/attribute/README.md | 3 - .../go.opentelemetry.io/otel/attribute/doc.go | 5 - .../otel/attribute/encoder.go | 135 - .../otel/attribute/filter.go | 49 - .../otel/attribute/iterator.go | 150 - .../go.opentelemetry.io/otel/attribute/key.go | 123 - .../go.opentelemetry.io/otel/attribute/kv.go | 75 - .../go.opentelemetry.io/otel/attribute/set.go | 431 - .../otel/attribute/type_string.go | 31 - .../otel/attribute/value.go | 271 - .../otel/baggage/README.md | 3 - .../otel/baggage/baggage.go | 910 -- .../otel/baggage/context.go | 28 - .../go.opentelemetry.io/otel/baggage/doc.go | 9 - .../go.opentelemetry.io/otel/codes/README.md | 3 - .../go.opentelemetry.io/otel/codes/codes.go | 105 - vendor/go.opentelemetry.io/otel/codes/doc.go | 10 - vendor/go.opentelemetry.io/otel/doc.go | 23 - .../go.opentelemetry.io/otel/error_handler.go | 27 - .../go.opentelemetry.io/otel/get_main_pkgs.sh | 30 - vendor/go.opentelemetry.io/otel/handler.go | 33 - .../otel/internal/attribute/attribute.go | 100 - .../otel/internal/baggage/baggage.go | 32 - .../otel/internal/baggage/context.go | 81 - .../go.opentelemetry.io/otel/internal/gen.go | 18 - .../otel/internal/global/handler.go | 36 - .../otel/internal/global/instruments.go | 412 - .../otel/internal/global/internal_logging.go | 62 - .../otel/internal/global/meter.go | 368 - .../otel/internal/global/propagator.go | 71 - .../otel/internal/global/state.go | 199 - .../otel/internal/global/trace.go | 189 - .../otel/internal/rawhelpers.go | 44 - .../otel/internal_logging.go | 15 - vendor/go.opentelemetry.io/otel/metric.go | 42 - .../go.opentelemetry.io/otel/metric/LICENSE | 201 - .../go.opentelemetry.io/otel/metric/README.md | 3 - .../otel/metric/asyncfloat64.go | 260 - .../otel/metric/asyncint64.go | 258 - .../go.opentelemetry.io/otel/metric/config.go | 81 - vendor/go.opentelemetry.io/otel/metric/doc.go | 177 - .../otel/metric/embedded/README.md | 3 - .../otel/metric/embedded/embedded.go | 243 - .../otel/metric/instrument.go | 368 - .../go.opentelemetry.io/otel/metric/meter.go | 265 - .../otel/metric/syncfloat64.go | 226 - .../otel/metric/syncint64.go | 226 - .../go.opentelemetry.io/otel/propagation.go | 20 - .../otel/propagation/README.md | 3 - .../otel/propagation/baggage.go | 47 - .../otel/propagation/doc.go | 13 - .../otel/propagation/propagation.go | 142 - .../otel/propagation/trace_context.go | 156 - vendor/go.opentelemetry.io/otel/renovate.json | 24 - .../go.opentelemetry.io/otel/requirements.txt | 1 - .../otel/semconv/v1.20.0/README.md | 3 - .../otel/semconv/v1.20.0/attribute_group.go | 1198 -- .../otel/semconv/v1.20.0/doc.go | 9 - .../otel/semconv/v1.20.0/event.go | 188 - .../otel/semconv/v1.20.0/exception.go | 9 - .../otel/semconv/v1.20.0/http.go | 10 - .../otel/semconv/v1.20.0/resource.go | 2060 --- .../otel/semconv/v1.20.0/schema.go | 9 - .../otel/semconv/v1.20.0/trace.go | 2599 --- .../otel/semconv/v1.24.0/README.md | 3 - .../otel/semconv/v1.24.0/attribute_group.go | 4387 ----- .../otel/semconv/v1.24.0/doc.go | 9 - .../otel/semconv/v1.24.0/event.go | 200 - .../otel/semconv/v1.24.0/exception.go | 9 - .../otel/semconv/v1.24.0/metric.go | 1071 -- .../otel/semconv/v1.24.0/resource.go | 2545 --- .../otel/semconv/v1.24.0/schema.go | 9 - .../otel/semconv/v1.24.0/trace.go | 1323 -- vendor/go.opentelemetry.io/otel/trace.go | 36 - vendor/go.opentelemetry.io/otel/trace/LICENSE | 201 - .../go.opentelemetry.io/otel/trace/README.md | 3 - .../go.opentelemetry.io/otel/trace/config.go | 323 - .../go.opentelemetry.io/otel/trace/context.go | 50 - vendor/go.opentelemetry.io/otel/trace/doc.go | 119 - .../otel/trace/embedded/README.md | 3 - .../otel/trace/embedded/embedded.go | 45 - .../otel/trace/nonrecording.go | 16 - vendor/go.opentelemetry.io/otel/trace/noop.go | 85 - .../go.opentelemetry.io/otel/trace/trace.go | 572 - .../otel/trace/tracestate.go | 320 - .../otel/verify_examples.sh | 74 - .../otel/verify_readmes.sh | 21 - vendor/go.opentelemetry.io/otel/version.go | 9 - vendor/go.opentelemetry.io/otel/versions.yaml | 49 - .../golang.org/x/sys/plan9/pwd_go15_plan9.go | 21 - vendor/golang.org/x/sys/plan9/pwd_plan9.go | 14 +- vendor/golang.org/x/sys/unix/README.md | 2 +- .../golang.org/x/sys/unix/affinity_linux.go | 9 +- vendor/golang.org/x/sys/unix/auxv.go | 36 + .../golang.org/x/sys/unix/auxv_unsupported.go | 13 + vendor/golang.org/x/sys/unix/fdset.go | 4 +- vendor/golang.org/x/sys/unix/ifreq_linux.go | 4 +- vendor/golang.org/x/sys/unix/ioctl_linux.go | 96 + vendor/golang.org/x/sys/unix/mkall.sh | 1 + vendor/golang.org/x/sys/unix/mkerrors.sh | 25 +- vendor/golang.org/x/sys/unix/syscall_aix.go | 2 +- .../golang.org/x/sys/unix/syscall_darwin.go | 130 + .../x/sys/unix/syscall_dragonfly.go | 12 + vendor/golang.org/x/sys/unix/syscall_hurd.go | 1 + vendor/golang.org/x/sys/unix/syscall_linux.go | 116 +- .../x/sys/unix/syscall_linux_arm64.go | 2 + .../x/sys/unix/syscall_linux_loong64.go | 2 + .../x/sys/unix/syscall_linux_riscv64.go | 2 + .../golang.org/x/sys/unix/syscall_netbsd.go | 17 + .../golang.org/x/sys/unix/syscall_solaris.go | 89 +- .../x/sys/unix/syscall_zos_s390x.go | 104 +- .../golang.org/x/sys/unix/vgetrandom_linux.go | 13 + .../x/sys/unix/vgetrandom_unsupported.go | 11 + .../x/sys/unix/zerrors_darwin_amd64.go | 7 + .../x/sys/unix/zerrors_darwin_arm64.go | 7 + vendor/golang.org/x/sys/unix/zerrors_linux.go | 486 +- .../x/sys/unix/zerrors_linux_386.go | 33 + .../x/sys/unix/zerrors_linux_amd64.go | 33 + .../x/sys/unix/zerrors_linux_arm.go | 33 + .../x/sys/unix/zerrors_linux_arm64.go | 35 + .../x/sys/unix/zerrors_linux_loong64.go | 33 + .../x/sys/unix/zerrors_linux_mips.go | 33 + .../x/sys/unix/zerrors_linux_mips64.go | 33 + .../x/sys/unix/zerrors_linux_mips64le.go | 33 + .../x/sys/unix/zerrors_linux_mipsle.go | 33 + .../x/sys/unix/zerrors_linux_ppc.go | 33 + .../x/sys/unix/zerrors_linux_ppc64.go | 33 + .../x/sys/unix/zerrors_linux_ppc64le.go | 33 + .../x/sys/unix/zerrors_linux_riscv64.go | 33 + .../x/sys/unix/zerrors_linux_s390x.go | 33 + .../x/sys/unix/zerrors_linux_sparc64.go | 33 + .../x/sys/unix/zerrors_zos_s390x.go | 2 + .../x/sys/unix/zsyscall_darwin_amd64.go | 104 + .../x/sys/unix/zsyscall_darwin_amd64.s | 25 + .../x/sys/unix/zsyscall_darwin_arm64.go | 104 + .../x/sys/unix/zsyscall_darwin_arm64.s | 25 + .../golang.org/x/sys/unix/zsyscall_linux.go | 37 +- .../x/sys/unix/zsyscall_solaris_amd64.go | 122 +- .../x/sys/unix/zsysnum_linux_386.go | 5 + .../x/sys/unix/zsysnum_linux_amd64.go | 6 + .../x/sys/unix/zsysnum_linux_arm.go | 5 + .../x/sys/unix/zsysnum_linux_arm64.go | 7 +- .../x/sys/unix/zsysnum_linux_loong64.go | 7 + .../x/sys/unix/zsysnum_linux_mips.go | 5 + .../x/sys/unix/zsysnum_linux_mips64.go | 5 + .../x/sys/unix/zsysnum_linux_mips64le.go | 5 + .../x/sys/unix/zsysnum_linux_mipsle.go | 5 + .../x/sys/unix/zsysnum_linux_ppc.go | 5 + .../x/sys/unix/zsysnum_linux_ppc64.go | 5 + .../x/sys/unix/zsysnum_linux_ppc64le.go | 5 + .../x/sys/unix/zsysnum_linux_riscv64.go | 7 +- .../x/sys/unix/zsysnum_linux_s390x.go | 5 + .../x/sys/unix/zsysnum_linux_sparc64.go | 5 + .../x/sys/unix/ztypes_darwin_amd64.go | 73 + .../x/sys/unix/ztypes_darwin_arm64.go | 73 + .../x/sys/unix/ztypes_freebsd_386.go | 1 + .../x/sys/unix/ztypes_freebsd_amd64.go | 1 + .../x/sys/unix/ztypes_freebsd_arm.go | 1 + .../x/sys/unix/ztypes_freebsd_arm64.go | 1 + .../x/sys/unix/ztypes_freebsd_riscv64.go | 1 + vendor/golang.org/x/sys/unix/ztypes_linux.go | 425 +- .../golang.org/x/sys/unix/ztypes_linux_386.go | 18 +- .../x/sys/unix/ztypes_linux_amd64.go | 16 + .../golang.org/x/sys/unix/ztypes_linux_arm.go | 20 +- .../x/sys/unix/ztypes_linux_arm64.go | 16 + .../x/sys/unix/ztypes_linux_loong64.go | 16 + .../x/sys/unix/ztypes_linux_mips.go | 18 +- .../x/sys/unix/ztypes_linux_mips64.go | 16 + .../x/sys/unix/ztypes_linux_mips64le.go | 16 + .../x/sys/unix/ztypes_linux_mipsle.go | 18 +- .../golang.org/x/sys/unix/ztypes_linux_ppc.go | 20 +- .../x/sys/unix/ztypes_linux_ppc64.go | 16 + .../x/sys/unix/ztypes_linux_ppc64le.go | 16 + .../x/sys/unix/ztypes_linux_riscv64.go | 49 + .../x/sys/unix/ztypes_linux_s390x.go | 16 + .../x/sys/unix/ztypes_linux_sparc64.go | 16 + .../x/sys/unix/ztypes_netbsd_arm.go | 2 +- .../golang.org/x/sys/unix/ztypes_zos_s390x.go | 6 + .../golang.org/x/sys/windows/dll_windows.go | 13 +- .../x/sys/windows/security_windows.go | 49 +- .../x/sys/windows/syscall_windows.go | 63 +- .../golang.org/x/sys/windows/types_windows.go | 465 + .../x/sys/windows/zsyscall_windows.go | 1115 +- vendor/golang.org/x/text/LICENSE | 4 +- vendor/modules.txt | 167 +- 727 files changed, 6269 insertions(+), 89734 deletions(-) create mode 100755 lazycontainer create mode 100644 pkg/commands/apple_types.go create mode 100644 pkg/commands/container_client.go create mode 100644 pkg/commands/container_cmd.go delete mode 100644 pkg/commands/container_stats_test.go delete mode 100644 pkg/commands/docker.go delete mode 100644 pkg/commands/docker_host_unix.go delete mode 100644 pkg/commands/docker_host_windows.go delete mode 100644 pkg/commands/docker_test.go delete mode 100644 pkg/commands/dummies.go delete mode 100644 pkg/commands/os_test.go delete mode 100644 pkg/commands/project.go delete mode 100644 pkg/commands/service.go delete mode 100644 pkg/commands/ssh/ssh.go delete mode 100644 pkg/commands/ssh/ssh_test.go delete mode 100644 pkg/gui/presentation/projects.go delete mode 100644 pkg/gui/presentation/services.go delete mode 100644 pkg/gui/project_panel.go delete mode 100644 pkg/gui/services_panel.go rename vendor/{github.com/imdario => dario.cat}/mergo/.deepsource.toml (72%) rename vendor/{github.com/imdario => dario.cat}/mergo/.gitignore (95%) rename vendor/{github.com/imdario => dario.cat}/mergo/.travis.yml (100%) rename vendor/{github.com/imdario => dario.cat}/mergo/CODE_OF_CONDUCT.md (100%) rename vendor/{github.com/imdario => dario.cat}/mergo/CONTRIBUTING.md (100%) create mode 100644 vendor/dario.cat/mergo/FUNDING.json rename vendor/{github.com/imdario => dario.cat}/mergo/LICENSE (100%) rename vendor/{github.com/imdario => dario.cat}/mergo/README.md (65%) rename vendor/{github.com/imdario => dario.cat}/mergo/SECURITY.md (82%) rename vendor/{github.com/imdario => dario.cat}/mergo/doc.go (88%) rename vendor/{github.com/imdario => dario.cat}/mergo/map.go (96%) rename vendor/{github.com/imdario => dario.cat}/mergo/merge.go (99%) rename vendor/{github.com/imdario => dario.cat}/mergo/mergo.go (100%) delete mode 100644 vendor/github.com/Microsoft/go-winio/.gitattributes delete mode 100644 vendor/github.com/Microsoft/go-winio/.gitignore delete mode 100644 vendor/github.com/Microsoft/go-winio/.golangci.yml delete mode 100644 vendor/github.com/Microsoft/go-winio/CODEOWNERS delete mode 100644 vendor/github.com/Microsoft/go-winio/LICENSE delete mode 100644 vendor/github.com/Microsoft/go-winio/README.md delete mode 100644 vendor/github.com/Microsoft/go-winio/SECURITY.md delete mode 100644 vendor/github.com/Microsoft/go-winio/backup.go delete mode 100644 vendor/github.com/Microsoft/go-winio/doc.go delete mode 100644 vendor/github.com/Microsoft/go-winio/ea.go delete mode 100644 vendor/github.com/Microsoft/go-winio/file.go delete mode 100644 vendor/github.com/Microsoft/go-winio/fileinfo.go delete mode 100644 vendor/github.com/Microsoft/go-winio/hvsock.go delete mode 100644 vendor/github.com/Microsoft/go-winio/internal/fs/doc.go delete mode 100644 vendor/github.com/Microsoft/go-winio/internal/fs/fs.go delete mode 100644 vendor/github.com/Microsoft/go-winio/internal/fs/security.go delete mode 100644 vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go delete mode 100644 vendor/github.com/Microsoft/go-winio/internal/socket/rawaddr.go delete mode 100644 vendor/github.com/Microsoft/go-winio/internal/socket/socket.go delete mode 100644 vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go delete mode 100644 vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go delete mode 100644 vendor/github.com/Microsoft/go-winio/pipe.go delete mode 100644 vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go delete mode 100644 vendor/github.com/Microsoft/go-winio/pkg/guid/guid_nonwindows.go delete mode 100644 vendor/github.com/Microsoft/go-winio/pkg/guid/guid_windows.go delete mode 100644 vendor/github.com/Microsoft/go-winio/pkg/guid/variant_string.go delete mode 100644 vendor/github.com/Microsoft/go-winio/privilege.go delete mode 100644 vendor/github.com/Microsoft/go-winio/reparse.go delete mode 100644 vendor/github.com/Microsoft/go-winio/sd.go delete mode 100644 vendor/github.com/Microsoft/go-winio/syscall.go delete mode 100644 vendor/github.com/Microsoft/go-winio/zsyscall_windows.go delete mode 100644 vendor/github.com/containerd/errdefs/LICENSE delete mode 100644 vendor/github.com/containerd/errdefs/README.md delete mode 100644 vendor/github.com/containerd/errdefs/errors.go delete mode 100644 vendor/github.com/containerd/errdefs/pkg/LICENSE delete mode 100644 vendor/github.com/containerd/errdefs/pkg/errhttp/http.go delete mode 100644 vendor/github.com/containerd/errdefs/pkg/internal/cause/cause.go delete mode 100644 vendor/github.com/containerd/errdefs/resolve.go delete mode 100644 vendor/github.com/containerd/log/.golangci.yml delete mode 100644 vendor/github.com/containerd/log/LICENSE delete mode 100644 vendor/github.com/containerd/log/README.md delete mode 100644 vendor/github.com/containerd/log/context.go delete mode 100644 vendor/github.com/distribution/reference/.gitattributes delete mode 100644 vendor/github.com/distribution/reference/.gitignore delete mode 100644 vendor/github.com/distribution/reference/.golangci.yml delete mode 100644 vendor/github.com/distribution/reference/CODE-OF-CONDUCT.md delete mode 100644 vendor/github.com/distribution/reference/CONTRIBUTING.md delete mode 100644 vendor/github.com/distribution/reference/GOVERNANCE.md delete mode 100644 vendor/github.com/distribution/reference/LICENSE delete mode 100644 vendor/github.com/distribution/reference/MAINTAINERS delete mode 100644 vendor/github.com/distribution/reference/Makefile delete mode 100644 vendor/github.com/distribution/reference/README.md delete mode 100644 vendor/github.com/distribution/reference/SECURITY.md delete mode 100644 vendor/github.com/distribution/reference/distribution-logo.svg delete mode 100644 vendor/github.com/distribution/reference/helpers.go delete mode 100644 vendor/github.com/distribution/reference/normalize.go delete mode 100644 vendor/github.com/distribution/reference/reference.go delete mode 100644 vendor/github.com/distribution/reference/regexp.go delete mode 100644 vendor/github.com/distribution/reference/sort.go delete mode 100644 vendor/github.com/docker/cli/AUTHORS delete mode 100644 vendor/github.com/docker/cli/LICENSE delete mode 100644 vendor/github.com/docker/cli/NOTICE delete mode 100644 vendor/github.com/docker/cli/cli/config/config.go delete mode 100644 vendor/github.com/docker/cli/cli/config/configfile/file.go delete mode 100644 vendor/github.com/docker/cli/cli/config/configfile/file_unix.go delete mode 100644 vendor/github.com/docker/cli/cli/config/configfile/file_windows.go delete mode 100644 vendor/github.com/docker/cli/cli/config/credentials/credentials.go delete mode 100644 vendor/github.com/docker/cli/cli/config/credentials/default_store.go delete mode 100644 vendor/github.com/docker/cli/cli/config/credentials/default_store_darwin.go delete mode 100644 vendor/github.com/docker/cli/cli/config/credentials/default_store_linux.go delete mode 100644 vendor/github.com/docker/cli/cli/config/credentials/default_store_unsupported.go delete mode 100644 vendor/github.com/docker/cli/cli/config/credentials/default_store_windows.go delete mode 100644 vendor/github.com/docker/cli/cli/config/credentials/file_store.go delete mode 100644 vendor/github.com/docker/cli/cli/config/credentials/native_store.go delete mode 100644 vendor/github.com/docker/cli/cli/config/types/authconfig.go delete mode 100644 vendor/github.com/docker/cli/cli/connhelper/commandconn/commandconn.go delete mode 100644 vendor/github.com/docker/cli/cli/connhelper/commandconn/pdeathsig_linux.go delete mode 100644 vendor/github.com/docker/cli/cli/connhelper/commandconn/pdeathsig_nolinux.go delete mode 100644 vendor/github.com/docker/cli/cli/connhelper/commandconn/session_unix.go delete mode 100644 vendor/github.com/docker/cli/cli/connhelper/commandconn/session_windows.go delete mode 100644 vendor/github.com/docker/cli/cli/connhelper/connhelper.go delete mode 100644 vendor/github.com/docker/cli/cli/connhelper/ssh/ssh.go delete mode 100644 vendor/github.com/docker/cli/cli/context/docker/constants.go delete mode 100644 vendor/github.com/docker/cli/cli/context/docker/load.go delete mode 100644 vendor/github.com/docker/cli/cli/context/endpoint.go delete mode 100644 vendor/github.com/docker/cli/cli/context/store/doc.go delete mode 100644 vendor/github.com/docker/cli/cli/context/store/io_utils.go delete mode 100644 vendor/github.com/docker/cli/cli/context/store/metadatastore.go delete mode 100644 vendor/github.com/docker/cli/cli/context/store/store.go delete mode 100644 vendor/github.com/docker/cli/cli/context/store/storeconfig.go delete mode 100644 vendor/github.com/docker/cli/cli/context/store/tlsstore.go delete mode 100644 vendor/github.com/docker/cli/cli/context/tlsdata.go delete mode 100644 vendor/github.com/docker/docker-credential-helpers/LICENSE delete mode 100644 vendor/github.com/docker/docker-credential-helpers/client/client.go delete mode 100644 vendor/github.com/docker/docker-credential-helpers/client/command.go delete mode 100644 vendor/github.com/docker/docker-credential-helpers/credentials/credentials.go delete mode 100644 vendor/github.com/docker/docker-credential-helpers/credentials/error.go delete mode 100644 vendor/github.com/docker/docker-credential-helpers/credentials/helper.go delete mode 100644 vendor/github.com/docker/docker-credential-helpers/credentials/version.go delete mode 100644 vendor/github.com/docker/docker/AUTHORS delete mode 100644 vendor/github.com/docker/docker/LICENSE delete mode 100644 vendor/github.com/docker/docker/NOTICE delete mode 100644 vendor/github.com/docker/docker/api/README.md delete mode 100644 vendor/github.com/docker/docker/api/common.go delete mode 100644 vendor/github.com/docker/docker/api/swagger-gen.yaml delete mode 100644 vendor/github.com/docker/docker/api/swagger.yaml delete mode 100644 vendor/github.com/docker/docker/api/types/blkiodev/blkio.go delete mode 100644 vendor/github.com/docker/docker/api/types/build/build.go delete mode 100644 vendor/github.com/docker/docker/api/types/build/cache.go delete mode 100644 vendor/github.com/docker/docker/api/types/build/disk_usage.go delete mode 100644 vendor/github.com/docker/docker/api/types/checkpoint/list.go delete mode 100644 vendor/github.com/docker/docker/api/types/checkpoint/options.go delete mode 100644 vendor/github.com/docker/docker/api/types/client.go delete mode 100644 vendor/github.com/docker/docker/api/types/common/id_response.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/change_type.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/change_types.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/commit.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/config.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/container.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/create_request.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/create_response.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/disk_usage.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/errors.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/exec.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/filesystem_change.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/health.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/hostconfig.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/hostconfig_unix.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/hostconfig_windows.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/network_settings.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/options.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/port.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/state.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/stats.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/top_response.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/update_response.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/wait_exit_error.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/wait_response.go delete mode 100644 vendor/github.com/docker/docker/api/types/container/waitcondition.go delete mode 100644 vendor/github.com/docker/docker/api/types/error_response.go delete mode 100644 vendor/github.com/docker/docker/api/types/error_response_ext.go delete mode 100644 vendor/github.com/docker/docker/api/types/events/events.go delete mode 100644 vendor/github.com/docker/docker/api/types/filters/errors.go delete mode 100644 vendor/github.com/docker/docker/api/types/filters/filters_deprecated.go delete mode 100644 vendor/github.com/docker/docker/api/types/filters/parse.go delete mode 100644 vendor/github.com/docker/docker/api/types/image/delete_response.go delete mode 100644 vendor/github.com/docker/docker/api/types/image/disk_usage.go delete mode 100644 vendor/github.com/docker/docker/api/types/image/image.go delete mode 100644 vendor/github.com/docker/docker/api/types/image/image_history.go delete mode 100644 vendor/github.com/docker/docker/api/types/image/image_inspect.go delete mode 100644 vendor/github.com/docker/docker/api/types/image/manifest.go delete mode 100644 vendor/github.com/docker/docker/api/types/image/opts.go delete mode 100644 vendor/github.com/docker/docker/api/types/image/summary.go delete mode 100644 vendor/github.com/docker/docker/api/types/mount/mount.go delete mode 100644 vendor/github.com/docker/docker/api/types/network/create_response.go delete mode 100644 vendor/github.com/docker/docker/api/types/network/endpoint.go delete mode 100644 vendor/github.com/docker/docker/api/types/network/ipam.go delete mode 100644 vendor/github.com/docker/docker/api/types/network/network.go delete mode 100644 vendor/github.com/docker/docker/api/types/plugin.go delete mode 100644 vendor/github.com/docker/docker/api/types/plugin_device.go delete mode 100644 vendor/github.com/docker/docker/api/types/plugin_env.go delete mode 100644 vendor/github.com/docker/docker/api/types/plugin_interface_type.go delete mode 100644 vendor/github.com/docker/docker/api/types/plugin_mount.go delete mode 100644 vendor/github.com/docker/docker/api/types/plugin_responses.go delete mode 100644 vendor/github.com/docker/docker/api/types/registry/authconfig.go delete mode 100644 vendor/github.com/docker/docker/api/types/registry/authenticate.go delete mode 100644 vendor/github.com/docker/docker/api/types/registry/registry.go delete mode 100644 vendor/github.com/docker/docker/api/types/registry/search.go delete mode 100644 vendor/github.com/docker/docker/api/types/storage/driver_data.go delete mode 100644 vendor/github.com/docker/docker/api/types/strslice/strslice.go delete mode 100644 vendor/github.com/docker/docker/api/types/swarm/common.go delete mode 100644 vendor/github.com/docker/docker/api/types/swarm/config.go delete mode 100644 vendor/github.com/docker/docker/api/types/swarm/container.go delete mode 100644 vendor/github.com/docker/docker/api/types/swarm/network.go delete mode 100644 vendor/github.com/docker/docker/api/types/swarm/node.go delete mode 100644 vendor/github.com/docker/docker/api/types/swarm/runtime.go delete mode 100644 vendor/github.com/docker/docker/api/types/swarm/runtime/runtime.go delete mode 100644 vendor/github.com/docker/docker/api/types/swarm/secret.go delete mode 100644 vendor/github.com/docker/docker/api/types/swarm/service.go delete mode 100644 vendor/github.com/docker/docker/api/types/swarm/service_create_response.go delete mode 100644 vendor/github.com/docker/docker/api/types/swarm/service_update_response.go delete mode 100644 vendor/github.com/docker/docker/api/types/swarm/swarm.go delete mode 100644 vendor/github.com/docker/docker/api/types/swarm/task.go delete mode 100644 vendor/github.com/docker/docker/api/types/system/info.go delete mode 100644 vendor/github.com/docker/docker/api/types/system/runtime.go delete mode 100644 vendor/github.com/docker/docker/api/types/system/security_opts.go delete mode 100644 vendor/github.com/docker/docker/api/types/time/timestamp.go delete mode 100644 vendor/github.com/docker/docker/api/types/types.go delete mode 100644 vendor/github.com/docker/docker/api/types/types_deprecated.go delete mode 100644 vendor/github.com/docker/docker/api/types/versions/compare.go delete mode 100644 vendor/github.com/docker/docker/api/types/volume/cluster_volume.go delete mode 100644 vendor/github.com/docker/docker/api/types/volume/create_options.go delete mode 100644 vendor/github.com/docker/docker/api/types/volume/disk_usage.go delete mode 100644 vendor/github.com/docker/docker/api/types/volume/list_response.go delete mode 100644 vendor/github.com/docker/docker/api/types/volume/options.go delete mode 100644 vendor/github.com/docker/docker/api/types/volume/volume.go delete mode 100644 vendor/github.com/docker/docker/api/types/volume/volume_update.go delete mode 100644 vendor/github.com/docker/docker/client/README.md delete mode 100644 vendor/github.com/docker/docker/client/build_cancel.go delete mode 100644 vendor/github.com/docker/docker/client/build_prune.go delete mode 100644 vendor/github.com/docker/docker/client/checkpoint.go delete mode 100644 vendor/github.com/docker/docker/client/checkpoint_create.go delete mode 100644 vendor/github.com/docker/docker/client/checkpoint_delete.go delete mode 100644 vendor/github.com/docker/docker/client/checkpoint_list.go delete mode 100644 vendor/github.com/docker/docker/client/client.go delete mode 100644 vendor/github.com/docker/docker/client/client_deprecated.go delete mode 100644 vendor/github.com/docker/docker/client/client_interfaces.go delete mode 100644 vendor/github.com/docker/docker/client/client_unix.go delete mode 100644 vendor/github.com/docker/docker/client/client_windows.go delete mode 100644 vendor/github.com/docker/docker/client/config_create.go delete mode 100644 vendor/github.com/docker/docker/client/config_inspect.go delete mode 100644 vendor/github.com/docker/docker/client/config_list.go delete mode 100644 vendor/github.com/docker/docker/client/config_remove.go delete mode 100644 vendor/github.com/docker/docker/client/config_update.go delete mode 100644 vendor/github.com/docker/docker/client/container_attach.go delete mode 100644 vendor/github.com/docker/docker/client/container_commit.go delete mode 100644 vendor/github.com/docker/docker/client/container_copy.go delete mode 100644 vendor/github.com/docker/docker/client/container_create.go delete mode 100644 vendor/github.com/docker/docker/client/container_diff.go delete mode 100644 vendor/github.com/docker/docker/client/container_exec.go delete mode 100644 vendor/github.com/docker/docker/client/container_export.go delete mode 100644 vendor/github.com/docker/docker/client/container_inspect.go delete mode 100644 vendor/github.com/docker/docker/client/container_kill.go delete mode 100644 vendor/github.com/docker/docker/client/container_list.go delete mode 100644 vendor/github.com/docker/docker/client/container_logs.go delete mode 100644 vendor/github.com/docker/docker/client/container_pause.go delete mode 100644 vendor/github.com/docker/docker/client/container_prune.go delete mode 100644 vendor/github.com/docker/docker/client/container_remove.go delete mode 100644 vendor/github.com/docker/docker/client/container_rename.go delete mode 100644 vendor/github.com/docker/docker/client/container_resize.go delete mode 100644 vendor/github.com/docker/docker/client/container_restart.go delete mode 100644 vendor/github.com/docker/docker/client/container_start.go delete mode 100644 vendor/github.com/docker/docker/client/container_stats.go delete mode 100644 vendor/github.com/docker/docker/client/container_stop.go delete mode 100644 vendor/github.com/docker/docker/client/container_top.go delete mode 100644 vendor/github.com/docker/docker/client/container_unpause.go delete mode 100644 vendor/github.com/docker/docker/client/container_update.go delete mode 100644 vendor/github.com/docker/docker/client/container_wait.go delete mode 100644 vendor/github.com/docker/docker/client/disk_usage.go delete mode 100644 vendor/github.com/docker/docker/client/distribution_inspect.go delete mode 100644 vendor/github.com/docker/docker/client/envvars.go delete mode 100644 vendor/github.com/docker/docker/client/errors.go delete mode 100644 vendor/github.com/docker/docker/client/events.go delete mode 100644 vendor/github.com/docker/docker/client/hijack.go delete mode 100644 vendor/github.com/docker/docker/client/image_build.go delete mode 100644 vendor/github.com/docker/docker/client/image_create.go delete mode 100644 vendor/github.com/docker/docker/client/image_history.go delete mode 100644 vendor/github.com/docker/docker/client/image_history_opts.go delete mode 100644 vendor/github.com/docker/docker/client/image_import.go delete mode 100644 vendor/github.com/docker/docker/client/image_inspect.go delete mode 100644 vendor/github.com/docker/docker/client/image_inspect_opts.go delete mode 100644 vendor/github.com/docker/docker/client/image_list.go delete mode 100644 vendor/github.com/docker/docker/client/image_load.go delete mode 100644 vendor/github.com/docker/docker/client/image_load_opts.go delete mode 100644 vendor/github.com/docker/docker/client/image_prune.go delete mode 100644 vendor/github.com/docker/docker/client/image_pull.go delete mode 100644 vendor/github.com/docker/docker/client/image_push.go delete mode 100644 vendor/github.com/docker/docker/client/image_remove.go delete mode 100644 vendor/github.com/docker/docker/client/image_save.go delete mode 100644 vendor/github.com/docker/docker/client/image_save_opts.go delete mode 100644 vendor/github.com/docker/docker/client/image_search.go delete mode 100644 vendor/github.com/docker/docker/client/image_tag.go delete mode 100644 vendor/github.com/docker/docker/client/info.go delete mode 100644 vendor/github.com/docker/docker/client/login.go delete mode 100644 vendor/github.com/docker/docker/client/network_connect.go delete mode 100644 vendor/github.com/docker/docker/client/network_create.go delete mode 100644 vendor/github.com/docker/docker/client/network_disconnect.go delete mode 100644 vendor/github.com/docker/docker/client/network_inspect.go delete mode 100644 vendor/github.com/docker/docker/client/network_list.go delete mode 100644 vendor/github.com/docker/docker/client/network_prune.go delete mode 100644 vendor/github.com/docker/docker/client/network_remove.go delete mode 100644 vendor/github.com/docker/docker/client/node_inspect.go delete mode 100644 vendor/github.com/docker/docker/client/node_list.go delete mode 100644 vendor/github.com/docker/docker/client/node_remove.go delete mode 100644 vendor/github.com/docker/docker/client/node_update.go delete mode 100644 vendor/github.com/docker/docker/client/options.go delete mode 100644 vendor/github.com/docker/docker/client/ping.go delete mode 100644 vendor/github.com/docker/docker/client/plugin_create.go delete mode 100644 vendor/github.com/docker/docker/client/plugin_disable.go delete mode 100644 vendor/github.com/docker/docker/client/plugin_enable.go delete mode 100644 vendor/github.com/docker/docker/client/plugin_inspect.go delete mode 100644 vendor/github.com/docker/docker/client/plugin_install.go delete mode 100644 vendor/github.com/docker/docker/client/plugin_list.go delete mode 100644 vendor/github.com/docker/docker/client/plugin_push.go delete mode 100644 vendor/github.com/docker/docker/client/plugin_remove.go delete mode 100644 vendor/github.com/docker/docker/client/plugin_set.go delete mode 100644 vendor/github.com/docker/docker/client/plugin_upgrade.go delete mode 100644 vendor/github.com/docker/docker/client/request.go delete mode 100644 vendor/github.com/docker/docker/client/secret_create.go delete mode 100644 vendor/github.com/docker/docker/client/secret_inspect.go delete mode 100644 vendor/github.com/docker/docker/client/secret_list.go delete mode 100644 vendor/github.com/docker/docker/client/secret_remove.go delete mode 100644 vendor/github.com/docker/docker/client/secret_update.go delete mode 100644 vendor/github.com/docker/docker/client/service_create.go delete mode 100644 vendor/github.com/docker/docker/client/service_inspect.go delete mode 100644 vendor/github.com/docker/docker/client/service_list.go delete mode 100644 vendor/github.com/docker/docker/client/service_logs.go delete mode 100644 vendor/github.com/docker/docker/client/service_remove.go delete mode 100644 vendor/github.com/docker/docker/client/service_update.go delete mode 100644 vendor/github.com/docker/docker/client/swarm_get_unlock_key.go delete mode 100644 vendor/github.com/docker/docker/client/swarm_init.go delete mode 100644 vendor/github.com/docker/docker/client/swarm_inspect.go delete mode 100644 vendor/github.com/docker/docker/client/swarm_join.go delete mode 100644 vendor/github.com/docker/docker/client/swarm_leave.go delete mode 100644 vendor/github.com/docker/docker/client/swarm_unlock.go delete mode 100644 vendor/github.com/docker/docker/client/swarm_update.go delete mode 100644 vendor/github.com/docker/docker/client/task_inspect.go delete mode 100644 vendor/github.com/docker/docker/client/task_list.go delete mode 100644 vendor/github.com/docker/docker/client/task_logs.go delete mode 100644 vendor/github.com/docker/docker/client/utils.go delete mode 100644 vendor/github.com/docker/docker/client/version.go delete mode 100644 vendor/github.com/docker/docker/client/volume_create.go delete mode 100644 vendor/github.com/docker/docker/client/volume_inspect.go delete mode 100644 vendor/github.com/docker/docker/client/volume_list.go delete mode 100644 vendor/github.com/docker/docker/client/volume_prune.go delete mode 100644 vendor/github.com/docker/docker/client/volume_remove.go delete mode 100644 vendor/github.com/docker/docker/client/volume_update.go delete mode 100644 vendor/github.com/docker/docker/errdefs/defs.go delete mode 100644 vendor/github.com/docker/docker/errdefs/doc.go delete mode 100644 vendor/github.com/docker/docker/errdefs/helpers.go delete mode 100644 vendor/github.com/docker/docker/errdefs/http_helpers.go delete mode 100644 vendor/github.com/docker/docker/errdefs/is.go delete mode 100644 vendor/github.com/docker/docker/pkg/ioutils/fswriters_deprecated.go delete mode 100644 vendor/github.com/docker/docker/pkg/ioutils/readers.go delete mode 100644 vendor/github.com/docker/docker/pkg/ioutils/writeflusher.go delete mode 100644 vendor/github.com/docker/docker/pkg/ioutils/writers.go delete mode 100644 vendor/github.com/docker/docker/pkg/stdcopy/stdcopy.go delete mode 100644 vendor/github.com/docker/go-connections/LICENSE delete mode 100644 vendor/github.com/docker/go-connections/nat/nat.go delete mode 100644 vendor/github.com/docker/go-connections/nat/parse.go delete mode 100644 vendor/github.com/docker/go-connections/nat/sort.go delete mode 100644 vendor/github.com/docker/go-connections/sockets/README.md delete mode 100644 vendor/github.com/docker/go-connections/sockets/inmem_socket.go delete mode 100644 vendor/github.com/docker/go-connections/sockets/proxy.go delete mode 100644 vendor/github.com/docker/go-connections/sockets/sockets.go delete mode 100644 vendor/github.com/docker/go-connections/sockets/sockets_unix.go delete mode 100644 vendor/github.com/docker/go-connections/sockets/sockets_windows.go delete mode 100644 vendor/github.com/docker/go-connections/sockets/tcp_socket.go delete mode 100644 vendor/github.com/docker/go-connections/sockets/unix_socket.go delete mode 100644 vendor/github.com/docker/go-connections/tlsconfig/certpool.go delete mode 100644 vendor/github.com/docker/go-connections/tlsconfig/config.go delete mode 100644 vendor/github.com/docker/go-connections/tlsconfig/config_client_ciphers.go delete mode 100644 vendor/github.com/docker/go-units/CONTRIBUTING.md delete mode 100644 vendor/github.com/docker/go-units/LICENSE delete mode 100644 vendor/github.com/docker/go-units/MAINTAINERS delete mode 100644 vendor/github.com/docker/go-units/README.md delete mode 100644 vendor/github.com/docker/go-units/circle.yml delete mode 100644 vendor/github.com/docker/go-units/duration.go delete mode 100644 vendor/github.com/docker/go-units/size.go delete mode 100644 vendor/github.com/docker/go-units/ulimit.go delete mode 100644 vendor/github.com/felixge/httpsnoop/.gitignore delete mode 100644 vendor/github.com/felixge/httpsnoop/LICENSE.txt delete mode 100644 vendor/github.com/felixge/httpsnoop/Makefile delete mode 100644 vendor/github.com/felixge/httpsnoop/README.md delete mode 100644 vendor/github.com/felixge/httpsnoop/capture_metrics.go delete mode 100644 vendor/github.com/felixge/httpsnoop/docs.go delete mode 100644 vendor/github.com/felixge/httpsnoop/wrap_generated_gteq_1.8.go delete mode 100644 vendor/github.com/felixge/httpsnoop/wrap_generated_lt_1.8.go delete mode 100644 vendor/github.com/fvbommel/sortorder/.gitignore delete mode 100644 vendor/github.com/fvbommel/sortorder/LICENSE delete mode 100644 vendor/github.com/fvbommel/sortorder/README.md delete mode 100644 vendor/github.com/fvbommel/sortorder/doc.go delete mode 100644 vendor/github.com/fvbommel/sortorder/natsort.go delete mode 100644 vendor/github.com/go-logr/logr/.golangci.yaml delete mode 100644 vendor/github.com/go-logr/logr/CHANGELOG.md delete mode 100644 vendor/github.com/go-logr/logr/CONTRIBUTING.md delete mode 100644 vendor/github.com/go-logr/logr/LICENSE delete mode 100644 vendor/github.com/go-logr/logr/README.md delete mode 100644 vendor/github.com/go-logr/logr/SECURITY.md delete mode 100644 vendor/github.com/go-logr/logr/context.go delete mode 100644 vendor/github.com/go-logr/logr/context_noslog.go delete mode 100644 vendor/github.com/go-logr/logr/context_slog.go delete mode 100644 vendor/github.com/go-logr/logr/discard.go delete mode 100644 vendor/github.com/go-logr/logr/funcr/funcr.go delete mode 100644 vendor/github.com/go-logr/logr/funcr/slogsink.go delete mode 100644 vendor/github.com/go-logr/logr/logr.go delete mode 100644 vendor/github.com/go-logr/logr/sloghandler.go delete mode 100644 vendor/github.com/go-logr/logr/slogr.go delete mode 100644 vendor/github.com/go-logr/logr/slogsink.go delete mode 100644 vendor/github.com/go-logr/stdr/LICENSE delete mode 100644 vendor/github.com/go-logr/stdr/README.md delete mode 100644 vendor/github.com/go-logr/stdr/stdr.go delete mode 100644 vendor/github.com/moby/docker-image-spec/LICENSE delete mode 100644 vendor/github.com/moby/docker-image-spec/specs-go/v1/image.go delete mode 100644 vendor/github.com/moby/sys/atomicwriter/LICENSE delete mode 100644 vendor/github.com/moby/sys/atomicwriter/atomicwriter.go delete mode 100644 vendor/github.com/moby/sys/sequential/LICENSE delete mode 100644 vendor/github.com/moby/sys/sequential/doc.go delete mode 100644 vendor/github.com/moby/sys/sequential/sequential_unix.go delete mode 100644 vendor/github.com/moby/sys/sequential/sequential_windows.go delete mode 100644 vendor/github.com/opencontainers/go-digest/.mailmap delete mode 100644 vendor/github.com/opencontainers/go-digest/.pullapprove.yml delete mode 100644 vendor/github.com/opencontainers/go-digest/.travis.yml delete mode 100644 vendor/github.com/opencontainers/go-digest/CONTRIBUTING.md delete mode 100644 vendor/github.com/opencontainers/go-digest/LICENSE delete mode 100644 vendor/github.com/opencontainers/go-digest/LICENSE.docs delete mode 100644 vendor/github.com/opencontainers/go-digest/MAINTAINERS delete mode 100644 vendor/github.com/opencontainers/go-digest/README.md delete mode 100644 vendor/github.com/opencontainers/go-digest/algorithm.go delete mode 100644 vendor/github.com/opencontainers/go-digest/digest.go delete mode 100644 vendor/github.com/opencontainers/go-digest/digester.go delete mode 100644 vendor/github.com/opencontainers/go-digest/doc.go delete mode 100644 vendor/github.com/opencontainers/go-digest/verifiers.go delete mode 100644 vendor/github.com/opencontainers/image-spec/LICENSE delete mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/v1/annotations.go delete mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/v1/config.go delete mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/v1/descriptor.go delete mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/v1/index.go delete mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/v1/layout.go delete mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/v1/manifest.go delete mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/v1/mediatype.go delete mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/version.go delete mode 100644 vendor/github.com/opencontainers/image-spec/specs-go/versioned.go delete mode 100644 vendor/github.com/pkg/errors/.gitignore delete mode 100644 vendor/github.com/pkg/errors/.travis.yml delete mode 100644 vendor/github.com/pkg/errors/LICENSE delete mode 100644 vendor/github.com/pkg/errors/Makefile delete mode 100644 vendor/github.com/pkg/errors/README.md delete mode 100644 vendor/github.com/pkg/errors/appveyor.yml delete mode 100644 vendor/github.com/pkg/errors/errors.go delete mode 100644 vendor/github.com/pkg/errors/go113.go delete mode 100644 vendor/github.com/pkg/errors/stack.go delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/LICENSE delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/client.go delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/config.go delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/doc.go delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/env.go delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/util.go delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/v1.20.0.go delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/v1.24.0.go delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/gen.go delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/httpconv.go delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/netconv.go delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/labeler.go delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go delete mode 100644 vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/wrap.go delete mode 100644 vendor/go.opentelemetry.io/otel/.codespellignore delete mode 100644 vendor/go.opentelemetry.io/otel/.codespellrc delete mode 100644 vendor/go.opentelemetry.io/otel/.gitattributes delete mode 100644 vendor/go.opentelemetry.io/otel/.gitignore delete mode 100644 vendor/go.opentelemetry.io/otel/.golangci.yml delete mode 100644 vendor/go.opentelemetry.io/otel/.lycheeignore delete mode 100644 vendor/go.opentelemetry.io/otel/.markdownlint.yaml delete mode 100644 vendor/go.opentelemetry.io/otel/CHANGELOG.md delete mode 100644 vendor/go.opentelemetry.io/otel/CODEOWNERS delete mode 100644 vendor/go.opentelemetry.io/otel/CONTRIBUTING.md delete mode 100644 vendor/go.opentelemetry.io/otel/LICENSE delete mode 100644 vendor/go.opentelemetry.io/otel/Makefile delete mode 100644 vendor/go.opentelemetry.io/otel/README.md delete mode 100644 vendor/go.opentelemetry.io/otel/RELEASING.md delete mode 100644 vendor/go.opentelemetry.io/otel/VERSIONING.md delete mode 100644 vendor/go.opentelemetry.io/otel/attribute/README.md delete mode 100644 vendor/go.opentelemetry.io/otel/attribute/doc.go delete mode 100644 vendor/go.opentelemetry.io/otel/attribute/encoder.go delete mode 100644 vendor/go.opentelemetry.io/otel/attribute/filter.go delete mode 100644 vendor/go.opentelemetry.io/otel/attribute/iterator.go delete mode 100644 vendor/go.opentelemetry.io/otel/attribute/key.go delete mode 100644 vendor/go.opentelemetry.io/otel/attribute/kv.go delete mode 100644 vendor/go.opentelemetry.io/otel/attribute/set.go delete mode 100644 vendor/go.opentelemetry.io/otel/attribute/type_string.go delete mode 100644 vendor/go.opentelemetry.io/otel/attribute/value.go delete mode 100644 vendor/go.opentelemetry.io/otel/baggage/README.md delete mode 100644 vendor/go.opentelemetry.io/otel/baggage/baggage.go delete mode 100644 vendor/go.opentelemetry.io/otel/baggage/context.go delete mode 100644 vendor/go.opentelemetry.io/otel/baggage/doc.go delete mode 100644 vendor/go.opentelemetry.io/otel/codes/README.md delete mode 100644 vendor/go.opentelemetry.io/otel/codes/codes.go delete mode 100644 vendor/go.opentelemetry.io/otel/codes/doc.go delete mode 100644 vendor/go.opentelemetry.io/otel/doc.go delete mode 100644 vendor/go.opentelemetry.io/otel/error_handler.go delete mode 100644 vendor/go.opentelemetry.io/otel/get_main_pkgs.sh delete mode 100644 vendor/go.opentelemetry.io/otel/handler.go delete mode 100644 vendor/go.opentelemetry.io/otel/internal/attribute/attribute.go delete mode 100644 vendor/go.opentelemetry.io/otel/internal/baggage/baggage.go delete mode 100644 vendor/go.opentelemetry.io/otel/internal/baggage/context.go delete mode 100644 vendor/go.opentelemetry.io/otel/internal/gen.go delete mode 100644 vendor/go.opentelemetry.io/otel/internal/global/handler.go delete mode 100644 vendor/go.opentelemetry.io/otel/internal/global/instruments.go delete mode 100644 vendor/go.opentelemetry.io/otel/internal/global/internal_logging.go delete mode 100644 vendor/go.opentelemetry.io/otel/internal/global/meter.go delete mode 100644 vendor/go.opentelemetry.io/otel/internal/global/propagator.go delete mode 100644 vendor/go.opentelemetry.io/otel/internal/global/state.go delete mode 100644 vendor/go.opentelemetry.io/otel/internal/global/trace.go delete mode 100644 vendor/go.opentelemetry.io/otel/internal/rawhelpers.go delete mode 100644 vendor/go.opentelemetry.io/otel/internal_logging.go delete mode 100644 vendor/go.opentelemetry.io/otel/metric.go delete mode 100644 vendor/go.opentelemetry.io/otel/metric/LICENSE delete mode 100644 vendor/go.opentelemetry.io/otel/metric/README.md delete mode 100644 vendor/go.opentelemetry.io/otel/metric/asyncfloat64.go delete mode 100644 vendor/go.opentelemetry.io/otel/metric/asyncint64.go delete mode 100644 vendor/go.opentelemetry.io/otel/metric/config.go delete mode 100644 vendor/go.opentelemetry.io/otel/metric/doc.go delete mode 100644 vendor/go.opentelemetry.io/otel/metric/embedded/README.md delete mode 100644 vendor/go.opentelemetry.io/otel/metric/embedded/embedded.go delete mode 100644 vendor/go.opentelemetry.io/otel/metric/instrument.go delete mode 100644 vendor/go.opentelemetry.io/otel/metric/meter.go delete mode 100644 vendor/go.opentelemetry.io/otel/metric/syncfloat64.go delete mode 100644 vendor/go.opentelemetry.io/otel/metric/syncint64.go delete mode 100644 vendor/go.opentelemetry.io/otel/propagation.go delete mode 100644 vendor/go.opentelemetry.io/otel/propagation/README.md delete mode 100644 vendor/go.opentelemetry.io/otel/propagation/baggage.go delete mode 100644 vendor/go.opentelemetry.io/otel/propagation/doc.go delete mode 100644 vendor/go.opentelemetry.io/otel/propagation/propagation.go delete mode 100644 vendor/go.opentelemetry.io/otel/propagation/trace_context.go delete mode 100644 vendor/go.opentelemetry.io/otel/renovate.json delete mode 100644 vendor/go.opentelemetry.io/otel/requirements.txt delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.20.0/README.md delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.20.0/attribute_group.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.20.0/doc.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.20.0/event.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.20.0/exception.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.20.0/http.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.20.0/resource.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.20.0/schema.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.20.0/trace.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.24.0/README.md delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.24.0/attribute_group.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.24.0/doc.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.24.0/event.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.24.0/exception.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.24.0/metric.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.24.0/resource.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.24.0/schema.go delete mode 100644 vendor/go.opentelemetry.io/otel/semconv/v1.24.0/trace.go delete mode 100644 vendor/go.opentelemetry.io/otel/trace.go delete mode 100644 vendor/go.opentelemetry.io/otel/trace/LICENSE delete mode 100644 vendor/go.opentelemetry.io/otel/trace/README.md delete mode 100644 vendor/go.opentelemetry.io/otel/trace/config.go delete mode 100644 vendor/go.opentelemetry.io/otel/trace/context.go delete mode 100644 vendor/go.opentelemetry.io/otel/trace/doc.go delete mode 100644 vendor/go.opentelemetry.io/otel/trace/embedded/README.md delete mode 100644 vendor/go.opentelemetry.io/otel/trace/embedded/embedded.go delete mode 100644 vendor/go.opentelemetry.io/otel/trace/nonrecording.go delete mode 100644 vendor/go.opentelemetry.io/otel/trace/noop.go delete mode 100644 vendor/go.opentelemetry.io/otel/trace/trace.go delete mode 100644 vendor/go.opentelemetry.io/otel/trace/tracestate.go delete mode 100644 vendor/go.opentelemetry.io/otel/verify_examples.sh delete mode 100644 vendor/go.opentelemetry.io/otel/verify_readmes.sh delete mode 100644 vendor/go.opentelemetry.io/otel/version.go delete mode 100644 vendor/go.opentelemetry.io/otel/versions.yaml delete mode 100644 vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go create mode 100644 vendor/golang.org/x/sys/unix/auxv.go create mode 100644 vendor/golang.org/x/sys/unix/auxv_unsupported.go create mode 100644 vendor/golang.org/x/sys/unix/vgetrandom_linux.go create mode 100644 vendor/golang.org/x/sys/unix/vgetrandom_unsupported.go diff --git a/.gitignore b/.gitignore index b9f700a9..4d652eb5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ lazydocker* +lazyapple +lazycontainer TODO.md Lazydocker.code-workspace .vscode diff --git a/README.md b/README.md index 97967d36..65aed705 100644 --- a/README.md +++ b/README.md @@ -1,326 +1,143 @@ -
-Special thanks to: -
-
- -
- Warp -
- Warp, the intelligent terminal -
- Available for MacOS and Linux -
-
- Visit warp.dev to learn more. -
-
-
-
- -
- Tuple -
- Tuple, the premier screen sharing app for developers on macOS and Windows. -
-
-
-
- -
- Subble -
- Click here to learn more -
-
+# lazyapple -
-
+A terminal UI for [Apple Container](https://developer.apple.com/documentation/virtualization/running_linux_containers) -- the native macOS container runtime introduced in macOS 26. -

- -

+This is a fork of [lazydocker](https://github.com/jesseduffield/lazydocker) by Jesse Duffield, rewritten to work with Apple's `container` CLI instead of Docker. -A simple terminal UI for both docker and docker-compose, written in Go with the [gocui](https://github.com/jroimartin/gocui 'gocui') library. +## What is this? -![CI](https://github.com/jesseduffield/lazygit/workflows/Continuous%20Integration/badge.svg) -[![Go Report Card](https://goreportcard.com/badge/github.com/jesseduffield/lazydocker)](https://goreportcard.com/report/github.com/jesseduffield/lazydocker) -[![GolangCI](https://golangci.com/badges/github.com/jesseduffield/lazydocker.svg)](https://golangci.com) -[![GoDoc](https://godoc.org/github.com/jesseduffield/lazydocker?status.svg)](http://godoc.org/github.com/jesseduffield/lazydocker) -![GitHub repo size](https://img.shields.io/github/repo-size/jesseduffield/lazydocker) -[![GitHub Releases](https://img.shields.io/github/downloads/jesseduffield/lazydocker/total)](https://github.com/jesseduffield/lazydocker/releases) -[![GitHub tag](https://img.shields.io/github/tag/jesseduffield/lazydocker.svg)](https://github.com/jesseduffield/lazydocker/releases/latest) -[![homebrew](https://img.shields.io/homebrew/v/lazydocker)](https://github.com/Homebrew/homebrew-core/blob/master/Formula/lazydocker.rb) +Apple introduced a native container runtime for macOS. It ships a CLI tool called `container` that can run Linux containers without Docker. **lazyapple** gives you a terminal UI to manage those containers, just like lazydocker does for Docker. -![Gif](/docs/resources/demo3.gif) +### What works -[Demo](https://youtu.be/NICqQPxwJWw) +- **Containers**: list, start, stop, restart, kill, remove, view logs, exec shell, view stats/env/config/top +- **Images**: list, pull, remove, prune +- **Volumes**: list, remove, prune +- **Networks**: list, remove, prune -## Sponsors +### What doesn't exist (because Apple Container doesn't support it) -

- Maintenance of this project is made possible by all the contributors and sponsors. If you'd like to sponsor this project and have your avatar or company logo appear below click here. 💙 -

- -

-Mark LussierDean HerbertPeter BjorklundReilly WoodOliver GüntherPawan DhananjayBartłomiej DachDavid KarlssonCarsten GehlingCEUKAkos PutzXeteraHolden LucasChau TranmatejciktheAverageDev (Luca Tumedei)Ivan ZaitsevNicholas CloudLightQuantumGabriel SaillardAliaksandr StelmachonakBurgy BenjaminJoe KlemmerTobias LütkeBen BeaumontHollyJames SantucciJeff ForcierMaciej T. NowakFarzad MajidfayyazYuryAndreas KurthBraden SteffaniakJordan GillardSebastianGeorge SpanosFrantisek StankoAndy SlezakMartin KockIllarion KoperskiJesse AlamaCodacyBrettJan HeijmansKevin Nowaldsem pruijsOmar Luq Ethan LiBrian MacAskillMaxinbrJan ZenknerVictor AremuIgor RamazanovElliott Maguiren8n - Workflow Automationkaleb allmonJosh ThomasJJFrederick MorlockDarren CraineMaximilian LangenfeldNurzhanDavis BulsGrec MarcsainuMarc Güell SegarraChris OlsenVladimir PopovNeil LambertShaun GarwoodDavid Heinemeier HanssonWayan jimmy -

- -## Elevator Pitch - -Minor rant incoming: Something's not working? Maybe a service is down. `docker-compose ps`. Yep, it's that microservice that's still buggy. No issue, I'll just restart it: `docker-compose restart`. Okay now let's try again. Oh wait the issue is still there. Hmm. `docker-compose ps`. Right so the service must have just stopped immediately after starting. I probably would have known that if I was reading the log stream, but there is a lot of clutter in there from other services. I could get the logs for just that one service with `docker compose logs --follow myservice` but that dies everytime the service dies so I'd need to run that command every time I restart the service. I could alternatively run `docker-compose up myservice` and in that terminal window if the service is down I could just `up` it again, but now I've got one service hogging a terminal window even after I no longer care about its logs. I guess when I want to reclaim the terminal realestate I can do `ctrl+P,Q`, but... wait, that's not working for some reason. Should I use ctrl+C instead? I can't remember if that closes the foreground process or kills the actual service. - -What a headache! - -Memorising docker commands is hard. Memorising aliases is slightly less hard. Keeping track of your containers across multiple terminal windows is near impossible. What if you had all the information you needed in one terminal window with every common command living one keypress away (and the ability to add custom commands as well). Lazydocker's goal is to make that dream a reality. - -- [Requirements](https://github.com/jesseduffield/lazydocker#requirements) -- [Installation](https://github.com/jesseduffield/lazydocker#installation) -- [Usage](https://github.com/jesseduffield/lazydocker#usage) -- [Keybindings](/docs/keybindings) -- [Cool Features](https://github.com/jesseduffield/lazydocker#cool-features) -- [Contributing](https://github.com/jesseduffield/lazydocker#contributing) -- [Video Tutorial](https://youtu.be/NICqQPxwJWw) -- [Config Docs](/docs/Config.md) -- [Twitch Stream](https://www.twitch.tv/jesseduffield) -- [FAQ](https://github.com/jesseduffield/lazydocker#faq) +- No docker-compose / services / projects +- No pause/unpause +- No attach (use exec shell instead) +- No events streaming (polling is used) +- No `--since` or `--timestamps` on logs ## Requirements -- Docker >= **29.0.0** (API >= **1.24**) -- Docker-Compose >= **1.23.2** (optional) +- **macOS 26** (Tahoe) or later +- Apple Container CLI installed (`container` command available in PATH) -## Installation - -### Homebrew - -Normally `lazydocker` formula can be found in the Homebrew core but we suggest you to tap our formula to get frequently updated one. It works with Linux, too. - -**Tap**: -```sh -brew install jesseduffield/lazydocker/lazydocker -``` - -**Core**: -```sh -brew install lazydocker -``` - -### Scoop (Windows) - -You can install `lazydocker` using [scoop](https://scoop.sh/): - -```sh -scoop install lazydocker -``` -### Chocolatey (Windows) - -You can install `lazydocker` using [Chocolatey](https://chocolatey.org/): - -```sh -choco install lazydocker -``` -### asdf-vm - -You can install [asdf-lazydocker plugin](https://github.com/comdotlinux/asdf-lazydocker) using [asdf-vm](https://asdf-vm.com/): -#### Setup (Once) -```sh -asdf plugin add lazydocker https://github.com/comdotlinux/asdf-lazydocker.git -``` - -#### For Install / Upgrade -```sh -asdf list all lazydocker -asdf install lazydocker latest -asdf global lazydocker latest -``` - -### Binary Release (Linux/OSX/Windows) - -You can manually download a binary release from [the release page](https://github.com/jesseduffield/lazydocker/releases). - -Automated install/update, don't forget to always verify what you're piping into bash: - -```sh -curl https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash -``` -The script installs downloaded binary to `$HOME/.local/bin` directory by default, but it can be changed by setting `DIR` environment variable. - -### Go - -Required Go Version >= **1.19** - -```sh -go install github.com/jesseduffield/lazydocker@latest -``` - -Required Go version >= **1.8**, <= **1.17** - -```sh -go get github.com/jesseduffield/lazydocker -``` - -### Arch Linux AUR - -You can install lazydocker using the [AUR](https://aur.archlinux.org/packages/lazydocker) by running: - -```sh -yay -S lazydocker -``` - -### Docker - -[![Docker Pulls](https://img.shields.io/docker/pulls/lazyteam/lazydocker.svg)](https://hub.docker.com/r/lazyteam/lazydocker) -[![Docker Stars](https://img.shields.io/docker/stars/lazyteam/lazydocker.svg)](https://hub.docker.com/r/lazyteam/lazydocker) -[![Docker Automated](https://img.shields.io/docker/cloud/automated/lazyteam/lazydocker.svg)](https://hub.docker.com/r/lazyteam/lazydocker) - -1.
Click if you have an ARM device

- - - If you have a ARM 32 bit v6 architecture - - ```sh - docker build -t lazyteam/lazydocker \ - --build-arg BASE_IMAGE_BUILDER=arm32v6/golang \ - --build-arg GOARCH=arm \ - --build-arg GOARM=6 \ - https://github.com/jesseduffield/lazydocker.git - ``` - - - If you have a ARM 32 bit v7 architecture - - ```sh - docker build -t lazyteam/lazydocker \ - --build-arg BASE_IMAGE_BUILDER=arm32v7/golang \ - --build-arg GOARCH=arm \ - --build-arg GOARM=7 \ - https://github.com/jesseduffield/lazydocker.git - ``` - - - If you have a ARM 64 bit v8 architecture - - ```sh - docker build -t lazyteam/lazydocker \ - --build-arg BASE_IMAGE_BUILDER=arm64v8/golang \ - --build-arg GOARCH=arm64 \ - https://github.com/jesseduffield/lazydocker.git - ``` - -

- -1. Run the container - - ```sh - docker run --rm -it -v \ - /var/run/docker.sock:/var/run/docker.sock \ - -v /yourpath:/.config/jesseduffield/lazydocker \ - lazyteam/lazydocker - ``` - - - Don't forget to change `/yourpath` to an actual path you created to store lazydocker's config - - You can also use this [docker-compose.yml](https://github.com/jesseduffield/lazydocker/blob/master/docker-compose.yml) - - You might want to create an alias, for example: - - ```sh - echo "alias lzd='docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock -v /yourpath/config:/.config/jesseduffield/lazydocker lazyteam/lazydocker'" >> ~/.zshrc - ``` - - - -For development, you can build the image using: - -```sh -git clone https://github.com/jesseduffield/lazydocker.git -cd lazydocker -docker build -t lazyteam/lazydocker \ - --build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \ - --build-arg VCS_REF=`git rev-parse --short HEAD` \ - --build-arg VERSION=`git describe --abbrev=0 --tag` \ - . -``` - -If you encounter a compatibility issue with Docker bundled binary, try rebuilding -the image with the build argument `--build-arg DOCKER_VERSION="v$(docker -v | cut -d" " -f3 | rev | cut -c 2- | rev)"` -so that the bundled docker binary matches your host docker binary version. - -### Manual - -You'll need to [install Go](https://golang.org/doc/install) +Verify it works: ``` -git clone https://github.com/jesseduffield/lazydocker.git -cd lazydocker -go install +container list --all ``` -You can also use `go run main.go` to compile and run in one go (pun definitely intended) +If you get `command not found`, Apple Container is not installed on your system. -## Usage +## Install -Call `lazydocker` in your terminal. I personally use this a lot so I've made an alias for it like so: +### Build from source -``` -echo "alias lzd='lazydocker'" >> ~/.zshrc +```bash +git clone https://github.com/g-battaglia/lazy-apple-container.git +cd lazy-apple-container +go build -o lazyapple . ``` -(you can substitute .zshrc for whatever rc file you're using) +### Run it -- Basic video tutorial [here](https://youtu.be/NICqQPxwJWw). -- List of keybindings - [here](/docs/keybindings). +```bash +./lazyapple +``` -## Cool features +### Optional: install to PATH -everything is one keypress away (or one click away! Mouse support FTW): +```bash +sudo cp lazyapple /usr/local/bin/ +``` -- viewing the state of your docker or docker-compose container environment at a glance -- viewing logs for a container/service -- viewing ascii graphs of your containers' metrics so that you can not only feel but also look like a developer -- customising those graphs to measure nearly any metric you want -- attaching to a container/service -- restarting/removing/rebuilding containers/services -- viewing the ancestor layers of a given image -- pruning containers, images, or volumes that are hogging up disk space +Then just run `lazyapple` from anywhere. -## Contributing +## Keybindings -There is still a lot of work to go! Please check out the [contributing guide](CONTRIBUTING.md). -For contributor discussion about things not better discussed here in the repo, join the discord channel +### Global - +| Key | Action | +|-----|--------| +| `q` / `Ctrl+C` | Quit | +| `1` | Containers | +| `2` | Images | +| `3` | Volumes | +| `4` | Networks | +| `x` / `?` | Menu | +| `Enter` | Focus main panel | +| `PgUp` / `PgDn` | Scroll | +| `[` / `]` | Prev/next tab | +| `/` | Filter list | -## Donate +### Containers -If you would like to support the development of lazydocker, consider [sponsoring me](https://github.com/sponsors/jesseduffield) (github is matching all donations dollar-for-dollar for 12 months) +| Key | Action | +|-----|--------| +| `s` | Stop | +| `r` | Restart (stop + start) | +| `k` | Kill | +| `d` | Remove | +| `E` | Exec shell | +| `a` | Attach (exec shell) | +| `m` | View logs in terminal | +| `e` | Toggle stopped containers | +| `w` | Open in browser | -## Social +### Images / Volumes / Networks -If you want to see what I (Jesse) am up to in terms of development, follow me on -[twitter](https://twitter.com/DuffieldJesse) or watch me program on -[twitch](https://www.twitch.tv/jesseduffield) +| Key | Action | +|-----|--------| +| `d` | Remove | +| `b` | Bulk commands (prune, etc.) | -## FAQ +## Config -### How do I edit my config? +Config lives at `~/.config/lazyapple/config.yml`. -By opening lazydocker, clicking on the 'project' panel in the top left, and pressing 'o' (or 'e' if your editor is vim). See [Config Docs](/docs/Config.md) +```yaml +gui: + scrollHeight: 2 + sidePanelWidth: 0.333 + theme: + activeBorderColor: + - green + - bold +logs: + tail: "100" +stats: + graphs: + - caption: CPU (%) + statPath: DerivedStats.CPUPercentage + color: blue + - caption: Memory (%) + statPath: DerivedStats.MemoryPercentage + color: green +``` -### How do I get text to wrap in my main panel? +## How it differs from lazydocker -In the future I want to make this the default, but for now there are some CPU issues that arise with wrapping. If you want to enable wrapping, use `gui.wrapMainPanel: true` +| | lazydocker | lazyapple | +|---|---|---| +| Runtime | Docker Engine | Apple Container | +| CLI | `docker` | `container` | +| Compose | Yes | No | +| Services/Projects panels | Yes | No | +| Pause/Unpause | Yes | No | +| Events API | Yes (streaming) | No (polling) | +| Platform | Linux, macOS, Windows | macOS 26+ only | -### How do you select text? +## Credits -Because we support mouse events, you will need to hold option while dragging the mouse to indicate you're trying to select text rather than click on something. Alternatively you can disable mouse events via the `gui.ignoreMouseEvents` config value. +Fork of [lazydocker](https://github.com/jesseduffield/lazydocker) by [Jesse Duffield](https://github.com/jesseduffield). All the TUI framework, panel system, and keybinding infrastructure comes from the original project. -Mac Users: See [Issue #190](https://github.com/jesseduffield/lazydocker/issues/190) for other options. +## License -### Why can't I see my container's logs? - -By default we only show logs from the last hour, so that we're not putting too much strain on the machine. This may be why you can't see logs when you first start lazydocker. This can be overwritten in the config's `commandTemplates` - -If you are running lazydocker in Docker container, it is a know bug, that you can't see logs or CPU usage. - -## Alternatives - -- [docui](https://github.com/skanehira/docui) - Skanehira beat me to the punch on making a docker terminal UI, so definitely check out that repo as well! I think the two repos can live in harmony though: lazydocker is more about managing existing containers/services, and docui is more about creating and configuring them. -- [Portainer](https://github.com/portainer/portainer) - Portainer tries to solve the same problem but it's accessed via your browser rather than your terminal. It also supports docker swarm. -- See [Awesome Docker list](https://github.com/veggiemonk/awesome-docker/blob/master/README.md#terminal) for similar tools to work with Docker. +MIT diff --git a/go.mod b/go.mod index bf2c2236..292a78f8 100644 --- a/go.mod +++ b/go.mod @@ -1,19 +1,14 @@ -module github.com/jesseduffield/lazydocker +module github.com/jesseduffield/lazycontainer -go 1.22 - -toolchain go1.23.6 +go 1.24.0 require ( github.com/OpenPeeDeeP/xdg v0.2.1-0.20190312153938-4ba9e1eb294c github.com/boz/go-throttle v0.0.0-20160922054636-fdc4eab740c1 github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 - github.com/docker/cli v27.1.1+incompatible - github.com/docker/docker v28.5.2+incompatible github.com/fatih/color v1.10.0 github.com/go-errors/errors v1.5.1 github.com/gookit/color v1.5.0 - github.com/imdario/mergo v0.3.16 github.com/integrii/flaggy v1.4.0 github.com/jesseduffield/asciigraph v0.0.0-20190605104717-6d88e39309ee github.com/jesseduffield/gocui v0.3.1-0.20240418080333-8cd33929c513 @@ -33,53 +28,26 @@ require ( ) require ( - github.com/containerd/errdefs v1.0.0 // indirect - github.com/containerd/errdefs/pkg v0.3.0 // indirect - github.com/moby/sys/atomicwriter v0.1.0 // indirect - github.com/moby/sys/sequential v0.6.0 // indirect + dario.cat/mergo v1.0.2 + github.com/google/go-cmp v0.7.0 // indirect + github.com/onsi/ginkgo v1.16.5 // indirect + github.com/onsi/gomega v1.39.1 // indirect ) require ( - github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/containerd/log v0.1.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/distribution/reference v0.6.0 // indirect - github.com/docker/docker-credential-helpers v0.8.2 // indirect - github.com/docker/go-connections v0.5.0 // indirect - github.com/docker/go-units v0.5.0 // indirect - github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/fvbommel/sortorder v1.1.0 // indirect github.com/gdamore/encoding v1.0.1 // indirect github.com/gdamore/tcell/v2 v2.7.4 // indirect - github.com/go-logr/logr v1.4.2 // indirect - github.com/go-logr/stdr v1.2.2 // indirect github.com/goccy/go-yaml v1.11.0 github.com/lucasb-eyer/go-colorful v1.2.0 // indirect github.com/mattn/go-colorable v0.1.8 // indirect github.com/mattn/go-isatty v0.0.12 // indirect - github.com/moby/docker-image-spec v1.3.1 // indirect - github.com/moby/term v0.5.0 // indirect - github.com/morikuni/aec v1.0.0 // indirect - github.com/onsi/ginkgo v1.8.0 // indirect - github.com/onsi/gomega v1.5.0 // indirect - github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0 // indirect github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect - go.opentelemetry.io/otel v1.28.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0 // indirect - go.opentelemetry.io/otel/metric v1.28.0 // indirect - go.opentelemetry.io/otel/sdk v1.28.0 // indirect - go.opentelemetry.io/otel/trace v1.28.0 // indirect - golang.org/x/crypto v0.24.0 // indirect golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect - golang.org/x/sys v0.24.0 // indirect + golang.org/x/sys v0.40.0 // indirect golang.org/x/term v0.21.0 // indirect - golang.org/x/text v0.16.0 // indirect - golang.org/x/time v0.5.0 // indirect + golang.org/x/text v0.33.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - gotest.tools/v3 v3.5.1 // indirect ) diff --git a/go.sum b/go.sum index 4f20d188..3000a6ae 100644 --- a/go.sum +++ b/go.sum @@ -1,43 +1,19 @@ -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= -github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= +dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= github.com/OpenPeeDeeP/xdg v0.2.1-0.20190312153938-4ba9e1eb294c h1:YDsGA6tou+tAxVe0Dre29iSbQ8TrWdWfwOisKArJT5E= github.com/OpenPeeDeeP/xdg v0.2.1-0.20190312153938-4ba9e1eb294c/go.mod h1:tMoSueLQlMf0TCldjrJLNIjAc5qAOIcHt5REi88/Ygo= github.com/boz/go-throttle v0.0.0-20160922054636-fdc4eab740c1 h1:1fx+RA5lk1ZkzPAUP7DEgZnVHYxEcHO77vQO/V8z/2Q= github.com/boz/go-throttle v0.0.0-20160922054636-fdc4eab740c1/go.mod h1:z0nyIb42Zs97wyX1V+8MbEFhHeTw1OgFQfR6q57ZuHc= -github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= -github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 h1:tuijfIjZyjZaHq9xDUh0tNitwXshJpbLkqMOJv4H3do= github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21/go.mod h1:po7NpZ/QiTKzBKyrsEAxwnTamCoh8uDk/egRpQ7siIc= -github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= -github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= -github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= -github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= -github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= -github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= -github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/cli v27.1.1+incompatible h1:goaZxOqs4QKxznZjjBWKONQci/MywhtRv2oNn0GkeZE= -github.com/docker/cli v27.1.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/docker v28.5.2+incompatible h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM= -github.com/docker/docker v28.5.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= -github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= -github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= -github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= -github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= -github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= -github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fvbommel/sortorder v1.1.0 h1:fUmoe+HLsBTctBDoaBwpQo5N+nrCp8g/BjKb/6ZQmYw= -github.com/fvbommel/sortorder v1.1.0/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/gdamore/encoding v1.0.1 h1:YzKZckdBL6jVt2Gc+5p82qhrGiqMdG/eNs6Wy0u3Uhw= github.com/gdamore/encoding v1.0.1/go.mod h1:0Z0cMFinngz9kS1QfMjCP8TY7em3bZYeeklsSDPivEo= @@ -46,32 +22,30 @@ github.com/gdamore/tcell/v2 v2.7.4/go.mod h1:dSXtXTSK0VsW1biw65DZLZ2NKr7j0qP/0J7 github.com/go-errors/errors v1.0.2/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk= github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/goccy/go-yaml v1.11.0 h1:n7Z+zx8S9f9KgzG6KtQKf+kwqXZlLNR2F6018Dgau54= github.com/goccy/go-yaml v1.11.0/go.mod h1:H+mJrWtjPTJAHvRbV09MCK9xYwODM+wRTVFFTWckfng= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/gookit/color v1.5.0 h1:1Opow3+BWDwqor78DcJkJCIwnkviFi+rrOANki9BUFw= github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= -github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/integrii/flaggy v1.4.0 h1:A1x7SYx4jqu5NSrY14z8Z+0UyX2S5ygfJJrfolWR3zM= github.com/integrii/flaggy v1.4.0/go.mod h1:tnTxHeTJbah0gQ6/K0RW0J7fMUBk9MCF5blhm43LNpI= github.com/jesseduffield/asciigraph v0.0.0-20190605104717-6d88e39309ee h1:7Zi/OQlGbMz4MT2V1+prN/gv1C64NDyVb/MbJnS0ZfA= @@ -100,31 +74,21 @@ github.com/mcuadros/go-lookup v0.0.0-20171110082742-5650f26be767 h1:BrhJNdEFWGui github.com/mcuadros/go-lookup v0.0.0-20171110082742-5650f26be767/go.mod h1:ct+byCpkFokm4J0tiuAvB8cf2ttm6GcCe89Yr25nGKg= github.com/mgutz/str v1.2.0 h1:4IzWSdIz9qPQWLfKZ0rJcV0jcUDpxvP4JVZ4GXQyvSw= github.com/mgutz/str v1.2.0/go.mod h1:w1v0ofgLaJdoD0HpQ3fycxKD1WtxpjSo151pK/31q6w= -github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= -github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw= -github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs= -github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= -github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= -github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= -github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= -github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= -github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= -github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= -github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.39.1 h1:1IJLAad4zjPn2PsnhH70V4DKRFlrCzGBNrNaru+Vf28= +github.com/onsi/gomega v1.39.1/go.mod h1:hL6yVALoTOxeWudERyfppUcZXjMwIMLnuSfruD2lcfg= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= @@ -144,6 +108,7 @@ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= @@ -151,47 +116,48 @@ github.com/thoas/go-funk v0.9.1 h1:O549iLZqPpTUQ10ykd26sZhzD+rmR5pWhuElrhbC20M= github.com/thoas/go-funk v0.9.1/go.mod h1:+IWnUfUmFO1+WVYQWQtIJHeRRdaIyyYglZN7xzUPe4Q= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 h1:QldyIu/L63oPpyvQmHgvgickp1Yw510KJOqX7H24mg8= github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= -go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= -go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0 h1:j9+03ymgYhPKmeXGk5Zu+cIZOlVzd9Zv7QIiyItjFBU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0/go.mod h1:Y5+XiUG4Emn1hTfciPzGPJaSI+RpDts6BnCIir0SLqk= -go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= -go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= -go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= -go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= -go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= -go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= -go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= -go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI= golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= +golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -199,8 +165,8 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= -golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -212,36 +178,33 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= +golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 h1:0+ozOGcrp+Y8Aq8TLNN2Aliibms5LEzsq99ZZmAGYm0= -google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094/go.mod h1:fJ/e3If/Q67Mj99hin0hMhiNyCRmt6BQ2aWIJshUSJw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= -google.golang.org/grpc v1.67.0 h1:IdH9y6PF5MPSdAntIcpjQ+tXO41pcQsfZV2RxtQgVcw= -google.golang.org/grpc v1.67.0/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= -gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= diff --git a/lazycontainer b/lazycontainer new file mode 100755 index 0000000000000000000000000000000000000000..69dbfb997b2b3b2c7a878d259799b1764c8cd6da GIT binary patch literal 9407634 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

*&$ZlNZyxnag~3IeYZ;fGW5h%E8O}) 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℞Q1Ur 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�F{ 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

2#u@jE?*t;IU6f?riv~SsQlN0;k#m&gI@1Ygxzj z9b4$&i_CL1V_U)4nxg;MUftU}u9SAvNBw#DcrEy-`IM~$d1PX*YrwNlfM?*C){mVH z;8^Z=_W*OPL5_FkNv^(R`Gd{fP%Iy0eO|nRy&2WSSsVJ?W&NrV?jw4B<+#TWj^@Ye1h?)*0J@$fbmE=QO%4_8ZF znyv+xrK>DpPP{puGOmyQZDi4CU~1uH<-Y&7^oZxv;A;6XRzX>sgX;RhI( z>eF-aY3+fmXRfN@;|;D(nQPPWV0aTS6fN7iv9UEtbbHw+x3aIW1YJcqp%?<$_*X&S zdR~fdqP}`MP8s(zG!}H6V)PT)ITTB)916xyg6s$OZCc-?&=Xas(eH>=C3fEIXI;&h z_1&+qV@b{@@s*Tdn*cYOmD@Af<&cLiuN6Je*oM#9v{Kd3m zb>2&oR!h2(eCoce8(+Iy&V?S=={KjP2$MtC57w~P8@ z+pNKFkfNWTLY}D429MBFyQn(^%~Uf-*e>IXIMZ*P6EZqnpK^3Kl`rzy9#nVztm<&J zdp4@-RGxM8=<(gaX)<-LBNyg+r~8>5$VJKYKIPP@^7WoxNWWK-PdEup)v)%irQgEM zmG1gm@sys8H3qFk-Su}gXZ;=Zt-otNV*M>R8Tj0u7q+x$eHs~j!?)t!%cb!}8Q)6A zXJ~oMx$!`(_ZjI{nR~`m#CX`py%}CTE_o`lp7}BHrhM-Z&unyQ_!&93-8G`+)#&Q& z#DR$prORoZ-Cjg&0&DeYe}xuAA3p>y$Uo9A|Gv+h51C!hsa@fXbn(U5w6zvUgs`s; zrwwppO#nM0KBGG3D8yP$cAB~v`L8&?zUU$c9njg3$2u*qm|U6716o68bB%yk)L9EY zZFtY}XO|yco?zZm@DRa6zqLmG6gaLj6AuhOz1iiro?oScIUdJ5;uDcuoOB8K*>6U! zGyiv0xH(BG9tgH4>5K5TqQmMD!CA(?m05>~E~`Wru`9F=IpVED`joR)a@Qed&6Rhp zlm3Tyvh*MuT++~*v6XjLLJ$6P@RGCv|Fq@Ivl|y+Y;oe9AMeNCaw+rmPdW4D=Rd}V z2!E)*y*dp289LXz$#*F_uZMS2p0Q1ZC~x~NekN#7^evmX@m)aMnv==QiJsL1*Opzu zut)12T?!sqT2DdicD>f8+|YWk53Sci=aoJ>*V+`BV%C4AK5%Fe>p!nP;asLXr@mUo zx)3@Sju0EMNpmYYe-WFT`kUf+m1}3KfzB&jIyC?CI#3LaaOR%eNB`=2R)*m_-@~}J}C+0#tnpkJk zSO2pY(Z|$Q1N@|h{WeMDgXVJZr|r8Nxk^8h-J}=(|0Vf|d0%_hv`461dH9<0%$%uS z_)VLKlL6pa%Y7yLBm6kor#uHI?}wL2=E&EP1V4xqZBJr@PBsKu2i@lJ9?SEP_nCiw zo`=mkEP5B-nR!|h2`8sJVbhmr8RtRn+l9V!xET8!cAd=*^IDO`lT80bJLVgBroaDv z%5(ZJ+dzUoH_rx6`VAckCLS(Jmb}lps@m*{4IPv}-;*&nL+cHp(7_t5Vch+&dcMw; z>t5Y=sqX2Ku;N?=bFcjCZn=C9*_d|Ar~AMM*lcqBmj3w?Jz*DVt7E?Wc9A~ijMr}$ z32s96yYsFynmpNzZ=tOTxsfZIGv$W9`pRb0HuF=<{x{XjI`MFd*qsU|vd6zB(4_Yn zkC73?Xt`rb!q>W1q_SERdDhb;`&U)UqqL zFY1pcf3Gt8hqLzJBz#i*GS?5I_`)vn5PS#PqxcfOE776)8@k=diMG1MQ`h5J-9Lw)h$nb!;4<`;>F)ZW|Mjnp zmpTjD{;zz8KHKb&BfA2B+c(?Yb+KaGUHy9z`%FCj`(IqS<;}-vvtK`}UzjnwIk9?y zV{dP;brSNiR`Oo99{8HhY(fW;kFmKVk{?ek4z^mjULOC&1ZSDvui^bvBYcS*L;vv` zXPNi>q=_DnvNl2aV!UTh@@--y`SxBR9#r@gyF4DudB0d=b@MY#^2X}g0ItzESwHyW z+Xu4O!|w~}57$(taf=6yV7(w7G=uwf&RFfwzhJGgVHM3$9H(@3|MO>|g@#a(iKANU z+OqWC4tUbvtFu~qabxCyYeZ+KcT6-fLXx?cLbr++`G1Q+$;RO21DBt<^DbJ{zs&p_ z_+-~#9xi*b@kQ(3ZmxOnLCIR#mH9oS{b$9;%F147O6TH;{|lZq(243ZG&9}q1@_a) zyS#7a89Ey0(vh9_%i>Sau5?bXKVJEI%1zzS>ei#ZoAewRXy&g0TJ_ieD)nn`h3W~w zFZEs#v|Rx_RUSp3S6qp7@SpvXvnPBo%D~6ikFxwq{wvu9w&gpQS7AR0v6r**dh{sH z((&>PP{Vv8Y zRZ@fwK%M3pywHz7CIXSb2tP+3Hs2JN$4>_?9r*8rhqYY~D(|@L^NEvP1Smg_UWIAU+}km1pGGZCvXQoYV_M6azXaLRp>MQ%LS{) zxpf+S)?a6t`UA|4=WG6`IyJ8Wa7|-Yok8$Ovi5x89d&xLOV9pu`DOd5bzoIwfMQsd zR9`uiLl> zUpt*MO3m3XTey$tK4J5jJj=cMC%X&&lyJ&DH|K?avvR=r#yL0Vv*2|Ge@(1dmY!uR z47q*IbNf8tIDHPBL!Zy)EIX}9p+EMC>UXp3Ht0#?yPy~8O6n8q*5*3a9bP<712%od zSvO)Uw$IMcvt6vGnwyAI2R^%GhXi+~ndedS+{6N*GmcZ8nR<&Sm~Vr$rT9^vZ}MzO z*uPy{vE~1w9r4S$x~V3{;oe!`%xTbv)?*sS^-jE=dBU#KwvOC!%G=0UXcsQP2cqx# z>g7cj)Vs3Kub0pB$w2u7SHM^Ge1_`}H0?ymF^xY-JVmyxx1be2-}1)i@rH|_7uIfV zCB(0IYq!9OoWVxFgZO07L6(N_U$9m*x|^q4YYyh&cbabc88UItniG|?en3`-jI5sS z_EUS$@;IYTbLzL>>t4P%(W-ve_O;cc>xPhpz>@x$=itLa&h|96Sm1~)c8P&IKD;{W zm=4aD;QQyf$uYq5U90=r&dpl%CNZr95@9x-Ma@H#?sJJ_wJEyF1V>KU4>6; zz=c}=&>eGg{;kW()H zAQ`vqCEKSDeCMAH9NO1EV&r=Vdu+(}D*u4sSaA|@D(I;d+_U!F^dILCw?rFS6aAla zIdcnHlPkX+#*#$VWaKw`Z7K4*lDfqwDm#=T6H@Ii4#Z^B(y<53<`1brRRXK9+G}?tvXZGJMQaLhY2<6|Vu9H&PQ=TPDA?r7`-*`F&Qt71%yDJLB@>70APo+eZ(7Pj&Iv zpTEeSPn?x!mcJO>GQObN0%DixZxuRE9ei#&av#3b?5+2M^x4Q8$$^|$k4!my({IzL z&O0*UY{sZ{b}qgCLOfA?fbokDTrtDt1G=|-pxMUtN5x=(hg(y~@ykR-cugDxG!_Fw>rm_b+C@-@~5| zPeGP>{6#Xin!S2Wk@4~G?qIyG4%-90KMRfvzMemC4R*=7_-EzMTZt`PG~j=(^XX>u z{5+oLV@of(U3p|ABO5mEL=Wwv?uKbjx?y`zd*aef#NgEzqN|~YM$tJ^w5j!tuGQe? zqM?!Yb*$4C4K?v1&Gm!67#@Mnp*HJ@jcb9|2yg3WRfU@v)8yFI;ThC}44fc2x%yYc z%+bDhS8?owuwqNq2R*Ci-R-=)PVex%$UJwjyNip_*CeP^kiJHO31iro0`#%8LGXae6S^5AFWgtc6wt-Q4*=)^xLb6(bZiMYk| z6>r1$w?X^Ng`pqx7f%Od@8{*IF6%F;LU%!akNXX_{Ztq0$RFLiCxS1|!?7j!8wIca zbjvc8_oG`Tzseb`%unL$PI~@aVh}&)Y)*WgaeUR-H=3mbmMM=n?a8NT*VHG*|8X&V z{d(S&t&MjR%aND7Qx7gpKIc0REh>5Dou>KuXU({O>7L2=u6##lSJVIHcC4oF;CoZ_9J2;lmv_%YTgEtZ(LJQoHhX)_*5O-G zY}2#oi}xCRG2fg)EI*C+Y=zMo^Nr4Uud6faoZ`j6d6IB`-((XDrC6Ul#$$7;*>g_! z{)xW%`ZNN&SX1#pqw6<;>*hW>#Kf1^gA3jCMfMX@9<$}9zvz(b=TCole`vr3>+YPg zblv>QhqthvP~V^LT=a2#cd@w2b#+xD{;qs#BDOgF(ppy5s3y-usn zi}m-f{v~odvxc6*`bX`0`<&lr|J)X1kIy?O+m_&i-3wcMp0UMmac%K>rZtK7IqZ+w zHLz^sd6Z3)z64!Ngr2s4+s<<>c(9uGa_977a3>MEYvYg+^zXOu<3WR4yU@RL->cKy z{}z1xX5YEjd)Tm>D~a8g9-acW=AIaQ-A@O0vYV@~T8j{KGQJd=QtmJ5()h$SY5ZQS zrpCaW9BN8j5nmKbJyT%5^Ob=k3&9Qfhcz!+Qy8Aicft$tIMt!w-SAx5HYRq`_Xfrm zB9@%~mQa5Q_2UCul5AlA#?0)P^sR8Z8~80kj*DOSP=;T580)s?b;xe5+txYxOQ&$Z zgY^e%ZmmC>Zv}VuI|Fu;gL_WTqwI~u7OpyaTz`)0S%glYJ{VlX2Kqepd-bkIC)mMS zOJmNIFzzzTUF!^qNT@U;eC+(vz)uDHUpB`^J|33J!+MrJR z9G?Q;lrj&zgAP3+o*s>^IL+DYee-#~(YvDMAODed_AyTnI_cEICZ@7&Ug%V_hmw2) z>EuqgtkEs2qU%?Vw-gx>^!Y12 zp0`f)LH}j|SHmZvqta{8K`AqO9&neAA{;a_h36^u?z1DK~hVjZN9{g(Df8n%B>h zm=D3U2ADDr@bjV#li@>=QO@SvepP8q`@q!)!MlgSv7O-9V)VwPk@WS@Knx!L(~ntQ zMzGVI$?m3lgx7v}8~TBcbN#59a{BI%O;8!LqBoBJ9zh>ca2Xti4XM+2ym>NoDvzn%BWI#akwWla9+5B|q1JW9PxM*1pHH8$M73Ue_ea6v$-1n)O`)K zjXV`zlqeq}{6KxWpcWiKH}l4jl#h^c5r4e9oVH3)oKAg7>PxzKhaBjvq(AU6V^cBrjFJ77yS)0I120nF0+x=m`LE<0 z)VwYP{_3CptPC!X&%2Ok^nbGO`sqG+jf^gjKLxHOp2qfap0nv9@FYo{HD@ta<|c|v zQeC-tqdxfYhW;I@><4c$<^AA|ku@%zPNU!IKj$P3_jJz>-fw8_ttyDi?r+Q3H}5M; zylQw_XMgc(A1(sFG$*eD(@F5mM}f7QFYRIJLzB?K-T06c?}$$&9_2jt`z)Pw^ZS1? zUz+I$ZKR;TK4W;6e(iSBzdR#LpTa4RANt|k#kWTO182X#zE3%D&W)urdOC1!fFE|T zChmR~+d=U_$%8(y6OR#HJPGWGFG+KLS~{^C__=VKEVy0bgB#Bb+*U-=XL@ks_x~u| zO#3!RK_9qnp>ODBkClMazXFDX2DWys>7$z&+&(JY{}p=qCGgNKjHN0V{}ptQx(560 z$H8&RzWToed-bC~-1g{|c-Zt-Xj*HL6ucqzu3dMe;1P*6A>z#~jwEi#?(Y8dT`5xrUZ~95Cv&{HAEUW12ewc0*Oi_79e)Il<-WP+nVI`1$r;JI zS!3wt_y6eJoA&#edtmWlC<}{XY)fk2qZME{z5-bI_qvV&7MU_&Q3))(y{@BqhMi#3 z0^|$4dv4Oz$u(EN-0(kmRc8tO7~N=B4e#>a!7t;R@VAS6z&3-7Y%>leenmUFai!7pU19ia(S%k9}B*= z&>xpqd_wp#wjX?H!5-`33%~z2@I|_~pLe8g%)-l~xiV<3tHA-M&3QvFlW(&<(G`l< zdw6!^|93QZ18^i3j(s_OY3_};fZ>FGV7Mld{>5UK=J@@;0Yl3RLh)EBb6&@KS-Q|~ z`^O<`d(i&+zHpDoHox8ODgH{E@u6n!Z?pHE&aeUTfcEQik6rbU^RrLJYuIN~YwuYn zkt>9=F20oW{TFh+|3CJ9e74Xm-+zvKN9}i58~10pugBjiJ#*%=3eL_NFeiaMa%OZu z{L!-`5AC?~)+3K9&IDSX1%KTIP0BvA*tO5R4n2#%`t34{T^iQ2QS2e>Ccl7SfPZ3b^p!s>1gj>KJCdS>i0uU!j4Ur2r(3N+YwU(1-eBJD`n-d_0qzB)ic$VRX=-KeIC0pIKoyQ+lmc&+Jcpf^Z zc%F1x@kQy+;v3QvblnPEq&J-Z61X}9943Djyc8Q=-<(FN;mEK$C*B-%`S$R>^dwzU zb$Na8=P1aOR-uS$>l_QQLwe7)_RSvS1)&Zxr&-#OqE?w)nlqCHDa-}KI?-~Z~J zS&5_X6b1@jd}IEu6|c`PT(R@^ko2wQd234JGm9dvg@J)D>VEc`E8APoa>ku7@P#w4 zTs82lk^H`9;LbB|Yb`iydZ6IoLiSN>AIy$BZ+oVEuya^8zXK0*zAb%w6I_r@r+eh& z(XXF1Wpww*e69mV-v%7tSTVsr-t1}q(ThBIzg;R|OD_~(IV?H}v3?=PD? zx+pMU4$*bf&IjLiU?av}Q@G>o$ljSl%>F%-hh-*bPQ5|?#DnDDXb2P@Tn!v{+&Sk6 zG-K>;f21G#fU)|Q#D8eUi5+6rC6U&PPL4b@`tHel_0AI|FFn!_7%VSBn#VY=ARGX_DN8Mngw@9WOCsq54@bgpwnV}jkMgCaPyGt82Prxa{B6FwXvCOT2Z z7^yoo68W{l_QBu&UCfK{*`DR0zOW|Z-trKe>p{=e&u;pAyyq#}>7tEp+VFqdOpMEV z_|Hyw#$)i&UZ>FT(Z}GUZ@@Z`Z$xn_Fwfb zujl$S*PrqyKIr*0|F9hyTo6eg!7k+Z{(1c3K65@xHa;;ioOxkR)ED6d{sEH@;$m$3 zlZQqgnlgX#-U811d7VDympqScoU;evzcUL5ER{`kpOb%E6x*Y05V9q{4}SLmN7*>` z!^dCX`X+dK^#}WQ+4lz;K3*QkpR<7PrU$TRxcI0#))9N%^M1j2Dqp z{01;S&%n6gpw1z^wXk660pQmQjOAlID?rXv;#Kkk`AZ9kSAkcXcooS=^_6#bJqqub z!5`n4c$FT`kXyw46kvD0yTJv`foRzF#f@j?{^IH6 zBOYk^lz;x;JKxURrObbVcy)MTXDznvQrZz-E2cU^TTbl6_??aT zqPqO`mAQD3+Xw3ClwG@OMDOyI!ZYSG_uFB7o0NW|wFYhU8H3yApnlpMz;|9BAEb}{ z!63J-w2Sw-{p{~s&Drm^9lO6OGhaFRGSQWY5wp4y`hwB1Oj$o`M!{S9PKmo-G;{5) z7c1QLqU__|deM7+v*D38#=FAhk$MlgH~waw&CPo8l^1)LiywXXBhRmF>C)qKYZ;UH z+%I$J4<6lTKcW|_p*TU=xCKjtC-gf-dqM1)*p)g>++I$+My8zp`r|d$I!7kFlG87A z{5DTVpUpGwo1H?=*(QJL4DQvg=Hi?5J9B=yoB!ek;voI`FO-)hgnUn2XMG+0*#(cp z+%@ZUlAG|CNlsedNuQG3xA=PD(M|Zy*hYANn$~ta)4u6d^iAXO_Ma&pugcwjR^{7&hMlfZvE4IxuJ%4VrNPXsctQ!-_jo%u6Jz#&}ALGv6g%BX7rj)`OS5$hkuy+vE<6YH>ck<=$gF^ zd9A(bALG%V*VZs-auR1i);vBXotO}7|Afx{uDU#4OpXlyT)yBH5L zfp|t|?uqdHF7%UaE`0TFh;i35ciqV7YRB2!iyqa@c$)a8+wF(O(~ZuCU2Ibi<7?zz z=j0e&3Ei^?zgvp?6gpk4_VZN18)+X~$1&qr?ZJ%asRt+j&%n$#Z+@8VgnwsX2Ausc zOH_f^p+Nlm@J#7!rF~-}to---`oA#0KcKI#KH>2qOIIE*TJW6ZMT1;k)JGpM`69CW zfeb%_CPJs+e+Ad7I-oJ;t?e(+9&$-Bh2rZ^kf$NVeHHty%81_=eqQ30K@am3_cS;X zZ>Sm`HvS!Wnc@wqPjWWTL;oV4dUOkNb?b@FwDX9GG4im1nC^M#;M5zS4(*Mdxj!p^ zB)=|ez+VSnk8<_~G&uJ}^bW(f$)(8J+{VE9e5h77md1y49Dw`mgCB50mW%QqWzU3@~7wnPWTJJ_!KdDYX-lUPkh90S-#?)bBBD^}j zOdTEUvD7z7XuRB|_geJ+g}_>Rb_HcNrXXPUOq=?kF|8l;o#`XAX3D`Yt)1=fV`=6z za6^54g!#|y>q+jj#Jq@!FS{BX(!1(wh&iY`+`F0hgzy;V)~_=lKRTUGo15j|9|yk_ zC;FDn8~rl(j^xXgACD(Flk4BOSG$rgf7t3QtDzqm`OZ4lzjx8=pM1mzn4bhNx9z&} z6@6FryhJ_HbCqAzkI(kJt-j|4>8!183#+yn#O|YSP7n@jO(8x0(+%YG0rqB1Gr{6r z3RvfF$4CxJkIa?IDHr&`$kv4e2yI))AzDr!6@`-mI zU@Y{b!{wd&{_mAf^{#ySsJtYi+e%^&B@aCqRuNyQa<8n4ctovVzc9Zd{R#HjRE6+= z#pp9*iXsP$-r?q3(Hd0vr|Z1LAal0+q!*lJBZfPzx^HN3TAcyT1aPj+FaJd^(u*+BCOj*^U+LqW zetdi54B>BId`oT%gcawhcyi?y6^y(b0Kz%xK;kJ+0wdW@WVh&+y+F9Nt-_o;;mzTC z)>k`-8Q-TIGVn_5dq&o-1}Cw{U=!4to?4GLY+Sy;S*AJDx7qT@#yI76+``4k#)~xv zz}&+{$#gF#hvas>3*&kpj9Y;5@%AI;o>`@M={j&x#5>*C`;Gs>J$+xob)|CWx#w*?p>p6io_w^t-{zftvtH%U$Qa63 zP}gOu51Ks-`P(P<-q+?puT3}h{(Gu}Z|3B*`Jmh8$GkS(*!%n3HczGe9_l)czYg^& zF(jTWxM$;MfrG{@8cMQHOZ+<8Vd*GIj4k_HGyH#a4*wTl9-Z0K)OSsFomY+jpciIWxGZD9@fchfR$mC#Np-}ZEaPvEM@UqrhB za)D6yIOyr+fXiP3KK@b;fBAd&HGcL3PZzOv)nHz%-Ncl^2OlD@X@d1j61uzY_vW0a zPUogcCco~h!sD^P1YCc`;&ih!^s;ybI?AuPuj762_>eOyKb{;C+1S!bT{=%}See<6 zxPp6~RqWAojYrSu3WlDcvCF7~Z!+}!3$+7mmT_I_qvvN-4&7E-TFlV%MwP>lKS}wc z)OCgGV_kF%J^R``&1=)8=T)kMZ@!h&<_fpX^Sm})dj6i%u9G>vP09wjTBH)3p)82L-nx@decZfP>&7J>AnGYoM$DZjPN|B+tV$1MHxwbTuU#grshw|L3!;29&YfkE@cDkq|WMY6aWu}hMQst~6 z$G~REfkR)%kHmf~e?2L52G_pV##&STA)Y9kd)MeiD$lX+X)Kw%h`>W@7~!Ax8-50V zcWKB;m!ofKPf9sCwnP^VvUlSd4zY(4)Qk@U!FY|bP8PwNG& zdH#Vq&ZCYIE1cGmYXYsK9}kk(NPpCE^rY5u&hII&=J)*5Tg$g|tq+CEyE*q>^E%MWeOW_7w{@ zfdsh(D~~Xxg|>hQny4*9p_2{K~Ld`~wd+@;7}M+{`5Zj`AGEp6gMJIrURt8aQ_2&bj@B{D3#?xyp>| zTB}icx>kS-rF&^B&^_lNTdLNUG#@5TqQ)xh^BW{fVx(*AHpY>;-kAREPd%P+c)C5; zG(S(=5eBDR&U;Msmm)rJSa-6d;Pdw%Bxo>s+J@DVOaQN5krGucyCEI2b_ZWV(^`m1k zS72{ipt-<1s}|k7?rrBRmMUnk{?bTu6|uUk4#Bf*LRE@E3*9Av(aM|sQ?1Ul82nm& zr4%_j8~$f(Y^R+%XTI($Cb=J-Fu^AgK~N)XBFjSP>$~BIpwU&ul@4@ z<=lFKa-?4^z`j6Pef9;>>f0p^tJOzn-tkp$0*)roCU@cvl} zUcLz)1V46r8-v1MF1`i3{JsUVi1qE1JN-lDUXfBR^V^G-n~qG_iT<39o-7_;2!CcU zZ|g)Zcj4!%b>^e)I`c`^No3#m-uc&?kGg9q%5yVoU5;Fj>|UL?c-@{Yzu2cg{-JU1 zD%S=u%NJ`S^$Z5PUKHz(Gf)gYT3U>aw>bajmj=>ezKa{}sg{mvby&)G_{z~iJ^d$j zJd9wY`a8x%KM!g=Jxd*mu}%Njzd!W-bKm^%_wQchduM&Ae>{z305kM0{oW8?)mwL5 z^)FU-wVK5fqubbfe5rIu=;~9*ty<}RJ;aTre}^g^c{o|=l3(S2MmljXlnxDE>*cQ< zZ}SI9k5abPACWPd55B(Bktu5TKLWS6zGUY+c0DWw-pL<^_e&1EyUe=|yj|2Qc!xUm zuk+w-Q#$ZwDqU+{F1)`|I`9U){4Tt|;Ca3SFLMD0-fcd3A5VdIHESS#S?rB52EQKJ zAij}{{)`;RhrUL+_GrfW$zDFqa~%6YDEi7L`t23o_f2`8?&#=F!dVm;Vm?|C!Fcp? z()vrJ>}N)Ik{pq&_UiS@{~Yj1PE`<_p$I$6d-ww+z+)A(y&M^>n6oo-*w@9FIiIwB z=noz6_zHa5h1dPa$+&d(0>+$gpuZ!h^?f;c4e=$>ajab%Ik8T0R%48Nvf)~sP;Nm= zjJdvabR2Y`2AxePo$1-n(`IN_J~!G&p2t{X7;o|}HO+$G+f(ke1>20~^vG?C+x@}l zS1y3tJNj_z#o2Le$%Vo%eEN(J$Ko5|?tgOLD!ZckPJdqiWm$iW{{EA^kdB`>iLp*& zB)ls-QJ%-U^y_zjVdu5$%olTQZ1gcMZO=j97z8bAUU?Ju8M>!$W^xZt_wmTbm7l&W zQo4^vMkt+rE%frcJTipz?@=c_eah^2&QJK|j((ng^+mJcXFlBhQSH0JZ6Caz+P(^} zeKDtf?*Wf^cLcx3d8hW}aQ}wxY2OeJURP$tm7n%yDBah-x0Fu%0$zT%egDjJRZ9D| z`q~%$1MORle&Ck}>c3)mB=WG?@Wx=X;Xm-tPL=%+Q(kI3YmXjI+WDZL9*QkJL>lnv z5np?>0Bzs{n*3-AuAWdE!O2njex>jO9$x0YUiaYeAoqS+__p$c&zF?$!__*agR7r- z`CVMCA^qbixca;gSF>o_>(GMNo)3+O@Kyd#K8%xTe0QPo@aB|wh2qP58BgiK_CuBEo~W!iZ(RUWwZ&AV)T>wfyK)qD$^+Tmel z!;B2Op0uulKCZxDDs}AIj!ako-un^S1pU`yyZvLw+IL5Oc&vTnN{99hHU!7_o7kbg z@ypwH7r+Mxe~xt}j9>o!ngi19_+`(Sw&RzB6L*{e<^j*}t>+J-^^hSsW`pAwJ)>}@ zuYNDaRfzi8kG8I!`u+RS2BcHJe?J=QX!aaN;ZS^B`!;RGCO7~N*DiGz>v|e%H~RX_ zqtBC>m)9p6-#z#e@KYE*tl#zL1K=Bwo&ulxT)gYIM|*a`ldO;1ITG+nZ?$po zU7O!GWBvW;he5cw5DWv-Q(=G)@a?twjAVl3;2`)#ZS=>fU&frG!nIjfq}Z%0m=ECl zactfnm~RLMkG=xF{`GwEJsoHiar$h)=LRV9|mo^If zhSyJ?-uF*exOyKx3EQNT3AeQQmix>Gc+l=G*m$XY8}N0YZ0V1&3-A}~B^T6XFNMEE zXM*7h%JAwZcD1(-x9-1Lhhq;me1WZ3zU2B|x}Ccg=fwt*j|2CnS+=b*>`QH|)3og~ zh05=>^Cv%c@wvRSmURzj-??xjTb-W=OXOokKUC!%+*D=) zr|Tze*;Hi0)ttvWS97%hs$xEIhrmf=d#P!T9dg!~t` zKG_MZ_!~D1{$~)L%x_HWwoc6g#!|Q}AInJQDu!8P2y-=5H>94_jXU ze9pqp8GgiA!ln^Po~;XFi*efU!3*BJcA%a7^De%1hNyH&{dw}}RqS2<_`W5>fDfHZ z>s6AaI*-BIW1@MA_ex819|-^P6z^~x{JU*E}bsxM`Ie>yU$ z$kJ+Idqz<7v^SoO}*4l0lVguCvuF%(a-y<8t zSOZVumx8T(hUE3wNb*X}v-u5Tk7_G0dxDYvwMyn__a7LAUozk6ed&ID?&Lp6|Chw9 z&t5VZV=hNr`ZD6umtn&VU%^=r5o~w??BTw1BNE`MoO2@NzY?Fy`cpA9Go5-_r%n`M zD+7k*Ylk-u4LEr8?9cKiNrR^KTe=~V+`S*&jM!F@4I1NEZomuc6dJzm~>x-?Mmg&$KE}k zmxcI}6n0JLQ~xsj{*SO`@rvo_=_IelnZ7ja=}LRW zU9<47d;H&)!T8?l`CCc$$^Ndj^wVF*9_sd!d|x`eH9*>RB2-ei6P$KtloV#L&d`b9 zkjA7=aL|S>(1G4JZuA!$i`XBv4Ot+Z3qI`~?Bctw(9+#m)H{CJr=t@BT|Ku1GHooA z0qN(;jw*e^IcI(5raw2wZca1Naic%hSg;@a@~!Y8JlMwGgn9pg-5I#5NVoQG)=^Za z=qH!+C*t%oa%NBHI~x0lYXkh!BQlwPC|?KnJF#7gh7O=7Y;*O9Z7F)hHdl|(H&3{_ z!~yzVw##L-D<2#CGGwxFp?lSD_g#U)7y5Km2gSh@1CW@Oj>%-_g&&Q$dyj$a}#4C zV{ixbQMPp1)BcM%e8=WvyOO+(UB1k3??+ zo{j{zwxj0sEb<=NzhYCI?-Va*Ke&kf)+7&}dic%t$e-A6S@$4s+o6npxt@dE{s7+C znA@13-YRg{o)Jh^uA>jK16KYiKH+v~&}&cpcdT#V`x(zJYy2RTDSzC?j_l&(3DOT_ zn#MypfyS39H*bvac184ke4XOpEKqM6)mJ+E2ibIk$_dj4lUUox|^6&pLb@XbmR=Pp`Iq zUV*2xu!#ol*Iu9A-aupTMETRFH}*bYn$<>!KW^%g9Z%mB)tdXe(f^~Ny%u$SiZHgIsJu-uQs$2c9`}p<1Jk`dT-K*!esXRa6_?^Y6SNe!}=|kTQ zBOmr0`oQ@P-8nwd{SLTwzLdVvW%XjtV14uB^dV)p4V%UOuyA7>UG)jZI?cl>kRuhq z6-TZ(&(8d;VhQ=tVT*|gWz&}smyde1zpQOosF8KS{xWEvEd!Zo^U^l^D_{LmUm4Z? zzH}aJ?_S=!@oCY6d6)_yr7J@yUaqe`}XoqT=zAU=_PeNc7*jcciG|0l|q zTvlIUTi7eO<^k_=@MrI7{}b4h{PEq}q^)dHl(8De4 zU-QaVS);&j>1Q2$RJ!=61Rs^qhVoT{i&5u#`(XIcH|Ux+AN|nx4SlfugWkQb`1<%_ zv{x(}7~_U$@F1`hpeN3Ad8ZQIsbQa=fp-ilwlNbpClEc|)z3$O?>KT>-!6xKZJzz( z2ILu}J|T}c4+#*fRPs&!SPs89`n8qgb!9#0Gu&ra7W}ooM;5GA-~0ah`Zr~MQcPa8 zN4#GS{J)rb@i|HXWvBXwziP|t_qQpbyf%0zf_;6V!SHhY!~a_$(Z$Z_LM9~MwPBAv3s0KR|V}pEBuC&KMGI0_b~suC4aY z-Eh|BWYf`i&KN!@n$Mg+zxJx=rXM&mOWy=2ZyDvGiyaG)S829P{7$w3hu$N1M;@h5&iG|17f%L45E3nbg`3nXm}4t%IP(WhTIg)WjX(YMiU-^P~kHnxPfmxj2) zTxpG+mBDCN=;7VH=*0euxWUKpE!n&Bre(w|F!#UCoNXm@?3MVubWLNOlHX3&05kYq zIVmlw{p1Vr$y)X_JP3?q8G9D;tNG)17>A`(uXTUdxWD-8T)Oh5;^b3|Z>#ncCl~R% z`i0^ow9LMpbnJG{l&?#{4P7J{X2>!lR>^v z(@fV7`Z@Ay-m0{Y?3(^q6Ly?SZ`#3ojc-;*)Lg~ICHnj6F3m4)58!+DjonWg(~@Qa z$I{NOSaSk=9UPq2zVU zdvYi@7Fx1<8!$-j+cT0Cs{y;NJ)`?JPLg=2-hN`7A*PBbjE&DlFppyG` zY&*4i`>}tAy0f6G{LGMrTfVl`J!RCS*b6FuH1d*d|zLPFGqPF?(=r^ywR@?QmetU5`aHGGs&I2E!G3TB>WDo4TVUh9Z-_=`zTlRk3|n|S^uKoBwo$zL&~EMhyHj+WVQmbpo{gac8GTk zzAJC;rCGw=x{BWw!(Z6rXuIz$Ypzx-Z5Pe_(^2?y}Q zr(GH5@k8o*O@usx>6gd~l|Ny!*-(z(sxenaH-7}bCi=P%g)xy$-f^v~}!U)0!~13pJZrbbH^m-h(om2-+M{;RGpW{o1;;-pzyS!-oc zak3N{Zu_T*F%G^R)jo^()xmCbj=B7v-hQrk?nfxIs6Cy&4cPNB#ap^Om>;A)YGVa$ z$mi_WFFe`5cJ1Z)VM@Ei2OohZRgUobRodvCZ+SWta`d}-=y##C0s5VVpV;rE6|6O) zXAP-9@0b&4PGIAK?)vthTAL*J5d9DP3U*LzJ9e#o&a&nT?AUGhNycdYu05rprq7Va z!g3!rSM1pJj3c$ksz3GIc9r?#IS$Q8##B5A{h}-AzH$lnOW;ymh;$QZIW#zJvy<-F zzx9rFRx6vzAGBw-oT~gnNwR}B>@%V2A;e8n`MNAUMMg(2r7tvIRNPsTY$IQp2~@vJ zU$)cEE!bHXeZkDt`>HPl=}*?P%CHGsCHw3sYcp=g$4PN|m8bHK68l?4S#faHhJNPd z{oB6-r##!SY5OJ7O4h<`-!KMOGH!NkcJ@`cKJlPweuXi#v(n%nlu`W*ZF-sKE$E8ad*;>$&7}u; zj(>snj1iyZMBC8O-oH+^(Phmi9z?&dtZi=p0(NEat-iN)7L16_2PVO;y&~wYlPye@ zCCO%BE^y(ktPDE1Al|+Gj`3cwUI>cXm79Nz@08lgL9Ru`9uOb4-scPabIn76*5M7$No`^O>E&B*AWT+T9}Jn?kf5@bL0 zt@`dc=g|L>I;X7mO8j>zD_CUaMg}{2Vr6M{VI{H6VjCGlf$gowp!toF#3Qe^hd4)KqGW}ezh;pmAB1DAr-Ub)J>|?_b14J= zCfd)S9BH1s)l1#5@%(JjWXUbq4ql6bkM4Bd^skX{ldG8tj1n za!p$GAb7;1J?YmWXiv7{O3w4VD?l7QWYq#>t|Lp+tIJup(VQm^O$rWOee^%V(q5~T zz0e)9x4UbCEx&ah@|Ln%s~lO^s(u5}5rZjr;=c3+$;>sqUjb>GBC#g%ofuB>aVa%5er z<~D-WlXZSLKHf=WHKI&iUZ*)@q7B& z%Ky@SIKJ+}5idn1xjbph>6dZ4JQ=5S$+#O;KQd0wDKd_|%cG-9FD1qdeJ1*u1ub^M z6VkgJ+lJ$ldxZ2@4KaPPdZtni_`Af$=zI;@DkEO$!H*M{^P#(YPQrWR@4}CXHU4tw zEjP_HXBDSM#}mhN&|joS=kPnY;;QIcVm1=DaaCC$yE=fs6fsY$4?y?N8fOk;(j@<| z{UE=xJ{d`3JK5vWCS@HBf}4}Tco+G#ew@SeiG`-Q3!Ngq5$@(>_Ts8m%dcPuUmfj;|>o5s9(0HgVe8jLp&#V{zvyY&bN8Uh7;=} zmS?UCQy=AccuZ_&d|(cj5IpNmvVyf6l@mt~F^n}PuPFNS9Q65fz0#Z3&F6e%twB5Y z!n}-1Y}pTeS9>$nF`eJJ-Xz|A3#ClQ%5+wM({)9gZ&2I{ynZlHX=6 zIS*Tg@|1reoJ`P1?GHpO9iD);)i%9b0Q{oA@ZzgpXaz3?lvT;One*_~DMQ|2)0m6A z+GT2|MunGmZ$~EbtzE~GO)r#Y?V}d|kGcKU(BE%<{Oy0gcTemw@Y|sNXB?(HD+`J9 zxV#!&K=BAEBmV;Z`PcMkj98c#>d!cE$M`Nzy0D`CVXhEYkSoAt zxO&0Wd9HI@`!xrA(uvPB|GUn3nqKfjt_?3lLh zLSx$R?&;sNe$Tz`n8tj_8`H|^k3aQ{KWDx>a7}Th;LnI8FX-RWdC9wx53)F zkUJ%ZOD&yw=Q$Qk!e^RwzftJ%qb3&4D`S?Zd!)^I%C0U5Q2 zH5_QI(5~S${}6a{u`N)41+pkWjFJHBMgiFxm={~$$x6r8@IyCmJR92_`K3=q&^z+D zFGrS$N5QLW2XOGB4jkBj{r;JnkE`DJNa8J^f8>9SdvL;D!RFXl)BH_*8Mn%}G2-lv z8>IN-BZ+50{L6Cf2iz~)FaF<3zYPCB(rx~)IQh@Fkj`1Pt4RMXWv$_|v^Q-?^Z>q+ zN4^8@k-Z6UruptqXrF(7U}}5>@r9>j>N|}wlH*^3){3P+jd1i->5QU3@oNH_^K?aI z*PlFhMTWZjIs0u9PXqUb=xw!)htcmJyd2yW16w}&a$5oN0ee+}`VpK9R_R#z&?xKl zHcrg}#>9^W?`@ksoc8QNlN6^tuxW7zmxtgrPHr_oPH%{=(uPF>msX^PQPA4`oq+5DOXH;%)%3* z`Ph#>OTW_3t!9xEJLOiMZC}vGe*>;wpuZi-;{5mM^RATrmH5dv>pNX`%wvyb{&3EQ zg$^n@A8T%#$QpogZEKywnAe;8Z$p+dmfQOL-`#OZ3g2csw%kJT6!PwEA54AljFi0S zkH@1is3P&D!s21Vi+4|NGfktiqA3O1A zZGLP*%1@rj;@dEJJbKoz+PI{yNcQc!EZzU^G1+p~RsC+Zo!`#yoy{6eph0KzEimZ~ zkC^n9di+CknUgiJFZ7XNJyUz39VR*>;%OgrXledu4$ZIM_+gs+iI-=QlV=Ti z3_6c&iJD^-V2@N>gvyuxI$7G=yT=blYJJ-&%Sh(F>%=qq(N71qK`{>F*BN*Mx<+;n zJ8I$EW#DDmbT`ARG595h+<|wK2E7{@&pm0#q1bh-Q8@CV)jaFihrgw7kQXcXb&JXJ!uLQ64*@3Pl|2NGu8(2S?Dp>5gSj6#<7hjDcmKSrN$%^N7 z5?q(%nET72*Rs*h{8;0d^;@Dp;1PFk)C?azIQKSYo5n=^DmA_|zd{=|CSHA&#p_J9 znK9-K+PYOTaIzyKiN(#eU)SB}YyMU0irN#hGUvUFId9Y?8$E z@Y87bC-nOtrI!DTVXmx1cEDp=e_~BySo6{I4lJHb9jrb9pTenUyU~28?K<#0Rk|v& zV`?7{?=mJF?L}8*e-A#BoaICwow=v|K5f@Co=uE2LyO!)S9}NF_tr7qOUC8m=i2@+ zTQ*hZ9o}Tx>WR~1s`YDX>o!T=OAqat>G0BoS#~XHU3uMO&2e;+}LC=BSBs1|} znCsPjjmp8s9iQG`zbn($mBfNNhcGi0u5I8Qzkpp8BTJI`XNx&st9X54I<~6tvhIpq z%QrcF8j8MwjAI^BnEL%+&@L~{wt;#Smq2Nvj~Z+^%rgpWk-N3@nP@`uJ`ZNmfj2ID zxLT@ti;GYHdk2ydW?4GVi9HI>$Fh9++ z=Z*xs6~|pR$?2@A)r5lfT$Mcc+!4JK58Sq!wn&!VVVbo+unk#i@b~%`>||OKZ0_P0 z8hDdu)g}39h_&L?+qbU|c>QOisb0o?CylYH#PpwyrZx-aiiXFUE2R5JzI(j*fv3)h zm!#i#W9@5U2S2j!T3Y74cnn&48|tpAhNJDC(>;Fiar*x zKI{9D1H|ZU*8VEKXD*l9B%dVmCBx8l*wS^lL2-&?tFHz(iYF`E$~tVxanhyNAalAk z{>2%mg#+bJJildA;%$fby>_h!*P`PwqGR$cgeIP3?^XNTk-{qYq=PiksD5{{@4ORR z%+psynsYfHsTf$V=@>1+k=4-o!JK2I3wNfVa3t#%RI)>!2%Of5PeYEJiJCV`K%igPox1q5U(2d3+`5g&f{T{(4Lz|Ns;5`GpD{m+5R1BzhXuH3y*SKw! z|8)%B=) zYd`Am4?9l4lj3jfPiw~~>*MtO*;3XVz~hVP_9rN3Coya^w$A@iZNH87N1mO=!I$+9 z8wM@VKca{Ag2CHM1uic%Kg~*^4?jHc^yDq*zQxdrV3S=38FtFEp9t5IIo7wa+B9b` zLY4w^dv%2R9Up$##n^Xa;|R_~#yyF>w3ab3fgT*Uc|uJU|Bvh}s$1|#M&$Wo3uz4S z#}=|W46qfX#1`sHxAVgO*g_FEmQaLPLVnt`bF12GqH)eK%-i7dueZmIK50icRli)5 z(l71kJ>PTbM6{wmk6y;JhU=fdcwdG38d6meT8t5z!-bldjrH6xsqgivDk!jZ)*UfwE zv1Z1|8%A;-L?!1z$fmw1&umcMeppL-G!GXp9N7QJXO~}(5~Ei9>W{B-`jD~yGB>lv zeSX+S`u3E?5<#mIkAO$@jpD6Xz2ZUk1{t&0($|AwOLw`@9=eL157Z5I=L4?JpU?a` zUgYpp1vVM+);w%7=xZ(Z-E?d(@O(aFk>&_C4c*zMl{;y6Zpj$p)h~KyuT{&u&5s;E z_+S5Urlj?)GxI9D&Wu`Gvbp5!=hhdWUDl#`mFlX%ZW2fK*f||OdYb!Ra@gASTFoyV z``r(YIAhMOFWb3ktJ#`nV;g^mblXnmEHin>-2Rj)cjm28eZ$yShD@h{6sUuU**CMmYVhm?-qGS(^olvx#s z7L)#f(yv2jB;C-CSfZq`mh(029AaxQYM6r==3tt8*fi!XN{cNtg~CTU_CUp|6h6v- zRNE|l_veS)wykyA_SbG5ns>w&MhcOa&A`H%x4A!t-uBnj%N%}}XaD$&@`H=Bq+1;A za$vnl>EPnOoc!xdt7Bg+Q95I!SKch%-@x@V;81%8@IPZRbBv^9u-48B&Ot8oD;dGdH*2vxKj3s$nFb0)rL#P3r}&{ z_b7Fj%Pw*CC$aT1J_*KL&ewF>1Wh>oJ3{I7*Y}PUZ$vMRXZ;72n3)7&k@Ad4BmJC=K}(v~F*aPPwFQF@v0=_3Iv7lT_2E^(GoJfQt{N`Y zueJw8d(d5ctaQCVcQ)&_y$9WPy0O0+sP}T^7hf`8cuO*9XV#wWhMA7iY`W0 zI&yqYkL3Ehl=T4L4$}9tp^070YloXX@!70xXgx&hPV{N)c6h?8cZNex_foI=Z6vUl z3lEvdFnnGYlKx-hjopqd6B;x4BZ=paDeb!2=3(UjHTR;ipLu1vH1sK4upP)7c-iMC) zKCtTcMs)6Ed=4@yFKq4lvir1YOyCTn_Ym=Zv@OEmu>naPV)` zZPUj&G<}uQfoYeM&Nwxkc6@Vpp3>(y{rL&*Y2zvL9mhudalJ!!y}~y(eUFnqLg~oy z1701Ub?O+R^!p-(Bb@YI=CC6#GL&8&DIDUZcRA?+($@)B!ohwn@xP11yOj>S^?b9E z`)@$w^ZAYV`JaBPCG7#;#pKr(n;MnEtvc$^knZZt8cd7JeAR$+U9wK96!FA zM9AtedXIi$d2TcKh%uKJ4>LzgCXgZW?{@R7lP}cg_#XQWF@YE^_idU7VrP*2k<8Ip<(1{Zbpv&JX|(Uu{6uMC z$6M&JF5LGD?zbX^c|G_ZroexK@*O!ct4DGK9i4XMMwg+ZPXz{*tA4nNe%L}kNcYyC z*B`0#BM%NkpP2mx(V;%rJb1E5v-n3h()j6pBiJi|JuV&Gh5gfl9X)(MXCW!y?jP~Y z*zA4d)iYW73Xlh5Ytan?)iLyHuOB?yGV`g)-glI5`|Cs&{l#|IOY+( z*IOH$r7fL%qjEIgi=!7>+dc2KUtvw6zc0Kxh5(y`;}5TWc<^}b2&Uu}?oSdg_eme_ z{rDem`Jvxm1Uq0MYc9v*u3g&0H_)5vXrt=1sjvq3<{r%@B+OkGC@2bF!eFi@zCeYyATO8W*YB=9Y zX*Jk@g#!=HgV08dK4gynp)v18-pRkp!I{pIwd#iskW_xy&QN-6wP<}aj zLJWD4P&=4!Slc2xYNF4!nA;@V;(L;juH0KmKS=Iv^U0&}De?{)YqD_RJ2ouC@yndY zJVJYuXm9Jh#IWY#9uHnu{$)r(m7ftw`sLltDeLvY7mz*1>|d<3yrOnUW`|5U#To7bK+;y38~`OwaM+NAp$mwx6`rhM+~ zdw7f(LC2&Isoh?mO27B_x#*)4J5L9E&9_nM^7?KI{j2j5oVpyl#|rA->DIr1`q_&) zp#BBaFTXZ@vw-?l_CDzU#4snOeJ8&DFY_$_8lCIhkxgtk?7Ffg#j}eW6Tsky?X_L* zc#-YcI?ia{Lw0Smjm;s(cKcngDji<~}g3M90_7-A(QpIl?_FA0*?a*-8p0B-y zb+Y`S*f2Q{@&Ij$fltAHZ4q`2XiWVd{QF0a2U+`2Sx<1D6K%vFVua=OFuL9f_Cj=o z(k869XJ*4re1PjOO>e2n?wPuS`xA^&hgn~&!EV_oJAGzaLn1V~Nqt_$x=_7c7b<9) z!M;H0aWka_1iq!i~f!7Zfwi}rIo{T!iQHzf-+<;Y3E%%@*p)PT3n5B)b_!{Z&osgE@h8(!KujOm8RI*@SXQtj`qjxaQM#J#P*~|1H?qS^D*LS zus%N?8hMxBvHZrQx83yT(F(@nJ9w{hWXF`es1)s_#A`We3x_&W1m2ypV$uoQ4=ce_he>Z*(ccg3@wjjuCv6>BEsvx-b$I0~ zRgl($+lU)>DPgr`lZQ>tE4hJKsUmk9Y8H2mQ;L zCokxH6WL}5q*I=I?un&S@lBXMW)E9~-3RE}WcSZx907OYBP(xHY=TSazvt0azQONa zer>TE zxVw|JW66;h?YeT1e7-fj%Q#~5iY#5dhWy)T4m1w z308NwxL5+Mvc_Ir0sgC?f8w+3)w>noEF&AiWkiLfFFN&~_XC5AlXTV}1@k3fMSAcb1Ornsrh1GIR?)$0yd>cvUI- zA$z4iq#w4a5MT|FNava@dOpa-m9w|N${j2N?=};l~pp>%Q}nrKh)}r!W@p@y-QLqixdR1$P2n zMSBu;-(lCq+%w71mqdeBw*VhIO}OO|{4d_7%{M_CejeQnUCy_38Lswt)S=6;rOWv) zUFzLJcvL!@rO6E9n@Klf&eRJn3MYa?dYg16@k9bRG`A{3R}3N-wRe9Ea(D-QQn`43 zkMgUH9kdae-_uFEw)3o*RBEr z?i~?lU0HVL9jx{2(^?O-#av*we6=3E5t*fNMm)({cjC9ieMDYKW~wi|_@f`tm-}3K zdBT+uetEgir4zk7lFXQr4=ub6zb{Jm&h2z%)pU3v6Fi@!E#p5Cc|7x>yLwI{vvfah z@%SFas$tE(TC$3EYwT}TY|x{~oEM>mm6jILs=M6!p;Kg3nx%!6E-mQY(f`btB05lg zCG_X$#iM#Gf7=*l?wmw&Yru2*z-O%;j-+26aAbQfds(b(9|?{gh!kq?Mr!}woN^w3 z)^o$qcsq7Y@w?XWrK8268|}Mk1E&u$2D2tN8Q+g)Vt+J1o5wV+Y5n=h#Z^7pe-op> zI>xdN4c}klo-?Z_58}w2D|7(5GX_vb${h?>C-Ol^{vY)=do_)?h zJHFN@=iD(Z{zU(ncEoM79nb25c05~srQ(5x2aIPy6KO63Zu1HJH970FmU&TZqjcnm z;=#&3);h25D}_(sXD6Gt_*UbYH~+o@npB=8hbCG3c$;)g=|&szt%2STe;hx)2jJxg zDYF_J=b32xO5_n`)V;rZVFX zK>O9y@gQ_h`CCj{b*aWnV5kDl8StCr!GBF32v@w0{;c7me1rVf+$X-!Bo`BBv}P)J zYcNUd!pYc=@fjxeQZ8$%AOERqFC8}_y3G))bRT0+1K-`poSS=WsjVjBtS9_{=WEC> zILa%DMF)%p#Ss#r4)pc&YOHA_oOK#aqBFP4)>{I4Or{0x3 zf0VLWN3-R!7CoTc27kFDg3(f6xm~_;zfL)|qM@JRr;JVUex8lWt)pDx|j- zi`Ga2^uND<>i47j(4Hq3tGJux0A_Yz+lp7*t31~8Xv zE_BNAkB;#C2JaI!jLFc1VobzngU0Up)Nz73US5$uD z5uTsqeI3^z@V-rXq3Ip)>R0g_xS#7QT=#Lo>#gQ{Y0+Z*$^WInY{-*6HuIy=V)hBV z$+KuY=IZtd;sncHltww;_(hy$>@)rG;evV4HQ$7on^v8j_a<}wqiN&N309S~)PF6q z9zEuncE+XsTw(mPtPV^1GIX-=6|C9OpH+{wOWvIDpkuX|snIXw~kZyN34>`>dzZL}wy_8g`Uk08qzW*)gb zu{M3=SlZA@TNaU?8Axw=g0{`%`E8TYUAYxMw!g36q&*Mdqh)laIcD38FH8k#`6j)E z@v}RBSN$K=_Bp<`w@J@INByeX{x)=&Lp~f>`R)2wjAt*m-@hV(JS8qgG7q1$EZVrm zWOd(zpL(neSyqX>MZR?+Ta-t6iDi(?ikRrhI~<$G1bqAMR;&zU@i1upor!#h+*e$- zCwj4mS0ZbXISFK0J2LMC{MCtkI(bJV`OZXi7RmWCtGi4YRPNB%M9LJM-OBIpD3kIh zYpp~3a^jTxMapH&Ij-+i{)NgWK6I1neHmRsW$oizhnAc*&NR30GwJiExw4*~(b)7+ zGdcU*yf^R3dhPOt=LU`3hCWpj7}R}`7$p;s_Y)qP*poG`v~j{m$VZ+<+Xjuy24~rU z?1pZW-B6vy{@6ga-7Au-??#xpMGuYZ$%0nK2Qpg}H!TPp+Q&TT>e9ws@~*nX%pIJ^ zxmbb0Ekn*dx@IWlJx1Qo4jIz$YcsT=n)^Adz5blCKl9KvJvC|OwCs4nbdwxJ-rGp; z4Gif{5Nml~mN{L=Z^s;y>@G6NQ@5Ms$*Cs!UY0rbUT8?mbLVQ-KNnc~_>ka`hAn1L zcm1w4*xZJ6*TS#w&Nj)e>rC=DrS$Q1;zilmX+s#RLrpRH>wxR_>Gac_{yyxwj((iV zS>{FT!JQr9TYQ>s$36yJrOYmXzm*BYpAbMwmo>f&SW;!1wt*A@BnefT1wB= zt-=2&8X6jE*aE+mGZqxv`a?~hckA}o>(!~cq)UXrY3LiHdZgd?B0q-ky(RhGoU!32@`reu_DSOso3umCI;M@oJ*$2AYU445xvG?^Xn?M2a_hl2%yL#qc z(%tgUmcJ>S=Pz}BLoWZ$BTh>Gxh+S5-`#uZ@SNcA^L7L9+9Ly$dbOiT6%E8Ook;@_NZ3?T;C3bxrAt zl2Iq>7;BLwUC5DtU|)?VLoOtveuq!`R_O`mx~O!T^ff+xS+M~(1{+Uo2{m?&b>#0Q zTb=R8#t7V4!n;!5;XCZ}ZTF8ytKmEU{$^`Cs1+Sz6T{{!d`XtFuVfXn)y1VVpJ8kV zt{W74Yj+v zE#3=Y=gkbddIs_?H=;a@VY!?e0q(Nks|kS&D;sX1zSlC%-a!#(93%F{(Qd}B%yQ@X zW}XFeHorfj{6V!Qs+bt>FvlMs%>2oOmItz$23a1+>h6Zl6)SM0<;g6| z1A|;1(7S)<9lU)SoXwpODBrDqyjVH1eO|1bYUc6>DeK}m^X8K-&fqDB&zw2k#c-R+ zc=yZ@Gx^=jmdn?EKYQdB#=cDKBlj}y4Q2d$EHJd?v2%~DY2|tNkYNpFjA>2Cow7hq z_bTk4?}Y|gIlneAs9{YYyXAG(AO=5lU(aCn5NOO@WAhH}&O-KohW5P^%C>%bzYgUz zy%QQj%+lda?*Z$0=wtlq*)5`tEd24acg<*gHp5K*4K#Hs>t~k_`^Ui}djo^JyU-Qa z28OldT#YR^kkfMdTy#xZa9B&_kl_tQyjOiifwbv7;eqv;T~>&m=IQTf=&_Nl(`%afthF@$R{S2oumt}L!HbizU4E*qIe%!FgoF>e~q zSz-Zm`d-Q&^z00)8=IiYcABtdvE@8^T#Cr`}fCt@)LiNR%0@wQ_wT0ueGA`wnB8@DYcqE&UO44Ykt_f z@h$A?OX_l*7_Jd>x&a!NoRBT&ThOm9Coj{+$xtla*a*|SZJOxGkrA3thbX_2JXMRz zr{%M@sx^b$T6201w%~#*B5xKj?j^vd+Fkkf6@^}zig_!$$KNpy3dSV`nHCOvU+J8Q z63-4dCPt(+#_Qe-ZYXB4T5!O%)?b@Z)BO zGw^A=b#O4GFcm-7G7dQXJG)2Yg}$vE5lq_O%Sw`U%%QZ$F6`lgI)}e~-r{sg!4Sn6 z8_(Xb>P6s9IFlY&<>+CpRdYhkl{t~e!@yV1cXh0xoFr~#<>3AQCOG7)<>9{^|CyRR z_T{p-d-?vlP4NUcgf6#IuJ#v-9<&!x@4asn=g-Oxjs_GNISDFB&bojoriFf}Fh{7&KRYia5ca;@+=+ z+-2*Dqrq zM*E7j$Dh3HM`!AvJ#^;q(D%=<7yGrUkt>eZbEep6&J?TSOfj=GytxQG+)e*=K;s%e z^sBx5k}0ZV_M!#Tjxs089DQ_?&K;Y*=&EV>l4w1n`)cqf9}$N(U7btz>|u^xdJk=t zERbE`W%7CQ;4W+5>0hr+rT0HWk8^n8w!-{?nTk9(Wq#%CNm%k+??ykJe*xZ7UeS3) zc4WNDLRMC10UKkVU0aw3jpsw-LGqPA<61M+x^QZ}a}|#qS?si@v`4(AKKm5y(0Xhi z{3-fuYB@n4{K&Hb@XrB$PcF;__SA2$@0)Wu_*DIuQ-9o7|7wfBetk72{jrWdab=72 z0r7a8@n^eiA&fI^ypJr-w{umEKSep_bT&9@;e9Nlggz>5Y$tui*2|-hZ2hRUw{7Mg zACtz-vCHwN;cO(<6Ko83%KsZ+S2?+@>CJ)g{^NnFQ1W}s2jZmVaW-`QzPx+1W@Og{X-jOh{76kSEWbtYtUYy~0*}QZ+A@}X;h8!+Q*t5L zR1RL@w{>3J?KbeAMm_p1<(uiOSLf+$N9j+rU-2_UkAWp-Lpfu+_)GacxFpl^fa!9+ zjZmMVe5ZeA^oalb_g-K9rHh-Fe7FJrKKx{*@P}8|VQ^3%nG~(poDSGt=6Of?B_o{x$v(~5BkcD*fedbkk2;XY9{mSHWDSCo!a{y`m|k3 znjzfT^|$n<+P*fqa~IbabF|ulFXnN#9sc!n%LAqC!L@kDR>_*icfL)2&YS_RJt5X$ zD+e#@I}1;`i{_5tc#p<-SLaz*NxY#-=JhqMUnqLc6m+3=m9c_ox$qD+e_xCI*Itsg z(%R-4>hSZ2@ap|}^mkXP{XlyyH)m+QZJo~ie1f?rWAD0om(5B(&w3_)B+_@*Ra};y zJha2pW!&)sUXEuw;{~yktsh}L8{C2uufFj%K32a!n5}2?%4Rc0wunKjxdfY5;8&*f zO46xo*OKkSZCquW229%>n25Jjl6)MP@{nuFSAKnves#wD0%$fq)`@Yd?i z{13l02Ur`HzqHeqS;-*JdF-Fj-oU?@$lgiSTQ}V5hY5HHf0%Bq`RC_^8uH+M3pcR9 zpEt(ZW|3ws@>r>HNxX zQ~V^}Lw_a~<>=@K;J(h;c{%*A`(^OgDAtIB zdHc^SXKq(Vx@fl;zdHL3?L3I=_VU!3wjRY&k$%{hM!S?I7@*O;B`Pnn|BT96hVJi` zxeZ=YnZg}BIi-?(q4ND_R@5eXB(wUSDNkiF9`D^p85Q)mg_pixhP-n6)sZ3ShwIE& zh=OegftVA>8@sX`*stR zUmbLTkBZ}0r*R;`c%gTW?~3DJ2R{4!>&ATCOd&2vv-~ECnV+}mdjuQYjiS4QBsa_-T^f10Ofc=PyUaQ#CMWX^t@H0Pd4rwve|av~JdHi774YG|de29Lc3V=pFY&v_ONrZL-)|Y#d?$8_C5MR5O+0w{DQWC3VGP9Qs(TInF&`acXI^ddg5KWA zPh~o1ot?nH<#)iaV=#UL_-*cFt>(8pYtAR#kuv*qQI)v^`<0z9p||Rpd8yTxmK^%D z>b*;L5y4aS;$xuBo)2&L5m^|2{OLmb`;^XJ&bhyx^LXm8|2S!GyULt%nIA?3O2dv{7Iwc}&csuEusD8^x%grGuYCM`Dv(LJ=uNRhf!&&; zDQ|4ONxr-SoIR%Um{0v!x_US|i9Q_A&!jQuQ<|lx@(lKTYu>Wm*go&4t3dZ4WI`Ca zS^@pcC#IxyKh1NNb8d3vDsW_`6O#+LUp$Y!C1Pc2Y&&&po`4P}|5VL^>iK?)`~iLM zI(cV(uS(ObZ=BcfUBq`)zwhR~r*ECEbK-A|w=q;d+8=-83&33F*fiUi&&RKia3(<{ zx$RQ+>M_SD09U)=6U7Tq8<(S_eR1n~;)VA7q@xHM88j|>mpxDZ8?u?@qB|^NEDFP0 zHSiYkY35cM(^5%U_}aGAbLO7DeG(lxaXokg{~e{^1;2(kFg%e_dt7tCPg74h^=J)O z=cBeWN6w|Zn}*}BL)rNCbsu7Eih<7#*=ESsRw|gVOI)Qn%k=20|8RbzzDo#)Ce(tC zbc{IrEgjfTo;+K>M)~W}r_#VZbJHoROEKX!XK$YhY&_R84-{NpneWqA8hfyh725S> z`pMQy9qm&!zczborkT?L`hF(-vGcjL$9E3-;h9;#e*MgmtKU1rel{CdcxGm#`4QgD zy7pP6RWCyZ&HPy8p+|nW_PCw{Jj?%c!^`J4Rv2_uowGX(y&stV4j3&>BG2X%!~F#9 z@0iV62>l@XbA4~S?>^l-_vyt8d$Pu3Q)aEIn6al5AD*u1w2gTB;?FkL-ZHkF-x$FL zc%k-m%x3-#zB=*evHsDtQTBuq#)AZQ`?H5Fe0zj{Yh&jZc=sfxJLl`@w+eY$MH*vW zv+NR;&@(i#Cl^^!Zv9-bd!*peU+>Ro?*}?3y7V#Yi>kPd&X{>ikL(wD!!;&Ni5?hS zd;HSnX2Vlk&4!&^JGh?Y677Y8J zefk0Vm|s5-ZkIt*qd1dA0>|IkxOrhGS=Wgml?qf9dwSheHqE)hX~s$cxR@ z?wy+Rd+fg0X9C0wiPNtdvjXf5Q5$sCeQ{D}X(}e7KDj z@!0pzZ#3-p(Y~}3jPWl+8>)XHa$_a*^$NW81Z&D;kvl8V?>n!a7=1Mm^ZN`$-P}SFF}rK+_rX@F|2c9Gkgx8Dkopi*5{oWV$-l`t)|XA z*KS#kO{)X>s&^G*gGp?8$G|_ndP{eUmIbe0PW~^xm7HXLx+@=e;Z3*i9K1<~+<~3- zdl%`SS5x?}9sDV#r>EOXf0unaNPkFvY%#&^M``1N#q$;y(FgcR%uUZpXCIH&0Ik0XIf5L!w%cdaCeM#>&>*UmiAS+{Ab5*)^zbkBzo}`sI!2Fc1qC2HTxIP-VnM32sGZx;zuXm#k!TKi@A$Z!2~E z%dpFL8^(P4Xph=!fc?*aU1hcb_i5_g$~dER^}$5Z(9@xrg(uLvtWNS2zhfO;P(H~gX=8}*r4x3c>vcin zz0mS4`0EbJ$!M4p;CxSfr8-*azi@|tg~KYm-+t~2-E@vAe}obEoeHZY{+Ue@0qW&Qmc*5B`C z{r$PX;MczO@avl&eR#;`=K@1td+y<;&G+0JNczSE5HG)9 z_v03iT|9B|9%w@SP>qaiKt|3U0!}K{$n}#n1i2p!H4wC z*U8&${o95%mEk*d4SjJN{zN}KSNvvf+HKvhR-3u6FaGl4-{Ak&OBthh9+oq#;Ww0V z3cS_?hIOxIY*Ag?;n~lI%%u|--?LcHhd$_?JBMd*dCY<9n#H$p|4w?(^DV&iF5hoa znTzmW&l%is4f0|wYwl^2w!f~`OllIwr_AG|EKRGN=sQFHUv9X=L zlMlwj*y~QfKiE2%Ln2F{!A|%}?0Kd<FF;auT77d5-!SKyeCrJ}8ebys)l*Gl*~8(+ zdrn6Rf5y0e4{&Uz?zQnWtJlh3k2w z&p9@0z5nv>Gp0xfQ6ABTe&xfLJ;Uss^GVLwLoVF>yWY9z6PL!3J8|j}?RO!IyFP99 zb{X07a+~t_R(m70wwgdT{Ux|I=!XF=jjhaY>{!z_f_?#?S_8)?w?#7f_HURCapswA zBZ`p`&YHNjb+~7LW#$E%SBD?Fp7Rb6fS>-K;USQFkeQSHoC#kf?6) zImlk>>$;P1fHlKdHNT8)G5YcQKgK5pISkHQy|woflqY;(BS`)YxYzSl_((BNKwpXM zPCI1^JF2k{I&-mBPp8UYj{6tnACqeu(*~PlT8^>j1I5QW^W!w|kf!q}k?E>Wy3u^r zEIS`?>$@6z8{g}BEcInvt@<*ozo_!79>#|oI`4Gy>$eLSC-Y5S0e&RF*9mQRfyZ9x z^HKQnMYnB>_;wZalnKmQA0HP24s@)isk6(W)7HDlgTL+MEavWmpwVY|H{Q)VzRomG z_)(xS6aNcz_~ce#yA~V?E|q;$W%FI*xS5R~bG~UDKM}he`L~+1#sczQ2$p~!7RK_6 z!os`si@`G5B(pCF%Z$eVWId9$`d|q+KF!==)q9*1cZW$ze~nFLEV=_4qMy{)!eNy& z7TC54Z(TEpbMKUu?43cs#L}W2HT=4|iTYGAYp@q*?jI-r%W0M;+J+SuCa_7$el+x( z#HFVEedsizVfplUykhAYy8rw+$3M5DhJ4sblz%66d;Krn{VAS*3@p;!_W{dO@S*%y zMYFy1i*$f4e2hE6*;9<|z0j*ia~>UZL90)A?SWS9H= zDtqd!{i(=gbl-9r@)w@YdZ=RYJK(Gc|Jt_89lq`ckM|7EYIqcR_(SxJAJX2FvrY2d zN|S8A41MEv`shLR^N^+^>SyXx{e5*_Mx77R@4zB^m+Cn=8yQbMD*N5a2zD9lcj(CS z4GF&=DMYtCJ#YW=P47V`3FJ-(V^KZr(|D=0eSxg*YZyNypR-5UVB@Q4@LCpqbJjHCQ)qck zygHt8UZtGJuAv-wPvsPFzJ(9(H`|*5#?O4mL-?V?ih1x%+zx_$pf2w zVzjP*%6!E{m!Y>FSZX#f+1qdj7wNmqO-`KY7fFviTGBWQdYb{w%=~2Jp^BWe%{#u1 zFUteSOL(Imo~~kin-4ARV=OMF4LZYl0b`VWTNf}seF!#qPVJZ@*pL^t9klsBi66>% zyY5Kj+USWo@c0-y*vvgV+A-o13rh^$IgakiK5qQ>Yj#Kf4ZDZ0oCM``V!Oqj zci9|hH$^vV9iW@>Ub@*L`ecA^2L1bVGlz$v`CD(8+4y<&pViIME~cBc{=d-8CT5_U z1(;g}`9=4f)5JbGXw9#G{nrQRy4BDa{jrQWN*nz|{QcxO{NDXI+60bDKf%67`gOMY z^E3%~=u5PR&|^&dfATAeJ^G@kyBe?dAhWs&|7%2K(d+CNDjmtJ9#GpJ9#MC$)C zo@Y7ze{9wt=>HaA?T0C{`|ExEf8GC4|0n<5-~W-_m6WrUKH9?d11{}_`5wQU?fvkk z@ACT{H~riE{vFo_uJv4xb49t6g{b}r9`qWXoC7;P}VKd(JETYU8UD+?cO=uN-c>*1o`Zrwmx zXWVkU?@w}u_4#4_{@W`?qN9HaS`4LiSKy1I_N3vnxq|&pJF$037JKo;6rU#DjZfpn zDjMmFPm}J8Rn*BoC#QWgd$jf;J8ZlzP^eha3G|lsM4)h`;`8N_jvgW2$tRvfV%)0Z zp+!GDv;8-3oGI8IJ5xYhjM1z;RfcCYRGyvvW>s$O@n!X)&4M%cY_KtR8u4rJH>fnk zO22|V%=C%$q)O(0g1riRQI&D*McS)xzvJ7NCOCa&=Uwz0en?4cj|3L0XK77~bj^1) zzHAR<+VU!=6Jv`05BtugY^1FAj0nCDk-jp*oIfNV8hx*FMH3_6ch(tVJO}WZ7JS}X zi*(;H#MIltx*9Uw`tghbw|XAquC>TUs<=sGF48xTr1XvB$K=EgQhdM7tkz}c24##gTP_&CNuwJ$s^(u^LbSU%`=k=-8! zR^68Z7xBv`vu0>%#`7Co^1oSo6ZpETGXMYFd$V<;Wf9O8vUQ;awN9ZW1Dc!Mw5&>% zDh{AoyFl?Lb)(Qi(xe*%B$w7Hw$3E96u40&)}oC%)6haGREL)8j1D-x_a^B=KwEx} zHd@I4{W<6RO}+`KGV}lC^~&qs`~9BhEYEqK=RDgv2bw9f{faEs`C8eOzs1r_#M;=3 zf2d!2*G<3B8*T1K^&himDwd=93gRiux)qE`+27O`j7bSb|9#-w&LKQojy{U*Kd%#d zk3vtrr548%B6F~j-4$gwR>hP~S4=qMG_ zxxo0Mw?vC31?0~)#QB5#rZ{{Cblwe}XF}&&q4P=5`KskFY+7wH_ifFX)3_BnUjUsy z-;`02^$G;$&nLmVP=6f`wbHfy$%Ye>AGg~=BR(@}v2gP@y zPvPn7{}-PxcqyP2-w`wDb^du9RkMwUnK?m9c#TaT|pXODG5W8GtwhmgsgvEjy*r^@&* zSyz>lu}S<{$=qq5!8FYub%mkJ(rjoNS`NYcX=pdkqaVNBWwaZd;7C zm%d9Sv@QRR_Wm5kKbduw z&Z*06-HU%>C;pobc)E)J=b`ieW{l4RuUxdk(N_MqRnTr7?bcDx57j1qj(Ymv!JJ0H zX9v0-_bl~xb-w2dyL;3c%RRH zloISh()GV@ctUTXI#5@@4xHNJL)Up z{cQKXH;mbBK{FAVxBo7|B+X zwQm72lGVgWCKDrBK#XLM$$a_A<$E?gu{>)N=Muh5Omo|O_Lt3pZqzT$H8Swh82DIa z*h4|TG~Wg1q30oAb(cm7I1#-?7^h^P{JEm76nH6w2Fv)z4p>};URRi-bt+3*AZUau>2zbC?82tC(jCgDe7nmPRB)R)cTZ${oZSCm}y5 z)7t=oF97}tza7DYhe7cC z{%0RPV|e&~48U(;OflMMfQ|>%!|wYoqJEBUT={CXN5ElYgGYp3~CMnY?~pI@QagQF{FOErMwWdYg! zgz(-H?Og*-Dyd^K{`=Y%)7uPQ{I#IJ9oB+*UVpjYkM)RsDXay9`w~su(BBu6XlDMD z*Qb4J!G4GqQmi?m4dK55I$D)Ot_FA%F6;Te8M|F;bT$9%`B=Obd`P#w7`{0U9qRjX zzUvHG(MSXO#(dzEE13^}sbBs&rstFB*CcRV3r&pkXs`c0eYn7X&zujPs|fEu;Ei4W zK+*ow;ss=t*5x^zvnxKF$TJi8^VegSπ|FQC3c`dmi8{C;NQlbp@($vmIJ`!Teq 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 z zn$scM^Ic%eDkm`_xr%bK(wvdW6{LxV##iz5ihS9-e*;_^JJNa?bjpAG&S;apK3wI_ zUpd4%kH<%!nch>c9b4To4}RW1EH&Yat}bcxbjheZbP2XAOK&{l=?&U`=REWV-*n!8 z)nL8BcYkJn;gjeM{K1*^iY8S&T-^iT|~A2(r+L zuee`21es7<)p>T7zn#EmbO?EsHRup*!;m_pJhu+{D)QjhAsTz?#)nzSc+^J5I;2C= zX=XfxGrc@M8GfB1eX;!i0R~TB^!ap!-@h*^&h|evzs>p}2kP*(7s9^Q8KQe~)s733uTIWS9cm0E4*~Nb+V3IYD?#5LVqH^&wXQdzlh}`S zx_p>J3qmswUClg#CDirk+|;YoH7D)I6s7$b3v&!T)d8L>h~Wy~_5~F)*V6vY+%U-u zK9(cj>bi=VeqTd+%=$PTUfGyBi zcuHn0J_S6v=C5%$oqImXc**eTX?r)Y6dC>sc4#@W+l=hqt(c%>cQk9E3sM8Kkl#7k zcJPyu->(GhU{}QTpRr|~O4*IqcbV~>O?Do)KC_U5J`Ul0k!R_zo3JmhLaSGi6ZvZAd40KF z&sS6WEMH&lJg+aO`~%q1gR}wl!=IzPA0o4_Ve=2scH7za_Q!|eCpK0%n6`!AbPyRn zMEg{^uVKd}AH#v|hrqTB*cf}5p+0mTIQ|-+PJOz^L(VPgJHGCXg9>iVN81G4`S5sh zsAu~DC*Rmb^9;Otp6vDK3jVDA+z9$t1uZr3*}|lE1;=J&jJWn=Q$n=qsUuQ{B9Y`F zcxl=;{98(YQgAK-zM|pI^j`E*&vNF6ep>qD8hni5E!}s=;W_=%sPmmV*_{RP{xf9f zu6F$rwNKM7!N2#1v`g%x`tP0h7Z6XSjUpS8m3Nl9{V4UHI%iePY`=T9cQ)wX^~pbw z|JpH|GMleSbr?ShTAO*Rk>t8d*$;-YLJnv2V$;|MS23W+G)}exzv}>Y_#iNfwi++D z&y&lXQ~@#61K>~)3#U5JQ61>K1K@Z7dDYx3#Ur}m<$ic5UP@*~&uf`iVe#4qUMgF( zvT2WzW@X>vXLVRE{IYZidgVX21@sDb>vyE7j&1*eUa@flXyxidmrj2DBAfKG#-@Be z>?lvKoPs_v>%rfxKG}uryYOW6$#;Pvmp;*XZ1=KXynnwZ?eEm3co)3hj|}zDt`;Ce z@|UZy0hQ*+wI~_(`hM_$ko&6Yx^Lor~9%MjqA2*LQla68+OP4%kdTOL4z&%SC+C zQHH#nj~tb-ZiGEDD$!M4XW|o1eBz<~z`cn(;|GVE=%?-CYND^Ui)$Zq9ZSJSYlXVU z0V8$!@!CH#fERUWetntn;LHdYO*u`?Z)T}KX|7+ zwI=K&kCizu3^ar1YWVOleE%VMKWc5rnAAW6K9Fok%(Wrt8RG-}f^)jsyQ0Y@J2^XG zb-e#lFBVfuEJk|7^o>ZD&mERd!sjeQeniVUY)ZFhQ@ZFkD6i{A&Ln2t&~oU~1h1}# zcKH)`8oROvK8Z)-&qipuiSJjTE1t&ZDZs9DW3%=nvj-kV*Ib0IZ=R>U*!vI3R(!?j zf5p@vH#Tg)iItbMJn=!s9;xewn6XJ_jrIX_`vG*BY|_(S{6K5Y6+ck=E57)_(_Z{Q z`Q5ae{Z&r?63W_)Jvww9ZRc)iimfdABm71Gibh>G#{1>3?}z_AccbSh^U!s!J=zRT zo3Tg3(D(FJX1wazqnoftS7DD9Vvk;>u3?OUh=yug{us>8z?`(5CWa7c-f3e9Z_6GP zVUMCMzx2VRK7im6EGW%0>E|&wx+K{%d337h$w;yX*-(6=2Ri|7#wO(h<2j?9=?5Fh zgXT|rG(RNUun<1nN*o(M_Hsja)-BINw&02SMV;6&Y{&CXB9c6vwv@IVv>nfO7@e^~ zwqpVO{Gn?*u3|LvK>1Zmz2JdPC2I~ zU^_@FC9R!uJE*t4z?FStLz**wu(2Tpb5qBTG^7R^qh`*{5oBpNapuMN73X5RhkvYs zef*1hD~O96Tq;=@4(&&@d~-B=nII!pCOQ`epH(#03`aI45=_+%~*-P%2gu8EvYuntp;?lXRkd>X3)lFFm z##Kw0-=lWYjZJ%M)bZ7A=)cZ!$VM5mjy>CdX1rf(aWpTzo-tVY5sI(b_;3UL;7J;7e9>^Zy8+y7g9k+0T4d8NpN_E(ZzSikMZ-d_JkM?&xa+Kj%0 z{u3q=Bb3d-udhSq1dse~-6P220mf7(ur7jghWbm937t`(_wD*ljoJKxcS<$yrP%5J z1^slv5F6{(FTE5ahAw)(bACqG`u(C4<^ASmJAcLV5gCV9TmO^xpTY;f-^WwS&lB|L z-&6bUfln^H8UK45^$*p)51I8V+4B*5@FlwNTNKCXUY(zc(mu5QrUG3g`BrTG=t#GX z$bVGZRy*t|kN2M@emufH!0`MXo+~2c^G;q%ag?!CM zN8ukFyvEgwWAuJkC^=KIMw)3Wyg!tz|s`}dD5$t0j7~!|!dz{WTb0^C!5q~ahEOj(@}HyM8kt^J{t1Q zP&72MeuDCTM|pml4fD}VwnF`b1<=gKmMo1#v)KWfwd04#7NzMXxS)ZhmDLH8pqHr= z+3vvKC>8yHF-X6Re#q?C;hzU_a56HAe1ArJ3;JR{nhSA|_A=X(b-%n%G2;>0{+;@g zl6A?v`jq)zJFYN#!)?EJ!kZfD4L>c*@sp~UuKaY&g|T-O@Shs3R1R!{;}-GN^j=-ipFXFP`Yq?is#& z+JiA4Sv&{-^BIF@p^-)D+XF@x3ymzs!PglAU+G}Y_w&omo!}_`sjcP0(a4R5V=Fk? zXSKDo+<>QPZ+0^oawPfL{dBhcd>Py( zux^NcdMoROmhK=n6^_PR%edGBU}=S(3wh?!^A6;MwY#llTqa-7#q3SSW%ALN;jx^X z%vH|&Iu}j?52buCR^H6$}MmTe_@l_-;4}d~>0_ ze?5tbZ{WAd=9`$5>7!^afaYgrVE^TxEj_a5jCP~Tg~J@b44})0^dAHC(cE;!8JnPc z6Lh!rD(3UEzt}o6^y(b#)^~xeZ?qe0u>9OTMESN{%Zu-ypzII$$_~!A+->NW(SIHC zdp%okV`{SZI@hv?7$JKE(B~UW&wKhTZiCyD_1)fL&*3b+OuPPrr;{zd@0Fit1=nhM zbAT;BU-H*|0)8$zi9D@>ue;!DkPe!A@s~6Wa?8}u0x;y<|LY|62kW)`U;K`xf9|@! z6R3MAc|KKn+kV8>H&~YMuyrBJL3x`Jkmqs4BCgmtbXhm}%F3lr-10KewV_wvL{M$|3 zHO3`>vYr^tCN4eiz|Pks@aMQX3zl!0_gwIdo(z3uqtKWYehOEjKU938gzsyBUo;iZuH`-P zOwYOaHNu12o_BdN`r9!@%^TBvG3Jt(bz2izyCvA;#5^oN+vx`c+tbO)&+>o8xBp>( zTWud+7`{vH<!>ZdL6$$ko*Mo!P(-MVsG%F0DhQ#UgE?C;a@HHa9(2X zKkTt*wr01fM|Qfpv;)~f&gqZDO@Cya-_!RZS$2~lP`r&`NJ^iie@mzY{muJJ%dMDeazrmVi^$CLX zIGKL1_@n~uFJ|^*yd?R#j}hY@FDbi9RUZeaf~Gv|apq4WUpldamrbmRHX z0~_0>B{helfHTsbq23Rp3$#uqrgyNn!E@HKbT+gUOo|b{c`fVd(fO=%V66tRQ1r-t z`nmEwddxel(=`3H{FZj+g!s!jq;uFfb8HG@=Fcu((zn|wYF-$M_O3;r96+xRW8FiS z#&JW?9GeNVN#w~KYhgC@N8rEqSco@9xG-a+&^r$Sx=wo zf2PM*>4VDVEd>_E;FPYIocg5dpQ@i~*ApFt9_;rz_7~7~c_hr*-Z*3I*3P;8(LCsL zqm#d$&bYoU+uS>-s*CVoU5&W`gRfTjnbr`><+aVNj` z$H<=gws$+uwg#R%j}FX_0SEIH=kH@YRCfbYRXAA(Oanff%)G;~2ayXm##R8o3R_ke z9AB+i+5zIA2cdC0W0>aq#&Gh+vN)oyIWQ%_p}3FEg41|Tp=ZxsJRd@S<=a~NYmJzA zFxJNd&9PnUlU>;WE5Ah_QamNIK1^%Ey5>Q1#sE5q{cEnaoueH_R%av6o1uGQ#l=a@ zHN6UXK0kzv8(70Fi&$?Vxi93s6z@&hadGlI-W$$)pX9wp-qVa`Yh&Jw;kCK)UGE*lXE*3xBLcYePyYWF9 zpKmmAv#!W3TePoOMmM-;hc{?El=#2m)mpo7;2L7>@Iviszv3Ur9DCOEcO!?AFRiQ0 zv{iR(EeNy9QT(=t@j;cRcEmn4W=`7y)6U&~f|-9s9crT{hJ=hWo^tqR;NMR>lYY<` zqx`zf>^~@d(hZzVlwroCMKfSm{WVVCze{6T7JjGQ{~iMLH>TD55y;T&GVsrb2iZQ{lwU9jJ1%uZ8=I8 zEUqluy7N4_b$R<5WBiehRD(rT-nL+%O0 zKBAqrM2UIcpS6A~`DOpIqjvf_=lpSay*4|0@84%#zW4QAx5uzYk71AgdifX5eKvAI z)u~8U$07Jx#vO>P-Q-R*t)I%Oy`B4rg1mD30$YnLot3kF7@H*7(*Da8e7+$vWYfKr ze=p^KV)F*@te|ql^HD}Bs zOFJfOz1JtI$DC%306sFoUE5%sCXb!I)+tiEd)Znw$Z)!t;*)T%2~{cEe=3y(dVtgm|cH4mi3o~ z8GY7Y*8d#)b~0!a#D}l#zk_w3O}k^&I(xMI&IqqGUQu2#Ugn(MDv3zv1fjZg?+)sHhl#fJIm{AE05?tna+0j z*ZgzKiy2;|ZpQh0Hl=&%Re4@oUHwVXg?mzcd#OEe*wiZN!**yK{kS(@_Iu$F@5h{9 zRCjRr^p3&!T&?xmiI3NsUybd-%y0b)v@f5Quk+9fI2-8-^g^G-m)62q^(km@iuu1r zY-v3&^{*a`=2^zV@3r2P>P4a#ZBYHK>NogtXYV?>Czf8dr`S93Jne4U?A5d(TW#!@ zQv6lQdX`ewvz%UK=e%AhU2^Uk=BV{~5^L0tm5w_n+gEwfxhE@`SJ%4EhGn#)1R52I zZtRzV2fC9+yjV=kx7Hh4T|isvD|v1KbOk@&ORqZwZA7nj&4I6)mfx@}PC4{}-_3eZ zbi8>1`d(?)`1ITvygXJ|rFr#xk);M`C%S2Uocf_Yw$N75Z!Nz&Szp5W*9HE#z41%5 zxsbLRzDo`=YPY4EH6+(LdO7*lykF0Eh1B&W>Yz@}I(?#r`n1n1{Uhg|RCy}5g?)W3 z$cUwZWI=OWksdm9u|Cky0h$RfI(S}&p~GI$fwCL?dQ830B)R`u4=LGJoK;U>ZHyW9 zW6T)!r6bFn7q9i0g&Af&red`-_{x?t?1HIJbBTk@dZ4Cq;xY0nP1IG)Sx|lIFQBfe z)KR8)>jxD})zkjAa`a(ryyit>)$QJ36LX!uk?+2y{_9-v!PKGl3{w9$OAh{>{;NE* zrV$_9f?Vo;oior#^WDUSl$F`BM)GdTkS~w*;2#4ox|lYBRV*lco8LF})ASFzNDu#A zG^OpvFVmMMXxj`AgS7eXXS%m+;q{k1o9)MIvRSohhFXb@0|ar^>5lQt2I!n)#G#X@0Bbol39z9qN}IXrc|u zVMV!@Il{RtM6 zuIc`?no4XvdrmeGXIxvs-wnIH>Q~Vn>$6-R!aBXwwQ(5t-v)Hr>GK?Hc5uDJG-NOb zo?SscF7Yg4lYA~Ki>pxz-K_m zqZMPSTPp|GwC+x;ZpD`h-%5KL@S%;B&=@vZUAV17+5Qf;lzWRD^Cy2-?!y=Mx^ zw^`cQJ#!0*BQ-vqMQ&u)`SqLH!DL0!s@f@|0Xct0zZYsxe`ZyI#?o5nO+9NlSD~p8 z8WE#vPhtjo(^SOYLx$F5N^kPgdh|x|Y-w{%8;7v?%=77<$O88tpv`_EWrb z&pDr?XY_3FxjC$t5I?uop@;gN*r5?W9(=})^NjuZk6t~xH6UNw-}mRXe?LGjY&&}G z-(A$-pZ!z)@2|gpzRc-wPNcepGd8ULP8d*s+vH!ceX>)wO=120s-w+^)Zb5&3rp^2 zA!P;iSN)rml>e0tieQ7%=ttuS#f021@E+|XMv(s+&EJX-64*{Q{Lrf8GJU#q>3mt}(%<}ka(O1V<;&W##VfuSzcM=W#{vQ4l`#UPRyg+{+b!|-UZ<2fm z=NAuaypoN*Ra}7$RX!mj&8*Wj^ZCqQb}GI|@b2dCHOD4?N-vV-L$+*_-;R1;E+iZJ z=jeYr$=@~*_iLYSJ^LnArt&fWt7mPHwNVWp>&?qJ{@xzwulClt@{gJFd(R(jkPe%& z$-UEV`3&1`d+*DO!LogR|AQ+VekZR#`mp8i50>xC<}_D6yh<*AdD8eo`XgUr#zDje z4dnD2@O6p{KFl53*sJSrX>juB&!PG9_;Ixd{R_@VasF%1{n^DP&(?c?rrM&h;St)R zdvMdt{-{Wq&W+NXw2e#bJ-BK99$WoZ!t=`eNQPwhgE>mazd-}^|4$iTy`7@Z^_=&t zJ~t-WFI#`F{mO$5oYTa-c&uzEvc=f+0P8CbkQ*z@<#XPKc#XzD%n|fiFL6y|;Q8o7 zs$cdgx&EZ{q5IU&IHXVg_H*xg56)_hqN`(hDR-Bv&ll5PUTW`7a<$RRDh`b0W!kUL zIsDGc{LY^)0w zd&EF){nG4;11;E-y}X}-o(<4%@eT0Fu+)DevLclFp*Unj7svSWYmFY zhrRYmamB)+oXN);9<9k;JdxZZW9`b)k|~O7w;zhGXyi;~)>PeBa@q8gGbVb+_jtM0 zyJJye=~zb@GN4@RY2;=JWe`K>Yprd!mtIzh-j?vW8{Qw|?;YLSUv5DEg7$AaXUu;= ze9nsJFY(e&?71v{^5A)I1^b`pZy)Nt^%8kA=BV=T3H+9-tVGrqPd;~H{Jz9h>9r+# zzc^Z3$$Ol0?;FT%2kT7?{l}BfnrC9>S@R6{vId{&uf2)k@%xT|E52Cvy!?HiFS%^t z$;H^Hk~@p;Z!UkZc8!;|=|SkgdZ|stp33O2&b~h4Z=dbWu{r;9oU^c9e6ca$fBxU# zZ@HIQ_RRm!-#?kZ|H<68e5}*mfAD!*<=YOzm!9}#qdDKa*FPA0$NY32Ip`=l%lfGm zB**7#ANJTR?*x9~t&$zvw`vcjjj^1(*|C9@aVKx~JI-Z1A^Y1wInwbO^fSG5@svHW zJMKG3`5tTIrfZHC8>rta(N)E8&BQvDjI}GzS8hspvAT3GS~Z^c4BDr*X&py5_%)QP zJhObUv8^U&ol*NLF>o_u96RSpEQYO)dNJ%wwBt}nzHD0?{Md^ds~X3ASPQYG+NHHJr@$_PPQ7%sKClzI zHihUa`~BhQdNnltWPq;nGe7u=wL|+-(DQWCdHnJ><>#|ka1My^8#VZkg?G+8ncIAa z*=w~B+nQVd_5I}D^XrrBYnr$1W$0G6n?5d@5?EnoBR41(=PfNNvpVzJa&F$_J;c+!@ZTs_5X%B_Sbp6#_QL-oINnI zo97)6t#9^etubX&Ud4g_?wdGf_JjA%pX)pT@_+|K^9}SXH;eVI&f?G< z(^$?CZK@>JLZ=XRzO;nC?uI8;&t{%e?3`}+k#6|01b(!_57rfx zWkI*xp@Dj!wX0{at7oWpA|2gc3crrRFV(Xceyydhwbb<>b@kK>jf3?rfmh_Y_p7ei zs*Cdudi!*DPhD?v)}`qax@!CMHz$w6OH&uTboDHTm*#Kk>8TT52J3YF*(JIK`tu5P zKUyOQ-a#*v)c^}x?bLEF3Z?ER>F=IK8BM17#?Qi#dH(s;H z%cwob@64&sUsKHb@WtMV&r??kv0n+X-y-bEbmF~4Al};*ORJhme3u}eQ_OZ)`pf%d zV*HrCgBM58Kj}{;@5tE+a{P4(+L!Rk?@J(4FVRQEbPIj`;v%3PY#x6L+k~xS?Q(t* z{jB8gqVs7hX7djHPjIGu-CD|98;jq!hVry7V*7B~f(#V!K96_TmL}>@dAoUc)nZn>w`4%#9UOzuWcUj(#piRxUxg>TgkoV(D|dCn}(K z1?LV|cyC=morUbbDDh&o(=VJ>^C0i~Tf95O{a=d5HBZuKzXpP~By_E!2&-_+(cAK^Zo%O*0%8{hAqTT1(x_t{r6wNP`rru}Pa zm)iY2ZOWs~QE29#*LogP&N=OcEZ_fkK7MgW!r*n!H@4-Pbns7tH+!7>!%v)S@G~9$ zP404GA9@h~P+$CJ&--|_>R@wW_wKVhyPj_KXM@aaf{#U@a18A z=0Nz1tsece!)J%_e>~Vn{`<=BcWwXIIecCi-!>5bVvGN(!%qm~UmXblE8G924nH}J ze?A2s`Q4X@PcriRcMgAj82@AnypiAGw*505UUxMm$^SzG;ip*qbq;@J7{6s8{65?N z@eY4=7{7iXe2(S+MGn6pjQ`p|__MbD42LfWS6|0@nZFO0u_ApBJpf7Ib`4C5yZgumV5|JC7d4&z4-gfF)Ey$*j%7@s*1 zeyp$m4*!)f{*V7Lfc|^7{&fyt6vnp=g#UYs|Ej~6gz>Kqgr9BkOC5e$82|i0_>~s_ zcMe|`#y^;Gmt{FlP`hf?5;{fOK8uXFgyFn-HG_zH_3@9^ux`1J$fH(UHg z4qw%aUqbw+bDfmSd6zXc3vZrj_9CxRd7Raz-^OG{YRH>+>i0!AyLivew=3TJ7xpf! z@9HPsn;l7x_l#dzc%hB=zWUvyc<-7|RPW|~Wa2mT+?iindr|T&+g`=1F5a6*`vUP^ zkH1=@xbfjk?ET&QU-R*c@9*uei}$9cpjV^tH(Xx5JFVj77ae{}7(Y1$p8EGCJoGKI zeE&}zep?tnDg}O*>c1+7_TRO?*5S8@@k3JJssC)^vWqwyFus4Q!|x8`-(}t|5byTT z&(wdDt$&llKNQAyq`*`E=EQ8v$2%PUkud)C6nN_2mw0MKbzY?6V&E zd0YSI9R5dP{L`uNXA@H_{pLFSlVSWLDe$KKzp?HAl*2zA#&1iF-<-JJ(*JUYKN!YW zrNGnweF?>T$ls+7e%?-pKa@}b@)?Z{E*c6&55V1{oCsBO=0}I%rU0a|9!sxJA7Lh-;o-B zJTW`Hx)A-n!{Ix^_}5e5P5*aHF!Fn=!@n8E*A0X(w)Fd)!~ZUfe>w$zm$Ba$8v8TX z;r|%MKN7$fkL4b2f4oook0)-o`tvF9tMHkN-!=H-!F<8C6nN@Cp2+zN`hWNS%N@Qu zjIT<8r~b2vi=46KVEbA5n=q)6nI0wvzC4@I{e5mesT)@GphfpSaqfJ z-{D7v@uO1UssDK5VN3s7htCei9a?u{Dd&R zV<7xh7JrAsPY&Z>Pl4Yh{rj$!pIaUN$}qkz1s?isPOS9x-{G$gB zDh1xuf4i-Ju*1&^HqP>e|-}B72p5PE582E3*#50z*9f*gXP~Dhrcn5pO*sv zjPPRzRW}Wb?|;qVZw}+9rodDG@x*z{{}&zpmN0&DYCPi)+y0+8{DLrk)Ij({7GLY| zMPdAq)cCWB&6a;#9lj)tf0y~l{`B9_?@`VckKVa|lfy3y<2zE|cZvQt*!cGjhc64` zUr&Lj{xtT73lj`#FdIN*Moi3j7+?zt7TduET#VjDI9G zeskhimVcje_*G&2w$%9JiHk>?@!RDNUmnI+rN-m`ZTl~E_{uPTRSNtf_5TGMKMr>I z^4Z4|B$u+XB_@pVf?%l_-CZQ=luBJ;qMRQr>4N0 z{(slT4=+0WmN0&D3OxPaoH*<2zr$|}<42{y(|_!jjX!H0etQ@{Bn6)KvmgCxV}G|g z{O&ORUFPWe(|^3Us(S5|*M77~;HOypr4D~2j9--+PyAu~KiJ`)597;H4J}-)80ia)<8@ zI(&47#{YflUzGw+{reIdto#mk_{=cAY#{uDzW$#y`hR@!kT8BhYCQ3)um27|ER3I* z0>4Z0^D8U=uQ~jPFn;Pl_}C{*{^3Q39~s6^9teMx#s9?NM}_gDQsCj=@kCY@{_F1j zwGN*h#t%u2C;#jFe}~Ttvzgz+6I@Xttovp#0x?>iiRav1-5 z3cTrmyYK%U{>m`EE(Ly#=y$vC{~iA7F#hQj_+7%^WbM~nhrd3Ie_Ogw*E^UzA%hmH4vWp6Xo9qJN&FLzHA`; z28(~^Wncg2h4Bkg;7$Mk&G!F{!`~Rj&r5+f{V%rtf6d`<4&$c|gx_HCFFO1!Vf^G2 z_(hVR^HzR;;_wT?_)!DlhySI?AJsa1Q5ZiY1%8bgKUw>`)!|FR_;;DJ?N9%q-@ZhJ z@BbZsSs34u0#E&C6Hi$CeTT!Bh4HVaz*GO`#1mG2Zgu!Ch4FPM@YH`ivDw#uhyO|# zulvVR^q>5J<^NoV|5_OTNNW7q1nV!AfBKZeuL|S0rNA!|{ciH(e}^v*(#*hyPX> zKW`xXIg5YI;qMRQrw)X_@M4pHdC}pwgz=M8;7$MQegE(9+rs!!De$KMSK0b&9e#Tl zKV%^M4Hm!E;dh7e?{Yp_3i;oc*yroN!#@!uZ!yr&vM|Gq@MZU5&S{zqZ_(<$(aq<^JW|K>XUlVSWLDe$KMYi<8O{l^nito=IU@IMdZ=M99v!Qx+Y_>*D$)YSO1iSJtaz3A|-hVhdJ!tb;ApE&&M zVf?6p@Gn?=t;3%RRzn&U@JTW}a8f6n257sfxG0&n_1(e{6?!~Zdif21#d zpBw+1{$FL=|0#>#xAXp8`+)?Q)0j4&$p*;7$EE+4?Va_~=ZH|NGRx zDh1y3|D2Vd!497p#+RkQQ~%k-(7!a}hj)H%^nc&tAz}Q26nInraMt^hKR)B|!@~G^ zsqw^bcD>_k4nHD{pPB-{OZMlAtIYh@iw-}s7oW6Va`VCkcD>}4DlfcVa`U1E;q{U? zJ=(qH$=`?9OHN`RRd9by_W9_FN$fMKpXVK59m(-kh1XRt8Wyk7e$qy>PbRze0@iIt z*ms{`|5u{oW7X427fvbgF8Ojj=VaMEY<8XIH0>dpS8+h=Ikk6mF6B0`XDG39;W_QM z(LKW-(b;Y657K_qBAzMcj_3M^`j%5a#O`OzrVsT)Dh`}rpO4$$lYHNS+W#>7wX!R` z6>qTjF2a5`_Ij<*ISBgh5Z~!cvg`}fRuuDhc179>_8FNyu(s{~xeDwJ3Vwzb`xcFw zY4!=J-NR{j@ORh7KRjaFn0&s!Ywt$0-?Hy{3I(&hx4uCe7JWK?vWWJV^0)RT{T1zG z4;yENXC$L{^{Iu@$3`OPkZp(UiZ(^_j};kUU*g%o6)hH z&(HnW-R6AY%+e)K?STe+cEl&?OoS%ND2E28&3mTd*R#-2XE^D;HFM`=dM~eZcFjUB zvyQ#d*Nn+};nK9b(nhhb)!di(emu&d|8?9+?s%lL{io9|@rb?qPl-2bO9{ML$N4dw z_h0s~<;{Vhyr>O}y!5(UcvFb1k4JO6RDJs5tO)k~|$_ z?`v}VGcMNsSm_HD`{eLE@|AW}i z|K6}(eQLx%WV7d&{krq*If>cWH1EQ`=T2BVgM4;;1Nq#`US?+#MWE29qCL+Mu&_E7qzGoRNXKhLlSI4Cj zHonQ=oyi$AqQ}6!P?DLToL+M{+ZRA9n_6;xgR>U_~^zqBauOG2~U4Jib za(*qlc54rhtq*s8Ev`1(liD#T_=}h-))Q7ggu1T;%V;xAGO_p=9kb=(-dg zbh0*yGmK_tWmX;a;$P3kPJF?ar{DYX^gG@Ua^8vJo?Xa!A}hVB&^*i8Ry-R=e}i=d z`QqB=WV}zk*ouy_m+EjdB5x4vS4rbmRqa9`}?^UX&PpyUXFP?!|}3Cq;IAlBx3g z8=n+qbQ1aX@=4<#fBn6q`v$+Bh1c79f_yr?FD0M$C63#5uq$0Vr}nnf@#)v#`{UCZ zwZmUWSnBWvz4%Z+OKd-1QhELLvm`tY``-_DZ}}{;?c~|szuOzXSJz90VJ4$alO#`N8ug?ft^N{#EB`re8d*<`i~G zvCwK_gk8LzC5F=-QN>=YDrl1u@X*A`_$ihDAC#|HraehNO}WG#>nLX(u|_d|cb6Bd z)438l`^EKlj`0`0{XL|!o&s%>&0Z5|&qCUx*lO*yedCp4bjrJGLiJAe?%DQQ8eEjr z-uwLa>RbtHN$mfwJ%h~nx0gQY7sqQdbEefCV+=&B(D4#9I^|_`RMKwId{rTLTX8o~ zMkJH?DyuG|YuzS$*TbMbW1x&kgt1LVht3Phj%0Mq<~!V&SM-K?Y?vUon+$W-unO;=RLu=IDco_ zxhK=^jn{B?9%lu|=zChnPIW>3F z4X%!GZb)vmyN^v#uuE|(y6=6RJUa9sOSB74`*5>w?%Pq z7WZbH@dnlDw*v0Y(ETpC+@sO0{xA+#e{{c+ZMPrqOdxLO9B{_qKQ8bhZ#~BODXsXE zJ+WC;oVNm9VjVX?mndy0h(tT`hylh%qIFA%vkSOOZq1>MTT8gFCKicSaURVR_I{;U z?SDZJcb|mr*wX!0W4%m{v^jg9%I&7yH}LDCzsf1$?{SeBG8U^_N7>RTFOtC>I5BgN z$yMYZbk_Xp4V;M*I2T|w=Zfrn+}el={Fufpy2C@j&8sS}sa}*BuSvi!&IO`vX|)e*?%pzq-zV}CpWK;t4?bk&{cc}xo%|ky_QCTo zS4Yl0Sx?;jkHn42BNfuWY>zv`OnlW>UWZXfADJw^r21~^57xWRuQ%2C;)9aLYdT|1 zvLD?XuhD%&MP7QxPpO-;DY;`M-JHdij+~jhgZ#6L&D~M-eHLxjnRSiO)tp(+88{lh zD&{MtpBeOpyKm~2Vh>Bq_>D80_${&To~`6!I^gg8M)Gq1i+(kdKeJ?pcx_;o#elfB?hEbgx{XZAb!djY$_{Y9Oei-kPmYx%6Wv}Gzh zMaR*dx|kQMi{W!QC#&zue$)Y{e;zj zdrq7Aoqj5x75u&cni@Sm64v8Kztz3vdVasIAG-gLxZLH`_6GF%txCqHX~R2?nKS<` zI@eW+AI|em)ZfCr6Z3d=d-=K>LH8K6jQ7s&iI1(;ePOygp@rW#&#-DHdUi0D)^P-# zD9JeYWR!7@c%m{I7O4Nd_hgMVcXkb}{->?9XBNL-O-}nt%7cF6z1};bK29I%Z-GV& zpwTRNd^Ps(N_(fDXyW{K0d^*DU*%TDNFBw{y&1YU79wlrJT05w7C--q@)`>%2f8<7 zOLd=T(+KWnpby_1%6$&&XV&!Iw=nmd{ND{@t-fCOBhDj+M}6;Pu+Nw?;(T5Hdq-n* znSy)b%VXyJuio*Je4F|#nx4O6dGv@_n`+lU+*ZYq;+MxG83CN$hPa!ED z5?vGrE%wstwsTge#>Ugh5tY-oN^G*uG1Ivf@;Tfsl;40X{;~@@ek7i6&LJJi8KlIs zMLgdKc46t5DOLuZF4@@WHriR{+L}pOg0z7Pn=N@*+<_lxB|JXrH$}@^LWRJ$7FNy<}5(lg!4yfeWO3pUS;VxnP5_+e* z$$~b-@^u$JpdOm__uB;MF+NBWKYzN@(S-cze1=D?dv)z^yP?fm^x!%A{~U2%iI%=)e2~BMpwB7ZU!d(V+U3TA8W)n^#IM+P#%O2Ev@`1a z1)JA7K>MBwv{7<=jo-f4lK5rEAHD4}V?Su3SV{S{)3l|ebjg$l(K)pxSZ80Ev309I zLB96SJNxXnTpQ6hwQ-0qR~mmf{hDO*(Y^BIY^3brH_)Ne#6ufOmrc=J8}n={Dv<~A zyB%7!pWm?Q8SLXaFRN-N?+wJcYfDR~v=DcjcL%S zs&x7sF*Md4&DPggn`h;(*{6%{KeD{g{jG6xC#U>U@Y#N7vsvR;&F4DV4?aIDi9Saj zw6^F#fIe2fdg+r^QGwk`t1V}4@Eh7(xy7HXP7JDenKN?D8Im6N9(&%f>R=l+uOi<4i{CaUUus94`=DlKYkvPc#!NkcauPc%u1O%@ce? zwiG*Ak55(EmS2%t;*5PdBX_}f8Ot-rq_dWlM>PHc|KCDK z81R*&0{wp0@3-$Rd-BDDXhU#*0{_3I3EwUM7Q9pLjjQbVu?are`mMhT*4Mq;>VxQ< zod0t2Q$~M&DiP|+|kj9ubIeQw^__D4x$|s zzHf2^$CncmY$PTaR9brOZsuBMv0_?SW5Wv2L2_+9X30(i}7W_g)avF})X z&zW1L%g%jKc%89YI^kRzINc+B3arNW>bK>U9k+}`MlRy@7rZXyHG-Fs8Sc1nW8QCy zhrZvuKOi&WpBs;CG;{oY$0JQ8Ugu);Up96!?byy87Kdnq?s{!r20i&*HsPcE#vDq1 zb4{0j&xVcF+ll{`Q#?lO+<>o0i)7Tb&5Lu_&!DO{c-#u_no6K|8T2nC9xQ-2^C)ww z*Eu80`!+uAhxOFgyi7S(uc{51P<}Dd)ji+%6Uwl(u=V`{x|L9-WbG5sS?9%XSFFfc z{7u*%#kY$Ydn!gB<3;Q0xz|y0a5;L=Gd7|>>aXOEJ8OMAY|B^KI;&WGl;4hV2K093 z9%c8Z^PA2tZbIhwepTi9vMd?Gj_G{j2JBlN<2T(WsQw>P-VBi?AmKD6MErXxq=c&(vc?&q!B$@_EA{z3Ta85=&R_V1{#f?Prydff)E zC1+}HPy5kr#q}-lMRmzmNYC1MuG@=tY@$uaurtbqYp(uQ{+^reofuTQd`i(rxyyjx z2QR;MN>OA`SuyKFSg%lhjMwE|)9;`AQS1@-&7V2fjlCGu@fh!e`k_fOjh;sy+cpkj>~{4!J?)K6ClK zk$&cSX>~c28{|iF-G`|=hxP}biJ(g!uWsg`-{aNAYd39?Ze2k8(1kuaHG?uTq5nkQ z+lc{V+=X#kxRq+@;Wk8N5&ES~N? z(Og8C{9Sjpz$y zWKo9h^-O2nQ-32ma5Fl53-nlk4iu4h$G3d~+dqdnhZgKe2ICNWH&NP(4&;0<^0Svb z>@0k67G+H0{WSc|KwrmBAvFx>ZhpdFfB65yroaGwc3 zDqD~AX>Xspvua2DQ$IAkzT$v<;c4j5 z9-w7GB%^E^zEOFIVB6%gq<5NE7=o^}UpC`p&C1fJ+PJ6b4E>pv`~21kk<8kMR!)5C zD0Tq7>v#!TErZAH;IiSd)+p-xmTiSKZM&z}v}{Y~J)`E{H@eLlK-o{XuI?p`iSUh! zsi&nRQvKk{#ZQ$`m+rJZl5=G1b}xGC4$9NmKiJM>8fm<^-SavgLmrlt7Ed|o``QfJ zD4S|yIE^Kuwa5OE7}uBS7U-gw=^^BbF>KjkLz97ZvBw`PPGqb#ZD()Hq_s%D=dO0= zk0%Y6t+=>nyrkHn37uQU+}DHTVq38nE!c}@bWz_oqKgg0HF|D6t2Lke49293pL`a3h{GI_&>$O+`-b>g57Kde-U)h7~8S5BP$P zMq-xB-@5DM-1Na!9aH0-w?zh5ttW<7IqShm?{6cPCZ@Xfx7W*Vc^BTc{MK_d%$w@- zC$9EtzOelAb7$}w^0R9?yXPByr7Sacq#os)TX?pWXB4ZYAwPM<+$G${mWdB*wexxV zdSmXAbJdhTj+i^WH1Aw4JPFeBGpx_~AG|)zYbviEUqc>R@muTmsEOg8*b$H!Vz}1r zg*9J6=bX<8`kNXPZ};^#vfc7Cvft!+H+zhy#lycr4h%1$k&8_=HdY_kdgi;ISIYa3$EH8zMe5q&;UMN%nP{y$BfGwQ>68xi zt~_AZ6$@+5xBx;N&2bnMC&YS0;p_>aZzk#`c*g=0Q zH>$GryUJCrTRDZGUHKWj4f0I-Jtx4ctv-*OexEkH8P%)b$iL{WbqgBv6Z=#*V`HTw zzon1qj58DqEW++FUb;@P&L1iB;M&NFO8R@SJ+h)@{r0W8XHY)*Ebs2#6624?lk?dz zwt6MwblYxw$43LSt*7p>+%>Me>W=Rq2k>2VlwK)rQvO9_Gkn{R(>Qw~QE?f2Dr{Tj zk3GKg_%4vAF?4?Ge$mgrFPt*vQvetL%WFkG#uu+=x7;dues) z%sI^Tyt?(+I>xqj$odnN#Hr=dITO>x_gfp4iHv5{exwPxk$i$zxq0}N7`mXpqq0SO zUqrn}z?!upJ@&%pzn-D5hlBm~=Nmum`pf)-Y?8AV8)<(q-zGn;{;J=u&*SK`@)r0$c`WWr4buNKYM)5Naj_^sfrHoz%%)p2I^#8?u&_cGp`rV ztxd7?=#3}s=Nppf)4bcxKOTJ`;J0_j^W{VO&?iZr#b41U$YYILGt_=~6{JTCywzON zW5oL7@n;8#p^x!*1GLc?>J&13D>9++lVY74k=^(0vt%0{Xl&m||5?NQV&QrE-(yqz z@Bh#g{a=^V|K$A&r_FlvaJ(B~&%j#N(rFwkxz^pb(%%Gs-%MYU$Fs`ETK)_iqy9O^ zCpXX*>6qeh#p5NcA#-u-6X;~HJ&GGv)1N%}q}<^>j9*$AzdW~c$x~|?zlcZ8InOeF zNxyX`K1{KIe%JT1Ka77);8T06OXXLwI2<}-6M_-XEH%Woydm3@+r)!1G3|9b9fS6;D+ zSi5@KRjH&<6C;? zV=`-By}fVwEmu}h9zF-V+D<*Esn6Aw9Z4^XFt%6u-=K}Byhz6+#)H!L2I65i_o>*| z>Xe-`3I6>&^Wi;ljmC5M7&HD)qHl10(P=YZ9+v-|$Vw`E_(|H7EdR=f26g?(jxM_R}8QhUXyHxw(=JazPv+|=hpKkSV z5Bi3k>G%Tqmvw<0?-=xQ0(-&QDh5}#5|12xulw2pp3_=vH&WJV=13-WcVDadPR&(n@0=-**ftmZbY6-H_YmL8?wCB% zcyDt_@!0AsdU9BH-A7n|?f0)S2Oc43Woc-?)8{6?oJ*6+`5Djm=(s<2nd4|XEZ+Hp zK)m;sKObP{w8Qxscv>Qu#WXunRRwueAKI^Aand`R%+!Bk@?clyj!U)Bo@#(S?2z@0)cY z*n7>HHq-Y?;;5(i+t?PLf4^ppzM0d8f5H9gj(^L|p1HpKQ*N!mi*>AH9axWlqJ7=O znngSqRtd8qe9i*hycSMc$9`0aA_;&%i5)?9+-(oZ8>XGV$F8b2zBH>h?7yf$ks zM#5+8S1Ytvp7xA$RWhwG)%;M5fx9mphHDoq_MNq3W;JjZel-OlFPDTJn;6c$KiX zgnV*Y4)duU`!;O#ez<@mj4HhBiE1(@59eVQ{q#e8L!9gpQeL(wvh zy?;bw@e*XE2s)qx!8tI$zKlc^oU4)8#u*zn$r|+G`QZexy30DDmx*0 z`6gw;4|1L^ZtH)pQ)^BZ?CM*8GNu)I)H;IG(F=%WGdnJ4tw90$ewz0)=*YYx`n_q5)i?^=Vb+NsoEF_^Um$Z(tIuQj+4TZz5y zGxu4-?}}lwr$Lix`Dd`DY=*#p4C#>nmJSUqEt~RN#mm@@X|&~-7pp2_4M869k=B;I z08cxRV;8^6e_CG=W4@|u%b|4kIi#ptGVAJB-5tpDZ)pc>|Eh28ntsx*TNu=FFM5Oi zbj;;_0{w<}CuZ|5f6w~Qy5(IPH|0jWs`~M)->N9Uwrjp9oiPA&5AaUw5Pm?+$^7@f zhImXHa-mTU{SMkQ`Ig}4WZeJFJpO<3`VFtwdA-K#wBc(O^Pd;6#vr3(6Fk#;i#g&e zHg5=V$Q!h+JTlbhE9=2|<}|izE$fdgUkCN@bsTi)T|<&t`yBKv9>jbWcIhZ>K1Q2U z(iVT&HfkC=0$;JClPODlt$}Z+d-y6D%QAf3K>bC`|5i#zBU#4YiLc`#X?5ee?lEzZ z<7?dxbRjkXU;VmILqpYV_)0riuNL5IR>vmzIUZYn7=F&={Tbd_qgl6FuUmO7=hdI>Yx35r{BCdl+T?Jt6{fw|B-t_f z=Jn*OOFvoha#qfcw=+JTG0H+uf9uG?#D!4K3{8wdh(Xo zht`qt18t+?2iix(4`>{vHuc(8Kfg$uis(e8 zQ~IDbj|jI}do)bDvu(RwdtQ-`CeE?)(SL6AIp+JH<&`XxcD?fG+W(Oxm#xH1?7!@h z9m$ZB&tuq`_lEV&zi92yYIu?5Rpe)15?P^rxmozH?8Dv)`ReTFycNaReEqhAvDXyn zZGQisd=?MC7gE;Q?sH_WF+eH1;dEnT@4KHt8UTd)AsOAqE9?viM3+kub zV-xRvdE*y;(D%3RL{@nE?TX&tBI+NwYqh7>$t>H`EtR%eTC>`JM2d690SF z#7gg9WR1GU4&P3}zZ&Qey^8Dasl*BVU*=raw|&a%YL95!&0c5gjrarPK=PnAOLp6d)v{KP zs@9nf3-JS*W1BXN^9j&7#cyB!P1lwt;>Kp4TZ=xHGj6EQApS;HD)6hWe`fCo{gm#W zUWpDNUk%88BhPiRp2F^#R}2`fYvH?t_??F@V(gL4*n{{#XPox7TvYwV^!K)Cy+(w+ zdGB7qUD&Mm!OmQ3^obZ*^I(rLZ|OddVSgRtF|*zvniZ)rzWqqL+0&CY+?JuUQWmlP zejB*FsMi_2khaM-m^k&Le!S`10eGYOwQi(|b~ew7LqGHa8nh9&J9_n@ReYkM)r3ER zRu3f6>IW%kHIdj=bEeICy|l_3h*o))R*M|1_}oLQQOtEaT2=N>tDF9ew32V@k*m0s ztKYmHma7WIvPtyskM@i)dduTpcFE}rl!u?W-to!iGcx%L6=L zaBKIL&+rPx3H}M5|?79E1%GinTzf(}NJ&o~@ z_JD6eZii2+*}!>(SzWWM(z>SIuX>6qytkBFYHx~EXW!-3WZxC3Y2a_oA2g!hCI&?J zJ#+SmT{HIFCiDjxH+e(RM7m)7Wp?e1SjEeVVHIn32W?c8xy(G;j}6hpMGR;&1vwHJ`t}u{rHfY zNt{BPk9j%fM*(~l3Wxs7M<{b6498;@L2a|XS8gK^fGAAN*pht<@tAMWqfW1Tqn zt81Oo;W4a@dbhl$yE0bo_JYY)zWUF!H#6R;`57;kF#FnMEA_9(Uz+t?z5CmOdnPKe zZ?b2y-y@)BGkw?ZP1sYLyR!D~v9D1NG-<$AG$K>~j_xQ|X>1*zW$QK&$7yY5Bj3yB zX+5Wr6Ji*}0#|U(|1RFOu1Yyh#nY>yL+)CyIs)A_w;`JvH}@QWx_WHvJu}yq=G#f% z#$BseU2_P<%+;E;{@6Rsl|-Y8Cs*M z@5g-0o(HD+ytEjyh7HYSPhw^l5AmnZ4LNazMnzAT|nIT5mGw z&%lp4N&NVSKY<@FaPImT?te+*2YvmE>hB|O$^1AJ9he{InKMkqj~{~lApH29%J>uc zad8TMd}IKAxcy&~@YC-N>%0G}r7)V`IxCvrHZPj*_Iu6tBAgMBW!62q^ComY&m#7i zXx`4*pgkMu$1Ti*F(5dd-w=+&s-rAKh8M2NmO?j73kzZ0CP-|pcm~&{wcQ41!r0TEEewy=k_k6{dj`z>Nn_!=2P`BhnYjaqm zJ;mA~yD#q*bjH|Of6t@lL|QnfqV;(%zpc)$@%k)lGlMp%zhw(F*k=2Gf$RS;^p1Is=KI;hv;`V$i{~e=_uBYZ>VL1l)ZW6T`@I9}*=t@- zE+5Qm%T{&~|Wwcpi2D_dwT6;Nr0~(O^M)alWe*f$ZLsJJ_g`~g*|ndFAe%gQb^o$P9%5*9tzY*z>Rvab;^mCeaYjd^Z-I82XSWZ~PSvA* zl@p1LH6GfDo{0u3rvw^luabPQ-hEj&Wo}9;Q+7?yI2!)-Yi^ym^~1s6%Ex*uev15- zU*@f-XB=CeuY?7(>HtN+nM%7bU_05-~*q;5=JrJfS zh?#epNUg52%Q=gz^1@F?M zbfZVFoNv?vYLKI(KEmkh}M* zJ<`RdTf74Um65G7Zb9yRx~+TUo3@P1yZ7G~phJK44^OTid$0N>Crd7yesUeL;n7FO zRX;~A*!jbj8+&ZM;aT^3t0yftPRn=C%ig48Z=_pGhQ{x6_(o`zjDHinu+FZ2D$wTs zWTZ*YI~kd0Wn|L(U|tDg>MXx615-W`nS?KnzWvqrd>`yLjC^Td!$6py^ugFRYW+~q zhNutkV)q|{RvDtzaPP!n&Vy8*y)_!W{OH)jTaQA!_3)q#9%yZh^6qQMV>b{-w896K z8PwZn)xqUYihG zUzP1;c5Fl+9$vX@<#O&LP@Z@Z^3Xtkb#}9Sw9alWAfLbKKbijqEBm=*>a5N^D;KU@ z3P!rM^Ech|Ut~_ElR4^hyn6iZFnmNme&;QeXRr29$bwJF6PH9@NXBTNhei{r>IJc>oK+3irJafh(dPS@gf?Z{eBR#^=@K zLgn98);jU?9=@aOR&oydj=wKdpQa&?t>iTH-JSaGSY(A_#G+r)UzN$6Oa(Z7&f)WQ zJTsngzMj8b&;Oda6MS(|Lu5sRaJ0ep;jaBgj=zW<;!Tk5yvvnrc;B>FYK75}7iXY0EI_Pd$>bA|ejKI*x>{&(cuKX82?v|aK! zZRCpE&X?cc#@s0W$=~B*_pd1@6O>8Gx%N%S=6vH7#%JU>wXW<1WUCOJ9`B`@eT~|m z(#V{412)0su7l-#(DohT%tYnQv|h@NXKbEGv1G8krs2_A)_9w_(80*o_~nbHJdbR5 zV=GFbVKeQ}TCC^SvQFtjbc64n|9ph?Bz8^p^RdA9ztK9A_%D?SXbutAGFQm zJ+JO4`pMeAy3F(IH?gm~O7e7=I>m34baPj>?+|%GbXnR_RX4Gn4JUh#K>kPUvVR`YCHqnOobP{veAGDka_-EF))n#FG zvamT5BUx3axHsrgzh4^DYyF$%^gd{rW*)1=j*p(>oMz*vO5*u@eZS=LhfF?%{81x3 z()>;yYpGp*i&C61X4bg>yN@aG~Q^6PD(-6lU=7&ZCf<)0!yT$tWBKm0g(2I%+* z^FNKd)AQ^3-0&lX!Cer=jr4@zF5x`AAW z{6RgoTK-{&-tlF*8qe*Xkv}G#vDA;Ozihe|xp_R^sk~*3^0L{(b_jZC@9{3`ak=T% zXsr4aXIGr!>5#v$~_#5z2u9B=}99P*!SVtpogtOMJ5 z7CO{M8Q11u=TAY~Y1jkxi*>ZUc8)UQUS?GT`*dcp-ZZ#wvmTmgO!&9IgjPJKHfTMj z$=y><7W_L+{pe;#F8ZXiGvw>#PX znvWO1juLMj!8T!g>c+F~h`lFOJ@#3-eV;e3Zq=1TofBe_s`iUnLwJ6+?g8R`+Wp;b zPNXv0Gbho&-?Fo9R_-=CxzpUy>a_uS-Y?mMrj+mOtl}Uii{wQ*+nGDjdF4}eW?pi< z1f7!QDfpaXPW4^(R^l4#7XEA3>-=1X-SLQukFS-=c}MYlJ)KAW%;yxt(mPa@eUL~-y4uGeV48|H_!WVYh_xG zj<-cu?bkkc#mV(xMPq*~v{^Zne}LX*%`EM(>mt%>RaSio_vvhlcPeLlh@7p~r0X1v zM%rTZo3bv#w>zxXDF~-Bgi|g=pM_DI)rWRym`#kC`+KdsiWyou8XFxlz9DLKILIf* zA3c-I&)J;i@enj+ZFm{7GC#^%CCRO`O-EUKxdXbiA=m9*R-JORqUCO$mAq>oa(}W- z9<8$#KB{i{g&`kDF5zDjGTGnr{k1o_t^dq=f$#A8Hm_5}Lr37-QLi@+m_;1WP9M{V z1(Y{yO3}8p;469IKRDkYtCq1b>liaTQ0Dp1bKjw{Q`g$O67jvsZI7Y94dm9_R*{!L zHnUf=mW}$O(54xgp}y*D{6aQEbiF zs6o&^vvksw*YJ_;&`j%0Y+R=G!r8SyxeOWxeFWv`T!@?Ki?P|t3;TY)PJ1deH-(=c zn_~QVY^3~s?|H4dUs2~gWRp|6mA)CC6i%sLI3!+U`E$LwA47F%9jxY7OX;J1Eq~V|4x_^6?tNLo=PWRc39qs4stZV)TWvury z>YiuJe-Pej4QlDiWlu4FC?f|yzZJgy0opX9um8pSDKEWaFg#2U13b&!Mh98@af~=% zG5b`t7Cw)DKg<0{`u;RNt;BpEEh|-9E8;6^DKi?6Gmg_)5_XTcd|2Oh_HB0&Whpl? z!;9736T64pM0&?*>KVUs$;xG)j-Nb5j#*>+2WhKv6FMtQxry!MCeHBvBCxqD7q48z zvqhf0`%mK}+1ea0?%$1KY4Ym^=4Y*2O$piz(4YXZ!lAn?Q@nA=xh z73YX@xc}dg*A_b}Ft{?&SD4t**QKW3qCJN6SA(4i%4{%GtY%el(*iCuh;< zQglSWF{Yj$i7y;2S&GDqN9TA;A87bpWdFjy{m$Foorkx1tl3@kv7f)(cyr6!anIup zuw@UZoRTM1PRZy!@W6Z?F|(^AYvJf(@HuxLGPs4{8m?@4JIBYVKGmc5!mLH3ODV9f z(R~r`;g>y6_mnMrK;`H1Y~jR3qsLBJGYFA>@^=G;G?Oe3z0pBr`}_xQB? za&zYG&!JtCIlat!4xSCZs|~7u2YQxVe>?J*s{Wj;;?WEJ`mH_is$3i5qW$?{Csb$A zPlx|-9(^l1Kg{fRQC)lJhkjGp#am`{sXaZPtL*2ZbHjcpo0m3m*a`F8(=)o%S8w@8s78{va`s$1> zm9eaDM%UhpXBl~0c8b3*n`!@kGw}E8_Sw>(&**ySvf1YM(l-9inU&p=wPf_#3uk7h z55H~n9{T&>@M-4vr3Ytp9W`=2J$v`P3$qu}Ce>H+yBS^awI$iX{7Daup?UE89PYXD zy5D?Tw9_-e--3TLj_qnf-+%E9^gT1qQI*ziIr?rK+t*%Agx5LQ@DN(X`MZ8J_m)8G z9Ns-XM?UV&&*Af7#x|0R25g2fYq8}Qa2AHz;vv^Mb8yTdYfDOo&Fm`9!Ir=a$-Uy* zF^86n&O_g12fTCf`*L~DMHX^A&&Y?$QMo(8#J!adWP9+$(ccPiKeW&7#dwdk@3 zf}dSGat3I}i2p`AWMkDA*PeRXqdLV$=|^%~%=hR?@cTTUK8um(ikyXT>?zqoj`?AJZ$M6li{@>ndMGKPu`zmq!n8$DBd z7Q>e%Qx=cj;qzr-fG<&R*#o7tBThTAcxUW0zkfNjJW-#QJT#+gN6zBWlaLSmT$k|0 z^i4XkgT6^WOOS)<6Bm!h7j`v|Kwd|BT^?<27#Z)1pf?T3Fay?aHw=k))lZ1?OuTDM z-1-Q~Y2zr1+x8w9e#=E(SZmZJnvnv{cs4}6yW9dq%b(T(h_673Z4{WUxbwu|`W3r*OohwnA<$roO6 ze7PZ0Ic={ahxV}ck+lL|$05pGu|A7t-e}%B=jilF)9pP`Lz{=*?aIU>!vIj{e0F^+4Xi*(boUg53#iJ@PY2{ z?jb(ipf}(3(9rn{8{hVh|5&5GxtR6kJ6K=-G;^ZG%Vu^)IH!=@l+Nos>v@B#?e`g4 z&))ahvYDNKU=B~u9vY)F9jDl5%lditOEWt={AX>sL+!I)a(8OlF-;S)a|yEZi+J_G1Co0oug3EYC7ff%+WaHv z%R?*k&gF4#S01^orpie5@agf#ZlCTwHhlUt-Xo7)k`wRzdJcIiY}lLFz~aH)^{Q(L zG=C17SD1YRxz!Dn+X(*udbi88sg=KvQ`SDpI!;;pDC^ghb%3&3sh>UZok!=#^B?AJ z@htYKYY%HH^CCyRtWC0a?zQ(~o~JCAzdm&*XL>S*ZM~X)kw@PPzLh-M4(`cR-fS0l zJuvPx=Zdy5u2D|o!Ex-J@Y1WdIeKOFrPnUnvQqTo&Q#>6vyHJ0xwy{8VKZx*N6o5f zpD?>7_l-MG=925oWqu@rY>yf0)r`G3QZsRETFp+{(7<;)Y3okLT7}S6<3){|6W|iD zw5kL+?!WZ!GM#r$wn6^e+8+BkjdF6KiSF%Y&gw)1`CrZv+Z3VPr3AtVzx!Z%)=4X|L`m)48Gj$=f{9@0PH?x4L*B-p8+TJYe@0~Db>nn*X2kok#sZDZ;fhzvQ#{8xVERtE_P)Qx_y33a zExzB&@~&4~#Q&q0dDTbH-gTeoVdQ0ZKk}k^7V40!7?~k2CRvf(hz`=Vg!)gO%;}kv zn+sgO`;nV7_w~w+bgY5A*j~xbw~(Ff$j(EvYmOoVM`IaPN09-YCGiZh^Xz4jnir6r zU9>;J-R`^K@vfoV^97B{$t@_~R02-t;+B9@?%&FaU02yF5BBq&&_5^-=h$PQT-x11 zd5A{r{dQN#{#@8&f5v^DwT9Ri@#oZH_A^W(PF_YIzQo!N?z}0fh*Ymyx%6CdH2akX zlRxd{)#u=cZPyLwB-7*2CHstBe)Gm^DbpCy*j~MQF_N@`YWvY?t1&3 za^Ee;qGTYA`6KoDe@zWKc8 z(cVht63g*thbcD~o;}*_;s)FAUVgaGF3)B^_tLE#886>IG>IlXzh_DZ$i1fe9jtyo zk1Y<;y`jwOR6CoHYtei-?GE!Iz90Ja!D(-#a(VU3;9D6s{7WiB_g_Uj2BQz-zFSzM zeB2oRZbo-1{j-{N-@rodrAzR>99kS=9{l}ia1vb!wmAzuIsM4&nvNgMsrl{Gb8E7G zd#Aa(CF`(v0zXi7Y@%0FcU7e3r73AO8T3thnt}gN4qS7s-1{)UB`>Y#T>gXjh8FI` zXkiX@=Fmu0oAf<EA~tM=XlttII77sKwx-a(gL zNqW!uJ)LhbH*D-3{z5cUy{b>Sam|MqdR~v8L;sX>)jHn)$NHY7zTf@+eaC;M>ihA# zQuqC_e*1oR-@Z>x-S-H5mt8#b_?((Io}63rm)NH6_J`Z zu1TxOgzs(eI}^S)Ku6;5x9(*u*9zbJ#su^izBi5>WHIm?Y>noAvfy`iggp!9z6zZ~ ztM&f9eE!Y=ef@HBUyW}QuPu*X^7;D$?=AR_@ejVYh5e^zy_@VFJaR#*+X_Sw7P}(2s$-4rLiV5yH<13 zy*g~qbz#j+XUC6bpr12q-aIm^W-dCa^Wo>ht1QlkAM#gT%?0_9nqkw@YO<(L`jvH= zXY6}9cKsWSTNJN7pYz<-^q}91eoRJ^kX^wb$WB#1Kuy zC(TXl2_WuMTYK7pE}Ok1l+$oC`^tP?TRpb)>BGzTwbdVimwmoFbWQc3Ab)k1kbk!A zFvnw^r@`5_>nYzKE}Hz~TZJ*>uQy(&^(Gm8*PBd^bT(Yct0bekfH}MZ=I{!ze+73& zdBu38^UC0r$t#Q3AYOxO3jUt4&RE7e6{D-a@(0cp`3mbz9{0Z9&=d=ogU&TxIjwV% zXZPW0{es=6m{wcbML+S04UEfMzCs+v*#xI9^uD}$vdyu55r6Hz&n7O@Z-@U6Z|4GE zRdwb6b8~M<0zpu;YEhFAo}v|t0x5NJlkifsP+_W7+W-Lp(F#Lnl%h=_LDXpB6lc=W z&V+}kH`dlt9nG{I0w}2Tfiivl?Ueh<1EONof6Emi|L<>~bCQ!wg0`Lh^ZDFQ?mdsa z*IsMw_1bH%J;J&7Iit((-Jw3?nn%2!7+aEBh+Vjl_ClPwr?^&fz`Z*b%?q!RZE_#` zem)JOKv1{Uc z#7D}9$Y}VNj~G{o@$TVV2W;^q{Gon`FH%1?$iAfzxe@Toxqlzgxb%?@Owh0ReJycH z?7!F7-(7L6l75I=%!RgQZTwc?Qr}k-!>pm-<|mzVCZ8gfSPTyK4svuFj{eRV{mhJ>=ve z_~Q_CZQjJ07z@Lz%yW~V8*nQ3MC)H?(a#cSfekbv+oeStv{(u)RIjOZ68S&ml(v38 zd@xAuFP-)93i+oqIJ05~`@34L{`)I(vul&+muB><{MQ8biOz2sK--5a@E4fN8i(Nl z%|UDrbGF<>=m*U5S;?Jge;ZlfhHpIo?j^@!cZp8@8ZL!KtbIHm-!MCpq%GMhTak&2 z!27hj7apsJ4#Io9(!u*W@GjacMMjq1z35n?T0Ua1{S{Ep5MI@qOdBPu9&r?q1L5i+pDDnZ@S| ze6|Cd=2tzisTTJW7lb2E4KIl_T%tYNS@=-d*a|t37GOK%!qx(8`+#lV2h(fYfK7SJ zvQZD;9I!_XTwl94H+%nmz}5zAM}T2k!QMx)DI3U@F|g@5T^DSM1HOljT?~vD1J4*f zqxp>DGm?+|#BIp8h4+-Prp>x9ytM$H+G>%T22cNjcQ4?%E!c_L-*JdN3l{hD(8CwA zC*g_jh9mfPsTkK3o7l~@D0)}CES*I>hxkOUy>c}=i#f5Cn9ZBiUhv{MPv9rdX5H7= zo9JU>UrJ{I`&Ml5$ARrWV3WLA3Vq7h4^fldT@xFb)ljx%=vvSQE@GSO8M6<4qOm*!W?LWR6`uq16$d*z3cQ?9b zis9eTk@@@{O0AyaF#HHD0@(VB8_z-KJG$A)<9tDD<>oBQ{x-JO#)7IV?UBoUww8N# zz@>u2-4p!>@FE@T#T)+;cr4(F0ncS=@NDV@o{V1L$>{^04suR)KK%pVl|7Kv(;hgA z%y=J}a@>M1tkmv1tmn4#X~_ztl6A;oWT@m+Tr}Lkv$ezB&nu|Mx#!@JTMvL)J(_o9V&7Q$Ay zy<~b@$oa#_&m;72^6{h#Xtx}{Z2n^T?#k^Bl0%f;aQS}f=iO>e5L{EJ^`2zzteb6_ zwccxH(6O#N(l3_e;ngEIhV z>oD)?S`*h+hn)7V)-~SQ#Wlex-+CwVs+l!G<=NFQp}lYEjNus*biY5>)>@OycReec zMc1|W$a`=58Q4z1^n}jey1~hvKjgx)4_G=~SaeOW%mkK0j7_i{a$(VUka74oi~(4b zzja8k+>bsC%$T?i7`$f$gZWOrjQ9MK0j#UI*Q@6edlD{bKS-OE%)NqjdD?snCN_OKk{HkTJN5n4ccRqX zlWYdgBJq)EC;m$!cRfB5uI1Z1dN#}GS?`|4>AmM&yHC1d9`Uv7*w3W;TGqI(xY{;& zU^p-e{}y;m76*!=;3o!tlws3xdE(GJ#&c^}D>V63CO6mVyB^&*ns@8b)3SdG zz_;Q+y1wP>`dw8dnCl07_p4TA>$mEQndhq-McexGp!-Va{jI-a;<+ui88}y&agFY}-)P2lN!M?~v-RT`*V10b<@Q(Z_9wXH3rqK?KYpA3*k9JM zW|8@A`YU()t zhA%DU*$S@@o-Mfn_;bT|Dl{(Unq=GUyo+zzF-F&JabRa`T5s)$A=e~NiYnetG?A|(uGa(f7jH$VbgOp8P5j-(2YkT@x6K}c(8X)5@0@^G@ zhbguYos4bcqt`4w%l)ME(Bv?A{Gs*&{8c~AuK#=Jy}svr*KsYeUe5>3d8!(7bWf-& z7dsFCF%SPS5C1U_|1l5$F>jKU(i&@Q8~@Qqar9Aaz>vrs6HDo-gHGjtZ=ZvsCob&; zrqMo_#NX+2#y_T1Y2Q5j9`{bi!(Zryho$=zhZG(v-Fdi>d05Xp6zz3Q^RPc-t#oNG z`iO`9^RULHeWiGq95T^f@gk4*de$#5%$($%k!k!xZRyu)a;=HOp}YE-FFxSA=7-im z{CfEpSF={>*#^bkwt;XUoM|m@3pr{B=AOz2`?==v0qdD_wKl&QdnYgoUuAQK9p`-_bJ02oH^Tv28`_jkVb8eO+$E3%0@?Ubbq!&9cIX#?OgC8F)6Kw+R592dy z-=OF#Jt3Q1G+nKES_!PkpE&c&FS`=7v9hbQT3?C`-;{0ZUNJe(S@Rio`6zk8x?KJ{J; zW>X){B8EskF^vn~C=!FmH=8p(F0c!3$NxwE{$?QXX&)Wm=juCpS~^<3vabCywF@l?_s)Xe-sz>ES9m8mi*%=#{`)8ewXLzUo z$MDRKTCNyowj?*fE!Nb>3rWi&-C_A zFYpZE9b>zBwas+ibRK$<_1p8PW$(olO|8+qaB9%;wDrB}eoj6PHSIsB&h8n{JD0V+ zp#kdZ22zQ_K&t8t;xBxnSve8O+u_KVb>!_lVXfM+p0%1*YqjweJ6T8FKKQ;zHP_0JWzx1AC0TFr8CLd&pBhF>KG8~*{E2L_6jRLt~jdpuWqEhcpeY9KH+mLt9ny37q0%AAwJ3F7x zLytuF1a`;<(6iA_D|PkPp!IQnyW^6rVPZ=fKQOk?$Hos`-_7lpJ-=Nxg6t2)I`>h- z+So)MY%X7kpK8{0^V14q)FvMw=+q;4bq4$sOshxmB(xfEPNYgTmaWg*$KGMB_c61s za6mPkW8?`)2gVCCZSR?*$d%}0z`kj2r1=NLEC+MuI%^ul{~{Tzfs{fg;&J%b!GP~BtF;672Oq?g>v!bl=ns&sGnfssVN! z+wT;3HaYP8o_b<2zIVZM*_t8;o={)#tV+~dtJ2~5MLIm_PuVFRe!l6!V`bagw|xpc z8yt9E6g+(If~US}l><*^U+^?0sJE65PeVF9Gl2(t33#x<3hkR5c%Ch2Vyz#!<-+r< zc+k+R)`8~{!Nd11c&OC{JkPTJ+6O%F54M@$iAfhAf5bocrNbk;82i_QXMzV0IgRn@ zy}+~HfoHkk;d>W6*g+0F=(S$?2Y42r3eSQxc%t|Xu`&;yk@i^*JR1wbe`m*$&!^z0 z+JWaj}3XI0`choAlMd^!!D=xXqTzVYCB&4VXA(N@juQ{Y+cz!MTY zeD8wiv9S0Vc>4DRPh(<^!_R(r{y3}We2=mQp&UUEo+mtbtShLg+Y3B*Iq*bT!;A5~ z3!XV)m!Ajp1&_(aO6TV{(&1SNJmb6JS?j^mG|rBr3s1q%N(Y{w2p+z7!E>|6Ke>Iw zQ*kOke?J|bJAns1?&0UF9z0c-nzP(bf#*&Kp6>`AzIVY>;lVTT6nMg>=61e4-D}$# zYHUm7ezzQX%xQP6+U2`xm$h=gocG$f(rYK|*!R7)v-~ve%tL=o`aA29GQ}UJu%ul-sYJY_|*vn_6fE{4RL*9Q!{9 zkS|gWjb$I0Jv;sF%a?T4WvB6_&W_UF2rr-V3Uc_3Jw7O$`r!%3e(EjXAev{T%CeB< zL#!@%FT_8UZb=O39>aND3$hRX!#wiDf?NlFt21k&KmWl0oqe#zFL;lf;wbG$-8=)! z{d4R&CqF-joJoIvzT#OWyfX~k6|hG@_Er5{t0PQoGy%M^q1e&qBFBjZP9qLsa*u~% zZ=cIJfDe4y_2eeilbcjeY`LD;ay_x-dSc7<#Fp!cEh}yo8x)E-@zH=SyM9xS^$2}n z?*;6Q+14W;qI0~lMo)TUb@JPtvAVhM?pR-N$EsRpUHKHmIZqDiK2KP+@r7?HOOuryuQ9h;0^#+Vpyq7azzQA8VEOBCvQ*qn7;uecbo_(jx4*+~t^+wlj6 z5qrqyS>a1|t7B(|8VatbMu}`r;S78#j{4SDJL^8A%@SyP96nnxXAb*v9AAkT-HJGQ zs%3+#-Y6Yh{iv~n4KEI%Hj8Z6U_%xBFz>jBqp8Q5g5|$lBoN*s{QbVjr!MTCRypRl-P}ol4w%B-N3Vb8qTzsz_SbUsERNtc- zf6vGd=D`Q7ReV_7J^#a9W18;cZRfi;rWf2XDM#L;@85DfonPsFJkRtpo~FNGJk@{B zc%VlQ`Y>;MrB89Vv5P*?3i>QF^eMI)%Q;i0H~Osdk4G{O`aJX(jAvFa<2l?HzkSm2 zREAgi$5Td*aEMPmHFnInDy>yHeT=KDmvMb5ZCutT;JfqPaqaiXRFD50-P+51`lRFQ z3>Wnn-vx}1kH)uK^QzM-k{w>koC#5E)T-oK@Hd9kIJ@jUkzjOVUD zXFQ*j|B9$cs7ur+0aAhkrb-yr}vM##7eIc>a2MQI#$)HX$!IX+D{8Aumq+ zuJ>_G>}6cnq>by7$cusQxc)ZsqAFcpY(id`@x9i&ym;0xFHS1X>gi&ac4wxI@sr4l z|0Yjc_Qn4XdEw2kp?%D+SN&s>e}ew{J+%CDL%)YVNfx2z3E*>@9M5Bj5fvU}BA8V*xqH{O^Lz#Jg!ryzyJs2gMHs@J2v!s_OD%C$k*iQ0pf7 z&{6qq^XbQHcfHqc__99R-F>=t@vGP1UwQ4V^xCWHid7jL`r-WkY1$Ld{!>wR9Bd2z zw%7J8Ufba-`h>OaG;MqBT;sJrT^-Xy?r>>`yQ5WafQuaVK)}4{ZPFvvv#T zFv^D_?sPzLrwg(=>#}Z!X2^ynx30{l3eHO>N63jI$bZUcNRK=H%Qw1tduG~v?I?5N zJrU#c4(Y1LpnUc|<30Ehl0#0MBBSB8e#Cq3#K&ixapXz@A0k=y3F1A-!`PrqC*H&J zk_YGN%qDVFqx?QQ#CQ6M(VyvyYa6)sA$>`XD9)iA)foM$U$Z9(7&tS4b>n^wQDjTE zk9gg&?)ZoE-SZJYBm5wne&WN8-~WBU)ZaT*o_n&quXxcF<7MQ8kMLt-d{paY8^mvi-K7|8+yy%~=W1kj$VCc^HnbaGYWk>8xClb%z2Mb9jlGpj4EgsyPqYUPe8u3S~DX)Ei|kMnyf za#riaj+`BYp73~ah^_VS7<#k`yyvI9cthX*!+})}-k(U5x38M`+^P5$?mV1NCH}b6 z7gJFVq4=k^7}<&Mqd6k{8r}ilx}OBcYZZ4g*B#uKE6#$;Z;m6}`t&6wk`ry|HYXRx;8qfalZ`2t`{P$8*6YKybjRgB zJUhJU#P*bTV0=?}Qgl!p>ow&g!<#RD+2PAS7q>e;_rHVN{H|DN-#j_i#qBfT*0X2+ z8hbA2$^h}>>Fv2I>}OkCd#>uLKJB^os=n>H+0<3}ID0Pd;@<7Kx9@i5VsG}G6R+qQ zFE7aCJR$bT7Ly+xfxfcsW*|>w*9AA0L^7%A5&f=FD4&qa)2D0Kq|wZ z>wK+K>moL>BvtSf=Hw&gm|Q7j<^ebNj(mj)_MG{r()cDHjca{0)_m?L%XaeJ zs1@)*S^pmNjm{$1?FMq)ZVseEgUQ=p%@|t2U4rq>f$rR2m%IAg)5u+;9zsJi^p(Bk zB@kO4!w)sR| z9KMhb8h;bHe-~?M&`x{4MSJO%g{+PIg!Rv1@JIqYWM~ihFPXpaNz2NzRsGZhLrF2Nj{M{R=K zvf4!-l^tY%NztO*%>9yyFH_Hknt~5brOwAFWK0b*R(Nivp5js9=;Z&~{69gRqRz4m zGuCu@r}gJoO>MrO_ExNn@y&z|bvcpg*jnP%PJGPy)TxNe{>K)RjhRIqvele{vV@wK zdDP&jVvX}DJwG3r2>g{+R(pW|rY=tadmxZu_UP8IhMYM87n3yodZy_dU!^NlO!on^lSe>IbnsT|Qb>$1x8kJaW-3vANFSOqze*jPc@ zucZAo=%*mmw5@A9p$WPu==h=Tr8^pE=|h_|G%EsjIzGr@bs^F8*F^Wrb7k zx$PKvU+v~I7#=^X+rLEy#gOmv-Nf6K@OBJ8F9<(Rap~L-{_xXUJa7np3SeK0UtiAd z=2v1=sU-0^;ug<~-df|2E~5|VCV71ad?g>x@X9j&BR}HRfj(vb_Rh|_dB`Qjmtx2j z@#l@VF}}s3tJD7GCBu*Hf(N3s^E}Thcc4K2&0@8$eXAMf><*1jJiZOSHhBl|b}UbA z1{;3ku46Bxrd~}bRNKtEPgtSa-SCfiYcagF@1xEuwk}zCY#(F30UpYyMrna$EqK14 z`R>s63x*cQxu4F-9=f%MNBr;QNEe7r<*-tE)jjkcr9X@eowC*U`1~IRrCk$KZpJ?e2PBle_`MBf2@!9J|X=NRGdf5DC=I< z799G&Ppn&Tc=TU$JCody)H?Bhmvg=EQx-#3zs!W!Mzkx$dmjWHwyM^OCXT z%9;8BQT9>xEhi?}1?l6mitG#0uQg4w&*hrob(eSYT;4e~zwOgq<5Mnkyx5|Cl=a*~ zSKn#90Q+IC{Inor_U!cG8P*lii9FBzS6nB7EYX;M$NFReIZeaJX^M`(rl=~m<@el$ zEn@bZjDm*90L8kMZ`)TLG6x6Kj>!&44z*H`;ln65Ot`Od?VGQ~(Fy1;;OlAMfKOxJ zpyxdMrpnzv`8s(4j{~FPz&&(=TVLr{U+J3a&)0HboSOpF(t z%|nKY9|lqz7kKeSFR)7m?+`O?!FxdV*c$Bvk=_PY<-Dx{Ht%-<`cpV^aN*>q`E8;G z57t59)Ngz`!SP?6`t6aS(qZRz(KtE_Sm!{mn`N^Ph_oz52NVwMVY>%7w@mRN>5eG; zAU={_XmZE&IJ7Xa(K6s>PPU?77sE51UC(4Sh+h6@G9CN>z+&wGPWEVTrY*hK3ZHe( z!w0~&Z@pP{in7`{!(wh0GPRX?(rIOMEa7)+Ilu7*IHNDMgqV`-1l9g-yOZDaormtJ zGVoX-!6ZHGg^$l zF%W-%ampWPX3Uzu^1t+5`7>r6!}!{n4J&T&^t@AZGsLs?$N*?LH-rpG_V2a@wO8za zzU1jK=Xu#G(X5#fqXT`g{z$Mwvsmo_2i8P}-3l(KH~XA&{VwqeXTIS# z{nyHF*<$ut)|YXQ`aQn6Yw_pVpG(u^jpfSZJmd>BO|-VguF2_64{eJru!Mw%^DNWbd4#?8NTEju z8Z(wGd=cNYF*d5I@u~%#b%Vdw(+?FK3u$+Rd>`5lEm>$_;oOk@i>TXppMm9N>L3I< zUIvz}Rz~eYU@>PS0N0dUa&@8chxeYWOYu?vo=som;`2v79`O6yhJT(6MMT45%j!_= zBtNeG_+HBTzCRy%C})hUF8iFlfb*mkXWR|Xln%CP!>on-b&B9AVL!vae4qFnwYU@5 zT=LHiO$M@;;l*rwS?5XDH+T8X<%b*>{zE?a)n1VOy4XY$g2X{8rckR58SoVGfGwKC zRcG6iiABw0e`PQ~VCwM&Eza|RM!~3Mt43Wg9I$0a1)Bo4YIx|nd}aOD8lCQk%ze&< z;J^4tvSndzc$M-|)}dEbPes?2N4+RJ+(`XXQ+v^=_ZR3oC(et#czEsN-?aRc0Aneh zVXaWzvf?S$iuvF(fL>EQL0y-O({I6FJlDOC+%@%}ZtQ+u@E70G{af%0hAqqw#Q^-Y zxk@z&2UYf<$(l3B*9e_&_k$(_=U^{DFHau+E9?G#{@S7%&&=0e^To_sez!fN@#)>- z&r>%FUdpCc*Hp%6h38*1bda@i!4IaM2y?BOYx-TmSzK0r#YIo?J4T#Q^zyEccHb@F z-7sedL65olJR4i@oJ*$hrjJ!MGQk0MlP3opUi*l8KU*`q_uJ_H7VWXQHe|ni@?_o5 z*c0K$!Hqr~M6&|sjHGfG57DfWJDPmF>YqOZ8hgy2E___!#3x@Ybq+bWQ4#IARgj;nce!RXzODsB|*@>d*M z*`gKsD1I3NzrI^=tk}MZam-H}$J?xqGHZ zF>8XVA2a?*owNYzR#psL}?HM@9A2W6P{P9_2 zRe|yniA}R6vJrh}H~xZi??q2nKdcc>kUu+p^wfQK>?;bGa{+2~1G^(nsq>9oy+SZc z9-C*;C0v^jaO-==sP7$EGXK~x@K=7VwPKfWMjPO4g>W^DHuQaq@XEUjc-L~@jq+}R zWz`m7ixznDj%QUb(38WGOX}N$!TT>+p+Aowo%Q}x>FMf+j;6m6{cijl((mdt`km?0 z&%fUPH=|$npFuxjF@G)na(a>X#S5{m;UVqi$~Sv?huL%g;O0n%gC?&J-~HLHngH1E zvO_komK@`ILC`X`wqJ)|%btk^X>tXbc%b07LHnE&C+jZwVwe8fC_hK*S^hcnEOnPP zhrIKL#eW^uPCbpQv9Uj>POGQ!0=d6DAH{$F=NsjR<2N#&1gHFz62<=U&6IQVHaJk+ zCyM`dJ-%yneRd?ifx0bq{qbD}P|rMS+gREA+saRL%$elExbN*ck0{MwIplz&8)ww&S5LD z-ZtXLhlBm8vpb-nJ(%0@R&ZcL6S*Pz%6T&NP%_OLrT@DpZ>GAqdch}ey5=i%^~duS zOY&&^=Kpwku!IUk^z8a9=#>qs}&qr&K`tx8+yKMk`Kj`(kej`-W6;~nS*$5#)he#X4hK32_{ zuvPr)&0YJIryP?W^2-trx3w-z{{x?S{QXJsneXAV>QjB<^XAjw^E}~`z3zS+&){|(M!E36?&AmPhLeNN>x%szspd?Fd&wcXmmDI_GAh599HM(eku}z_7y5s% zEK+O@Xnz{MY<_G?BnrPO{?kg#OFS$;TK=@oMLEpJfq91E&**gce5REu9T=#Mv$k47 z?QD(x*TmWtU;D{YV*gp>+90zO|H%kg6Yn}M*$|9uu{cw4IytoX%{$CRa z<=$^;Cy&_2Zejk;#EQUMC3vd@ZJ5)ax^U^_n!h!Oz05jqhInplrP@DG5 zQ>XCJi~eA|r_&$N_27C#89HYQItP3|IW3~|NgSNJIrF_fyh^j$caqihC8dQ74tef z=jz%For6XUaotDjAa7>vNGr7e)*QuvoOdnW&EuSuYZ%9qOXf}L|8rZb2@Q_j0cAq&d}{H|5A(&AAx-Gwk=ouupc9 zXXEjvbN?3j?q)v9|M)VW8~Jqcp}P)v@D4{-#NmS~mk-1X`ZM;SDn*snh5wKsHj}8xDDti)kO8rBN7mk8 z-XpFo`NVr_>prfPCVL(8nAUSto_zId(&u$AR!DE=42 zcTfy)`4>9tOb#XYo%3b1hHvf9%eOlA&_;~s-{$$ZU&xL`*OwtnrXWkEB1@(rOQz#* z%!s^IQCj546X(3)O<}XS8-rkm#OtuD>J(;L0Y9Q*qLHXJlpL%jPtwerap) zjE1R~5NCtmqfetN>aEl}#Ogg8N;TS#z5or@SoTrun4_F4o~RF}-gz21haYyBwp5=~ z=d{LXuQ@o#oX7L<7;H4`t;6V@)@{hm8v;dbKb8y$6sh)U^aU$Lep)2{Bl`RSAKFrW zQW85YTBxo#Ytug7~o3a5TV zZe;=-p!bRr{9cIdldPb9aH99UwoE-$+E82CpT-z%or9;omD|%29L)I6Xiytb#%Jnr z|EY8C(x=K;v+CcD%{R9N8QFF-W37f3$fLuR%0-oHw!Aj*XoqsHU zF?P@m=!;6uX^M(=`$8E>3+ymuCK<1iIx{GyY0F9sh7M_=^X#P=YVWNz2}yEre1w!UcEs1zMi zvXwW}pT^?ZnyNEz`sJF|=^tlLOpP^!J(SoOF`f%h))-~T<98Qg!WkvGm(Dxi-ZYxVt?{jT@2J!{Ih(UvE zB@4}*a(F;Ad5e7J1bg~K6TxEo*Yog$a3FkW{8#a=cR&5!1n%|46F;N&zsakBCw@jQ zvS6v|53j;Qs#W~k6Oyy%qgOwTULA^Fy#T#>A$s+q$Xki5qBycNQPJj97#Eau~ zZs5Gt%CjOKUwO8cWZ>!e>UL<*gRhvEiCNJ2PWD6j`0AU=U%Ioz)PzmUf;O771I~(w z&%|SK_{7gw%IB4yHfPdovQmB?GdPA1((#z&yuM)vvnE8du8X`g=nLrNS?J{1=;SY= zldq4wwP#Av+we#nUNZ5lvRo6-dIuaG!WKA$EpP~1;1IUJA#8y|*aC+xw^GfI&5A^q z0rN`y&kf++%rD1BR!wTjc=>kieBR>oHXnccKZd{ZT;E5wi>VimZoJApU$A43W3S{O zXFk}IX0IUg-@%SJ9el&&o1$-Y21}gzbq4bJouSYHIOLniZaJL}?}C@J1QdfhdTuzS zIWXw9JC7X=IP1jk4k5p%pJjIjF8qh1*qZNFat3W+a6_~nd?54R87kZLjP?id88SJW zU1vU)Vt=V#VY1Rf*N_MA$?kKhX^##1!$rt$=Bj+y`Petcho!B@R=7Sa_Z0IoebE1f zhS#yTHehenVQ2cwnS>xhj${({PFt;~WR1LQiwcr@IZJYAbc5lGsAEmHOX;)9{xI zW1)|~6q6B;{k!%BxO*D?`;R<-Img7u^Sa_iQQj-t#NJKc*(hcWL3#n*Gy$48HhRf1 z@re9r^|R3J=LmGN`19|{Ffly%(D>Y0#;)zygFUbH#(DTPC45d)z*E(h;XA!=?8Bh5 zKjZLl`CDgq!H5l8R6ZL&7JoMb9v_AeY;yX*_b~2Br*bCG3JV@AWG%3aoRm_nui}d+ zA7z{N;aTT%w%r1gk1{OZ$wwK+TBh{OFgG7%82KjhZH6^D`6#-c?cSFT)P3P*Sd){F zV(ba#U|Du}RT5m)XiuX%_u!qgr;v{_1;0B!5&jqteTKjz+?P#R&3)--2e(e0O3(IG zZb|q0u3N)0?b&3Z_9BpTgnZKYwZ~>SxG9H@N0f)?#*v2MyT%LYd#n>niqGth-6_95 z&iiE>%OcIRx083*8eM}=nwwdhn5;c4Zj6pT-sE}l{jP=hg_l9!IegG_KjpW4cggd4 z$a9V39L6A&1_-}V{A_qgzJMn%MDwd(!Pv!E`P(D|YC1nENr=xZuW%eM%2crrlwJ7d_R3hS)>7 z9t}sGO2bS1H01ujc{Jp^;*TFk!&g}!e}#`3yDR^uEOq4U8|ZRRewpgxbH&VeXdPpoev`Vv^TpHfmHhK4^Kuo}iirg%e<2FpjlSgi z?tV`0o!VDE0=1t_eueg}DPK+3V_es7^-<~Os|DSBHTg&MW$sJ9akg03Zx7Dlz+dmS zPkkYCf4JMeuB(0hR{QmC`@`M#>)rNsU+q&rsOx>TFB?Vsrkq^8@Q%sEY<0bR4t4Jl zl+J0TuCjES;)0$&bMl?K@eQ8ZwSHrA6Ujl9KGcToF3K<+=oXS_1|4aOFnbujKQ9GJnj7{xC)K2;w zVw{s{hcTOW%w90)^Qo>eyLE!O=EytexA5JaGvq#_cu)l~18DXQckJ*e#^Tc3&( z3$15;`6*)F@M}jDJi(_O`QSm_PhruiGr_S~$NwIF^ccv#bdTB@*2w~w8!jL?1cK^-3>BlPMeetPwRzYg89dj5 z-I_oSB_)5bU9}H%9(#XFgagSE;XtwxJ*~Bc$-)D_6-SyvJI%=I@Z)fOKFe&eByR-XxymWH*{N+@AIhtW%@vFsgE!9(f4fiO@Fcr3ZR`w zgMRe0S+bF~wC_VToMfw(^54)4p7Gi*rG3FZpZ}%A5)1g0v&Is~?=9wkjQ=|Su;Bj^ zYe<`WfBo;C^!pxb{ZI2z?ZRr=q|j0PCj5kuRpQBO7-uH>Z4o?{>E=E*llz#LAN&l*OzTryXhVA$=ZG%k1f`Ev z@=|kGH7`zq6*;?Z66aE|rrjU^tv7gUxZlr(=OrstTl4wwLBZe27-yg#@3XS@Cs|ue zepK_|C7gi<=g3Gm3t6#`|{q zY_>9Mx6{{ND^Qyk$ZVIdm=(y}pLJsWgWIj_{d;q>YIlMM<>)5RpSxTGF9p^!ps2B0iJ&DF0*vAHi#UV^>H1@K(pJk&gVF&z|hqJcM+H1irGSxP6V}#Zx0`{`x$+{$S);zoIQ}#mkl$tRRt9_jO zU|p{`Sem+$_4<5j0_pd>gBdBo(AEABwI6C<0IycC@1=q>8n$Iy&kG-kvViU1d%BA_ zfO4TTlw(3Z^PWN0BZ)HL&I<3S~31cM$&jF?g>42Z}%a z5uS7G&C+9vKgp(ic@c7vJ}uv$6F+k1%d3CKd6PZP^r_oza!ly4V2F)SX zm^v%_N2Z}?;D3`xAUg#e@_Jx!pcWkvDYylF1y1v@F{A^`S_rsKzJL#(m|A4~v8S;O zimZvlkYD9iM#n>wh=ZUX&HiBQi)?BG%+h}OO7!4rD;1wE9OgCr2iLAX$9iP=XSjD4 z&sT!))yR3|z2f5E=RP*;BNuSr(Vy@j`m^+&J&$EvX+7T@4D8>T8*JZp1$yi*Y5F&N-fFI|4qEo2q2Y-6US`>g3*GO; z>6VUlzAr-`jX2MWjLHv0#*EI0j6IK-)|23Y@yF38^69+TxNPI?Vas-MPI9o}t&U5v zZzH3_k^Rh}WvsCm2L`kUKI7z)RFX?FjQP+){H7Tk9a#pQ%B{v$*8hsnbk>Zr@X6Ys z6Z)uYtvA7(YXw)5`7zdIwWcQAg_KXhJTGC5H(4HTYzD6_WntQ7uaw*WVdkddXRT(f zhcPgY(X1VbUvCG855b4IcP}}1Hgoaf@m8e&-J_3n7G}OU$JMwrgd9zqB!D_nF0ISrAsE=@!6_32Ig;m?_2i_9Qslq_cfDy!}tb} zW1~8b&G6JZ=85K@bn^&&5%0TVQHyy$i}xS6Cu`_y>?ax?=>J*^<2CrDjTU&b72Z6I zo|8`B3k}#q{JL=22@QUZ9)9hTaO7v;;2~&G9>{GE`|N{97JJ`k96Ykj`F`ZiK#|s7gxB_pfPKf( z+a`Styqp1EHr#W@&}3lXYu7NIau=`Ko6#~ec!f6DgW zOP+gHBv~D@laB!pJds4ciB7EB_dT}ifc=U)whG2pVQFl^_Fcpk3(==Z#+Go$HifYT z=(8X^*j7F$xkin#$E?OEG|r<=F!HW+l|ay09j9_MF9 zD`HD6MA?fGaQAt| zsp+A8Ud3GRA#2V!Ro46;>{ZnQN`H48?}mxhTr{z>ZYrP6?*9Jy$mD{m$#&bdY1hJ& z?F82}XLc>e?f~A{4LxBtHnUr!tR>;Zm*UjC_VSIA)G2F8go{r2&Qpt+cx-omwBkfl z1~4DySdB@}5AAcl&k5K;=0pbbeGzkFyO|T2?Q4*oBhCv)M&Un7zj1chWTnR1*`M=Su1Yn;Ie8m=AYx zp0j>)W=n*c&Z)=m9(D}8G~O$EF~{Ubn>Zc*>?Kn=>pYny9Cpbq=7A@#l#Any_rO0B zW2fz6^nu4KVbBaL-WB(oaOYFaYLdK=r ze^cqVSNpHp^_MQi{!800)r^kVi7mgA9Fv{Y*4#;L&6mITtv6o2<9qKlqjxgVqs=P= zMV@~e@a;p)#Aj3t64`sD=U;lh@<{wt%*h#7tn#HrMLA~I_Ngn3h?HDq1-`(?%Dd$VH`8o1&3H1od(aRZpPat2N zx&4h&^WpWJf$BS_eSzU=oj;M&kicK^`aME^ruu5Db^4P% zrFIXy?XI!1Yj?lA?v1reM&G>~9J2?uC`!z%Y8o+U-cb&0ac(go-+ z+1gs$^!mfzHS5v|=&_%^#nT=>qv(Vfx;* z%Rhb?Zx*hQ^Mb8)lfyrwf%PzBdSJ=uNjP|CKTI2=UH;!q8?p7^pRvj&_4EIXUfMD_ zmFvk#46TFj3tYYz|761lc@5$-@rUM=_$8fBW{qiU7qYiHC1=Pf)=3N_nk!0^deeU%3J@}EO-0QJNBX^pSV-Ik> zc;NK*1;i?H22QCRL$1?<+2L=G8S&bquVQm*@00RC{Ca0V?lrZy^V~H#;cqLiy`kW> zM;{FIZ@4XB6(KL}oyf?;Oia%JdqBL8P#6aDTA z)@QCvvwxaK+uN@3#Rh$~SR=xVa(Yx(7#pV%dYE`ewVN+N@m7IrFImA2x}-lK|et00&;noZmjuj_t{?oB!)Xm#xzUFMZ?h zV`ojUo3V?$agD^z**w^V9~;vT|Lua`>~+Ys|C>GWn!~ciwC_7W>_qVvCth-v?LGI} z0X^r%OU|-y&GX_VXW2_edGV67?AtDLzTbXxsi{k!JvF?{mhzDJ~Bf&OIgJCVrB3I_*Hx?u#@$qGH1Q7iMXdT z@0=R4QPmg37nuQUpQzpG-R-vXPHcMb?KX|T&!^qbe$sZa*FAWDrFO@kzTFFW#>h4| z2jE5Wur-IzV(uzz>DkN3jvn$YqbBfr`9f>O5_EkGx+-@%Bh>TSd0fl8Ct%h|^^Ed$ zh_SC2i>}H0D7YdUJO?faAKW@hbNMX0gfoYWLqpB_mGbl7ycqr%P}Vh`?aw=Vc{L|x zze;BKWnXlF)u_1ZdW~T~Ril6Z>0u+Ed+wK0%{B40{G;fousP2rKGgB|f6jP=OBPJ3 zbk9JZ0zb%pQ4Qq8c=DRgm3(mJi2H7Wx?QRdxfR<-_S+A&zRj9mf?8hs&G{U4O`P!? z<99LR&t?3@P1cH9a9Et=T(Euhk818n?kEnS@z3ilO)X~J>MKFb0nIOG%u|jv1<7+v z`z>2MO6<4CGcIjQT-p-1?utn}^4ZDneO2o>)oJ;?vTd;?$!$z|GCGeug;&s9QEDIN zjiXKsxXPR2?Ag&h;tq311AnZ}-Q$D3YhogK@a7HR4?Kj)i!=2LhSTm1&i#4X6UKOi z1M}`Y?z!(uZkW6x(cHJ!Uoyr2JCD6ao582{5X}R>dE{Me;dlCT25-K0On+bR?r)yP z7V`EXX-?%eTnb#;|D^p@#)juw*u-9_b1*2EeC~ndbDu#z_aO4Q2S?s2Bj-05uoLKl z<$auW;N`c+2Th4o(jW4CZmHIDnKusH(Ax)RG;3O96Zq?KEe!|a;S%^Y3XkStmp=@B zl%L~={eK(oUEsJ3xGUZH9tS2fuYi~QUUDJAZ|sJ?QScXorh*Z>_L0pWx@*+_F{X{j z%jLDp9oaM|oqzW@{`6Affa&Xx@qHHSaL{iL`(i~m_(x|o&oguz4BgIzZf8NaA<*q? z=yp!zt?JC8_#R?s#O^r*;?Mp^zP4OA#Lo7HoQn1;b2Sb2| zXA1-m&lCulMn3vHpD~e@0%FcAm%diR`tS--8U$l`mT>Qp8n_v zo@e&c9gb_g>(f2<(?zETQ=OCf910Y9`{q1bLpmUdeOB{sp}h`Sd@D9ZKWvJ{_w*Z@ zurgm0-jzGuj{O>&8D!5@B;-O!>7hHJsz2o#(5#;&l zW$;}0-ryuL7cVwr)}MGzcKi|6Z2kK)-YG9>Jj!+LGa|R`>I)^mD)9_z=)_vD&-k;j7r?S<#^ zyKJDbV~ut%}a!+MF_n?Lcpvm}+|odow3JM+GiE5Nlt>XI*;9P#HA z50iY;fAS8VwW=<#->E3U{&4hH=8}poe%*I(zoGBIubv-q3HEO+fxG|);ktQWiR$tvo-A`orX=b;QVX3E|T&M3#GdcS5{dGsSwnp1G*p zlxppvsQNVf7#5m+4555y|3U~mR`7+Qmf61$3OjMfP*cFzR=O_u^k2BueZd!Mvh2s9 zVe|WnKUy7k0NZ`!qK|xzoFI7f5PI{HA6awPb4@uj_bWclm^8mc!~5CaP(yq#!CYx$ z&Kzc5Ok-^No#eab(f332qj6!c3D?^h&rbh%sF}U`?nP!infcDXj7-ZJS0?akT$#Wt ze>}6v8JDihX4HR;OZPRdOvaPJf8qUQ#?`{O4!Prck}>StXkFRLxH=ivb&U1#4WlPM zZpIceW7B&YpT_nSVVkHYJ!C?L57BR3_5bMuK71QV}qJ1Z%Uu^GkY!*>q`v3#b`I0;KOglWQgst z)|YE*5As9Q6Vto0Uv<`EG{GDzEJ?K>ZxYCwI5J1IP@UL|6Zd>f`5M3{`4tDo1n?#4 zSM9W@4`fmlnIies?8>bc(^jCUiS;PU8b#md+i~V|B0;>V>O@@u>m&Lu8*9t$tmScU zDszrF`-&=XJeTo%&->f>E$=EXr1QAdsJWn+Ld`ul9!#Q-o$s>`CR@GlGY%%(o$tw` z!J;JcKz5^eAf5=?)IONB2pyJ*4!iH3%%Lw?!PgY0DyH70*3^l^Hzvc1QTXcfR0M60 z7S9|$Sr-QfCVmD!>WN8I0DChyF|laTL2`}XZv4#9!5@nrEqXwUuK1Z`9`sPVlK%F;9X zvE-q~uJ*HOV;FTONG}b&9&G;^hh;)#MoK8 zGkRY*|4-G?ItYA>O}wW)y5j4p)V@=$f@Fi9YtucW7qc5W_Tty^jPain8TRjl?;fN29l;6S4}*VaPGt9(6Tc>x zC>`g`$cQJ1U$!DYI+>HNp({p$(>!;6#(v}MX{O!AL*VdQe2XO4Lgc2z@KNIxIbHQZ zqQtW0qZ>YA-YWiGWAX=bZSjlZAIgdS4zM%t8`Zb^HRq?&rua#^P%-b9fN4oq)f+RG z44)(!)%DCTONw41Zl7cx-Om{ltiyM-;j8KyT~q$a19QXVOXM`P|B_lkfdRD-vBq;G z*ndAU%m*t2{o9|q)|%VCzoh6b>hZnJbKfGq_l3Y2wL1g3%f_s!eY8AqMtj>e*4!h% z45Vtf*G}H>vdjUsZ)KIH9;UtHg=g4zmW3k?ITrJWGqH|RLn2V~D6y!Gw-Jka?YYh? z-o=i1aOtvRKg?vGbzUGfePL(aWn-<#5ny~buOxMGnf8D8Z+MLL+r7j|JE=3X2L413 z{czqiYwliXAX^8Y==piZ79DA~yh=?!vt2E+K4~7ob&HCW;b26JiF?ue?^zCB5t-# zx|cSS>;p&V*~hETv@6J098NA{jdhiMyl{y5eSFW^*jVfxr@t8MWa9gC*e`njXUT_P z{P;-ZV+T?{`?O%nYnU+9dgRps)+29mwtDn^WDK~7VT;B`m8ABVXTm!!<(Vd)N$8oQ zJ)ikc^GxNA;XI@Eq<7yQqwnDz$63#+V12NH^WjZC$7E}6KDjC_JadRR>&wrsdo+d) zC}z)vWc5~Jc4sjkbU${q1ly9&oz!38_lRt3)refqZbS(2tbV=7= zk|C0pPQ8q7p8vxvW#(B7x9MdNKbAqL|=r^7yIrF4SkAd-m$V@lT0dycNIsK{fO>G-|76a zehuGiJ6V@terQihGjmAiVgc9dT5lj{`9bA!jvfbmmDmFCXl%d5Uf`0{n@&F7MxC9N z#d#`wupQTE{hE2Bb^WNRE1H(?Wa_n)*k)E;U{a-p!r}?Qf6>pVo zM<0rh>Hj+T{s!P=Z%w2M{+G^4ZU`t};#n*Ia;+C^RDRT2WSPm28sE=;VIy)LIkeEo zH_1!(O^kB#qb_oD*hB~QnU)jvtnw@R%2Ot{$=v^#oTz6l+W2;*$%$f~o17@8-93Zx zbF4^`|4DpelNW_wY{pc3nlTmjv)8&~Vjhtfr7;ED=d<22jM^)Ez!mo9v!zXg?f5Ko zrTA-GMx#f&a@Iwn?E&JS+ynO}2MT?(8-9+qL*KEQdl~Hyv;HAHYjU8dO`&=T;>8!< zb8?{Kv(RDGrKp5Akzof^BdUr#jrn{&tmtnmz9Ao9a!3CDhm*^?>YF&%ISW8Bir}YB zF0cn*IzLQ@AEvPe6{G)r)*d#~m-3c={vm59&^3lHE!YCAUr4v;yVf#dj61-(LkvC* z;LDE*VQXKqbk>>QMVKRnpf1B#ZBiw1rV;;SC77>pby zXN@yh)Si1L?Ufpn@UQ>FXnV8T#+NOmZRzF`;3=@~*--*KRnXe9&ar2`;>?e(I>2dd zY@m&N+Q_F3$@w1eqlc?K_;azP(9u=o7+WR}cep)?w!zi21)PB_oatSEKk{n~thBR= zb_&2lel2GOfzy22Q-8z-&ABUzZ3>5#`A$sM!R=~;Tgg)M``9E!J71cfmir z=jm(Z9$9?Ev-8P&_joxRbaL8z<7GEjj(oNL_Ochql|%Nu1Y9k^^)hhnr2XrD-#ND# zxRSuN#t#>@g=CXzt_iL;I~=&;)Nm>1Jx}M)118lh@aC9*F1dMhrvI7r@9<84dp@>C zLDT2$&y;Cx#pLsuXG(i{W(3cqzn9<3wV_;7%xk{t)z2HvUIWFQG8#&;z3*u`Sy%lz zXC23DYY@-N_j;e$A-?PD7oXX`w*9U(jnsG>)4rPjmj=ch8B&r`o~-PSWGnt7@=1D9 zXVmK~dXqzee`kC+Y_m%A@HOn`Y95MBeJGG>J2${S^gychV4%pZG=x2n#w$6U?0Ry)rd8%{P*^_s?=ysO^@ zx_?*N{mM0s``!EJb3Z{b*4&b%i94awvTnRqfKS<%Inb-1AM_gF(hK?;x*RP@{g<9erxmnV;?m+jbU&R| z%hoi0-M#;P-G?4(uZz}qu4%m8z5fLN<5|!Wz7#FdxpNb5mY5ur=wfU#zWeEN4RkSf zV`9h!;JKEd~N{LcjcJ+4)K-kz3zjWbqDxYiH*XCFFYF>$MX#I0JVSg&{H zJ8`)CncLZGF0_ZPT5RH0d-I*R)n3bqTkVZHajU)fC9;F}HaT%CU02LP|0UmbU-Efx zlM}a+|2&O)BKv&tHqWOX%5$#}liEv6O6$MreDoE@tK6w2gR^T7!$(Kpqnt6;n8WZ9 zzVw(j_^2Oz)CM1AxqRfz^Pq`K`T3_4{uxMZS^Rq9K=4nem1>25THv2uF8}QAg?|oC zclc*jb7$TBOw}+rm47}X`olkp2W#)FcpwJ<{FZk|=^nh(;~u=z%)NZwgKv7=gKz%8 zz4OI0o%k$%p7~8l>L=jD@C@I@Gf8UwYcBtkJY$b%e&p~8u`MIBHx@Kaws)1V*W+X6 z

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

    fX~ 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

    Rz4nZ}m2{LKZ>nG0O}?6qISPK}1ef~zLVW%; z@-_}%20!Qz)DAbYM(lG2_;9gF{de)C;qpb&_+OVG7fxnQ6s!7;>%)&#xqK1VzKu=h z)?54)`@`JYkK$Oe@Y0@b!4ak56Xzx4JqE ziyiFHdw+nZL~l1=+QUAYx5phnUkcKFk(oP0IvT;V=1k@{qsv(bLw@cezf*qE3g1Sm zhOD)dMn}A?IMH;;4>IFyrD{!1XWijNYM9;FG~?N;#7oH0UFEi|l-k0U1#MNDGdS^8 zO?wk)Pj=6>8Jw3DvnKIkxoP+CZoj>a$HA6u%NqtZ&F`iM+R>QZd``ApIz{$ewtT*? zQ+A+JT&l?`QCW?KbtP&`Ax<%`^{_?)V*a zH#Hlv<7sqIE?$CrGy?JUz&z^!wZMY5TxYE~9TVh-D~90*(Ok3;eTs%o^bcS@|4yZ>)_c&^03RaUIH$1dbrO3P<@G!D(T1*gU!o8#u&tNi))4sfCQ`((zU z+R&P7`}1tW7oQRQ@Pz6>o7(Q^cg?ds-gEQo&%+CvTWgN3`E{-i3(()UEe($L=&)7L zJxK3TQ&T=G|JuvBa|9jsF7h*m*I~9#(PRVqV6qq8mSP^2V!l%g9ctNA%zzBM!#KXU~)CaMB_(35Q;6Pc98uajcfg}k&o!BkNR1HA3=@0>a)`}+qa(68&;{IA4z%7SwzaPe*%&EL zWjKAc$DE0mVZ~E=%GLK}lpZ1x?$3&t5yuKGL#_joWshbQA zq9#{FxM*ShI435C&XGMd{6fE7$hB%f-%Go}=YroezGJIbW$KmTKM+zrfT7LM~8WVz0AGW(KfUYe#t4~te?Wz5B|cfecPI|24}u3OmaBFHyZ9d z!9%V7{B|1i+t%FqZDK9;T;Ut>E;T{+ZDb#qsaf#PoJ&b95Zy0;_63s@aJ%iV>_QH}*;B zu6RoI^Ta5jXEl4OOSxB4SkgueeP7A3E80rep!_t1TGsTq^<>J)QH+ycLSLApgTni4b5lMiO% zMm`?|$Hrc!munw7GZtn(nLoA%PGf9~sKqPYRqj#0Ie@!-e!cTF+DzPmu4wiK7b6R` zFIUA-rJ>}ml1=snxx6Xck z0Y4^Z{_66$ut#cB^}>y>;oG2ry!nROx93flW%hD8l*K{KVfjgVS9=l;pz{;R&|=0>hkb~6k(VmG!j}rM36D~z zd-`~I%`4cuf-~zkm+v%nyLVByyVa{Cw={HUBj0Ph(7lVuUBl-x`vZdgs4cZ!iQQBU zh6>J#Fuoai$ie6G;XCKMfxOCb*!O_%Ae#N}JeoPbLFZO^fj<{7>NolDx%t99*Ls6Z zz;<`3cZt@AuHb)}a?IhSYUV{1{I5rDli-iDqnB+kcy#-==4bFII*Vrgj7jv>IR`UB zB`>kJY_{50zD_UywTE8ts?udqY7m46Lcl1WubS_IFNv=QU5@ihEv_xhSzM2Fojb;pJ|B>$ zeE;s%O}Vn==p_H{8@_)h`6`_x`OVg2(RpC1$D-KOjl1SCR^$afHP>D~4lc~^jek=myi=29nP?|n=jNjp54LVb_jOi&ADiG^k|w_F_KT?Wlee~N_^b)@YY{T9WQV&u%G zZ>g#3zRvoUTAS{{4jAA4vgqLBUZm{`)_(S|Mt@J!)MxjwM!$zO`qKA%&k7d#Uebl) zwNA!m?)khI?b4uW0XP#_}j**-Z}F^G(;Av82FRcivduskRwIC1WUT zs+<$#y$y53H*U>9xtrn@v%YO`UZi(@J`s?bMudX{N~iLZ@hUuj*<9J?FIWAZVo0r8W}-8&++xB)1Nk;pRMPj zIFD-0j%Qy@ZcJz1VcD0F`s>>`ygum3>o1PHYA##+|zoA>NJm`y`1OS&#ii&InQ&?J>LV) zyT~b#|F)O?M7cQe^=v>-3iq4yaIqtx56P9t@n>WcQhuzftbubS7y^tCq+0sdr-`EyV>NPg2{cQSBcij6G?zE}mU+G6`HvINUrjup^Uo%x=6i#i%WZpF zXS4DAtljYAsiw^`zfHB}+ReoDnL{e3|2Q#y+CJ>s+<6>~CO&K08$AMyDcVw8-?bIQ z+j8(UTwH$xaee6(c;y=D=RSOhUgq;oCupAGaP!(fSY2!4`tZENPuG?Bw#c_~zgy5d zF0OwJz7Q^ZW)t&K?1z})2K4c9dd#jjo3Z^nedrz6w(Q7_=ui1V=&w0hxJFnP7{>Se zIeF4Sf8F^MivseqX9WGR#Mtvl#wS;-z8)T01U?lj)80Vg`TC3Ild~mxR-PMYGlGkx z{4xBsbeZ_l?nRUia=yFMHEOF19@Lt`T;ypbaaq~M72qm`uNTxSp8!Ad*;4ZF$}FCw zLwfN062$Dt_3-B|!|RZT@^I1V>rv1DbNYLaIqxT{zeU>>#1)Lb=1Zu?lbcTc+JV?5c3I*Uo|5XTT;AKIZtKC zaU1uQC$pVrG*{Mt#nOZurw2q2-4E)4Zt$~dycd5oPgiXMx8>x0NLSf4M!VMCo8 zg5Mj;RnzW6vAyp&y4J+qj*m%WA6!g2V8?u2SLJYxuA{(K&id*VMqlTyM{EB195H6` z%lW?}W()6V{aJJ-roK<(u3@jqreCw~5PCPNPEuk9`&FV($*yRW?&dr?(OkK1tKQ*leV7{J=;(cSHQ=*NdET5wx1Bj-FLTCTb4Fls z+Y7umotlV!)KXr+xlc3Z+I@dItE(S)dnH`S->u_p zBi8=SJ*`Qk(W#C8If{$HPc8TZJV0QWzk-309lmIC@@&aqWvsaqi3ZEI2L zeE9XOLA`{m-2ps>z_6Kf6LoIK)S;oRlEG?dfNWnQUFQMYGqfAT5Bh11_Wva(>->a^ zVz=Bw4c)wZH*wF%ZNL|}m3(!hmywT~^5o+lQ|~1!ABxw{Cl0k<_8ohh!oCO3%IpQV zYQNLeWxP1{o3TgN;`40DKLhhz@&-~@gNraa3qCC{d;07dnD1nK!U1w`>gR@pM`F@B z@`6n2o$Gk67F^|@fBE~bKudUBy7UQg_D4-0NC=+ zzx;_{V?3AfyW#|UxK03TaC|v*>%1s-^zK}`x%s+uMJPZ&XH(Yz9xI;Ji~j9Hr*(e;--UC@(i5(Zr#979>8!`+*=N@h@tzhO>c0ov_92&ACrcu; zk{A6KJj!KM3|Bg0`FPI4#5d46$%3gficb2tH@JcGdBwvTlXOxix~34Fw2ImUX5E~3 z)uz5bif-7=`D_PRx9lN)bi*HtXBpgpJ4?^MJgj*Y&vV}7dt$xdtfy>ryoYs-o<{T` zaP?qkIvK0_ETW%jqp7cO_3>kEW1QI6rn*OzqJ^x%^ttkfkl^v2#EWEXsBMalM zjwiue7r0ujGfa`+BtEqAE*x&<6JJPQoz(X1<-Oz--b2@>@xS$+?7DEQIQai{XHbHx zv*2TmUF(d7x4CyF_u8cksQvn@F-O;iz(WP|KK?64Wc0!Y_SB|n%j8DTpKR8-$dc|= zB1`W6l(k-5ISb*hv%b#xLz`v*+k6X~)?MbazcS5rI)Iltc(*}(n}?Si`Dz&xn}U4h z-n%GP=F8l%CpbSc?|oyh8;L_tuyvBk*ZVrOG0MH#_>^JfZ@74O-GeppXj?SC92}1Z zmzH*Rz9!i|_>afd9-=Mh56;AA3!c9aEshRe3cuR-?0#^)_iNt!T>u8Xf2hvx51wga zc4uW{;_$y{vAFm%RXao8EbQ-KEg$)Yi${m-Z_G0{GS4*k#?=gNdDNZ(sOv@JLW3!2 ztu`8IV;61cT!luzjYhu>%~dz~Z8XxxdfJc=Xxmg9-r(|g;@iUe1!qH7^hF)#9j2>o zoT~W~)KA6^HaD>b%Kxsb6+ev(M5$kHa((4@ReFQ-x{j>%&h%y*c%J#{wq2Z^n1){) zfr+{DRu4Emcu@MF!Pv)Hu}k1h$;l+?m3;vGIbCfUW;8+Ab z(!imZZVBI~T*AD;^V*t$YXvY?-d$7GJds*5*wF+ya_xSTc3U{}N;0hZiR4T5uC#9Z z5BRz46*l_yOwJQ;0H4O61SU)8D~wJV?p}b0U#@5=kNwSR=86}QKLlK=WATVr)b=lN_9zaZX zPtLv0@>oUwy=Zyt-28i9dF-tGd!1#mGr1={p7H0A#djl%Zr*#IFOyE5ZG0}9-&uz| zXZN~?HAnULkY{5!lJ72Zlhx+%=T&9byRL(u%fZiE@Ro-jw79TqNkJHY>$fN0R<+DC z@R|8|c7CCGh2|KFAtpKFGljgR&mwnB@(#U|>!Vd6&Sz8o2I_HSbi8Puf)=9rw>ZmN z-;M8w|1CdGd2`Y^qP@;Xox->iW$=>LAX~=8uA*(|t9eS5(N*Y@#cH$6wt2VO6m*3Oa!F#eU%KaMd6JrbLPLDr_k3Gb)gZlS$ z_2y#WtRO$k=}pZ)z|GT=W#L9TU^%)W3%7qB3I4iZz00SQ{7u2-{v3QZ{+g}Vkw90O zd?WUDr6&}{GyYs-$oO;ORn1{*@pH0g0NXuw%h7k@pQ-q2g{&i9j=xsSd@z45i2w8A zUFZ{cE_pX{w*lEqPq;juYOJYB5J&iQhL2tC1E~r~j1;4?2TXnv#vqreYfMEYkph^{MY;Nml(b*>=;-M{Poyl#?XbHFk_IMgR80dt(!RmYBPHir;>-d zp7qz7V?);@!MEM-pnXk69V<2+SqolgYi=HF>j1E8&Rs*l8gtG#!MEs?b5HZv08ez1 zUu|@(&l4lb?>$C-v-&n%5{*xp7>z5ISiyXD>e)5%;_{lf)`K@-&%1%YZ#1!3aAjlF z;f{~lG0aK`2ci$Y)m7XpFnDrs=IZOO`|$n7r;(!%c~+pMPO(yqdEmHURHIXxR^ZJvbB=cXIdN`eYoIB@#2$e7hW8he!2Yc#SDDM z<7?d?fv>;Lw3myo)q(Mz2w#_u@cwOq_ea84+{F8G^Eo&#k2wt=d~D4b$cf#meFG-H z8Gl^46UhT!74re&@b8P&_-ELvrt&KXhSqM3c(XN6FULo`SAN}WbSXZ<3qL2ejy+1^ zL#FWc63RVqsgCU{F+TqqcV4sESNZ{a9`Tv1d%NqY>`@}#FsOY@h4^~i_>@Htd2!`6 zZz4vNfrGv@FL3bP`5X2=@yw&;n)`SIi&z8D987-l2JBDj05}o zz8#-NbE!wLmr0&U@l2X$Dj1WQWAT0u&+VoS?fX#eO}kG?K5bz~S?2svo5#XDbd6U& zBj>ChJ-?GVX)STwvkr51338jr)0Krje>#6PhI~7IxW}w#Wc~Fd`%zP0EsD2dS9GR! z8eEJ2&HNIZvH13e!zt`WnjG0BUO`(IbZBT=e0Vvu`uHzd-vGBY^3Sm!dZwXi@?qKO zDDmnv`0m1flwqr$kgadKJf3K+sXCdz{nK^1x?cYF%f4NdZqlC{kF}3kdDEQ08y_89 z0FTI*6Movw9O2?v9rtu?{1V{(!WZ%9fWKlQ^8(@s_1Ac}Mw#czmnffN;uVI+G&hkQ zhnFVm|76B~`$p!4`03@0{jZtR>3+FcS9f*md|CH(M!P>IXCDPe=oQ} zeUzP_CGh{KVLG^oXB&9d;?B;`{_sYY{?bdU{XT;8v;I8&R*r8=pNdap^xU1q&uzO_ zpCt3zz144bxctfd^L*WWLN&ylZFjZPRUhIv`F7r4XXx7GRdr9Y=bitx`ok`nxz?sA z_v_-+n;mvOW5<{4Uub;8`54>t`_7Y_+5R}4-1G+ebo4ph@t!}z`NhHUzWcvvyrc8` z&KvI$a>j!`RsMKgzQ;Yo?9Xav9k38RR&;JubJaB_hb@#{Z)a{WvA5dfcC1kzWto1% zADu@$ycu751$=4aS(-~~KP>C&em$>$xt|&!%+HmBAz4*@^&av%9%G(4t!etRAEE8; zE7@m&o^8etPtjHn{ASxz-6OSkXQsV4?R8&??nNJ~UA3n;zuMkS9!6<}+MRj0s6y=( z`FSV$U3*A#+xnW{mfF!eu7j_ac3vbmWIDMa!iRE(hZyH_#m&$sZV%pOzvjY=UNJF1 zzjhopPU{TXhnG8s;tq$C+tqI!eSUy3U}J3UIN1;CFYtaEo2fW`Iq^H26ItA`8Xcv4 z4y{4TzUJcl_`Hnt>%KnmWl}oj|AG#Dh9_rR$%0r0_mbeKSYM&!4-;%m=gf zZs;;^o95)4o6Md<_E=2!wu%32z6G&wWW!v;kK3`s9{AcxzS&~(T~(`JdC(O+(|~*# zIC-Bn$8E&Aw^{hC9n-rz;AIaP_1BQ8t9y3rH_Z8S?omVb7u@@(8xP~vcoJV{Jj^5i zHIIHvP5dyczuSpBKQ(2qC?d{? z-;rBWRzB8Oo*Kuyioe)rXUG1Rp2fcqofJo@_30JLsU@p-RZmv`#lHnPv4(fLu|i{w zb+g7=oLfKE@oTAxFJ$d|ly$ujbkkTCn;a&$FVXH-H1|y|le?eIzp?bOzQFHa%k>3T z`Y@bKUKH;+C3)$|m6!i;{RMQzjq20c?SQVpUCa1u)?R1FUyiI~#_x~QoY!FLv)i%# zi|fnB?_c_38_plG@tbV>ofg0B>$Nymp4fWUVjAEV;a0g_y2j7C2L67!2DupNtdStT zzn%xv3?HWa_>I+%S$L4Y?05t8c5%iay_5b~CBc5bl-KVlzu%Gc(;mhd+&|-iZ`R)8 zif<~0c(B*e)ynzey!PKDUs=5T>In4AuRoC>#wmJA9~t}_e20u4%Hlg@^4wG4dkOe< zXQ?dmeQ(w@CZ?n}IR7(=&d_-t?u-O?HiY))N*04U>H~SO@A6?+oiitYC&R~0dH6Ul zug&kA1Rp1Bzat|@7T-mA?SJi0Z2zUa_FsQBS1)|!Pi+5}dF}r!ul*bT#P%P}!~c)+ z+W*K&+AlTp+pN4reSVZ}6HnG+`*gNNGxjVAzXf^H@}E6pLA<$(kC8`mM(fGF&EFFq zl*@`0nA)d-|;FJD}%Z zBd^)%`F#6wGX5`O&v8&@FL&+xy8UNr`vm&tWbMEHT5kLA%WMBfCux6X9{)7JKRNyg z_CmZwKHm56>(@2n$ICy#c3d+z#JV-UzV-;n-&YRM4PK<#K!|+n=eYSp@@&J;I zH#pY6aDDr{v(q2zNd8gW_(xfLkx;xX;2#Cso|M=26Moylc$*zhAinDB-{SIUyp(Z` zYKT@PnE$H2g!Ulx0KcuDUkYAFbxb3l-1cen5#Htu7Ripu#qjgh?{~N)7a?E&+WAFp z|K;%1srLWCq5OHdh2z)5z_BazG*K^0T%JuEr*e+tB($NzFH@i0TVPvqZqy9gRtUWTr z))&~wJ`4F@i#{-aa2|45UhHYU`EtVtiv8S53x{<0t@N3%za?90Q+i5svwZy%ls(Cx zd)_^lf6czvm%WmrSPiur^o$!%e_sBh%P-KJh#ZrxX1#H`H`rOB+@h-3OG8K4OUYX3 zbnq$?>$83KmdvCptM(qPL^(!aGI(aUHTBwNHy$8aJ+k>dJBjvqnecY@gkux4r zj*Ijd?RlM5eol^^?}B6cHv1~syY&9pyYI;6B@2HQKF#(9bbMxf=(gbcX%zqUI@a&* zXq`lj(P%u0E>-ME@uX`bF4y1otF{luj;#&)r&o+td)fV%rWPV=!`P`o#ml4Q__vgT zH}tgfW3)EhNZwY0wejWWu`ks7a4ZEbY8$4<8hEx5yf(IwA1#}M4HC_htl3>g-reM= z7ZctZpZRnZzQL?CupSAQonLqK$lcB1vSnSw=;i0@{&h#|&AmmmQFnCG-4729J+0r% zX(NJtPb%*Sx~Z0T>G#nI&>%_vkZ4#LnHv|q^-+II=mE_RZ@oND&N{${*4$Fu!3&)+F&CSX7Y3VKeD4)#G3%s0+UgTvN zIt?`!#3wgULsmKH_={=L%zF1Z5;uB{ieP_c752%f9k7+@f5OH8~rf6 z$+_~t^FjQiclTjc|ToEJ;6r{bJ1;1_{I<+O>P z^$|}m1|D=Wd+S;rxZX>_(*=g7&9&j_g0|~@o?Zn{+g$U)j(5S&!LbIv2V+K_k7wmn z#lf}X&nt}n$=VBR1LhCD_=_WcyIDK%#+qYm-}LF^-nZ+m*?6?%ShX-#qDxkyORC|W zMfA}%gSsu~6!DU1C7-at>;VTdv({_pUgYjEZ%}Ox@lmAXE%x#Ue>Y?DV~Tr$$Hf#! z+V5g>m$Lb)T0`ws_r?=GMB^t9@`XIw`_Wc#Fdv>HC&UvKTs&%nRFd0@eS6tse3JE#{0#ewj!w~M zZG#tcV^13&-<~C3@lVIrhIyxvceEeaJ<|++YQziRM>Kc~o8#nF`#pmAl3w13T~(gz zXILW@zq{*C`fH|T-y+8||Gi>#BzAGGc%wKv_?0|-{f$h?I+D<_5YJyN{+9<%=_8$VRvqDMhzj(*+})X(9B)6ZGjq{h|7 znOAI8zOL%J%tgnEKJOwYS2*cp-KG{lqPBBJtPZ+H#z(hZ&wL8LnCN^j3%8B$-sKhE zyZhBI@84bS#cpi6;qVQt&kT|KEE!;}D^`pxwevV~U%IL>pJfirD<%H(39i%)a2nwe~qZ zUx0sBVQgwaM>+c6BR|o?Th{T{)M4oyg`U0+cgq^mlyrKr z5^5LBfOh?iYi8&@u`+5XO9o35oHfO7ebXbp3`XL~adYG7%dHEbWl7DoNKEX21L*@|Dx{TgdPFzl3M50%zsab#Is`-4yPSZ7MhU^w_0v zICk+9N7jlLJ9$TV@}$?mwdJ9iIXv_z&j`2Y=s(XYe>wqPh4%!0rSUm^Tz`uE_|&+o z;bUpr7XU1mRn(>yW?DzK3w)R2lT3d5P`hLNzACOcKn{)>vuwhDvBsC?yLeK2OH+)! z;6BbzXMDB9q%0qXjqk1BQgz~6{YjWV`Nk{dM_@N(XCv5= zAkKsBrf4?>|Km5Jm&(`&VB3~lIJ!EsE7E(`rEHqIbZ-QDVj{u|Q zW_^MU8J51iyAXLPyDGjLS&B@YOT4$(pM#flNPhMKzw`Or-sKg4j}CG%a_qv!Kz(JW zf8!2su;;hGRcoS>S`$yAzogFv zlYxh^CmDO940z~gn&1I8>9aI2WZ*G!{Pq){cZH{) zf+z9pGd}G+{@i?{)T~cr=Yz_VcoN@7^Myugw>HkHiY=k`nw9CYj`PlOE{K|FGS$~pGaT|QMi#kj6tGx{=VCY6SX#bV-Gn$wONC*7O_ZZ7<@aL|& zs#G(4*$Q8RW3vwq8)SWt!c+7;3Vq+BFs?J9*wAixY=O^Xeejrv4`Xu{!X4AL*f@U| z{kN7|U41>Z7qF?9s& z-7xt=t6T7;_^rDv>kD<4&5gUc#CFfdO0>6PH8LPPOk!@L{#t04dF+>YpTfBFg;rpz%4x&MQNXrt^lj^|ym`Sce_pW5x2dgW zZZ5qX?zreF$9o?++!?O_*={dtbhrHUd^$;AB!KTL^e=z$(YJ@577yuco+a|<7=y;9 z|MKVlo%O*fVQ-MyF*$yK{G#W8Rk1LgBlRfpvE9VOcfmbcZu}4_PZ1S zv-(KDOVD9f1M+2j5@M(iXZ9!B@pyjixE<0Do$rtR>hJuxCo-0)p|RH1KT6zZ$lCT2VvrNy5p=hFX7~P7 z@}4x8GuJJbnf8_wV_kKg`crJo=Kl4}V7^U!L;Hu8!@rjSr@J?u+#lCoH+KFaFM`@biXSHObR7Fy6`2rmg}Yby#=Z6*nb zNVj&YPwlg|PZ9zW)UKu77hJ6ggg42yWz=0->6Vv>IH_$}YHNAA&w`>>r0oN^?e4SP zE}2Z;AnjJ{8xb`B@9&)Z%-l1XMA7c&^XK!qnaMr(ea>~RbG@JIT<1N!dkwNMYW7%W z#&XQF_1D_*@oc8w>BoDJE1CKx7;Cl9-eLl5c&|m9|tK$dojipa- z*YDI{N^-xkxF#;S+XBv-`Mn-G(3oZ0ev0R;j&^b6H0*+Vk`MRKe3%`)hw0<>@#*z= z*#!=d&Ze^Xv+M4kOJwGP8rfVO!iemLtZ)hJ6s`skY3;YD76PZeHS=o zED8MTM6-8~e4nnfUJRR-{g7p``H!958o?*><5#Y3#+)#|WDRT6<=Bz6tiLzTnHs~s zf|r~3CGYj_aqr9T?cyxTnY2?&J7F6K+medO(#{p>c3y7$*oC$o&fZS`byhnAUhG|? zv~y{&oz;Fj?AuI!KC2yK3Sru5908tj!FHC-xA2q#&)r$={M?J3-c789{o=uKHDYrs zuAmqfzQmS>xt!<8IA3QSP4OrFHWgh{tux}be89vA_1x0AMT3KPG9S$O(4GEVyyWI$ zYV2q9l_ zyzH9voHk~)LoN7yv{OsYMR4q{oget^w92pkSYdij>$2MUffw5$c&J&PtDSfnp1qCB zuJGYuPH)R<=R02POSIEC0z6xT@YKKGwA1c!7UQj1?R>+F-6wd!a}XXgr{FI&r`Omy zeSmh&obsFIw1M$PqSMoJdQH*bI?X9M((u?G>KBT~_PBYS7OSVf1m~jVn%9*++~wl2 zexDY_W8`^T9-9_3aglZ}_EEu|MT>4eZuQ%NSNAsV{Xlv?SWC-jXS)}>){H;*d@KyY z<9#SSAKS9p+2+M&(N6gYJa%Ooo}-PQw6ep@$JVTNwtBHiw3976%zR)sr{<%|&c}4x zHS@u5K99W|*>PcdKB|faCs6y(>I0j%A^T$ywadTf$2X&X9+7X(rRS7opK3?3+-u3_Y~&0t)$dDSQz*W0Z|#`avT!uM4m(NpecFpT zI|&-vS*&x#Y859o88ce+wOc0RSKi=*>rj*HGea4vj$H*v-jd_K?T<62MT zdmrC9$EmFk{OSytBdnMAVVf-j*ZrImTKrn`L&c%{AB+%Byn%c8S*L#m&JN(8_491< zW@PV8)UgvU5)ac^eLc*F@Sy#49q%H30nX*8$)~Fzf28Xs^qdzy(sMI)Zuxwac6;cn z@!a~&ijg&X1*R{Z&C!SdW^)h1X0MTLm$sSrPU65Pfak~fb=&dt%ki&OcaPZ6EtjJw zWZUc93*~F+Ty5DFS_|{!8+#v&mH!?Y!Mtm2knMN=lUI2DY37hU;SA}E7&~uKr7ngy-hU>{5|^(#@B5&dB~mP?Wg0t zpuNBHU9w-&@ps}xgPg~GdME4Rbr*Z5b&kO_^1kbsyIJ@KZXC*mbK|gMuyJ*2(C_cY zC*BSZOK!IAZGEJfGr*I?ks6uji0aMox6W-@x_8|pI{(DwSydrt5?4m|v);fJ-5;R_ zMuc<1l`p2TskVe-|53kQ@ppd5{6Qm<@oxSY_f_4@pM3mZv&OCOip%9|{Yp9loSXbe z(P2=Eo<~q?z-t?L9s-57zYh!eNP5$3JSm))fDg*yj=eW;jg8TSo z4_4)StLk~Ks+gM9e1f-oBKfv{}bq6_V{VP zUV6z?(R8|Ax@wJ2jd-T!sm>aj0euSo6~9?9sJcJq+{kdz5#%6eZE{XG_}$=f4l~c( z&NGVD=6b%+JYP64Kz(-gp>xT$f7V;ofbMFB1{yEn96k1D=xlg{ck}7vy~@Ws@@N>| z;lZd+dulD6Uj^RveL8er0G(U88l7+C5;UG6mw?gIysb$tnh!yj zL(K*8XV`002c6EsM^oIib|UAdqFa*hhIjcb84e?(n;&ZQq7RmP;kM4&5WE{UHEa}L zze%){RO3DZex^c47Q1wx+?6`8+=y z{o|X!(Jxthe5*L(oR?KQiBmR%n{xDOg#9S+3s*o!q5D!YDlmVW1sggoTSmFLd;V>} zHFT4=-^>~E)XiC#xzwCt`{bUpD>LV;3)%_J*&%f3GstPpSuNkqobgUz&c2Vn-%tJc z{m5mm01lANxp1&pI6w}MgoE{O0|!oqp$)7lOGF)<` zA~a_6NpyyCs(y3yGqlC$Y`K7F4zwyhHz@l)VIxtg-^+sF&6 zeMcs2=(u694YGDT71+9ft;L5)vfasT!B-OU+A4vmKU{odW~g|x)>4O9Z;`Ao<+B*O zTIVK|ctuA_&ONZXIOGA7cjOd0Z!zO30j?K-U$75&V~z}*YvY-sBa67~Gr*6{r~Smj ze?RL=I(N3hj7RJ3cCF+Y@)g#WWR58pzMo}GZx`Q}G1tY&ff4a7c+o97tG3tJM%weP z^U;eswEifXyA9oHcq}}U?P_f&XA7q5JUZJp^LN=_L7VH3(RKnmQ$B*Ty@Tz~fNrOA zP2*Dj$yBav9{-2+X&xWr`&}-+XXDrD^`6f0@RN8C-txTYJ+?2qhB7wTHqXfi-r(9E zpF4h?vwi$Gzy1Be_J0FSq+s{k|MR!f{*+YvzK>$z|9Ot~Kk)|bABKN|>tPN*hrthP z2ltd=iw4K=OpZRT3-l4p|1kMMx!MOme*62&@DYOTcjRb)`uVmGe*E?a%dm}u?LU~K z{R>8Ezhsi|la3F||73sqp!}&jv5A`Twc4?-l$(`AXXt!3J@W%%m%(_3i(lkp)Azu$ z2lPHZRWCZ^1UjRUwzOuH@gD06hvZvhJMP5q>cZzz3X8LGI{?OySbHN-3OLb8K5Y~Fzl{84f+mJ)|j z?dkQCYU3xc#TMf`?nmdGSl|7>!1fcaA9MYP>j>A2T!*<{;7Z9VzfMZ+y0n~~=gV2o|L5fG zN^_QRIv-y?sNfiyM|Up%m%%U0zxd@F)Jj)e=L9r<2s>W6 zTN&?(U!ZZ>LOXpLH~cb}nw}BG3qrBKKMlRop6FF)E$Z3F0`z(qJ4^K1H#fS!@N1lZ zhK}u{&%!DBLAssu0_%i^-lniF0skmQAe$@$9{48-|LpX6N3a|4>#jkU>EPS zi{Ax*fZw~ZVb(#*imeF`jo9^_VQ-djvC%6$vdhaqa)@i)xs996yIy|V4cLV}^s{qQ zUJ7nQ$Mo|Lz+MJT?tmu48Tk*Y&Ff;Lb{~VG%a-ZTrRoaX*o&oI`};K`(q-WHoOEe_ ze;;&qIoD-ev$SqJUfA#E*~nohQ<>v6 zL7B>$6f}wqxGwgqm(w(Qm>6v~jh1jPB~zi(z7@Wl9D!CZ@o81`SpdB{cnq&W4@qe5 z?b6#5*u^8!Tj;#$jrE)VCVG1iSYljTxW3HwC9W@WWz$>n2=pf15Im2n6C0bHi2a>6 zN9UIk%Zm_ufoIs$JUu2n*DnbfoluXS+JR0m_im~l{61^bW$3zt=t7;1XYYpwC!izD z`{>>S znJjxcdw*j76~xlNvLL<(THcPYTg&(#NA}7$JB010F~|m4feq3Jt*!G4jy%m;glrMn zAf2)&kY!e;*!+M>=A**RNfCMiJN!{#QGRiDzPI(?)ApHXq*)0KRH_a6aDu2 zRQtbU9TGatn1kOoLJx{P%I{@ex=i*kJo9I}&Tb9Pr|ded18E)q1nubWY3wV)<{WhI zC?8`NYqCrHca?{swbbCdM@MIv)_e&T)$82UH;D1FS&I4F3)}!yt;Sy>0SQL z`7U#I=_v2EkMeE}^fW&EUFgyE`>@{S?_B*Z&RRtnJgZK) za2&LG#na!WuK7E%Uy>W2tuyX@yZ!loJ^f|)^*!M8Xpa8s-b8;kUn>)z(EvW> zCr5Jl`7hAtcXISu6X-Mhd<)rQqxR?f{q#4??|*{+w&v(>#@p%7j|0%(usFaL`nxwr ze`DUDKN~Me=c7sfFDSx>GVwv}u~$v|{EnAXx&48hH$UccjB~IIT@q8u9WQy~_8-OG z3hGRoM{0HD{y#$d75EP$wZC(e_A9gU!Hs@I56gFupTCqCxrwtP58YZ-`GmZ-Mx9Z> z=Wg=rwTHeM+o22IcY705gLV9KVPaMaY_ z=u|EuGPUeu)EnTpSAom@7KH14UvzsoEu4bwDqtI_p2K0Ye=kjMf(!k**UzPx69R?{ z$W@U3?PNYmk>}t2GH1gw4^ezrJ?ruoYq9SN^(^|e8sD-8ysb^)&Cbn?0M5n(SJ0k2 zeaN1d9XCGRyHfkbhHeIDC%~C%8vV!2SOR_fAI09o4eZm_dX2^5yYLxG;)&Y4nAUO= z!WZw{&vUYcERL3(IT)@Ze#UuI-0xx^g4WGDui;#-{FdVnZDikycjhV8SSZEMUWshH zi+8nORD7LB|1}k3Vmez#^?fFncn?<*M`+_LuKbIusk348RZ4hA@VQ7^XHovPp8T~DuNHX^1nWC$e%hM$r7#XGbB)0h8hHqSN&Jys<`t)_NFQLa9 zm?PObIw!zAqZr9r>btw=DmbrF&&Y0)pSN4NS>b{syID`(?cMvJVsy`W1#OC#JkM{k z1^N~dvxsUBKWkI0KP%Vg^4|jcm9(+Q8{9?vN#a0VwQ1N~e@y|nw1>gL<$mv~MdlJ0 z$qT@xeMRqu{-l@h`dh~b7U$xFhd7r@dy*Bha{B)Pa2@pLs-b`B3vlwJ^loEGhysdWdF=|lNgMab2@PCcsDTj(po{_#U zFRvc#1n(winDIW6RkJE6_iqC(r&mVe_m#$fO~YsM^@w>Mgx0H~-sv^S1L04!1g}F& zo~g6zVKb~@e=+i4e$~0qD%AuG${hoDZAt9*(rDbkeI;;{Q=oWelJzOAN!^(R`?tvf zaqYXfXfN|)_@lx*y&0Ga;g1bNLvw!5{lW@r_L4utS;4myUS_{@7Va&D_@3!@wDx%a zzJKBQAZ{)W;O77Eo11^dQiiR61n?12P8#@-{?gg(HWwq*(Ly~C;=WH}@6NBQ@Jwz` z-QK)a5$H+lOVWd3)^Z!i-S=QK`3KO`Es{x^<2o;Fa((pNVPrsv=c;z(ts3n-1llCgD3F751 z19)-uS~`nZhXh{Hi{+{CD$TEG!R3Wz!!O;Hjn9?DokyeJHLOiI`h9-@pDo~Wjn26e z{esH|pKfIj!xN-8;a+1AeG2!6R^3>X+cpZVev=%HC%C@B zl})SKzxT(OlV`K$WI|w0*zcZ_2Zv2Q^T_l`{zM9&vjX_^RC@uLVDR}Uyv$r0IUxLr zzsUz24F?(c>J_|0ChK{z971_wk!(((!j?4*lYE zU=@5`FT6l2YoL{FChz*aM%U^4^4n?$vB|L4qQ`?ePclyS&F$2ckzP`abQ-xO2c3K$_6pvs;W=VI8SORt?MN2?JHG=HwHB={6@2$z>L8eR(PKef7v$~x1Gtbp1Qq6= z;qQQ4+sU}ahmzG=2Q+pl-(4QD{*EA%t5Pz#!N}x4&}JB!+zd~xK@NwJ$@(7QyN67! zVSP!mI4BzgfSZrSS^kI9_buXg%>!^{j4c3D@P0l%dpBztR?lOfj3s~gQmsLc!|uLs z-<-4Ow63;4e;hewin*rrk)J~!$dms-0B70zb02sE{;T%oneaASa}Cc)jxkU3o8gm2 z^l3Btb*iJU@FlVOqNs^+Fa1VsMqI_xU*Pv2p=%(ZAxJlMdeVAh`cB>us6?nRJO zqK5?dn`~nC#j)j+qj9aZR&y_b&91g|PM}$vA?A8#>)EZH;vMYLdf8z31&UP)cG>@_ zzp?*S7pV%LN_?;V9*PSbq^6G^S!6%{t$7C@Li4LURENhjj_tbP`lg0?w{z|G z3O5%tMdleClk>QQI^OB?1nsj%e=v>?#=RU{=K%au&vQ>R2aUk3Tz2VY!`H+PyZssq z8y&v2FOm8R+QV;{+vl&-VO!rsYsRmSzc}TucCG+N*oMOOK_9ON!QoW$XX{$L(=Px= zvN12#Ozn(jYG>%X#@e+6yy)FK)40)C-UDtDcM_*qqBs-rr4`^A{K!7)W&hs^+Brcx zCtePnN#e%}_d^#Io*BaDOA=r1-AKJcp4XY7vc>1KE+m|zudwAxJ3dh2_Wpe2jFBVk zhw`qN8QaNPlBH{Ve|gi4d8%EfdAywQ6f`ZHw}G|hJyRCEw3}S^8}N^dzd1ctv~tC~ zf|bkXoyZRj?BcnmeClO{y!p@buI?SeUw((?_7Js2z`x=5NG?qOXJ1S#q zi!)){MGnGFF3HlM9G>FlYCQGqm?tOy;>JEouMfFA9WyuL2k}L~M!G`t0B)2|r)TPU zMsuK?M*Uq4{i2`t_ulGpMfX2X{?ha8aX^-AS;78>eqetmZJ2g>R_B0OFFECohV@-%ifTWx+S2|gCnq!ypST-dfDgLR`$^&}-M12BxD7vD zw7f_;kEI<8eNz_BQ4E{e`B=d3}b)iwunyH?5d=(kp5kbIF32 ziZ6&hxC9!%6B@r`r8Q>7Hmj0vuL;6?S|QI!+*K z6>Hj|eZ-y@`%OQ4_{MN9(-qgo7OIo$k4EjtC{`4*eX{kFGRF4n>A^DH+d)8 z55w41|E-<fBhvH2 zelGUQ{QA!sBeAkBWWD8OWDfUbQ~ibJBT%~{Ezez?GB{VmZH8$MR`@#@&pnyN-^#sv zhPYtqIkU%Qi>vjAT|W48){v)$Z4A@Si=z$8Q<4q3|EnVCo$+bDJe|+mGB>t~xzc*0 z#*$!;&LKmS4-vnjzN_lGYA;zk^GD3&bM5TOE5{$`!Vaq8yNRW3%7kYv@caOHv_{ry z*2sc&S}Z(Ep4)~>}9qLZDptM3}C>L*Ih?|?=; zZ<@bf${(+6GJmb?M}L#%@gRTa@`qHfS+#jRY<>Cf`dhpnf>vZ_JdMnEHbeva<&={s zy)WL=TJ5LToZaeC<0ZjdM!c5&im}&>YuS&VbLVJ&jjlPkK{iMx%TM!$*%{VednGhP(I!`r0pVVif(HoqeA8OmBy<@&@+S3|}9bkSB$TsD> z{N%3M;JlW0{DtPVk$J84=e5qxtJ@D_{BXuD`^55%jl;h{KP#FlQg-A8*v{JfQiLtp zcXMd|cF#L~0X{3wv7fnk02y{mPhDt!=^F3!Wz2B_HTrrz@4LzJwEf&g{!I_~F*YT9 zp;~%c19{feOdl8f0 z(&*(M>F)FPEx3KdE6w;W71(QnaT)pFJ-oM@_jcd6U|V~BxUKPA%|lDitviwnE{&}V zn;;0+zAU&t4qOq=y_$Ni`lVcL$bV4nq+lC6v)a(Qi?b2$pw2*p>StUwBc{9?qx-Rc zrTc%t9xtc+dlp&Uzl$|heNWklKEALKkEU$I6i-^4xB*<4x(Te|_0V=z{z9`hSxeo8 z1InL=)+Nt2@tHv0sitm{KBC|+L0tyT$2#J6No)?~zP2=#&ud_PUN!j=`0~=DxoqwC zlWXxlF6I3{O<%qE|Ib`3SPD9{##rSQ4BWw7365^y63w*ow_wp6YF$mRbWI!%Prcxw zUFBVA&euwg0NV~=i~O$W>PE(#L|2)8eDo_CX<*%w^^GI4*ILiDZtiA`EsSw3boLRo zM_byDuJ%qstG2yq^Fpr{&3#y71@7ng9Apm8aQ%Vn_gunn54OmzaTd?Yja7e3P9d^TG!NPqe`t_H_{<@c-D#LwwVdPBNQy5Uy# zgvf8ZfZrTH+x(ogKMW7Wi^_D?U1i9C&cv5ie9S+A2fJ5@TPks)* zs^q-YEfy~9i7lCNi%fVg^5Ol(dBD38ehsb_^h!RO>UKo!Dr6t*L_@%wBGnYmVYRG>--x0qPd;)T?j6Vb`X=H z?#L-{-Vc5?$0eb{BPFjru(``CX?u=+Lpw~pi3zMT7Z6hjcTAwZds*nrQ-XgPZS;Vr z-JXYDD;Q`;HZ5mNnos?XFSPew@=}&fjK&o^lb+KUja`KdGjjl4E54z)#7}>~erw?$ z`K9*{V)K|bT8Fox{Eu`k&w`HUc~|ey$JGh&+0f$6myJ@-n1j5MJy$X#N z$LqJ?6_0<8e;;6M!FYh|U%lu2nit=%b2FH4=oKADoI~paqSMdr>$?Nmf`&Uy{38-& zCtDveu>$7M#6!>>}oz^L%y_Z%fPXBzC!C9-?dQJ$zBL z4IGM}S^RU38nA8>?nP^6F02nKUc+`m-YYH)U87gz*Iy1Fh$ba(lE@j+(^6vX%9~2m zvY(pqmgPhH$OWfgPocja$8KAW9$iiyAmsxQn{VTs(<6Q0M)8OtoO1{naI+7~bI_iAXz{aqPceMUuWrATl}oSk&LGzr zu0L@7p3Cr6Al9-fFvpvHdKBL|9#TK*Pd@u+pwCoX;Gnk(d3ei#Zg17&^uLbWF!}tg z6T)qZIUiUTS`|iL9r#LU)#Hq7-MUcf_r?lp$m^N>kjXPUFezm6%+}@GXV%e1E6;S3 zS0?*r>^XZLsvV=%?Ypw%xb(gCeKl<)Y`O3O) zfBv__dt-EdPJh|2S0Dc~ z$%J&h`pILF-;Gz9b->P|vGIGguSfND#x616;Vt5fx_7``&Kg`!oHf2Djk7~JV4Pb!cy$oQxju~L zSNpVA6o7HjTZ1v`!-y}L6UOj+(=ax^cQ_uG)DB({gmH-vW21wyFaYEA|2;6a2Ve|O z9u8w&?O-?Sfhqo|^I>dvFct)0T=>>tBu_(g-AFt>Cmw4jr}5aH1IEwS4*nnr^@(?|5{Msl}OkZv}P)a2@0Q za=!+r#+m-6`{nqOjgL;s@qY8Zr$>3eCiwmfIo=2Ef8_mk*4D#5{K5V|n1=u5 z#{aN2Su^3kf8S2tPts2C{YK*cU5u|7d1>Zl4|(2 z`DHs^$!ND6+RoK(W9{HCg6%fuZr5||Mzh*&AE90N`G>)F#m_n5J$3rr)>3k$R6Ed& zzkEt;8Mwwy>V7Zw4K(Xi-~3+mC0oRenkCw%Th4|2EiGduCgoQCrxNYD;@1EL@kw z8W~GATn*o;9lS?vIXe4Jc<>AV1HNzc`JOmbO|ie{!ap~&U@QC&ABVJV>fcK=!rOXw zl705v-|HFb2M>SdXw5&(iHU!Hqi0lOIM*{T*k?}hOhj?ltY@YoA8LL%DJD6R;F)UT z`g%s=(_U}<@2dop>{-Ttw4QwzRg6>jBJ8==y@qcT4t|i_9?zWhQ5pNS&Ld#mrIdA- zQufcNt>8YK*}TuYgPnJ>pO$z;r1QgukE3PE!$a?T#I$iVsSLSxIGodL})xqdLx`Ss(GSHAVi)1iZ}n0X9e8f*6X z%ION-Z#YsrSQMPcBVj)e!JciSxY(7Se{JiG*RtXXCLWkxPs1mOPviWMI^rnA(akwC zicg+kEodipbq_JC{;||}VU5h@p@%yT-@|#7_ynD-*CmKqb&ZVDK#B@5xid5Kdkb zn%`d)n*V~<*={EPfi=rsVy(sO-RQfS@5B*ZJFXwa=C$Ua{(5iX9pYhnrp%gwoHO6`3@ zZOzVXL-2LdzQ*@y#W#o(iyjW7&YrgGkD`fIKdyo;WB0@ndrH=dx5H+?XyxkiGZm|6 zoKfDQ;u7q~yG1#21SK!lI*{U#w==I5s~gW~&Ge+!0*QllVf#c@-_AT1bLMqXdM@`c z##)P?WL27u4DBlZx`KK@XN#^@+bh9ouxX{-e&Rp24Jk1?ZwMyl4lFg_d&CYRjQo|a8S-%izcY0 zd8`K+FCJ^;?<8`+8NU4t^DmjM96vMv)LzqEmoWzs+RvVA#nH8ASnK~idx+K70p|M-zwL`n+XVv;AQJ?GZGZXj_Qfx>srE~GUwxT=#PflEJo;%fa~U2` zF2)Q)s|5p#`Cfti5j~~xv>ZG&p1Ib?(+u!b0T0YrJ^hUEAXs%qnDpaf+MLRm%l$S~ zQ|)jAa%K0!dyD^i8;jy>E!|wtX+jhYKIk_oX ziZI97GJ+g=_O@#s-V5+>ID?19-ABj=5h?yQ%p`9=<+4oxj(OF6=>{_G0h3T6>bOlA)5V z9^XqjC*YLUWhMvYZK+4CxvH+X`fhbZuc;*D`lW zbgk;hNOyNmM(3-p(LLBULoaxzkHDj%jl#IZ$R-gy1{V?-PU5R)4M%IG&upTvpO}gaF zklKvNj!63mHZO4a-%eiI-J(3$UbNne4ZWviE->4D~Mx3Yb&>Rc{5H#BDj_nWx)Bx9UL z&Ey%Sp}6*XJKW}iV3?GO8(aK7Af{;x=+Nk!5k{XBOw9 z%o@D0ZOLmj58YKTwrzd!=C;lGW82z7`E6AZYC9m8st!Xh;*VS5qr0(HcwfHKz?Hzz z2w&BC)SYHtL)3L-UgOZkN3gkmiJzr&$WOt0RolvLL)SVJ*}J}!z+64?&#pPdPn}+NbkT~svFn~pP9aRhyA|~ z2ixuCUJrK4DcT;uX6d9Y+3Gq6p(i}1BMsx&jxyeryy)b<*0YzAKT<~y;7)8N#aXOO zyYY(FUErXZPlbvI! zIeM<_rCDo?4z~`zlVP+8Lv1-VdVKo6sxi{WY=?Nt)6N8qdvyg#HIRz zCA1c7tg|{tGqH4?_``|aFmw|Pd*Lbn~kH=;rZh>A1QraPbc)* zeG_zgD|7>$CYL~`&?;vyAL)T!6))*W&cx5%VCvsjzE=H^d>{Ge9&_DiWJo?aNhKZ7 z?ZfiLOOQ1#SECC$OfG?^Z-UpME%vMp%J(mMedv4g^EJP-@e5|Ht~{gmdeGtNHcLC+ zr#6{q`J}npRC^V9XPy$@tpvBiwfwv~uVg^}^6b?s<=^bR3;jin&^ed!_vQSa4{m4A z_2RR@?Fn#e=X#NmA8~$roNE|8`go4y!1GA?UnNHNr|ltU3-t-l$cO~ERm{xkMyJbD zwux{DAGMOhEV?@Y&3p!(&`3_|0c;cHsvl;5<1FNQoi}D+F~3!oc(Jn8cNiSR;fH>B zR=U0$xzGiUBjCWGTYkZY+$epc0{)InR))un!X1`yEy`+&{Qx#OY(aMx~FhTG+s<>QnIxh`%!yayP#dw zCrJ?R`M1+9-_6QA@6hmieP0g3F+%^M;h_KI(KmHn;(4a;aL31AcKujiy7w8spCaZQ zx%pS>qiFbf$!~XjUwOs#YsdG3>z7!*%O$(@k1)Q?zjpoD@qNqnd+ z+l6m1zBg+BR95@{E35tgQttmK^zlaRZ~j##{MTo-|FgH*{yVeae_vMn|NJ)F|9Teu z@6KxfvA5a&d$Zbq{pn2p{L&k=Ux{4J$X93Ilyc^~k>^Qd5$jdv+@2kNEd!I6#Gcp7 z>RIbUrYg=z&K@$#-wTU={zqg6Hs0xoxBZbCE|05`eWL5QtUR^3gfC^m+UUa?-2eJk z<>OzZ_}a>k@4LPN@?(+ub8)5sZw2M^8`0x+PlAytmfo4y5PmzI}zK(sfIc ztjYIqnKc?eA6~h!c1|pw{yYo**YC9a`!6HlXR*nbPRqX*)hbb~OW@tk7!CsacE(W6 zSd6^`+_vt8_Oaw>?$?Z2M$H&~ zSIwB+)QfR7FZy`yLs{c_(I3yz5yrDJYdpkjp5z>OvwuXiFJDG5McCI`ie2&|a4i6? z;J#Mny)R`CE9-mzSO(2kr|8~}QF~e=v=Q9Xsx>J2Vj=QJP6M0PNw%wf@~Ib+k4+40 zj($@;)q<=s{hdE1?MD*r>YvjOw%$xSpZZ{tou6mXQ)_`kbCTK@c?g@&-xt}*_p!jE zy+^X^Bn#4XmDh1u9qa4ZXJ!u)cAapedEG(Y4>>q{Bh=UElF#ku{RjEJfI1r*e-(Dz zEcEAca<6B2p;VoXieYs&@&~%0pJMiLrt56vn;Hbg^qDaIly=NLL*33mpYmyb!aDem zxxRleQ!d`%<4pFR! zL*Q@=STFDysdhEu&b~rzg^c}2Q(lW(q0G6!R|j~($UxWy&{W#zOVfT*fpOE(2w#fN{l_7mWRlK zhwU6%-j~fB=iT4>?-^zd@N3-AURocR{GXOtF`WUgJn*$2pikBiA$eSD0tI^$dDG`*LbF!Jm?(l?5+8V9oIuVQ|muNj9`oMARCo8#eDdAQ(Nj6EgC${nzZgkY~IwC zhDGkI3agVvGgF|MzYfrhlkbbo{;#zEZ)y~bEu>~g5$jp#;4=0d20?={|-SXXN}Zt51i`~mjWaBf{vwMV1a4B?LLi<~WP z{bBe1|IB*7vxI!DrptJry|aP$zdXYGi-*6z*Zbr>sG7+e7-=P=9KM+9(y8yTc;09eHdd8r1y8^l@ZTmFQ;Mg26j!#jDLKcaYN-W9|H@cxD5S{Yl*w?V(C zu_CLqZ)ljjG4d)sKE+?D8>TZY_6sJ-ug-}r`-AOw`tAO;-|nwy*U_WmGQs$0Uex3~ z%?&X&=_ciTOUT!o3@3%~ZcMCgK{M*^oUR$%i1FriR zQ$Moq1h$8%=|&#to|dBc&K94Cc6sx2EI&8H%{+2v9zAm(-0zYLYuXSQb8ZV`@(GUM~757~NtD`yBt7pCg@skVC|V?TgBSvwt` zZ1x6svSvZO^CQn8(>T+pEpJ>6K2Uzg=Eu%%jb41_sZx0PGpvnwH?xMrySqKFZ9P1@ zfjq|Nd43}~t=eU{#p3B+4r>O~YOK;Qd^G;Ax1AF$C>kFuN z-Quk}h|D|e-M_EuDsNRi-%lU|63B_tP{BZX8RwoulPA1_fyYZ(n}YUqez0JD7FeI9 zo)!7aJCW-LBk zD9^*r8T-`94HB)~z-N#~TD+o+@m!c=JZ_#WehLSQS(nvZwJRqK-zg|RTA3@!hgM)v zZe~*R#C)aZYJ73LRWf7=&w!^^@YKp&wSp_P@9-qK62wz^3P+2;(GBrl)@nw>QEOm6 zYq482_I`M)t2`6lKIB~=GDP#;hb;dg^9)VFpBpz*Q=u)nwZOuQjyNB9|L`+^PTLm5 zlUo;>b4^Esw~saPUalUlZmuL(7gvI-lj{W6e{%hT>p!@D&h_tH|Bvh6xP&`ri`>GV z49UCa{WH*0`oP%7Y5PXDTLE*h9o!_L74fg~arQ9wCg|b>xibUcYz1`@hkSW-G9ZtJ zB#*FhijY@B$gVYf-@{tjcKBI1*ZFVj%-IpFZz4NG#kKKva4J}3Gmi6Zo?hg1|5(v^ zxZ~JobS?+^-Pl{bjG=$5lTDoQfu9$&dDNb5t8n0Nk&ntrdYbo&y4Iog(wd@MkoonTz$oN4ky@VE&&+H`Ky<~XuZ zc}PdFFZVPx%@eK~_&!s3^YPjbUQ2yBFT5(wDW5@dSTN6|4xztbl z!hz;$33K&W)8nh3zc%_(|HAdhPk6<5?$rDMoAjEVJKz-!Bv~gdfZp}JiSLimPJ+4G z%{jR($itv~yI?bNdl7OaAh(0^&B&sI6MR`@^=_e&KluYq&|4q&#*iNi8bX$@U=NLQ zjf%u?=ndg%oyG#q8Cm{NIG&Gu=!PeS-+bglK7HpSA6$-d|4e?LSipI$g>mJnVU8A`7C{AkN4OEqmOs{W!CmlU6h_I86{h4@Tc%S z_%im-#Ovd|*gv`X-s0*c>)ZWYeO$d+W8ts~TV3N0^C{dJ9Ol4Z zWe)rW`EmWSn)&O2+3C^Y_C{XpW1>;!KzrYl6BoyOZyt$8?Vbk1)ue4u8+(1D2TcrPBF;%ImupI!mis>6u&v-51AC zE`jb(MCb1)fbNYAE?c*7pdTBc7eAt}l(+}&cSEn%=7om?^c@v_`*`aum5&o@Q!Z(c zzBM*W+XY7cy75W=%9b`Zwd0)t9#_2q9=9XsN2KjTq1add1= z-}VOEIa9A5KJ5H9_RD3$k@sDzE3whX#AT?BO>R9npOEVl$w>+qx&dGrmlEdz&}7 z41QXM-d+YTEKA$jHmrODe1*2|ZDTC%u~p6o_g{0kZ(Gbhwj1M|mp3{MJ?gF6iL6WUCh^ol#`1i@ znWv0TG|BM<^+TBp#exnI=g9VTr{U{%V}Itu6WV+6tdYyIE7xtN#$;P^VzG^vA#cOX zVHlnW!xP~EPiP%PzOElbGd$76cm$h~VHe#HSDnsKAckh*0f9NLMt(+Cm&Klu?;X&s z&oH+cw7^+z+EXWgA|HKp|5NyvT3=;;kqK94%LFr@*mjZ$t$b$t&OP`ivW3iiqL+rx zXMvqh^wRmvXGLm07cigJcOH$GhK4SR-%TFCPHHAZyz!i`c~M;W!#>#(*)-PLC&_$t zca)ru{Eqvw@SxAzgbnw&M@>oX{|J|0rzzIU9us1{il=ORgLulK zKs-ftq9uRA_|gTe_4jcOr+noGVjuF~H1;~LVBj+J!rGN*b-vYH!DMnM`24g#Chf21 zHv_N6Yv}bLwAosB=Jg`Gwva8$Z@^9v9kPE3*+&jVV4YwgvZiOUPlwoxLEcw9q4TAB3&_w(>IU zw{VvIw#Q$O+C#14Gpu!0dHaW`iO@1sG`Ev`#o$z*q2g-RH5Rb`N!{d1okf*D(8_1x zA#ZRkd(YOMTf13nY!TKmmCM}V|AT4o#E%$kf5p;nkj7 z{dv1Bm;4xO=WWIL&D#%-F>k<lu_WHRBFDT*UWTpRTS`9MPHYgf?}c384b%tR zI4(MWd09cn?r34h?)svR4Ill|@yEXP#4FJMol)r9_)yS;_AstNHm(o6*T{Q~yw}Kk z&t3Mn$Jc-6Tdy>G1$WA3X;tm;hkbi72fmun?ZQ`BIzF6bSbRNK$aGO2PP4DvI=Ci9YGp@Z*^GvM7=;kYPz)h^g*z4FW z=L2`OgS%}Z^GtlJYV>&?iN^mg=ZP5_uebZkG`{6cHS?Dvza*dZ_x5Gf1Y!P`-&HgJ zxdLx)aQu>q&$RN@nUwGyZ0O{H?j@e1aW6zRdZIKa?8(O^p9z@!l_wKK|wS z*DF}#vc7QPzzxu?;yg*l)m57bbN8LVB3trqY)WE4if<`~X65NSEWGIa^MUuLM}58= z`zO%ZN8_rYG8&x?4ZSnoS=F+C@`0c|#XaT&9lkfxT^gGzJF`7)PgNizjV9xH`DvT#s`Fb@;RfE4TkXYyF}Uc@fN~h(P0in#w7& zc_1!cdXe9T@<*NiKMd}J`=ym1gunc7r)=N%M>F`#=v?MVa-khP*wvb;|8`6NUF6dj zc0y49S-B9l^CfwYZSZFO;gy;%U`dRvVZLhPy~zGy^JVm(pUcCuJAsA#XFs>j-dFy| z$FuPI6Y|t$8~sx*eOPPP!%vz$?Ru~kjV!$;2i#kUS19&@emEbv|LgzyaJOBLELjxqT{Jq} z|4AOhFS!1L>*va8V9a0ry|qvN6`R7?C*14QJw9(#zLIF0??Krqzpe>hFglM<@~$#$ zyB_9P`2=RX*e}ClJ-%OuUOAuf?sMZEi(fYpzwXM>$2&AM*2tnW|HsIpE!MZ=9^*0o zgp)wrNrrW@EP9W9cyNf(_-D@H;+%{k}JNmgZCBBl3lKNR<8Dv z6aBeEhDatI;{82dIv+)TfYw;*kW=#QUG7Hn?d}XK3)f8!2Su#OgM%aFtV1S?}ZsPXW3#6P=AajO<=w9?Op%-OYi=M}xfvu1oe z`?Ttz%U+N#_%ZS;$tw-|f`1RL?c6Q0e9E&yy4CpYTE6d-WYaA;R@=syM27`_VJxspD^+^bA5usj}Nzmy}4btvQM2g`h~=!w!^cH zI!c}b(^Nf$|Zx` zb35$2OYC!3D|deyYbfh3tBR>^P3pO?*ypPK=gMiXo3-wB505ctj;5a5VxODKbL8=T zE{P0T#N!@Kz%-kYmu#s$aX+EkW%)z$Qe`*|^b{wbu=bqy8pJh*|_9kP$SNDmXSvt45 z`JIeA<8NQrT;bEk-(>0A(ezCt?T@N&HVxM|pU^uw^bK-sZ{#DBVl~)tL4ETo&%Ygg zvs^wvz)l**r<32BzG?dL`RSWak{fa>SCAiH`n2Uor*F)D9Aw-``n|}d0NqZGvL=!_FYzB7v-@g*IuqO*xngi${Cz>`IA4_RkZyP{Vv;& zobmlXpFutDv9)IJl5+m<-N#zYY|cgHnJ%r#kZ-dTUQ57J+S@u#_SQjfRh#UuZeo8w z-2RC6)hT{m#HVR*s3z6k3bp6AV`<#?kH@M`^Q9e2G{&(l`wzpD@`=2_zwEzN7dCj$ z*~=%13kT~pbRysDb>2_Qb+M;jWDN^hnLt)VHrZSN#iYCNnG?v*sq7=I!H%#nhE1Ng zWMp-eGioj}`#g@RrcE8W)prqR_tsGZkMR(nJ5uH44Qv7rL0J>!tj+gcK`k(@ARk=l z&!y^gx*J<4kDws7 z6r7U#u*IDNs2W9D$J;?}g1$$>=p}5b5a&@fpc@oV=6gJGlbr*jQ&KW}@fpo&Lq7UU zwvxt$KSoWYW1>gxgAne2tk?(kn(Ea=z(s@{<1*o5F1G0wY*X?dwHADU*moYehGx$d zF-7Hax;@R>GqtP?-Rn(={oTjNapT=x7n?k~EvjR=f%VT_wEH>6p?woO*!Q5l(B#^% zClp@5PD#Mi3&;VZuVal9^4sb?`@Z4<-Gf7OmgQs5@qUE*>e}05=fjTC#e}}3`6wcm z9-sx$grkR*@K`Xu^!M6}LjNr~53IAuUn|LsGu`92nd|&FOJC{zXxbwdURNE@182g| z@2`DrYvZNtg`=K#lD%f);d@&zG3S2-_j=`j$muCR=Hu(tKlA&}MPHKlhqL@S&7pW> zXs93qj(^F3qaYKG#!za{Ti1N_EAQ(P%`Eend-zW49%bNe4zwuxOr06W@2{~QSI(Jn zjm+0l=6Ly6qVXS+FC>3e`bL3v=gHsm4zGgiu^?rS=@c7X{)QXy&KDm*8)BC%zM2uykYn zxE53AVN9%Hs_fIs*eeTs+2Y3$UcJro_oG?#G?Kiu`*G6rVB(L+n?s)W-L=41(=vrP zhOKEJnJ;;yGr3y$&Eq$F1{vpX`uKU~CV!mpYmdeco+Kl6UZB?Ix_IC5@=NfBl_QbZ z#|~p(z*EbR>u$b?yU+O&xR@3u_Kf_%79Ly*e)7PH&g>RG^Ty>FJnEcvbkkK`^e6e# z!h8BYm3Q;t-4xFp9Pjf?CfzvJ~WgUPc(Wl>ODN%S;Rgc z#y6S{`0D$JCv%BL9p7*9`|I`R$?&bj1JFCVrbD;uq3bGqZqfAvS#+)67cu4t zbR7Xt+DC>y8=NlMCPz@T{S5C(7K^@Z9o`~nyLq3RyPKK247x@pN`^Px{pI72H_cc* zv)IzClaDi)i&^wJeXrz{niAh>-D=^Rw)iff>+6wfh^Y@Sp8t9b4) z#&L#qS^Yf|nD#Ihhxf<)vB(b>-htQ16E_z9ev)^EgWZfpI%5Z8dD`GSG?3@U62SA| zN6|OHBlz3D{pI6faJ$pTtvhdFCosK4yJbb_o|Fu*YvS25;B@V4TeI)|GRM6>?rB_| zzO4B5pIKRfT|IFm`LNj7Q|bMY+8b$j)|(h>e1Y>G;K8Xr&-$`#&Q9Pqd|~IzLVNr4oG~w4Veo_8&3% z>tb_(w^Ozr{Hnd1;@<>zUD=3sob5XbEkAzwYg?b&be?;uO3mBu=F^MJ6JG`j8 zgHq^_J2OGd8+4$;CC;Hbc^s(`ki1%Fn@+5HFEv^*cW6;3`+zJp|X zjdEcY+5QY4ftNZTFOmg&s8K6B@iQaf<%>D+a)z}zhnEU?xbpF6d{rezSGJC;V|Z+eW`XuW|S~ASM4f_gV6Pmt+z2 zmy-Q~x&4M9AM_)l-eLokR_Xpr)onT@%t$n>_xGeo@j(ZPtPh)hl z^lSgq%F@?ej#m!<^t8X8sq+b5A0JrHq!xkJH1j55D=|L@%doAyYp|{IIzGfWI~%dN z?#4EHxF)W=kM26ju+k3WxASRv$F41PQX3kZF(!V|JK9qrdsB8p2eFm}a%KZHVYPSl zhdZj{FL-G??<8%V;+nub^;e-&ZwuOa#n8O!;W%4(Ol%Rb_1%UHs1mJ*cvn7}*Kv|} zyLk5$a?at`)>bIt{UUs*;*L$&_g0UT#Ew0Gc5BZ~+V5a(Kh>IE0Y8jqu4aVUGlU+w z9z9Zs9@!0#6u=uj^r?MJ1(U4(CmvXi{nrCLvj05Z)%WSVUw~e5a!Y#r8FDnFfBb%~ z>T8S+Dz2i>erovsjf^?i9W)q>m zrF_=lqo4UMwOW`{!*fL%_oW>NK51=%O5Sz)H``yHn)a9XdiCL){_;2dc5?a4BiIx8 zKG(&{ng6$HPdq%Ed{VC9c-nk8g7(B=@`!@*EIqF)mo5-)gSwzrxOM&jawVk?g8l$H zt#`7U>y$rmbRFkr-^5&NKYB_h%w#U1+eZ9>cHbXRpFzDogFdH21M&yF3HVd&IdL#6 z_EU?FLf1X1{6yK)<r?uGpRF4~w1+%@p~LU=Cf+tUZU&_IoJ81O0<$DWC z$RPT0c6If|p}5+2c6BxK<2BYjWmjWc`M$MXD?nBq^;oCGw`N_xGB&x|=z@%U@8+JF zGv9{3RC7i=?O|w8ahue?9P;19KZspr=lcjxtJ(k6Sq@JlC#L>wG%g=owcQlkQY->l z2^`a78=gD6)s3e?{%)z28P75%eRpf%x>-cXpez_Ic-zvYnFzdCg|H@@>@A%(`#qo=aU#>L!Pt);B z$+Cj4RI}e*bZ+HkAM&w>_@ZpJPUN1>@0M*n3;$a&5b4=HWzo3o>&vzN0MAuIoA}+> z*CmE_xB0ZI+AG|jqu*}_pOKl?zLpIso>L8e+1EArCfXY;8@rQw*~Y$Rp0H^Q4S#+K zvK3jm%bzPJTjigAOf-v+DPK_fT=2>U*ZEnpzh!Hhm?ZDdLSNG7u>tJ0*(+zw!~eQi z-ydLJD;vVpE-x8?c33MZHuVzq*$-ZJ5}VUFXEKhBW}HQ4oS*W?DSgTPIr?4o1tXm8 z6M;u(W{p$&L-vDgknAyjXoNBDVvG|tM(Gd6D4Rm#>SJ8;=QXAp#uP4Ky{u{KJozW> z?9&vy(l1ki3EzUb$uls|%91ORmqV=iIeA$2u$`OTM&}h6-$(sO*SYx^KLV_pk6+SO zYCeEdFiZzV+B-G_7z>-G&szbHB+H;L?4o+&(|Tqp_pF|?ao}v3^Lo{AnKPK<-fy|5 zu{-H)cs5JkKyR{99%uYre3!gYOev4C>kQB& zve(F*oAA@{_20p>MxJ1E$Yu?WU2*2$e#t_|Uy9kR)_jWg;Jr5!=hyqeIDeC9%a8M?WGG_}j@QL7Vw$TWY+W~3 zD2))fP@Kc*4<}DgqVHZGpRQLp*=w2a=voZwWdNS)ubIJanq$wQ~J?&@~>)4CvkTEMOjqcWW z$A8)IUy%d;g#q{lyJCE^LyD~v%R-)<#0IhPy|Id`8@{^*_ywDR3Arwq6t^%R|w zc)0$X&pks+zRg`NTEgbO`%Um;+{m-c^)0P;KJ9tmT?)SqTi?R&PL|{2^PASU0x=Kp zG$uAicq(Vy;HC$?uK0HsxC*XsxiOjbFB227wfmOLgAPpWpd|J%b>?**ieetZn~QlI zXZ_U0JZk*dxojh|=0#tUjau{4JK1Yqhj=$-%OfjNdMKKg)0Y4BEmj767d-AD2QsJ+ z4wBF1kvEpW9@71ke83idGydo_OP5E3{^)k#bM}|$Qa0FQe#~JhbeX_M?LkJWHlfd3 zd*z3I^9Fc}aVw@E8GZs$TbAFZ`C%MJmc!?}z`66$ zG*|VijnHyUPIbSL}PgY&hc1pkowxCvsq!TCD*Cg*Erj`_MW*L;~+a^b+R z`LeNOGhfwN^A+|A+Md1qi^uburmtRiLCbNi3FMl)iEnc5uF9Ib>-@P>yxiGOBduq> z@%)XCeUp9Lx#n+xHQV6)bukCS=8rScgLLO?zKgTwPyFQSB|U)N3f4;+YA%WoHB*}s zpH*^i0&}B$ms997<>7c9_3@CwVdSdvW0H%IS=ig%$dlwlMe*d#gHNFU zzR5mn!S)_J(PFJHOmX4-`(wT9KXeNns*UhP7T zyR~HLf*_wBS_FQ8MQ2LM50Eb_KUM8%omT5Z(#N!O>@YlB(lm3P;BheFTRy3MX!XD| z1$g8ut3UO9iW+V5p`TF=ad08O65VC!Z8!a@Kl#J*8P(5|&_d_NMI)@u+qync`r9|- zwXIKcA+s~&!`H4Ies3%H1go3V?KfNb`9=CN^XcbL9X5NqhsPg^8I!SN(EG-Y0XK!{ zdf73uVKh&d6YrDlqJFY0s1ku*_q!893p*GxJP{grhFFzoNc)m?c7$0svoRop&o6;btu^hM zV*Ildf9xV(?oP&IVg{_w^g?HfRcUQicneK}{}j)d;I$QCi#UC<27fJtkNhd&vB-Zk# ztmSC^;x`B0dOUX7bk39K3d+OV{Q1g`$Cgk-D40(w9p+-P8;P~|)rZN|EE-tj#~&4| zTW?|vHrMI6FFS&^Y)R!fNq)HXtF@X_<{{gToUFM-7Wh6|dM=RxXIQ^AbIDw# z)~;@fnzgGL$T+QCh0$5<#2)ins!g77l$f5z-$k3*>l)}(Bkvr{3mMZ1`f%$SQEcDq zfmv&{Cs^0W1Lm$QyZ6@%bHgi{^&`RS$AcBGss_gC!1(_W_b%{Nl~>;XJ~_D(6f9V1 zQIn8B2p6>##T08!668`;?8wyV(ElV5R4CeN>%7%Ln?OJ=!J1QS)6urv%P{rp7nUK z#~k|Cnw)p`r^cu?)~)2C45WwDj;Dw2L=SoP!VJbP-7LMYH5+0MW^P_QSikSk+=vI) zD4v1t@#~_{H$(PJ<|_N4C_o+>b9Ll&sxEr^4D)SGo3F7iJbfgck4~5Y3}jop1fKGJ zwnh5*FUv6gdwt`d!B|7ei$NFlV{$VSx=JuaC#3t++H0nLP0Hu-ba1-9`qE^R zLx8-j2=Dz_W_@*v^|^$;!bkDztIfoxiB%ifobF4%!+X+IrTCJ{S5usk8sm=ty^j1( zWIb{1R;wvHqwX3hSmrr-1+oFM>O+;A**k%s_LlYES@_kC|7N~VD-Ul<^S?d$?VKNy z%m>Y(9pP*b`@%YDV;k>n8T#O(TWNPI?QY}m0ovQjJ;h=(#A*|APrv_&d7ewGHZ2#^ z*xfIZdz>Dt?FL`U!;FDHe=g>KL(>M&z)?9{u06KXv&ZDuOJ*tm`D=_x-%C>RpA)g# zR@aX|EI)y+y*yHQ{~Cxmx=Vd0uB_u?}MRlXwcWGK72R2VVU_a z!B5Wpq4l|3E6FEnUT9TX)`Cl#Mp`GE7g?1$k3efziUs<81Fa={`$_!w_fQLncjuPm zV3z`y2RUcvHTEK->#=qB7gdgh|v#`0UT?|*yh)DKQ-Kk6>Q z=o0-_WS#VW-%JdwCghxt^}p|7k7@q#XAY=izT3RT9n4|M=q>F>`@(E6V) z^V52^T`XFE{+e(JdqGvt(7=)SPV?x~X+0NOFA=Tt{Aiv(S6bKp8V^qYnbLob&XYQ9 zwT=icBi^iEbSEPC6k6JvEeE4}Bj?UXXky@pEiTa;%2en}&qnzOKKmI@{Wvz&m_o z6^BlGJY;wST3Ch+YF*^eLl8Qc@6v(cG3cOL^zc{nR;s*M&m1%kt;_0+Wbdr2^Vrj1 ze7A?Ixkrsi<&dtJc8=?_P8}z;t7`zAztfBB==Yzpo_Q`hKW%-sRk8Sk=g#s_ zpY|`DY5&FVm~V#l*^D~>8;t2(b^h)tNjS=G{VBQEg5SBU&t}@s;OWlGpiSja&9lrJ zyV3K3fHm36S@ND6gB=hVhAiaSo2G@H96HT<@}_Ck{0%&L)6l&iA3C(@iZBn zRdfn%zGYd|VKy~jYL6>E@5K@c;3@0{@?QANZg5KJY*Cec=Df zH2i=3ec<2OFP*ffjlEY6p3r+*r`H;kY}df*8as-;qjmd`_PSb=!rOnGYFlY7UN%xE z>yi5Gt?QV2^6-esgMmh}kRzU4TdsH*wykVo$+q9>UHAKF@?hnU#E=2O)sBy0Xs0;f z(vD*Td$iN9+;C{e?3bo4g!M#eI9iyx{^QgSO0HLVaw0v(Qo&d>MlW8W-=Ah|UW_HN zUU!jV$r;vv=oi1($cTO9Ncz|7wEnY@oYBXB{^Z-N0sZj#ht|FF`1ii|_QK1pAG+&6 zM&<(>vp3{x^gF;Bp3x!rxyJT?`l?hp@MFOPIk4{x{_9!Rf8f)~@T7D+gG=FgiEzc| z1fH3*XXhvR+&hyXHQ(Y97gx#kyT+9DyS-Y!8_Kze#8m%^^}7`O)n>w9@c{UvUk`tu zOv9ha_g(ko+YR6S`P*B*_lLJxdp({BZ{_ERx9igIc7uzzb6LL|&|ez{&l0!MI;>^< zwNc?8|0s=LT|D-&7MFrY>d42D=Z0V5J@H@ypP}Iy{k38jpMHOBp#5hdxBfsI?Z{GT3goi!=dUzGi{hciVtVbjPr-GZ!W;7nHSz29?{<2Sd$u!9j2N~ic{)bU@xzGp}U{>yCH0dsn{7)us6`9%DK?mQ^bwUYG1`- zWXsEo%I_WL`@1Io#u$Lt@O-T+*0h_+S1p>kLtEyc++q zv@vVE8n?#U!(2Ow4|dg(@5ef>_D_f5n>h2+T9tA{OPySrRxdWvRqN=AG0f*i#-;E6 zIi=&|KOI?~gah~w`Q~$`+*fZNH!%lati08;AGOvqiMG60xrxa!X63$aHZcIs?j=SZ z13w|<{~t@{|7&ie84Gegk*B*g!&oo$jWwZn%$|i@vo5H*hfZw2@hNY-Wg4%c5qy36 z+0MS&Jn{`(IhBM3<3GvzTro6348p|3x8ZLd_-3^&eh^-}s)+ZKZ(38#9EkD9s;I-w zdU}lZXD~;#uUL9N>$U6HW4MidTLs;JTcX6k6cGX9bosiznw`nK+-oIzK z_eh3&4`;ZyHuWBRnm!s{$vwf{%g=p?JagGC56kcK{$+?)9t%44P+vAR0){8*vt&U} zb;$R6)@yY33$g4E=EwWd7(b%`LX_3Rmz9m;9cC+Q|kG4J({=*NAzHCjz zH<4GednSPc$u7_CS%BZ~**!7rSm{gAoA5@A`^p&dIz9t=27Tu7{usT_J-zSUFI|tV zi(MRSP1w2AGx5%ByZ*RrATxGkWx_VcPLF|KGj?)P6#J|@~z}WX0%uDamVM`tH$5Be{{G6ni8*BjK%ru2p|ui znf%9eUE%JvN$ObIDr3y2>58(@K)&^?XQTP`{v-5%E;xMZqp7;| zN91P4V`*(rLhzPoEJD_~et(L+?XA z&DHzoBA*g^C{;e)Be)>5)8*4Z@c55Eq{8FgGNqwsJ0G_vKk8XKRQ%hNS=Qp8sxY z$Rz7Scs6=^PGzslxBh(41FR!^`Ji5%eA()z&dVh6?;ukLz06~OLSkPm{>MhfHLl#L_YxdhW3SH6ZplA6vnA_f^?J>(uE{#~67h+i z+N{Jmlbw8)PZndW@jA<#XNC+vY_SfZwahOv))-@r*P+L&@W~jnllN8BejVq3cJWL% z*OO22oVNyC8wh{xKTjAu^f0f2fU~E!DB$er4bz{-?#aR&e!p8|$M4AxSbbUN;fw!! zYP~q+J4LYPx(rO6dU43Z!&)zq5BC7$>|&f6pVmtv^ML8p5V_6dD`69MHdv?Ci(3bM z$7`7v?+N~j320o2m_S1^CNPWfb@APc33P%p`J}hGK54o?s=7mJ%kPg~ExN%!ly9fK zdZHOGpRUH_YdL!|ym`%JPMwTvGq%6Kte!g7x25$A<%E}Dcgx;%)-y(jzer6D%{}4ol{)t3_nE(^YqYO-wBO%D ze#`HWJ(I;+xDR&Dx<|lH`lduQsweNa=fLdR1?Z` zh5h=wz|22ckIaI`RSQc##;;xn2H4gcP5iekJeB#G`efwO2eFqmR+oP!-^=(sdwTR> zYLdBh?D1E8m;;M1@SHxIIRFc-372rbK^D1S-rN_kZn2Q(N`lz*%rRx15BZbwJr7*4 zX4&e_^I)34P+{z~WPWo8zG7Uyu4o!r@%rsn-%;d65AslX%c{}Sg&*9BA3vu8*x@gW zt~?mLy9*c~M*{BrJzV!9FXdZY#klo(0%ND1P+!rBY&(XZn{^^+w%}x99$V zy$4+7+@Uin*#CkI+eZB7HS(68gNAaO0^zN1J@D$*{G67poQI(^u(w?lvUikK+gqWf zt_@lA8?-yif%7VAJU&c)`f_g`PMtEGb98 zPhMkc)+YBSN8mT@QI5fbCD4lMI}{TqHt`I2poIMe5qLoNLYB2#c{ka^YwalXqdHtK z!Q=8JI-q&w3vDK!r>3dGol{*7uhIdp)n3+u}QYF0-sdP2fZFPPIP#@4d9R zzb%{mYURu-&a(npuQ4=fT*w5iWp|J-vjN`N0B>x#Kg(9^qba-EJ~H-Xo1@nUg*%#a z?Z_z315Ml;#=SgS>s8xR?&aIW5L&Ivoi$67i$i{G2kRLp$5i^-#dGKUuB)X z$klnVAr6h+DAjXjfRT`8I_ zg7=k6l{g=g`C82N>&#&RwwaS>h^(7IY$_D$yDM>@^FW))l|lwa=Y;y!ChqI}5@4hJ zUGfa)qZ3W8mOJOY%-O`Zz>RY4b(V+l@PQAJ!^L_Bbg;|9Hp;!sfx*Ti<%C=l{_4|? zj`GWAGkJ`vPj!%WM^88Zh3~o0-wWJRj`MST_sdqv(?646?U$$R zE{p|VuO6LkY8E8@4bN|geF^w3WemuwD(I#Px~T%LZ>m-iaF4bOLe3T1(ZWyI@nN&= zPGo+xh5d)?^KG4}9IXoV#lEQhf`ML(^?_&$=bx|V>|o#;`8+cAOX!QG{iv z^?xzPdgj=}oQeVi%$K=#Hka^jEV7siInGJ72xFX9|pbhO7q4HsEQbjHml_^srn(r}D5r9aGmPr1KWDQ=+k zj%MCdq5Y^}(0X}zf$VT!`_It6->zDU97xDl$UxwscOG~9R&JNhI^3`R&2Pc>AM)Mv1J}BE`lb&z7XLi_ z98EhfTD4B%;^Qj%LSDMM@UV2@0p=t9kOz#XF(>JWvJI9UnS$=& z_up${58hiPO&@`lv1^q_KLy`s_4%@854%3{m6FA(VKN9fmVvu5;BG9qn?fJO;7-4n zjR=@C;>V22vWxG+M?t=fB_Fa2ekmK7ZI8L%>Z@8!K1dmDl|xhTrSM{bFUf!+?4-5G zg9oW`d|QA2t|o(nD&i@*?aSeZnrtV}djV(4WkY+<%gz#yGF~%2=WVxK+m)O5GMPTK9F%{{!E z&3*(EccO3k#j>k98D|&rqK7ePOuDb{>Qi%zJhS0Z^&8`_{PHR*^mdfrFsrhD zQC8)GJF+SrK5~6zpWh^&?pIx8pRbh8&t83jmrZ@03llz4e2LZ9`9-U*A06Jk6rXYx zK4mj7xg8p6z_&yv_V-(r{n)44qk&)8x@6hNa4$5|8^?#atibLq%?kJOelK*=%d>@- zhwQ=l&>NH!LB7zs3&w|=1I>>r=jRR8Ne--dRB+eY`$PQxj*1nofo5eJyY|yz`CI$2 zpG=NK1Mr6ywLedL9#_$xcYiE<6}{ial?QC)ly}_@uZ#?s^S$%g2crDuf{{VHi#g_w z%(aW^vnr#F;IbL}ZWVZje><0=U+O}ABdIg0_w_l~i47PYyiK+o<4~?=fH=*+Fa~`e zoyYn&v4T@NLx6Xt@mI22Fz|eI-PgVf{SCmwS@2pAUdx8p=F(0Hc@d?(gk@@2Ag)<~?~;fjsn| zUlM{|Z%ybe=iCy}@`jexwq6G`B^%)YH4Odj zd%1o2f^XjG>ov1Xt&miBMB$;m?12xW4;yCAd36CfF*R0ccpf!>>w`tV=6h=m@KDX) z0Ps{ya29lB?iUX-_e1yqs^w4V736$dFKWz2Qcn?487UW%FA^z21Tj$uv*W+g)XQGAYb8m>}{P-(P8h_zT`j|x@=pn&vb-o>JEwFRuG8S~O;HEr(>6wjY zPeWPw3(yLDv9si*3&P4TlFi2%hkdfSMJuBR*V@|m?DgM3|2FHEqoE<`ud(oXF6#he zFRHfl(EobQs}-_==VWur-c$|uvD7Uu9eN$MAMn6FnoVu!2)2>VOV@Z8!6W+nX`O$L zOp`sUn)sqQ@iVdYBie6DeLO=KIly}xd7G-m5jA!k^`U{4asZW297j$~BR@>FKfie; z>pxZaxXzk|(ajGsm(7DiefKd=vtGscyF}xRVG}ejTH7}?&|>n(Tt7iJ@B;Kj9J@mL zVl;OAV&2zx?G-P@XSj-a^f#VoEAAa~<33&d9vQ_w+BR}1GAO)R{8t-H=z?0&1;3Bw zeRFnwZFX2XCkH+h&OF_)jQo7*hClf71*I>&c*h#fxJ@}<;Pce3SGVB2?&%I0&9t-1$_!94yw;P-h`ufpKiTRYr_zN`@ZREq)_ z#qbd|R-Kbw!`y4+=RC~$*vgB>?kj218J@`Hc=Fue9LAxxoweKhpL$OAHe=kv7(b;k z@|)}<(UzyLb+&=vufGeSgM5tv-y;UC$+xc;{tWFnvDqTx3lV4|-jEe;B$m}kEK4!X zdd3)FjGlaxeHeYLz`hN=Z~(n91KrlW_oLyi4TH=X-%-uM^~F6u|3BY##`vmR>s;gX zWUt0>6wP_8a=bqo2%N& z1}B@Cmp)6+i1*WVjp8uk6Fno|{!QPxja9Ie9ELB=SS8N}94j(Vx~HDCp6euEBv0mK zmM3elS(Kx^k(_ABl6`Lbid#M>{qM*T_BIU-E1y@-x^iTv#|M%lw=-`~j(GATkSafR zCgjH)d`Ivo`SEGq(>j{uht409OpGEsltb^Q1LVfxl7*v*g~_fd!me@7WxG%yKkN^jZh!PQgS&_EBkBT`szrB~a3ue*@I2_@d~A{Hu|;mM zJHJG~g$3LjWOvTvcW9<+sC6vFnn@Kpya{`=>L&L7BeUbHX4!G*A$E)KUevzj7x*5c zE9A9ulCfXNvndJx;z@_DytUZa!wy{)0w;Yox(9ut+}I-YmGW~Xe^nO~-b=tZ*5JH% zk~KwrHt!+hYuJxjgS|@Ka})P;?3%20zs!vmGS*?AU`~vcJ|6`32L?|GZ)cy34ZH;t z%|S3vdCz@5&;;G%HBipgQQR7e(@B+9~a| z%(7+Q$MAuD{D;jtBHZl4$>To{PWv=pADoseZU{Ze&XbR#yz3M=)j4o_TJP~W1y0!g zXM)pH*Mq}aXkZ4k`d*{m@9Hd%?tV@FzvynEOLw9@{R?rg2pCDf>AU~4z8m@0?3_os zn6u^m^?_v*|NJ=g=+j*(a-by}+RU-deuQ%5#b;;-TI_))Sxb3Kxm=?-1E(I}NNaQ7 z&$S+Lc*a?$icSa_+R|@p!P7v$9ZLI6&wn(nE!~R-?|+Jz)y|rGJ`#?zUbIQPq&P+) z>%_xyiPI97+HjrSGliJKh&*Cc`F0PoSvgIL_wUu3G5ZqpTzq>vP<$kLd!6vc=LBD* z?MpOsw!D3b&Kxzan{!greURsY|c6iCJV`FTUg)VG@OIt3uYXV)Re6Wg7H+9rTPW0#>HR54qdr z*hdeFmbjO@f{QpLwHbDn{QTqL1!?DsKS95ik*~wT|2hEdo)!#f%fJ9zZZmSjd-p!A_pJflDIK+@&YQCWkn7%5TWwHgU-zspn~W>*;5L&#(V-?tDEEd=5ZM2gr@? zCNKHg)8X@0$vdZ?!M!j6pAUy84FI1dY4CaOOz=tMai0#K@Ide(24K!#o-KWxn;H-J z6|nssdf>mH%~!3yb%N7&J{Mky4EZ4XcrG;Zk9OxX@JZnX-1~st`53?d3Vfbs-+hwb z|AF6mwq-c)UC4Vp`yIa5@>gxlAl_kktt5Q(JE^>;HYIn;frmaDI}iONJI~lA=mVo` zW;pzY?M+@$mSSm%7{X`Har_b5PnRpvLf`lc2Q!!RY{j#q4e-od>sa6__B}CY*|X_! zgAXzW#SK35pQ-SZK9n9c@d5gD;{(_u#0N@q!aIAYzZD$(c-#&gMiO@+kGKlIC#1jm?C0fN9MQ-IeCX&0t+@@V#kAA9 zdl{dPGv;XX^|pL&+2zZLSJqJfTeh$4%p9xftBnoJ3mZC09A7n8jXWVXH$RO&I+>T~ zW5adW%6uLZwEA+Ojp^`9_f+K6MV5)ND_1P{BFAQv9j#b-*Bs~FR^HWT#Se1jmm_~( zq;_Y3x}DEm+UU* ze`fC^zQUkzqsBoWo9|5>$L71BKedUyzws_-Zrxj0tH5^NbdSYZsn(IKp;;|6ot(X$ zvV)t6Rn+2Z-^hFA)QOmZe2)GXc&66We0-e9tMHl?dbak`b+7Dy^NF|Xtl*M;*xXq| zLzQ)p1n!>C=jZT;>!5={il5+*FFg~T`eevic`%LkMu)5;b7Ofptmkiu;@@+J zgcp#P?e|@BMgNRlbCG<|=l;eK_7fMI7`jsrEI7h8V~}pU`dUY~?axWXP5#6@JY4Rk zjrf;1`;HtiXk~7E*!6bjs2l9=FQUWN4@c%*Xm=y)gk!;VKWoqdVrjv>S>gD8Xvyp+ zR7@}!{tkM;`ySnoO^6)WrhDKt+Cpq^J+Zx2$R~fC%_oNg`Gv#}2irM|z!i3%{MAnE z3ej8(@%6 zU3@+(PtQx?X?SUB_=(F?c-pkB_?>uq4ee&+Y3vpsPq+Gc`hLChK6rYXsYfs)9f;87&Rd4 zHn6VqoMi0=;e|6VSl5ZMb|qQ&IKGL_g`DQ$XPh%XPv&ke#y;@iQY`t%dEJV!Zh(iF zS8180J|uHn<=3nLr_)%s8m@PU=Y{SqJ+3&3U+0Vex?Y9WkQoO=Yo3&NPFU>Wv)Td}yc7eCHskquC_68Vxm7L>mpG?L_%>GStR#q~9Du!L89ICQ1 zeA+B)x9p| zGi$+F32+y^M9FI^A+M>#df=;CXHXnq0r#~A?w$K->KB3|)6Nyl9lxQGwX(Iuw90_v zibtyLmD$wkE4BKTu`gaR(PCohMd*#6vz|iy#P}HczUgHD++1ibaJds_U##EpL82%6 z=W348Qr=~s#Te#T%^XXtVZ=6^IkLXlTGBK+yg=)lzBzt{IsO;8aeOEz|NE2R;HC_C zI7D4*4-Xq%ze=$H{d3|0LB~G+2=;MvPKtfp{~hpxT#xNRmi<^bA#Q~&(~n;6$7boT z<62_%W#41s#;see3E|FW-dR7??g(awJ9uAs>EJ#2pBHIug7-T1g!(oBo2dM-AA_ef z9b3(P*2;{I#de$-CwUb9pi}8W~19?2fwYP&FSdv1L$q? zNtUS1m9)7By{$H7({H0qc=O0M+LT<-dnRs%>`sYuqXU+eF;@C8HXnH{F`mVCxUcLN z>t1QJvX|6roY-_1(vHS8=^e)PdEn-*DMnjvK)2m!cQ(>T%Ln*8%vnY>)Be@j?4f* z^H>`pUa=hbF2H6Cp+f{Se?Hqj-e>G4pY2=BNAcMx^1K?li(UHAE6dM+^6e@s%g}}5 znHTVk=wkaH&kaY0E>=5qA=*?MCFe*7?;bg~KF&r5q4z-to5`U#jSd`t#?Zl}0q9^! zCOSao`sv`$=$rxR;1=+YzKAspOb1^O9W-R7gE<4y0s2F+;j_^}m5&Zaxj6nD@exms zh?Y}i3BF@7bkg5{fyr}4Zltc2!9&r<_zhY?#~m&?TpU(RB;J5LMV2bR<$TGOIoKK5 zp*{;*mVX(UjVwmazDv9z6y!d9sC9$LRP=ToF;Do&tbHh++?-?d_VbK=KbK_6g)@jb z^Q_*{bKW~f&%4hX{XRr`@{;x|sdMhdqdw=ZnM$9S{dCA$|M`j`ay7E>?c~>OK~4tn z#~j^NeO$5X&F&b~Za=lB|Hsu+UVCe>v(nG^U8ekC>TPM=^G4+ak78U!=$2AoG0f_V zjv&?|zk~V~U)k=+pv2n8WsVH`IctA0J|j=eS({p`*S<6pXBlDsChW@1%4Zq{T#A4t zIy;YspV#}`)BE22()Fn|SVG!okf;UX-CD4D!nGX4XnRaHjdP zU;ZBkm~U&^d}FHH@;>If`dsIm*e{uiT}gv+QSqnMps*-!q0C@)zvZjk*>}X9Qf?_@|XP`s~MS#r9`-G}>W;GlJ!0KV^3cdzvV#rn`6!r9k=M^xb<=)NS*=|_ z98d4bf5#`8yoTq;A;CGj+yaarJI|g@uD$X~ z%JId!tt-eYIo}o>_X&<^c_mfiF~;$6d?>+FEPhPmCq zm`4*MR1SU>dnl^dLs3OOR~36G3_q0v3uss|pJEf^A02*c>w5+cUi&e|B-~s|Tl(zr z(`d=1a+g-oN21jjxXl6w8lSgE!0drTHw%^}Y6Dy=$3f#Vb-%z})LCP5_JT{-HDY7<)aa$usY#mCo^6Hpi8UfQ|? zelk9T@vF#}AFj5u@jK)P2zS}|KHzv~34Iw|2Cp=0Z3@3YIE)G>jLDCamUNt`P1=5$ zwZ|Br-#1Rcd3=V0lb@&!_xpf2F?+V>9QWfSM(t(U0R!z%QEuL;A<1}27d)eQiQ**Q zUNgKa$hUr(Jn#g<&ZXwbHkZJXIABzS0#tm@X+B=X3dSi^krikC;$kc_8%QTT!u zwRS2viGSpa$S?KBAH3L)e}B{ynwM`ch4R@C`C<@;{%RfiJBoZw&#&8|`a#IVzem0m z`s6LEX>d3%jUJ+(cjkE=xYTESyhOg0*^73W!>5iidK_Cv8w~3>+zcN_kWf&OX+;e2V|!zaEzVI*t74PTrIM>d8~ZXLn%p zmoUEKQs->-9{g9G(Rft;D{?YAhkZmBSnB6U#RY>}SnoFPe->F!?#1NsIibD_c)w%< zwMlX;6Z_EkH2wnkt195+1w(g73g9tspZdaIrsBhsol)A1^RD6udktK*zmNQ1bW~6I zC#W+p+kT_LX+OU#*B&%6&mK%1!N5fQoktEZHvS;quQ>L=s}%(WEwiYNGk#LYo_J-o zU2y^X_%F+|--cKcOLAB* z!568T#k$?w{d4_$Y9EB&4_Ia4Zt^u@wcPY7k($08h_JT z^yje+HnI;PS_h3V_sI58-`7<~>UQ`dW8TsMqVDH0*fi30;=O-3*Lk_{Sca|>JiIy<{+bNl zTDJWQVBAa}Ex>dA1$GLp^KJ^QqhtSs9O)c&6ZyTLw2!Wb*3~}yoAQeD>;h=rtH-c_ zc-fijF$|?1gM+`$QJ=J@Uu5mt&YE&R=P+Wk&wY`YR8KJPQ2xor_4$F&SGRIL=WE2c z>pyJG?V1nfU$B;dWov7_@M8rGV3oF1X{{{HfYTs`zI66?dzjv-5AziWJ}8~GBFTv zTTEP{sF*l8`;1MToLU5mlSlNO`}4t#;%_CyHk2<>EZ>COvTto+jqouS=luTDIC|(Y zo?FeC^w5Cf`rH4l8FSB*`I ze`53lXLdHyuLqmk6a!%HqT!!1KYjM>1)bX|I{=!uW5{4HcT(?q`Kj_x^zL`{E}zZ2 z@JKcJ&?TJLc?-W~u}+||d+P+7q$31BaH2hHf?t2*5WDh&X1(BW33ya4q;L|I4&OC0 zT%$at{mC5o?;ZN`%lEt34vxPXYmo5BC5ik?50#HE{W z{K_j^s5PfNh8SzwvSF0l9DC2IbZ{~>to_`AYr<#Q zpx>47>8&5mpAs9wdJpm|h7MV&J<`yB=l2*h@ctw1M|d`Ob*OJ%snvS>=WD2Yp4&SS zTZLT1){;lE!kg1_4a1@h&5L*B|75SWG)~s>KR_*+VRlEH_%QTj*4v;bWI=1mxDpdP zE`@(S&YJEt@Ux;`a-q=K$NDt!?O>>{37Hbfo9*OCyLd9W=-^3xezc>%Er9l6Qms+Gcp@OYi`G%5#Z* zFT;KQ%9;C{L4St+C2N+_4s(#7ge^lXcv85~p_Rkw^gZh|TDkwJ_+>7AOZH%+z!!%T zzW7q;=Sz;gc&*-bzZ<^~nJ)ib=gpXT7YEKbZ$GSmEPpw#FclZKGY9OkjV6y~aQL^I z43C~RhmmP>P^{Rq$3`nZziH~3$Dw}EeNI0^!g~kk=M-zoDSSmvsH5*J+w>E;_Kf}L z-CAsHL^f+S>pKEdraXPv|7pp?fN(VmHgr`Dq~ zF&yx&xp;XX3#g-!Zns_bY2*vMt~~Y_dLg3yo2)-v;L@(A69jAFdk*;4XZapM;+NBa zqxNL!%+8J?aDiUP9&T)l!>U($E40#y9MHQV-qmO2X~}2LfzNLvcTsEgxz$#<8=c&5 zS;r<3WA9;&`~bBTR^a<@Dht_Ffvnyr=Oc6@*LtM8_{XkUSP!fQLBah66G1kw{+^{_4nu6S*(kbFSAQ~sCN(Z(+V}UnBzX#gHK!&-Yi<# zl8ot`Qk`MXzcTSCr_H_0Zx5G&xpL2`cO$>`V=m5AKX5%`N~Z^>zRe|x*x_hw_aK*Y zX6Ca$Wb|OZbLl(uJ9jiXGRS3q*LVDtAeZ?aKOl>kYblrcUEj<2&SiclmnSP!U0KSt zz{)zfAkUhTHId)B%i7A~x*+{UHv)TfxTa1r0R%y}&xnJwtC%5Q9?#osa&Kw$W zYCL#6^$PX6#Zv>t57$7Cets=wY^v`<-b!x?vP-xs<5EuACV0DaXtkZgcsGEr624Q5 zsBbLSYdpWn#A9_1e6YR#v~fA>x!$;*aL47H&*kyEQ-3a54=H6l;5%hJ;M*HdoyN=e zl<|PyY-mY)rZv72eFtV^xy*RMciA^;?Yxb(c2OX=w}kJx&{73g72h|J)0I1p?_Bzh zPdhgkTB_hOzXQ9mWz&gSO}87VXH2YPZo$>8b#QIqyZo~*XsNf5nlI2*$1wOi&+6+Q zA|6*>N>2L+fm1#BjtoH_4-56h@`%52Z?Dcag*KwlMXWH?H~2Joy62t2i{it7a^d-1 zmj~r%2f484d-s8-EO1!LB|5LxcWAAYOW*f_w=B+AE#V^X?O?GLGG`QsraU?C;b+zv z=p{_)TWubrz2nV>h3tT zwZ4(o=Qy{|t~7X_%lKEOwRK^J@r%y98psjo(UWV=?D!u#^508&9$5H)bKXh4m-77I zqkZC-DPu?Z2!NE_x~$+Z_#<@9?h{{>A^l7KHhlJpHILl6=qsH z_*=p|W^}%<&9w2I?f1VseR=S4Ygi`W=rKszc>Uv1t+LZ;E)||p^vSSrEZ?P)79=0mGw?OZlNgplDzVqmWGvNPR-yet`y!YWR(c4+!lm2|7T@RqC z^ZRSzbGG*r@cTQB|NXY_>669Ao=n;&;L_C8wA?dX$9@aH2OA@*7(G7l<`^+N?Bq;q z46D)Kj$U(Yix9f*>scq;wsIN26`aUceu$dTqSx1a`t7vwp9NnQc7~rmRR?rwEU7Qm zo?;V;XVRW`ejivK{4L)1^uf8%>$&3Nxo@W8NI>*{GISIA`KsZ4|sez z4Ib}C-yePcPvB(RNiIKqc9N6+_n^;Lqp9@ye&F$b`QvY`KRx=iO>L57JW#Pf|Nd6R zLKHi$!rs3DTQzr4!`0oy(`J@hhx3(d0|a#@BDCsnpt;a$B`8QL(xX@=G+I z(L0+TRV~|M`CY`~jZ7ql@c$^6is$sc-tC-9JNWLbTMkzqiq2&cTr{65;vnbY7w0Wn zcs02K?M2J1yQ^t$CiBFPir16T}(UO}Zl7vUthWjhuxg|L8l5#$SDq zeQn)?LtkA5K6HOExZ2MB1B0n4O}{K8jWBI8Hg62N|10i0@yQ(E7HmKDqZ4jDPbW_K zb@FJw#`Or-dakc>)tGr__1;Na*^3rjy}`wK9b?|iy@j;7#{mn6sy<>JyOSD;+dg3JItpF&Obt|aR|P6N zYOOxiL!rx4}cF8bL^Jj8oXbMg9`kVXF6`NX)1 zYwLZzD>~I*J+py$`3=wu`zeof(dTQ>eg%7px*0>~P|lGdw*8uA^(tS!gML=v%Rh!5 z?igydET=}KeECyX;M>wp$My}6t{|@E?@Rl_)Q|d9J`v-+s+)F@4JqR_a4|UodF}s; zoGaqI?GfP7&6uN%wGBL*_lgI8Z;{sSkO@)nqdxP%o!Z@DS%-=OdA)Z+|K0GkX{Ri$ z9r_dQRd?ZY)I;r-e1N7^+d;Wy{ex%rc2n0{W71x-9(-@Foot@ddw%$cCB$YS|T2 z0`^hHww+v^ZeSM?O~Na6+-sxXuXBlBQ~VQbO7Z3pk2k%uj*6%UqIvSq(=Qd|VEOkG zMZuZITye2Ax12HeuwGNgTHTt9i2V-DZ8hlP{Gy@Il`k=_F3<$!P6q*Z{5Hi7b|GQ>|W&;pLIm+#K5d zF*IJrSel^!7<7J}kH$scS`Ugr7h0?6E_L{{gSnQT%$uS<)ZZT3`>fkO0HFPxUi(7y z3gb}xUwl*sk9mDe^z~u*h_*XvQ~D^;A9U*Vr*WvyEhqA(^nzcFe+_l-#xm}g3=DI6 zkCKBmo<3%OBxL{Gfnlrak+V;F^3NH=4dDHM0YlX!9|zunZQsl>Ntlgt$GwL31qY4y z!QznJ?6zgibe>5qB{u=yLu>LU+exCRB@qY2M#Kn(d#eV!OMxSTG&&0pwSCtzZe_N&;Ku@htl}J^)&uxe&@>n$}N6BG^f4fUC_Gt zY8LCHe!6pXUoLc=-+pa6U7SHa?1xtek`GQ_IlV7KBk45g?{BoPKgl2Y?0eABe!BN$ zgeM<7`g<8V^wVDj-!swQ&;Q(?kPn{&#-4oG2|jhcm!FqE08L!LHI!=zm+198u7T*} zLGtR2{pO>S`)JqG4{OM!_3yXPUJIQW*m*Ou9os2d%lQiEJjrdrQoe|453GfE*tWuzeKiv4mmJ{YcP12ScQI`8n8Xxzo)=Dc91px?N;uger(C_ z{H0&*hox_l>(x$;iqpS)GTHfkI`%~8M9W^q`(|G3iSXv7IVIB2_RSvTGAO%L|a zQQ$dd@vX;SN5{_2VJ&&_ZO3OiHcP9{1%Bz>{>d|ehtdD6U5;fR#u#MdVbNw9KK$eU zU;KVMFw{IdnCF@1D7&p+w(+0H8NpUa(#F~6_c3pN@Z}2T)k$01(&ksTc;SHa%YUzb zau0G}^8aDY58Yf=8nCr)cc%F@^801X?^3Qwq7|-m9+Zu?jl6R||BdE7Pd*>3b?TGa zWPKV~4*2|3o(DHw*l~J( zBG3EV>xBM}(%$RxMd(wudIz>lCw$SxULn1M-}8v%jrI?zPR#<=>gq11?hG7xcoixrH=nV{_TsjkIxZ)5gRW8 z+@ru;Ia>P7qtOmvx02`7mTGAAAS3%()2@I%bbihF3-Vh&!5*W2_6#f*tsqB~NA@`H z7~7b=4Nm`qki&)T3+X>%Avfql?P6nxSE_&7RSuZ$OBad;wz~Zax38fa6%&z9*Mr}h zpA)i=B70s#?k`6FMM{%>b`14oe}4N+w?D;vljtjtxn^^v^Ptvpgx}{YQu$E(^ICj3_VDY}7ER`NDR*ike5m~zE%^VDLaQ%$qUP1+ z>|jgo(7nIyCT`M&K2X26!(WPXqtIlwNq2e`1A6+yQII-`PJ~X@!fge zqi3TFp#`H;pfS*k4*=7$G?+f&qrDXQV$NPj z<|AnDx$5k9%>lN^5aldu-}V^j>G^T!Rd`NzQw*7)+|Dj!XUB+8-zw(T1D)-GJ|4nm z=_Wq82l{yk+vsKDx#Qh^nTz>t{Ln#0HdGX7A5}rG4UT)Dd-?aOOOVvZ9=|#=V%}x% zwG|_y%ovdG8iV@w#?b@MD&{xf@9_2tOK0s7L&3I@KXPj-ffP0-6C!TtIT$=o0 zY|TCz@c2uxKQ$zoFBoBtimxj^9)qW}S3vf-Wa4cGzq!5VA>);o7iV2SdcpI%y5Nfq z*ujz^vdKAXYPjs;S;+s>Y;s`Tl>%Q6*N$Btxio2)M}TJ(7{=hsI5<>%z6-n?dmMV4 z@m}6l>gQ$n=|%WZex(y5$?Fx5jYoEQF%rREF_Js5Gd&-C60rAt@Lwcg@8k!*!f!{o z4s-pAE0g@1l?H1zfF$IXVgUa9p{1M$xwJVyT%Q-R-y3VS)|UnhJ*fWGM*IPDue`d? zqOTHaVCnn(@<5+?Z@=%o2^rqIth(=Q)&djnT^2~mQxaWV!dQRf8=riZbonZoDu3Fm zeHevyAG+z{tSZG|b$=P}chTnCjJN+Tr?wn2 zo;8@f-s=sG$zIEAe_g-d6SzA-JwWxP9H?zp;Lx@c53bFH-^;C>L!wj0+b+7)GqU@; zWGC&hDzQDU+R7QSo$$V5%yDQt2Hh*a^q-OMF@9%kyJNuN$F!}#qyN&sTRfr9%{ni1 zPpHz$Bj=R1jr{=4$_FY!)_el`H-5sR`m102iFNm0XnzH8V~2p-d)#;R;{eN7eG&<-$L$VOFZlCi+FGe9~B0u&uXgeyJApb_=5j~Ei zU-DOXO=mn>Z|zSTlQ*6Pj3+UcheMSbOP72Y#^{Y{5pn2MjA_-0Rc1^z^jpqY{Ck@V z*xRf%rj77k{-Q-!7u^T{@VPuc^|^{beoF+n2=)ouX1t2Uh)3{iDxuwHMMuKXY@T}! zUM-=mO!HTt$cVXuf0yA$tKGxNVBKR+#}=+m;4qVm_|K7}@JI!IX$5<-YpjA6Y>XwH zoIUy)ZIy!417>cyiGADM%uVqCBQu*n5N;TzwJc}Pdy+>SeOjj6ao=y=TDV{5da#cH zhfKfELgvoon!(iruVQLmm zhZ>-@257C`qW&uVYX3!T(ApiJp#DOY$epV?>05GDYsC88Xyq(fM|-SAEa_q$Ol!oV zN$J8a+V#_Lc_6RF!`H?9zS6P|ZY6G}bs#?+Q{k5x_V1CW@h(>%*KsZ*uiQL3$%-$I zP0EVnzP(f_^1{S2QuCkoc{<32(;jp~HS~C9dT?@{_K0?|8OAX0u3%1LZ~FnuGW@da z9NUqu5npyP7X0Z-lPeH#sHA_Cr9;hME#xU77R{M_r4X@z0 znfj{Yn@!-zo5P~=kgZw{J>cmmm*k)Kxys7v&6nMS-Wz{n?b_+sx0}(2%h6%}_szN{ zea8)57PxU=2M&+;@F83bb#bv7Jp18a!J68sA*uN!Ik6S5C^iwnPK@D4c)1?pJ@HSJ znsWhkros0NB~=jXf}JOtmDtkXAbjxbWYN3(&K3W2s_i*y z8rM_XSLX{YSx?~WsK9y+p;dA=w+2%W(m$GNg^HelbB68BjR{^ZAMPutO8{-L8M z)~tOQ`KL4P_GDY%7d=S#-NwG=1Jqm)O}zk)4?=HsKXvRW*+-%c`C^Oky%e+6zHkG3 zm+t(q|IsJ<+v>BAKNAOzvbo8@>5bBld@8{z3j8W3;)k&pOTWkQ{}wQ2{l1hn@h$W( zJbQLusqiJ7b0uZ(xx>i#a`Y3!ACH$~Q~BDSfNXQ*jMJXh^Se0@wFg^OaPxRja#yr2 zx%wpht6B*W{2O9^w$mnOUxP>WL5-3}_MhzE+o1;AQd2^f9i? zf{!_5H^sg==GD6+2kV`*dUqXd#9)`w#(MPX!_a1n(XGyTX8nWgj@kHRob$Kf%~Nd) z;GHaTOq3%QVt;vYj&+qY4sg~YJUM*!^zTo#EkpKWkFw7-hyAwa+p*?gI7UCxWwE+I zWq@-sCcScsGqLCsx+1n%BMo(ONs^{HXKAr2kOSBX5# zyw~GLb2c%1l6DuL%DXDQ3R(dcI)^q6&2~VaI(LP!Q`4i-@ck(AXLSCkax64n#RX!} zht{MFjhH=VPTlx2&R0}jmmiG8{<@hy!AGL5aTWbTb6Uruts@JGD=c$lklE+D62ERG zK7I>psKp~Jy9wFz611V(Tjo5qrOCRof|JG~82aIt>A6gB{!d#cUj35SQBnC_eo^ao@2E`>|K`+sm+>vo++)!5251Xe;LS&WZ(#g}9^qSkk8A+HTZnt; zKJr{O9TXd>VozWI_!>D4P5o*-dtvj*5Bn0&ONR1H9d?ACIm++ju{rCWweFT4(R^e_ zAS;IJx6Q!C{Ei-Z9bZQGU*~t8-BpNwY2<#dd%u_ap9mBlJZM={#2ZJEU7pVTs4M?B zsb#;wx^g||^}pu3HD*<+!;uk1Y0W@;`sdwcz_3IA*Oy|$xM zshi~Tlv`Kx%8q77uYaF4XMHY1ucPPD>&yc=R$~ppo{+q9&pd2)WKoE{?iTtoYV^M& zD-Ex?zZ-b52Bb41I#~NTiX2gGXu&|TVgqn)7tA=PX#C=ZS4-Dcqr1D17kUPt#pKWa zf@f^pfG2&lo2cs*!kAGk*`_ryaybTVmxN8e|P>QQJGnjoN_yRLkG4FLHJk zcEFR!;U`Z#wD!ByZrczj?2W<)k~eW=_8YfYeQ$mq{jdaDVBFE*`Ha1=eGd4Se(pdH zG$PwVCD^N9+Rw%2()P$tL5^KtJb52ZKciQ(G`H&1>tit*U`_j2zaND&A`gW?L-_ ziDR2}MCP~$oFTi-dVGVG*RqgYTj@=$wUHBh>?MAS?@ylB8|Ab7vtn~*`(Wrzb@T)6 z$3Dn7tDq@hF4!5JTFc*6w8J`o9R0Ll?}|rfQ1_+#zsH$)SBRLI(RH%Huw^b+K8|?@ zzDB?49eCg-9DSd1gL zcMUKiK7It+I5Zpj`RvKHYsW*cRp5H@-ZhW*lY<-~{wBTXj8k-&$9xOgb2Qf3n%|kn zs=ln175W1J@_HZsMB5btBge zT-S3MS?u#yUnB?JTYFzIfWJD+=&#gxdnYnV@=|vCUhG#-e%yc$Cm%A8wS*beKbelK zxE&bWPF!arG3^q*$FSiWu>Tu~?J0is?yUZ{eay$vOYRB}LOUha$HG}WSJQM+IQfiad+(xaCgVr7&i_Mo-_?2#`R={v z+&3|B(@)~ryqdmA$!ARsH}h;>R$@$vXNT1EjZS$sJ8YgElHu7AHGL!8XZKONvBbK@ zd3HpWQ`5(~D17K);;Nk0UBp@4MeJqp=CO=<1h9|t-1j5H&`~AS4~bae0Q#!9SatYD zgn!KYd~YoYO*Hqt_vfpo&M>Dg{_n;D*QclVonU=W_eKMgVsIHS_2$ZThKsFd>YvVa zWB-mnFW;mHJg;?a63-qx3XS>Ke`+2kCw7#n?;l2&QUmMKaK{jMdPtTXZLq=%X43B{ zY7E^Js>Ij3DnxF&pRPhHs_ni(4sWQ>SP4EieR}=PLNECH>!+{&DyuR?&cAFy^k-|0 z^%2gDM)t4b{LWhJE}oIDj`G}xfnz90z6O4eA3o6$tgpd8`l}i!JAqFzbXH7_#R%^f z-$Wfa-hY>|d++g9LGtbtt-}^y5OO5Gj>MYd&)8)X_8JB~%Z9Z5&%y`o4eH3uEkbnI~ zJQ<6#t_mI2L5FqFVUwwuG&DS)S~U*_kx>SoR(lQlrDmOT#;^CxyVKrl+fO{Dq3Pl< z@+f7z*~p*8cv zZ>`unz__ljFl~MJENu<)w-pIw8rR{P;)%?$@u|noGRMELcIU$W@QS?|=Xkj0KPHF@eC)w8F6;=XXJ1y!zCusF1#>JTn*Er+ixgu|lJN>l!jbvLp zR}`P#)&gp!*Mvre#bU^tzjA4y58Sb(*SLu=S26v zKTBJc{CjTQt-M!uTF07p)$DJBZFhFR~tA)E+XjybxbP>$B`_$wHo^H$~4?qsWOw|2g`@ zSp$|HD=9wNcFzFzsBPjgMTuO{EcR|Gj<5rpIY1p^r!A+>$-|7%vw78SA??cEO{q6$ z@=22G0r8vB75JxK%{i?HbWFupEoH9wce&pr)`Sn+ja{!f>hFx4kU6h@&6b;uWFHYOvT44#mBmW z*i;cds(e?zD^^#GzC|DHbk7~TGQzWZN4{_|^|^MiPOb0Y#MW=c)CMWF0=5GWC*IuO zpG`bb{#aJ~M2o!`=qIP1Aom#yzV2Hkt4BCzOp#A2`&@AZ&NNGjTl?d2g6r<0q#vPJ zoIjt$$rntXS72h5wT{mfY^B~Aup~xdV5z^;g2$g(2`snf=d|30U!=UGTNm95Eb|O3 zJHUhTAheGshQC$=EF;8mQu5+}Uk7k|1NbQ>R-avMFTi&3)0rO@NBd8t!UBJ5AXq5B zLiXy?=1WXYj6N^;U2RI+20qxJg3aeV*x;)uCSke%Jp1x!ntc|5R+I~{nOc6!t(j9w zsMT4rF)J)vvHTC%vIc*O5oNW{lb=#MB;0_XqBsq_#~Q4Y@8ZOfgzI4YvkmDrw`z|o z2iQN(X})p#^KBe{OU6&dyTp8)35Oy2K;j~9Q`KC<-qqhgMVJt_v-`5kz4J8f;T;D=COgmsc4?8+LQv0Xd? z*+`vp^va6*iQ!J)AW2HJDren{~Yz^Z|{k zJ#U<6YWH7g*U=^xPeUhA=_Pb6HdqsXJ-qFdtSp)CeN*yQV z@tEAXEup^ncKGHy)Kfpk`U-LB7;;4NFILXqn|b#ZU@?#QmZ{Z&OmD~vUv)ognE3qO zy={4p%&jj{jooX)A6>`q$fbZ23*D(T&ZzuD)7LWeVzKsz(pJcA%YR1YNZP{3GiOxh)0W9Mf{z=BS2Tn! z2roSG+DlsV!S){Rmy^@2oV5p##|N@=TUHgbR=Mc5?^HD_A2Mh=T{p3LdShBg;s)g4B89L6l(_)AjphuSys!n1Wq(P2G0rQab>Q)KCx%na8oKvgu|loy z1ti-VR708dQxi`g8~(%E_u8t_NhM9hiRauq&u-f8#Ew#aK@9zvjcu|bk{7;`^+n

    J#r{$JqXOu-o^%ls3ur00TXbnn2kMtt0_^Z=gZUVz6# z%$WGNpX>oVftOu6r)@L*C#)CvDKhWs0X(mr1D+r}CiFV{uU+F?{x9@|O$vHSGOz6c zeCy5u-#>!ipl|Ti*BsFUc<$^4cr<>zrl$w+T;B`uX#Dgu|Mb@$@PBW>a|!E(P3n~% zz?0k?@F@A1Y(Ciocmgl|^ZCC*Vs5Z$-qizmUh55bWWBJF-OvMgp6Ug7^nR9V7W4p~ zZ}%EJ>1Ij~;F;SC@F0I!udB@<^)k-2-;e7xcqW-Y?*TmNy#S9##YA3Z{;&t|G!sW2 zwK4sZ_Itfvh30?s0G{2w0FTDcHRhLl0M9eM0FTDc6!X#^z_Y9u;L-bOk}36Q&c$Ez zdI27dpDWFlPtOg{<-Guprk_dXo*uxH*$eRK^-48=)B||hiAz5lzl%N{=DaF8^^y}Y zd+GmCpGIC!F#n?m@a;YaeE&FodVu-m9>DWVFTkVe`x^7o9>BA#*Wj6KX7m7_dA$IS z=C`S4%O^eH|6YJcuh&)Po*uxH*$eP!{x{4Y^#Gps9cSnNe*}N+Q8D9F&3k(Q&l|k} zkEWkw^D8}or@j~9(fFBYez6De+}8{6fS-e6uj@@O+$Sq?<>Motxh$^bj7& zeSA7AvHiUP`>@;oF81P)*x&nLf0w(jVlU3X{(dR;_c~91WiP&L>NG2R+BB;uDNEUl zKg8~SjD7QC?Cu|6cYhx{>=Eqlt=Qd_9T=Nz3pQb82gWAs*x3-Y%)bkM_}m3Q*vm7x>pPC$I=L&%=K^xq^m|$RD;mfbdIX$&2!1|rZ~}ggIygb+ zXmjCYsWX3U;6cF&^S{-ZzvHW5{uR#r@l&Wg=*<7?XUsnqFD~}zXYKjF9yfpOKS(@( zp$GT;mH)uyKN?A{;&}hT$l>?{#%X_m;3MPmY0wY;5$H$op=bnrL}}zK_!yM{AHx#h zAM@&Xnk9-Ry4Lff28i`=a&k@j=d)^(J}+LILp)4brE%;n zd^+viEzcp3ZO;83E6D$u_{l=}q{6r011T~hKI~A2kxBeZPSXkUbcOHTU@1aco! z=MBhdn$CS%r^d;Ii$9O$11a^G7x|#yn+@Uw;H5?60`wGH>HVmI;wk#A$~AE_{Y@cP zv+HiQI}ZnUde`J#ewF!OMW^hujjs3S5^AVk0axTl=;COhCmFj#41uEY`*ZO@Sa4G8(yop>P>;r}|*!1U;r|~9T3u=nw zupowIK6!;(=I9znb@({t{}Eo|N+g#MYj`Vh5{HQ~co;ee;d^f8S8`%W9E5zH#@b5` znQg4QT638@xRMx^<|~ZIbnd>kcvGTvz&z9edw^$}X8M3L?x3=^A3u4jwjTSTVGK13 zfwKiTQ^)tZ%5*ZMq-|wjW3D+{0p!Yl5uM&SSV+zjduOa6Je3o{LlabtUo;ZL1dOJw~73b*(<1io^PX8RY%>tVaoZtXJ|G`OY&hC^}gy zaSbI#QcVc@jmco;!Rh`752gU);~GZ9zt)d{wWh~<{7%lvTIhOBp6`n$e-%FnT~yFVaH!4&CVz)5CLb96 zCid`mQj4wLT6%a?hLnTlUoV{xc?@)IEb7UnE|? zc$=62cYH=EGPZm!x%#C>oOiOS5hwVccdJtyPsdeA|4-BZhc@2b`;(>WyT$gWlyYhT zr5Za^o&{(84J?uvn+(z&^l|FISS^0?5YC}?onh>h8fs3h2C0)66!|S{Br=)rByWh8 zTbbqq*T%UrghL!7}^t=DtVlmku%|eeXQ^z;v@zY zt6GSS{f&9I5_>?759m1cz&>gp?xXhML*zl+#50i(DeOB*w2_=0e#uE@=k)poxfL`| z>wQb)=TYQmfbpr7PVQ1~)7=7tjO)OFj8iboL{5{BP~cn0IJ>B;wH3PELoB7>z707= zp1B?E;D}hOj(X(RbYN-Yv(yZb=Q7{cnamBkmUxpu4mla&Rmt~KM&7m8S!bzBBzeRf z++6|gLckJWj|sz{Dt{`lNPlh6T@YE_b~8F4FdgwO-=48})MSCjfoT;m2|VS%a}n^g z1B;9&V;`kvZkf@i<8^Xlw1ErBPveYxKI6)GZQ$alJg1{Tg_bYklk_QpjbDpsy9~mJv2qjl< zP{AbmYTR*~IuCBjw@=q@$c8UvotR?_G_d)i8?6n?SR-gi=;s0AQY4o~l!jD3jZAX` zxx1wO25KH5&$l`GZZ_XZ?nQj4xl-@rPH2dAR<jx$Ny*s1G7^wJ$rZW)yI?8CRM6 zwS3&>)ZKcE8o1w-KJpEVyg1ZmpJP!2(A-chG@ah@dK4y|vwoTl)BO%i)m>rQaGx*o zHR(@s@Z3k9dV5^S1?PtC*-B(MHTz!APO6z{!zA^as)!dZ1*U81Bai%L#lYl~S_hTG z%u^TJa^C3g$az((bEW8K%(oRB$$oJa?>e7HfSZ)34C~E{zHGg|2D~U-+c{m~XOS^B zzaFeMQq7spyw-G`SL4I%&oVDys(%0#&~0xnMW=rk;kHU>|cDkwwQWeZu)WNR3dAIY;y9k zIBRvDGp9KEX@q`0!Y8NZ1pTP>L1r{SH!`2S+1{GrtY0;Bv%p>>XMPJ-(o_HJuG4 zUYYv!iVu^NY!H1za2J5*Ls~^u8vxd;BDRl;$mBF{QjX4kN@P8IwNJNhi87N z^+;a(3Usg1>|(2qx+QzSt>5t7TRr}vLo28W>EUx}dWog*Q+b}rGbNK`tU=JA?1w5B z8GF~nznoAyq{>4DovO1T?W6{zv`@GHO3qUGEV`Wh6@6F!iX4|c`{W3zo1A3&2l_0j ze@V@y!g6%v^S+7RT|^xo~nPS?IJvRP;ZI&<^Zxn%PcaXUS!MW z%Hd`R-Ooe)L6L{{`AnUkCC{74=R>?NXK4AXoODWAK_X30mG(^S6b z9I~0cKVCLJ=gcL6Y<}38izA!a*Ly0P@3rUFW7#ZczbtfAc<#qPv2~#=YF@i!w8MXo z#Mys*@TcrorL+%^B8Mb0TJqw%W%T_WwvIT8eFIq`=WLN32J$O(`{~*swoN%xIQcWR ze9-nFf$3ibCKoIQKMp)c)cNX?XneWc=NW)Jsbn18Pswq0*Jv>D++Ih{*w51RoGYY% z_9V#*EPcz5I&V=kuqY|JxI?C&Wpaf zu(J7Op?UTHsj`O`oErKtd2M%Y8e?1;c$fE=dw7r9qPxk%|1_{H_m}}{5`_0sFM$3< zHwiO_7rBZpV5gUJ9yQ8#dO7D+@wd{h&AoG|s{i?M-t$w`y$Rtzb$%r_IP@-gG|RO< zS$AzQZ-TZ{1VeJ6Pc;PGTeGSwOlANVw z=nvp@UXXWW&kwNg1o%IQEmYQbBjZ;y{tAiJS8yqI3uLcq z%a|81R^C8+tW0~XrS@1iF&6&^sqx?*>v3nSn|x}VXzhS>U*t9!M`{P8vlr5TBlS%l z0#}m%bpyQCTnb&jO22Zh5B-K;@8|x?V)*%O)>L$f&K2ib?~LH~Gp90e z#lEELSfry*Wi&nd@26{JE#%yFD`$-`@CZ-K-vx7hkxLvJm}^8DlEt<{j#>D6{$tz~ z=?4!HlV)&c3G#f@rzccjj$K)3QTkFexy~2qYp-#@&$(xv5h+)G1EEdd_9470_J3(x zLf@S)@PFqZ{0%AQBYda&$o?|-O<13oWPNg)9-{AHO^kQ`FTC56e*R%?m}4G%oX5Qs z&Fir_bjSaWEd16NPS);`J7mO3N`CctITGZYsC02fpGmrAMX8oy704#e4?8PvhYpgB z9TmX9n(oN6WeGaZ4%P%4{CP@Vy!eS)Pj%N-`~*RJJ>~DPr+krGe6*r(1#W?7pW-)1 zXkmJunv-ER_J-F=D0MQ>EoJ=Twn0<$Kd0rz@#`#-v zaz07BnXh2iVLgM_*)_uLb#!b|OQ}UI`+7fe<2(97L7cuI`imJoe`vixbdIUK`)Qm$ zpzJ|$?|-ezXE`+K);FY&vGnnY-G?*&63(D*e|&Kb=Ua4^&`|Klo^pcyO40m4WF}{< zPIRTt&J;`CA;u3l%%$hZ=CUR@JsEH zy{9ktEr)_9ugClzG%GUH%Nbv6zQLMU-}msHo`XIUI(Upw7h3QreiEe|+4_;-!-}*2 ztN8%C%qKtlMoZ4S%~`A&bF46Ya(`X%wD`C4vB}CEu;IWG1a`S!SI3+l!>3Yos=uNE z$1aqACq5B;l=;v=5jt@R{wa8F(y+(oSYpH0aBF*CnDIi4R~$FqFnc_)Z^(Gy?AY@% z)_vJ(ta4<0J^O7gcC2C0+!n?Y{-w@Jq=@rI(R~A~R&XF|y91o;io?e-uUF}dZ*xZd zi#H{%o)x%$jv^8#5&34z6>RR&S}u~eH;DWXvY!R3?7Rv29`rh~0qI&zE&P4< zeC)9U(51Ivb3<;eM{eo!N>0;o@ZrdXO6pt$;qw4%jn84*a_=Pa{rfE6FHT9#adOIw z%|EB<0^WIDY9ao=%gs=g5t)zd46Oo>V_BCP{vt<0?2(l@__8ZyKT9?TW*}dnS3~aN zQjb(*RuFjHvRmLQMV^NH07ofsjF-L1+cfAepV!J+I0!z1=nFyWatZyr>oSGFMd&8R z1{a}KeXIcX524|BTr30^mE_2l+{d*vFeb!2Nb145 z@p9sT#*5QNXp0(=AD7&oYvv11va(e!`tTfJ%Nk(0@$qgta$VWW(Zgll?CDcmFSPRqS}!^sa0MMp-lY`yjBk;qw#Ub{)Eh z)Uc3slJyC=`u=8I-=cGeXU6gNOq;inQNr6YN8xMXwayjPFlVe_mDe07c6)oiN}pxE zV*g@24ldt&G4+PHr_DYc1{bm~ICi1GQnOp^LW$0&@$y~HnBPE$bIWE&u7#zaG~zz! z+mX+259lhNJ?MB9nZ}N!dFXR};4ye9C)cZLJ^Yb=E96{8eN1__VhFZ1Y^2zf7h z7J(mS?ZW(B0Bra1zB-G{Ga?JnJy_qJat1%2Hfn##hyIWOvX_+eeX!JHzKCrylr>%L zEm4}w*YF@)HNEkcy zA8k*t~3G=A?mdyA!p|!Z#q|`A}c-SE_8)@?r;b1V9({dmp&oJfH4AmmUplR zN7Cp=+P8;2(HJK2bGGt++tW@ie@Es@JyD6_A;x8pl9M|^^d;*)k@XCu&9DM#Dfpd@ z!V`X%tpI&R=7b!l5%~8A;~u|(1?75?N@Zb<=CS{R){_WUr#6p zhj-$a&4q4PAlvo$+SZ<{&Zm7$u)OYKX!kAWw39Dt1Z65&5^7`jeZeW0T`a>u6-mBSz{0k0X6*FH`hn*FxN_)V zH84i$06aK!Ao6st_3OC*kjv+J{* zp*B;)c9oHGpoHH|#6vA4ZcgLPqwpqvbT^$lc)QKP+wT+N?ckYs(|l5H#~Xc3zkjeB zym$NlEbuP;>g*G5Q0H9m+Z2c2CGq;lXz zttAi?&|2l#RxQ>92qL7dOtnpq*oKRUiM3LSwI16hKmjRL5qj!5$MZYPEjQu~ZL1?- z{-5uD-<`ZO1jN(x=XqW-^Ul7my>5H0wbuq0<=1NAo{gQv9LT4&{Vw?jiCK})_%h+N z;ugHv6=ZTPv8uJ?LTja6#T}?!f84GR6uG?f#Y^bu-dV)2aiK5*Qg!*Tga$n%R|>R5(5<8UaPTXnRp2K61C@xwg zU#YgR#VYPVW3v64`;i&b&Kif9IAY}nXV$Io#$xTB%NffB)Gq{9OBjpU&qU7j_8FFb zroCrm7xW}Lb8*XkXK~}e8Q?p)j0#5(w?QngrO6CnPzF5;KYQshweBCO3q5ZxOq7IU zJ^BoO;FHv~xOAz9OSgHrWc3a0&sV176Z9Gw1d-rEG|CTJBm~BX|Ekq zANcgR#?&W1xp=+}e3Fjv=n3%Yr>YOEY8Z?3Qg_dq@9vdDXQt@1b`RbcPJPDW)a6Ct z?H>`RE_QM1I9_!sIQ7UTmp^?ojXxcSPw@S8eA;t!ANYjKPQfSm{xw=Ji%-bykAhEM zvuoD}e<~L2{}1@n7>(~E;L`*8`{rRKg(;Di+qxKc1 z$<9;3r`!|ZlN+1g8(*iGj0pRW*foy1i(I+OxSM{j_LSd1ZO+K+eW1RYlS;Un(nR{d)uks=497J zuEFlZcj3G4FrJSxt9+)~uWv%ugz-1)`&i<`ABR7ikX zUtm7+zb!-e-bCEzMq<^c1C!^E-oGlZK>N77y6gfc$@{%=9?p=}VM7?InB8pc@e0Zs zcR9JHty{6z>b}Y-_9&gp$~eotk9k+i@`n|hzK6QA$z!>mJ_U;idVydVXIvJ3-vfSa z?2$Tvht8N7*kQ+sd9c%6kP+IE?)t-Y*sacJj8iv(K9~YK>I-)5=+*HP!EP|VFF))C zyRhTl_7vD@?tyvB&OTl^w{gYeo-Rzj?*O zCBSzrb8cl0QO2)0-xzxn#cbTb9E_iVHH)Fc8(d(G6lXY{nTgZzHyq8NAwdQ<%E8G;YLMJX%zxN^*kvnulCyk)(xl@UKn`~v;YdEN;J z^4@z!^e$ch)nnMepfjDT7|Xdu*{l=L+mic3jmsE!gtor(0e$gzoz64;1zUCh>Mc+5 zPUUKtV=3{Hw??sRnSC9ynz9?cI!na6hJGqMmojU;I?K;0Yg|!K&VDSrYXLs7?a)b_ zCzCx{=CRsUOPHhD__9}iS#CMG^@3d;=*~;PNB#DB{Z>Djdj_U7b~{;J9l$iszHS{f zx}7I}blIvJ=Ie(`ur}1Fwa{M7|Nb+q`KNiV+` zwU4Or;eyrw4wrl9pSVl@gF(ILpR&Nu>_^HP@eglR?2_z+Q=l2eCJ5iY`1G-Q*|)0( zPj0MroTqIW@m$bsDE$>Cwznt8v$;+PvmhjsabbqUFDPB_Twi*5*-8|dd%Vd~%W%!Z%eIx2 zNUl#~T&!W+EaV$~tKCjyyV~MVmWj#j&pBna#oiD4yfR$zF{4+lE-bh*9P{*a@iLvs zk{u>ao9rt$>z>bDti2sa89b>hS9bo;mX~7qL$KpY&uGARyWwN-80H3^a^|c0!CEKu zqgKYT*2%2%*V{%t2O3(N`QC4|2VaZNPq@iG$k@x2-`mg?V-TDr%hVsVv{`2pSF-ko zj;MPc{oOb?t4@1zXlS2}dy#G<{pB%eX%2pEeIJ94y@@rK|H95y^OP)*ZuEWTsktcL zU@SZ+8lPH>?QMc$M6q!rqoFxIzy1>Y1$~AdBhb8bzbNaWF@Zn8cT)I~UGLXt;`2?g zmbNe3kNR9hU$(63#^7H%3-sdd_c^~5+QJx%6XVS}!xWeZ78*-BOeO;p!6FM-C{`8T zazc2VlLimX-M|w#%w$~RAA(W;0600;Y1CTfXO?x{j0~B^xjvoKxPP!ymp4v%TXVXU zb7lp$6WyadAj|Fd8|aY(KIp#uHQ+xmz&g_B_z6zqxXS{KhfE*R9bG?>JzHn|emmUQ zmd7c-iRUpMgL_5z8^$=ru|ectAL20HbDQ!xD-bCP@gAGy(_4JfD+?+z5>e&*^x-K1j?%Bp+RZI<=-wW>>U`_9<)I zS&v;@?Wn*0zIIAES5_Dr8@|TZj_OKpl&lM8fTI&a&lYi40J8pOWCmw*{B|GL7W=Bs z@RjF;D|14gf5Uz6%5(R#p?St<`m7x5?fc!|tgQ5xw?59_Vau1Ex1P1N@ISoFmFFwZ zk&H;azkMAsk2<@%jb^?E5t_F z@1xkWg8Rt?@XZ{``FPsTV9m;Eiqq_2?w#Ah&AF^|S;XautI*{NGT!@5NatbhSKPt9 zTe4<-P`?DdBvP(>rt_OFr%%-@V_nM%K4EyN=8^@@W$*c*{sMlFAZs-4&mm96AB}D? zrgvV6!6%s)d_?mqvh(75&%DN*+PrN4)(+&ZxjW}LJg`#d6X8#D;02O(w_<14nH9wj z1a)SGck;VE>eN0wg?VmVdwzI>v+UvcketRib4xI{_z>>7-yxV(n{(Q?)Nq#o@=*Xyb^`f#%;ii(1$tU9U6Y^QR`SfAUzpa0*yg1i-11 z7H3fbI(NL0cpveP_d{^n()4cP z{YBFQp=s;ibM?La9$)Y$wjA+d6-wWey;*$uS?c}G;{)Oa`e*BRro~@n;U~C}bKFcI-O>7=efwzrBRmDvqwMCw%O{54l+4R<<<=s>H78`ww7byh zg^zn)q1Rtk1TAHeAH9J+CcefB$sHqq(CM{r>DTDyo6)|vlC#Kh_*NBnUQ|21=T3#& zEp6%fW>U{CUG1%Py8rZ}j;HPMQyb4CA2Ob?Cm7GTwDTO5tYHB7#J~sfpMX=^6SJpW z9_8q(C(7lqg7tIh&ON(vCoxWj*LdrcNFhyM$aOCJpC#s9V7ta6XI?YJ~>V_G|Z zSDZfUEgZ1xEnJB9clWQzJ`86%vml8L#isQAA(1KKv~ipkCoA*7NtL zzBEtu7a7*@u-a97YAgM{?ayCdF-rcisEq0t_}*K3pJCwDyFZK!W8TA^F8U;Lm?`1$8kX?VXI&m{OsHrYAax!Cdg=lfyx?0h;;FdxT*-50t! zKM9{$YhnThdis;M7xvBZcHbO3efYH}t$hPmukA@EYum%wuX?!lnh)1BU;p|6FJm`p z;m&8w4JIZp1NfHq@m_WHFTMUq$_7LKy1)F6O>fV=Cu2?FSvAiFzgM%rAUC*1IMf$@ z0Pp0f);q30#+TAx?kV^ecFaYa^0A&HjjW zK}W?mj_e+;y?vnTb?$hPju|8Wg5)K!9a}dz(5Z=~%PfvzZ;cZ#ef#9l zlh;mmp1gf>DSrd}E#q&-lXuh3SMXiOHk6t8aP0%kxhvZ@d2r}QqOFE` z&fx^ORjYeRnnRqcR$O#w%T8byNvro&>OF}r{Re)Fv){q4vQ>4I_a*+|NmySTE+&2 zlGp=%>p8$(&+`MU=V__yc`%TS#skTCS0I^qGmy+H4HftMY^b>Z=R?H_G9MYXZex*9D4SyFO6-`m8{4>n8SY2WaP|05Am?_6CxX z-GSuN?2xg4tsNCGacI)}z8So(_(foN5ocsx3=9vOckLO{^EZDJ`^7I|j^&F#t0t^o*rtf!WR$?o`#)6?=qVzp#z6l zIL*oSuQpG046>ig_t#floiS0nE%f1s!RMfdH`cg1)WI)0hjZZ*2S4u|cJ!C;bH3Dl{O1kEe;Rh5U;67(rvqGnX@>K1cb0QlGFa`j@D5wV(1Txb4v*8j z8(e$E4{7UQz&ZQ|c39Es!G*lf4pd|Xrcbz$zVy4>S7wtf_f24X+66WHKj)mb>R=%A za4GvzKb)oSO#sdo#&&-g0mh&FHaG$dWdE0s)DPqJ3*mYHOPCuwBKVVzTY`;fS};V% z#FpgBI{B7w9;-ZmZhnt7L1*Y5cuzL-n(Ab)I_NMjVD>$YsgHIA$HGsfwwDdw)?~xK zz{dzMih;L5+ADX0tB@&&OSRVnhebz);A9~*B)rN4UQzJd;2+;RzR9?#YjQpbU#PR* z&(ndC)++uK^o4!M!tB4O7k>&`p^k~Yf=7;)pUgLB;hki>tz-J};dUwWwJ^Ci1HS-$ zKW1TgEqF8nKkgdhmia6^>zMAmoDZJmAxrg6cy<}E?EbQIcp>oa{u=o{cqdvI3ohk@ zYaO!rGe6lEyBF~LJmA9jN@w~NDyO;CfP1!%>|^?@TsF3T$57{rgY;2D+cEgS(xJ`- z;i*2)fo9^+_`J#3tn-*F^K;>w)pWxR$LhJ7uS)S_zvCQ1_Lw69myZbp&ocLmpp!p!;j~q zm-y*gd|G_gk7u7yUJ}kC`T3sht#dUk?-1&b!KOWE06qRewlIg z%+E(Bc7De=tKNc5Gi6TTiug#j$48d1zH{X}LGRF*6Tqbw++2no-OhhfuJe%AS@dS! zv6jGtI{2@=el@PI_}0k$#yUO}V2wQ-_T!ak(&E+S9$twig;$m){di?*Quq{@a$=fP z9ZQqKLyMPF;eDdNk=zYv=d}d*iQeL#Z1dyJcfH@lpA(En(pBO}~=ErDt+?A^38Y z({I&m#RUD5KEY!nZ`Oj(5pKNB0DB`DyJ_Jo)&p`lP(t*-1OgPwU~AJ@PIF zE^91)d3V9Bf{Ee*Tv-jXMJttF?vbDLGk)*43Ms#o@&R)W!BL#+YWceTIDMk^ z+rwVa^2&65>@&W#tzpg98eFpR82P%#*X+5abKS+~gEt~Wu{mUdui|al;1&2cL3r2# ze);*HpAQ_(HsuT+Ge@I0`SmdIDm#A53&khT^wH8R`X7DNoI9ByohB1{n(Sn*YC!K| z4EQ1Qn{qT>50BT-XPj{nE7+v+`neO!VO}(^zv9B++-(3Zr+y=fd4om+U zPhv6gD&C&n;LL5{3^Gc4`xk&^bg_$HMo$xsAR~TyJ#Fnk9ycS8;j4aF#%XUgzbBB% zD^4Vncc2e7gX8er&jPc^k?s`v)#DrW$wZ6O9F`lFxWgT@=)8w+8FSHdIrdl7Re80m*v1I`ptE$nKs)WsyMuP} zu?=->YIs=k$Giic(+6O)f>zwzw$y`e>!q^*Bf&>-vg>Z(NV^Y6Z(;uB#OGCKE`A&Q zuIL0V3E(nPV||c%&rt8zJQiNiVH_Dgbj30JqR!SM<++B2JNuU=*;8#j|AtWU%)s4S zE?}Sk{lH?^z7cR1U3Gfh!{T{|7;7hwa6o$`|M$qRf#rkJ`TH5!6@7;9>|bXyHuz#i zd_J&!hZu$~hcclp@7(8&A?S@E_|K0aJ|7rm8Efh zYd(VB^JY5UxP128vaRTRY0cR1t(;RQUhu8L5hW%UMXAo19@Tj%*2(ypMuh)Ti`~#G zKj#$6KkqC5MYsIw!fOYa_UGuFIO`f9ABMk==X`ahpJJU~`sz$N#X9S#(*_Rhs&vBb z4-mtIPubFrV%*GGALu}~mJ;;w7ZyO{4?q*(D88{|EBG43PD?CTG9ml}myN81HnK+@ zt6z`aBEA)AfKNa(t-xBiDm;xom4@fSXYi;Mc)VML-2?o}K0WlKwmJtn&%O;=qNkhO zMdlgzR(coZ0@?fk68 zZzH2B{P6ji;Ijf+egfER;-L+#fg6_|+ENG|9of;(&~f5=^m61e`oKQzJv2_~HnL+X z&ls_N`^I5M$|pv%NJCD<1#fs4KiE~57mbh{d22}+QQ;xBf*k4vxB zI2f}_^Pw%>%RPGDk>~Q1N&h@O<9AX%gQsJgN|W&?-2LaFDqztLABhVl^lx;P(3S{g z{>P4CnKy>Z{tw0gFNv8Lc6dWOv3zlON)@@F;4AatE3Tg2uZOpo_*L;9t*_D9@|qsi zdD8LdP3&RP;r1&#=5lw;iSeb$QSjpBtj%N2-CI^%8!B#hTwaVUS+sHReTEk+)<)}U zd9nX{^dP+U6(`v`8@d99=!;vkk!fwqJo_B<(7}4z{kxw=reXWg{@qU_ZNOQ3ar!s= zZ%ZRf<~tR#dFXd*^RQ)wd;09(x3AznblGM7YqrSFKj_WB=)>oK5pDbDdw$yY(O%y> zp@og;$C9h;yZ33|ZS-EgOE>+@&FDL?z_aixXslL`6wIOr$>9RbWdE51ti~X_W#@`t z18nyKS5F^5y%ITm4RU9%d!C_pk0ZNWPSZ~8h|)`?+ecre?g7^2dj6s#*gdqLM=s1{ zFC!j;EvFKFHOihyw5Y$(#U5aT zAzerF(0j!jj~?kvFlSepcL(!MG=M|MGU@P|w}mHx$yX$(_ebXUDDyjy`E3MlZPe3# zuorHbO>6w~qmJ5eW14+1YX*19fg9u4O`Dr&b1ZG<0<%NFYOvbufmu$|eQ9mBmNWil zVCKQA19&ONyIqs~Kvq|DBz&HAbm_ET(;2|Y83{hxcBva@{E34u-7M7p(wnn|LmT)m z{a5x*+qQ5*w6_5~72j%YU@XAw+sKlhdbHh6KOL_Mp6Czg7%6(MPnLGVN7|sTc5tHu ze)}rAg_Tbc>P4laK*!L9$z`IxQ|JPDA^GtG&g0`V-EZrv&M0Uiolj4zMb0ksvZ!)>Jy3`s%Dhr$U!l>&9@zm}K&gfT{UKm*g9WDMHa4$W&$ zBNg9Boj9~2*%|*-8{+}?;6i` z6Y_Eyj3MVkK(Tj}kNIpj5#=gMv)zaXisx89c;Y!{HpxC5eU3SooZ6f}>z{Lp@Q*n! z>%(5fyA*rXjvjl}KIhN5;dN zziMNDwats!9VlCgw~zAgpX{E>uOn=`|}iF610u`?f&-d1oof5Er#6i5mwxaMcfIjS!^6@6)R+5Pe$(f$ z*%(?ymyo?d=Woyd3NmN|atA#-+Q44T_D{Vy^BKwS@nvZ?n+@!78$6p$HTBj|ubzkZ zQQpf&EWW*Isoh_B_LAZM2YZ`(+OL*e@N70~`0lgWbiU~%qjymadwUS&^w%@<@)edqqy`3w4 zeedb3&YI)vTuhxR>@ijN_HH6Rqyb%INq2X}O(S$p$m+%UP0~ZTPmKMH_GPkvAuh&@^9)f_!_)Ldr!Yi3z-~Fmvfek^AOYx5VwD1wDXod z=MksP1nr0i9{f4y#=P%E{- zL)e84VV7q^IEW3QZSegMX8=3xWp=U0l?_dM{s{aTpYrC#= zal+$(i}Vq#z4pU83ln11ve3zd>d)6zx_EOp!&pw3qWydjo zjY%QKC>uy#*EZlJ+pKuAavc2mzk2-fn^XPqF6<)l%y2&bvwZw#`S)aS&ITKt?|c3| zLEdNbWbtJ4mo^AK?l_K{KYbXP56pA_!5zT9wX^%)ly_eI zv%%SXU=O}tl#Z|Yq2vwd4mSREp*b(odmbV}J)M7$e|(QeUD&glufl7oSV*P>GQ%T@uD*H`9j%au{A}p$MSi<{7lu_KT$UQx8q`Y#gj~q zJU6!2^4i70K6v(!la^cePV~>spg_6Jb!DFSlPv-dh3wvTiE14hks~nP9 z#C>ceFWhr?&3mshnE%%ZH1CenJzvATiVK*l|6K!i?Xk?cA=kA*Y3_r8h2BTG$FC5Z zuIxPxgYEA%cWXZ&_|E~>{Qj);mWH$VKBO0Rios9mXOwgJarHC8)^l^mHWc)HFE;&B zZV5Re7{}eF-?2TvKWqBEpy#{JYz=L=#5o+`-afl#$Mt);s}nNs-#aZM&oy->Vt>Zw z%)4W`1(oNf*Ri;wy6r5zBSWF$coDgY`McD~_|x_v`P+#>Q;ej(m+3n(JM(zV z@A%_JUd?wN^Si#I2hHOtb29(5otU7J6@2H>_cDF|GT(X3@7UT4(Vyn>6w*FCY`^$| z1^$IPFi34gZ z(|K$5T>5=7pKB}6H@^04%H6k}bDPrbz)|6>Da-Hvww|P|b?i}`vqFs}@aOL{FH3up zIXZ)^+)|Otz+Z53y;Pn z{1v}><3Sg9e|G}-C?3(DUxjn!tDXCc!_l1TEw`03565}BKxfS-x@XOA=AGNGd*)1i z{5yT5p9iz}u@d>>&yO2Jo-9FswX|p8AsQLx!ZYOM51AY=dzH(x1TVlq( zP7hnCWoi@*8g_98|Ey(EtQRzpAH<-#v_yl##Gjkl5U{>KU6;ofiBtN*Mu=j<}V z1sV_MZ3Cgev&Kfa^;7tq16>8cZ#Xu?#m{`o+(l?Uzx%21jl)BY=JSL};rT`0=Q}5b z7mg>lz+mp-wNihI(sr?TJl2j_7xBZr|*?Ra*`GX2c2{nOiF{nBp(bW`CxFR4+dAB zIt-8j=`i?=U?3e=cG|6z!lw#@8qQ=11|k0XVNlu^42DfhzDBOE9vBSkg~88(frXRo z(!X_T_Fpo2+b;%BUh)h3_pBV}<-5rLQ;c49HhcE~e4`Y+IS$strzQ8(&qxo}bBFi# zQ)~NSEdOjjmHE?>zg0g$cTMN!=Xf;X>U55GwmiyyxUlBJ@V_rUTA%VRbYXa3`a8<) zO@BwZUAzhRMI$d%ii!8YiItDd-G}=ZL=(*i!YyAHTifo*ip$ zdawFNJ2K1btUTAA$))8|!}G>27&mbjcX723cESfaKS=;rMKgAwPR<%U4=pqkm$p!! zbDi+Y1vlNL?|aa%#$~m9b=;@#I&lAj1ry1A*OYg|7Y^htSUAz-njxRdIPRV9q<+6C zS0CuN;AY^r~@;DCW`-REUFu){3zz;_8IJwY#2oumCdKkwa78sMjqu=-@hLI&-=i)mw0qvyz)!_ znP)H0pLq80JkPV6XBW>-oT<__c@i_TMKI zMNdv(f5~AE-ONGrYzN2YgJX~1vwKb6vC;$mlGQ(&o;AJhaVK|g?&0qp$UVae=X`JX zn)ah*2ikM<>SUjJ9N2VHZz1*azBgmdxIk9jxIAn}$4Vb0cjDfhzu$Xc47vNrLs{2> ze9sF6_bQI+N$G&-9J1TA&T_{R!`9S>ZRlq5R916mc@=O~9xbg!Cwf7Arue?>mWtDn ztvs(O6B<<>>ezB}Wugmoq6>6kCsHm6bEi4HD2iSp**7=Puda-_6gU}m(w&zB(-<}s z$->#tiR>5=bav&{Y@LN(feol#wjtV8&aWBdaGXKz^_!iHz2gFbx^Bjp3ofW__2KH{ z%8%Wzsh{L5?JAd%bhZu5MS6{k3$AYRS^B@4XC{y3E8C2}CO`ad-#zhqH;0d3@B7l$ z+tpus<#j2!3@?4*{rWO;j#;0l^!;tJoe#b|oPDm%$>8m0bATDV>QVKTgPlID{gwEL z{r9s=?@LT@lHK{vvxZ-J^0x}QYzH3I*e%Y7S16Ar=gul-a5n3{1@kB7BID)X&t151 zVkdOYePiL0W5Go&z)N*v*j?K0aKg_+Q?E0I4$9__a~4(dd;TY#Md(Zw^zpLFD8BFz zxqV%oCk`aH@NF#_w+eUkDo%h zW!PfXPYwNK(su*&gf3svE|V=_S;{f?cB>2e#}p^8ku9tC+wQ>LJK~!M zI_~7}CB#Q8=I>ejt(F})x2bKhQ~dnV=?8M*?H!Yxy9I|D@VpwkQbce8#&e*>*}R{@ zx{S_sio2;ZoB1^IzKwQAXFA2%gQpZf#{Q&@_HPO}mq&p4oKu)r_nl6089KklIhx#R zYNt)@(C$s-0P1Nk*LnG~r_dgDnU}SGZv1psip}M2ay{O~b0^PL_$`~EPx%cydG14A z9Yp5~;TJiGzT@y$ziSU-;c4QA#AlGbF?f}5`VjhN1pFPXvB3+JQ!b94bqIYkfnHDx z?wE6F@Ez%!wk_ejayM4^#_~FS*>O~Q<0$aPA-t8&Jj0F^{GCI2&ErMd31yLEt`|P+ z!%l>=SxrZ7@4@X8mb-{?UC46*&v9}EzlLak z5pT5qdf9kn?=f*5{5AZDzy5Kxe9mgPJbNIIZcMJU`_5CC`ic8{qFb zp#ulu(ZbKy8LxaSZ=5mpz?;FrO)tJYsOin%=}j*_tG`2_{Tz}n14|Ez*H_eVGAf2?lRlLK4+>%s-&-^)GQ3AX@u{a(%@u+Da~HbpYeu&o&{c(ACD`i>{D;B*Nnr1XZC|jI zF8{_kH@UFPFRYf)e-EtkTD}UbeoO!1zj&~!LZ6mjav^Z)2fT8Rt?Gf5 zbf!Uq7qszF;U!ziiQttEbNT1`g1O}X58!iJ(;&P~Ybu@0Kh^;2sByM(_R+3u#v$m#LUR(bA<5mI#zy8z$-*DI$OHbSVr#|(x&C=5z8J?=AJ)TI- zoi$N?<$(8$RV><$caO=(+3U|^&%N2&Hzskmc+PEQ$;0>r3xn*-iLKC`KkoYs`SnxF z-dUDx^U4N7?GKyh~opwAs#pcT9?4J7HN~!j)+ zZ6}|&4*9l&+y_$yZddb8Z77dpEjG1z_`$wNy;0ObcTTDtI;q)b#o*CD@40K&)x}-9 z_VjY=&qg;Bd=~?gp8YR+*>fJOE&d-~=H91=jRKncSWgbc$erLi_ZlF_o(>d{2bp*% zlgI8+H?|>G<;zKrFMl?^``P&JXXCq{jqiRo^IL`uxGMA0;ROD!_=8!Eiv5~5G{pWq zyRnwvYJYo9cqhLl>T??BJygc~+(u*5#LnI-J9~XzW7X>N#`uH%8p)aWR@LJL;Zg8_ z_=Ekqb6oejN-vOn`ku*;IO^k;{y+Dg?As~hrEh#zjk*_TIc;sM{4{q0`r@-`YYFcQ z8Sk#Nb|N`0EXN9#@Q*EN_`1^QcfI+1$w}Wh5_rjGU-~uh1YNDbDfw$YKGqPtP5WN_ zD2;^{mi>EkyPt=Ra-%bzv2m7%F`3w#!RLmT^o+^1NvF55R4_)a$X}b@2J>Pcdq(*7 zv^L0@vCnB48eT$O7l*u@y54+W`++;(bp4JCiNTd#|A_1*vQOZ<*{XYzWiu!Tujk=2 zT29=}O=)pA%ImJPAhMCTXF}ZEE!xv5mdU=ed%XL6u{q#j#UF`dnTL;hDl{ftMC;hb zJ#`6iUiZw&{wrNlG^P8gHbPTbj*KQ&GDU>kI&fY1W$&X~&s`S3*Sxr= zdo6dWL}!8X+AA7+BDvK}9FcbigAdOV-|xjU-6e13?Ko)E@4pit6ijBJ(t zK8v-=Mz*v;uacSOEE&8*w5GkPd{K&1XlAX-;G3;OoaDz@gYqD2gDu$eBoOYCJ zU1#uHp;`HoR~_rFm|PP`$tykqT9OR6JpI?213dj@|M-pnF*QG^?imRpKjd?M68zr7 zcr=#DjKyI-bMT$jz~f_#J;WU?<&>9wuN=9pJ*>(+av5hi_`QJNM3Dz!n|EoXG@63C3V>3OEV2S1}jt zP!+B4k3QiGAJJH)_vBN4EpUy}-pC%=$zQ7&uIe801(246_?R{WLn=d?JB=JIy{ zaBu#pn=`PMJ*n2A`M2J8{2GcWY2FuDR0>_z^1Xq%t)e~Qns{IWSZdu$@u&P4{ZDd0 zYb!hzuE{o23SSHGZizQ{cdjnKe1y3QAJy*pz-$Wb2(J&4SN?hWJopRO)^?C_Z&zF> zFxc4Qyu6W|hs~p$MdNsPaA;srgt`YG3M>-bb>ER~bJhFZ6=jT9?Ft5KX|wtEz#{fy z6)N)&uk4@rdpBdb%fjB1?|&mNv~b^_AK%CW_Vazocgf65_#8Ie!|3*IJRbe;z@L6L z=alGwt2=*J?j2<>Eg5<~_WnzNmE!N#fx9Zd1X-G1{w=Tkxs)G8dEFf&nJHaeI1>N| zqTo9B`QQ%Jy8zy3Pi6bC_EMntn`h zf`%w5G!I67K> z+Yu?bfZe&dd?2vGcL_D|F@yhf?oXh+Z!}I#?WIP3;|Z(>&d- z8{N2)wOS9{m!jWga-LJ?)kLFbDi4b6lE@>;Xz9|@o1(-dDz-Yt8pea=#nOFs|D5EX zY|VefmcHEyO^|)lo*~s5>rCwnpHi$Mb+rDpVb0JZBPEN|%V+6bN;&Xk0(dFDI|)Bs zexP`|H;;UBG)7s^amZvgds`*@x6JUx%Q4R-tmAg(s5r|pl+$>1CU`z;s4-O$b0v8_ zl=r%$NBXsBZ*5vTapG5vj#>^3v?n!wzw+X2>bdZ6<2>x=L^6lFM4+Kbl!r!A=9FJr zEL|gC@pRm+zJYkoTypPBcXC(dlgkP|UQy%kpV(31rRYL1^SApQ%6*$BPG1T7YNfB2 zIWt%@klYY_Hu(X0pHDrLACS*Qz#+(YjZJapLC!5IrxUvIK6A#8wluGp@PN-@Vnp>> zWlJxR-sbMH2F=mB`pzx-=6ke)b4m2CK2Fy5cl~YO)7v)VJ^TVVD%dHX%M!^6d}NN3 z8;;VC?Cdexo_f9W5c|Ig5!SLsIk!xiJX1!$$EpAHSDlBp6N{%Znz!22=P2s{-CiM_ zj!vU2_-t(8zImK0*b3JTO_UeAdYXK`<;7ou9xYs~zeTYSsr<{mGsEt${N-F8;QsDk z(}3wyv7ByBO6|F9n`$Sep4Ab(_|>nj@^~M5gyL8K;kysV@{1Xlr1A^#ir8%M{yK*{ zi1<7cI+(_HGjG=>t=Q5yJg{IWXD7Iaw~cbvudu_?BXXm9vU~nkG50OttYYYqKNWHK zkmj%j_)BMT&%S0ieeCn#D)ARRc5+~k-oEuQ@X-Mu%{f)di!b==y~epV@dN1&H6{kE zAlyLS{X*SIy!oPV0Ns2Yu|LuybhZf{e6{u#bMW=aeE zxtEEKF^_v<6WH*#89(^N*!aW~gH697_mj$1azCuvw05Mq*q?UOULkt@9PWly*0)g4oB{7Y|t%q_T#4m(*I~PMRu`fJ#vxHd%xT(7qw4u{lu<)ZQj?@WFzJ6 zI6q08e4lvDJj{9^S2Rvr{!-TBt%CxN=kf#QZTE{;vyZW`5)bN9Tjrhz zqcd-o&b)Kc@jCOL@9))_zm3e0zI=F@o3DN0M$Q8+OU>6FeKnAb9SkHRuaIlKSu!Jl z%;0;P%=i+xQ83zhx(pt#vv@w<Z^U1$YG1pe+t{f>w zr}kiw*nteLa*~p*@#kD#Cz)Ca{)_I!53CF=g{Je-myC`IJfl^#wF4aS+BNY8&%qam zk;{ktd$TzQIGb~UvypSv6~y7-kI>nYZPKyK`eio#aV$1j&V?U|4+zgerX497NbE3w zcPMW|sPRZ}pt*-lIgFIkZ!UQ_k8nnN9`?Gn;ot%DiPQgV#)*6}YxoRj`Hg(`uOVZV zd`VeD#xD8tCO*VCpFhePzDVAy6RqJv+VijB#V1(9!Y_xw<4j|l%rHKMKvM`=5Fj?F zWUQNeI=_-U^T126Hsu+o_Dbl`o25f*4;WqL!t-_Vh2pE@jO!3!8EX9TqGR9Do_?;+$|1NDJtRUuQTou@|4Mln!4u(&Y)cWXIb~zCckUP9EgtM+ z!JL$}j)B{gv7sj5;mbMuu!6hFYsHs`k7#T!I;S!54md~qR!5!hTf6BWaqVjU7i%~B zBx`qj+S;{HwlDgNFvoKSI1dfS_CIGr*ruE3G;5{5e-LIuy*gVUPr)% z74VrO4&NCUI3QVjKrmq}Mi1dUX64n`GBSx{{thvU)~3Ul1K_<94Q|VuCB(9#`vR* zKgRgKG5=`&2JB5$&cv{Ouj1?ge0;Nm|8kr554@9ZDLci>+-1k!*!a_d*IVZPU&f8E zl30#&!`mqjZ!@_+TfAI4;-T6DVb>vNlHLCXo4%7gF@IgbT>bpjuOo`5NFQls-P>6A zUfmMEgYX)Bj@<(P+3WB-xGlUs0ImV|cE-{HpUOYa-AgL&Qusbh_p-teb zwrn3g^#+pbf1-G?TQ5)bDC;QKHf<;QUeljD2(js9W7EsVrib1*J_`P}qC0IgHodH_ zIeh1iC*uqM%MfG}xT#zNt@PhU|LwrL2UfH@2|H~Zx{!=rdkHy6dDqJKuYn&C%3EE? z>IN~|lKsKVM|uF?Kk+5$m>&G8b0p~ELMc4F5FJ?G=OCXQ?iqB3B47Hk_Pn!e{{_}w zeKs?ONE!|tc;|iPQ`%fey}8sgI6&DF%C>rarsKn-S*iH&_ItJY!5oo?`xcjl4s8W>_XHu1@nk5WDc z{Nuo8JnLxrP^hPDW>aaw$>sFA(fr;GzSW6F15E+)C;H`eBi}2}b|ysYkoD3Bx?Nds z^a0|Q^EhuF9DxmdDEGv$Z;);3DV=a=Tb2m0}8{j{@jWA zDl~d0`h~_ip)^^FU)0a{I%!kBuNm;)tI)H*kB_-vjMJ$1uF@~!~1sXe% zGc)AdVQzWwm_6X-Hreyh#lPMMKGlLp3&Eq?XtR(ut$oGMUrao`2k%a7*q5ZiJI*{G zkZzO)&szo0WxeqHrr>!HcrNaR=NW?MvOeJXP#^GImI}}J-#!664+77{q2!-VKQ(wx z{9nSe-$~#({3P%kBe;0*{4wzS@A6dq#kQEdMY>WNJULI-Q*Q)&u!z zWJ_}>dBU_H0NBx|> zk3Vqh(fY5mhP-EgW%l>03!TF73%rNtK~GnNM-qdfd~3P7zr|k;JHQUg2@Z;1&{?6E zfOTSn=hsI*wwEJ!f9>)m-C1JR3O!3YObKzbhlulzZg8OG(2ow0i|0^-s~;-|VZBU_6d z-|g5tscUq#!VBTSj9dGyH}D@=zG?PCmw`{Oz%TCzC11rZqQ7z8weiljHBR&N^e{We zLk(&31P&|FTZymWe(SuhKmDV-LVUXo{vAgzvA#1qR^#{gU^#`csy#d2k(b)O`@ zkt#PA=8+Bk+DbDe6!D1NPBX{lg33b4NDx58r&T)A(Ave{pOFGM#$2f7m^O z&__AAS~Zq-=U4oQS2Qu2WQsZ=gNkjy7#gE z4s{g^wjBB~vJRSUL!Jpvv$0WW-O+^*9-SZhxAs!`h;mq?jw&9PpX^(RZ(d<=3>O@8^RHoJUKlPABWxbqQ;W&HDS7lfNJk=ptUEqMbE;{nt+NHLd9; z@N^7#S`;AHJ^L1uFOa;U+7Ec^{M$SGUg!0!^N;D*#3yN;H$fLgtnnD-)y`_tm^G%? zSohcA4P72jZtW&7w1)%pPS33SfrkV0nb!*B_X=>JnszS$zd7rK9wL6ueh8lM{!wG2 z?B!wbrboU(jFtE*PdeZFF~6nrw|x;W{(J?od0t+S`eoGh;sE~q{t3V_AH-0HG0!(2m7Q0E-9AT)0_77=uP918yAO? z`v$RJ7!I9yaFH(xIdu6v;Bq7S(v^aF5E`m?8Y_VhKKa!qhb-&0(K$OjZzyMN$H1E@ zJ5RckCr`HP+#q_BYcrqxUQ1B<+-~~$BUSFbk)7H+_%*?>*c&Pn!? z4a|!@@;DrcwEWs)_}&%Km&gSR zEY`Wc!qvvtie6=Wt^76nPV}j;^k(FI6uWM`=(KP(u&x%YX*bHc#8{WR8XkTA{}RSmp9ID?da?*2J3-w444MN zaoq`EWE|h6uNDix(XXV(#D)Q5^r$HKQ3$Qe9%6Y+`#?R9}1a@)cP7FC@@!}2c zvx;-KT?Cv9ZO7gMJX(N<=bui&Ib*|?JOM6$V{Z{1!aj5jW8E;YPn>&VuAjc~Pl&$R zWAxzM5YhF(<8hAmEY9`o1LuAqIBV~F0=hPOyGM@+WT1F*uRV+Lk16F25$~>AubiJ| zMK?LnV+Z!A{C^EBTJTA11}mLKHQ<`Q*Myvk3EYWcVfZs(xa>mc^*L|~IUfgx=yfJ1 zmt>G~%TfxJs<0HV=?!}f|5JH}09p~>LPXBO3K2!Sp zu=ToMdqMWh(RcdB-HE`o5c()=85s^p{>y*27+iLJKl^%OGv0B1Kew+0kNI4LOf<0> zecIZCc*?r7UOY8rhx5r&GmQdCvY^8i3|yubamiV4VrRk+Z=Y zGqdVy2TZ9Gee1Uy`R!5OCD5N;nX2=_%GDNVy7=4Z1=w?KyRxsu(2W!5)7oFk$0z+& zxH9-~cYT1prq(Y4tq0LFiym{HKKCT!zt}ha(Tu;9w)2S*Sg;A64j&P(iL+3*qwJ zSFeTd3TD)mP7y(;jXo1fV*6XYc-auMXHpDCC3GoYggKYb`nl_!-E_-N@+#}DKChnJ zmYbv2zPo9N^H2tP-0XM5C+M??9CO;|8N0quj(%s3kEijw;b}TMw3VD+*!E()vwNCX zXQjwX^ye$XUuS*bU7HIjuX81V-aQR^s&~Jk$CG;I?eT?K?3Y&q&mMmwb8VUiU6Xgs z@_-2OP=4I;^XwJCQ)k(tZ>Hi-r8)0c5T3x;7|&ZNJmAhA+%ac6=SZHt>Eh09!W}-J z40me3Z*XU|Uw(Zy6?Zn<{h9QuulsQ4i<+zSXy`KreclG{yis|y{>TVq^sK9h4RvF( zM5EQjWyQ(IoH?Xs|BX8DZ|O~C**9C7`vb8WC2ALW=d4PVcPE40L|_*^0^Kc>yaO-# z(6QcRZ0NI_U47QWjb%Q0cZ9uuoI3|x9cy2&9xI%2@5KCEA2{>!>jr1`^&#($!h>}4Mt*Tae?C3+ zePS16*E95I>7X9Hevov{Ub!zF^C|!Q`OVNqy{pe>c>28BY8@n9b6|LGIvl8D;V_^N zI6UwnaOlyQ?(*9Mf=$1AJB3%J;M?{Uy}asKWV+%xs;=$5M^5=q7T}-t$2R^Q+x0Ig zoBuL;rhF5?I?&&_q8(Uwd$7&})~i1E!~IRa{KeZPfqu6X5Odaz-LViErr-W_!T0yC zy7ialwTENtyBeGGq9`npiZuFGRzIG(4CJH>Sw^^MeZnR$|R`I>KC zW&vx>caKk}67037D&d~?2zJgAV$Ii*hj<(NCX3T2g5Q+B;D?`Fe(`wG@$gH|_R%%J z8~8oY2mEq`*L}c`Iu?Fk>H~iN`P#|p+v4@8xvB6wf{x
    5Zb03ZBP<3v8}D`Za4?4ZA*lTxV8>QhGlG4k-^;iJ=!)qhWM3_jRhLtOh^yvu)@^HZE5 zi?=v0SB(fAsMh%_zKhRoyXJWMlK;}*&aJ>Tg*SBp-#ef!?C3qb33`^y80n`iemAsr zM<2A+h3qWqe>`uZj-{>Y&mYg5GCqX1{Ch?nf;H}Tc7Upt=#JYjY)@9?4SNF$9C9;j<<6_*52%boeyhmnw`MmU6(XG zymQpfhd1(9`-2u>EB&p;N1w7k^yqG^(ODi$6R&`;v-`%^-Cfu?@nL&5&dohGPRR$x zT;C60CVpzqH{46FueiS9a>hHEy>b>fS3taAocBdTT;FhFwtnliQIyNZ>FtZEKHZDc ze|_u3JgJ@BdzNW7pCX+9pg3ObHLB2YUhNysw|)qmKYb!NznTi?CxC~6Gw*xgjQ##Za4z~p zFP!f=37mi6gL7>kaBhXp@8x~;?7w>!4>-rO~*M?EO>oxc!>s9Dmud`SeKfnGAYc)h`buIc0 zw&7}Q1%>#NB+Jb{*VEhk0~0?F9so>Cd@+0_MSllg!^umd{c}~m?)?dx{j-f(cH`t_ zFUe_Ivkkq3^8R+DYhts6MpY)iX+7uIV#tN<#Hd)k%kCvyJPP#KyxSE^C|ait-Paqt z4Vi$?G+ieA>;|8{#qUNY+}6iFq8*vA0UvF;zDgY{6W+h(c$x6MLnqg_{4&AL$&Y)k z4?}meXE$wOPLW%{yZCXqw@-ejx%6dpChX2eXOdm*mL45qb&p*w?&=T^lfy2~=c1G7 zOo`K-r`Kt3;ERpF>&+CtyV}2}UP+sl@79>L^JEz7_popu9Er0ohVQZ7qOFPSlfRu- z_5qcJH;NC4_YWi1u*_#8%fv>OIgq?+#&;NOnst&f&GU`vdg1O4;75FcANTK2OiQY5 zW8aBv8`o+b=F`T(zSqI&YaQnIu?`2_b(pAi;Pc7WL9uq}>u}~t<~+tX=X1@Ru?+yf zw#(QzY~ZeA{9El4xU-7*nGW*BFajxXO)OJrx*HUU6A|9M44N8=Us|xcqqO_VE_)TsQMI=ekGS$lW1n?}qVi zJ#$Qde>(5Q|LvU+HYYLXe2e9;Jma2TKd{Y9+#W0~KJZ?zPuQLhC$DshKiI@l6GI&# zZbJTGoe{@JWzL9iS~9W^XM?w2l@A&yf&`?Hhq5oInSG44*ZPyM9JZ;TmlC?->btv_q-0VDj9>j+?)<+ z=fPQ%?VMLE;~ctdnOal#-f;Qh;kD(W58A)jF=yIBj8o^i%>3~K)L=h;M!AG9CXSG} zlK5rFUd}jFA#W4q#D)mpCeX$-=E-+Uqq0@jdU;mX+;-IX9ApF4*(yWp(}<76C$)TV zR^3|me8ilrwlOD(c}I#~Q^#75xH z=b*FXGmtmR%cAq+id*h{1K9G}z!sa$T5LBaP9I%Kcx=uVfNR5;Pn2>xThJ4y&t5@i zynEvG`92E0dK&Thiq(&4ZG7?hYHuKMb@78vaSv~0{V&gj*B<1a68VAi8QXZllH4x9 zm;Kn`DDbl93VyHgj%Q8tftf9X-6|m85NoM9ZT04Kk@7_pxwzDW=fF8e{W$f1^7HrW zV?_q<&02eTmp-ZWklrOb-ru=*Oy7%$YYuAN>C?c9aV=q7>hGs%Fs$MIZ1z%-zjarr z9o@&_#zahePcaecYnjPfroZdPhn@cJecmkx2WxrKe|v}D1mB29mq)(q(&hJj_^{I8 zLvOw^;X%(D1NWaZk0@jHuki-(pcPozH4gIKuCdm)o%P*ybj7L~C%dkSHIEa!uDtZ- zJ_&r+9q=WSr$so=ck!+QV4{9S^DE&u@#a)~*qj4CG>3{~;KPO2yRjp7zAhZyd}Ye% zB3{sp4}1*ShT&QhdG^~Cc-#;TycDV9n z+^5CU&gjioINQy!)t_@8fQ^Cf6sG* zd#Cd3LYA}#v-i%2J~|wyt{HjlFqRzh5O<=hlms#sEd@5Me3lJMIbGHo6xnpnP3{}O!O#B|?1=1L`UivG!s=pcDU&*!> z&IGg~8%LhS`6>9ii%0SsXEd!R2G{h3JXE~}mm=5T@A^Ds|i+-ql?g0H)Wa&w*eVXM2iV&t_YPg~cY&S!rPoR!P({sNr^ z%Qa`t_1iewNT3r$%AMpgayrGC!(7%SeGZE>2gadu#~Sz8@ytQ<$;|B1T+BSm-FXPl zTY;^{$r+n2v#&&sZ)Q#w=4vB?>^5y`US4@KUwDOyJ7un#=lU^%7h{~}B*%gu%H3bG z2;PK!Z2@?9komk`=v0j5-VgKJO5!b8kCLCcd7(;(yAXcpdkbSb#+*xj?<}h1v)Yjy zR35S!qnwJ|1tTXefJSG~?o-fD32l*g*8Dz>^B#xDjoHsvM!APd@Ru!sPD+UD5WTCd zM#gg}hgc$C*)?9-b;I2<3k%4(j-2zC`H{-(>1}5md4HPH%B)lwd>6K_&U3i`B&|%1 z%KUp^QR!L04w_MJ){Xqt9jN3AeR(}NORV1Bs-w$S6|mmIqkYPQbjEuVGMzR1Go8%6 zT9e1X=Qi|)2B%y`rOUb;{l zxF=jHKhvq$?PTrU4ehUYviEjO3niUEPF=&%z@o=#YvdWu*35-tCPtup*$za1x3+@Z6HIc#Da zOBs*a%wrt+-Z+S@-s*VcaOqUzkc~30sf@AMw$!$%>tyvk4t^h~wFHOPq6d~NaTZnS zFFY>h;q5qd2ZOiZtnik6Wy3mH>qZ{MwjT=S?Y;Tvs#W8ies%eIF0VYFI|^RoJV1lT zD?9ky3CyJ92lB)#b^mx?)8gO3E17d&{73iyb!bk^U35Dx5UdmKlc%=gDqwRJebzY{ zdk3iBWA6IYks}~?!TA%lXBbRhoh8sUdFP|1KgGx8HoXsjHhh474V>op^1RLx#^UwK z-6(Y(jIook|B-wKR>t=wYySWEZ8kg%`GbDr?yoc_KM#JZhWyDqZ}7a%^BPYV&mo>p zo(`UNo;IFVo&-;vC&m-yiSQic`5zvmclhFSzd{VZiF+OtN}lG={}c4`51X8_Lwn?T zH+Id4Wc4lFo5DV!8-CDTozvJ|oz?h1+PlL418gx1TLzJPg8X~L$0#p%^cwbEoG&S? zIU^iJzDKU34Q%SlClqDA*h-3{tdHzb?pfZ@mTdMS5$qbReXS^!z|hR|h&} zRv>F{*0JTQwt??)a0SnMj}hamyLW=bg&Ub69THh2 zIh8=RNj7M2H*5*NgO8G97H8u_+<9u=?_baUCn)|@^4Iu~DUC7kDY9a!m(%iUqnB9N zL~^nkZJiKxoRie~wzo#RYmacYF2vbB#wJ{aex=vCc;U8hbG3I6pRY9(&v*D|_m}DU zW6N0M5aoXN^VIyYvJ*T*8*iu8ABQaR$GfA8_U1+=zNN=b2VCdK7kk(6aABrx+qF;F z{Z6ySn8TR_`mp0`gn#?n53VjX=VeV>-}qE`BzFZ4JVAR;cWj zV{90>06zHVAU!iWoM$$BZKt$RF|-A&&0Jy+%PP+ZFVorRL7CL$+==5Hu0l4>b(TI{ z#9XWXV*PEQffOeY%4Zd+VUw z#z;<{nJ513a10x)Y#i4IE!=cyG>$XN3PmUjOHO`BkDrT>E7%_t5KeVG#I}yVu_a`t3fQM_b3) zgu+l^cwD9SlfkCB?`#83alJ*y!cy$D$B^x;n)KA8^&oz=se#BXBonQrzC-QDme zcoMqy>Rm1QVb0En+w!v;+m`W{-=)vDQ6>OflpDJZIX)U&=WcABx|4nnw$5>$t+NDM zXFGS&=K>RJ=M-#ATmgS&_tbZtjWfA%joz8l^e^y3jX`61A3B~2?YDqmk(?(ICM_AYGP_r^v!2>wI9w!{ke&f(X;)61_pSE)1X#V5KCbRoK{KYw%x`qO${ zdmsHV*SV})S&i;}OoO_Tpni{1_gK-N?No7(dcj`rSb81o{8Ouapz6MSuCN1(|pzFxQ#* z0=*+gqxJ-M6(95NEp_oweyIEPJNcOA@OvTSm0#!!SK^C9#+QJ@z4ukSbtDt~^XP#! z^LWSy;}?AMAwV8@rrw_;o1!`MgPf2I(f%mGdbb{Niv8zHhJy>lyipdOFa}=U9imLA z_n<7ngA1c3UVHtqO!ka{sHT2d`a`LHsLY3^7KBG48~- z-wG|+F{<4dETjJW!+Yzyb9HsBE0-Se_@VncaiN7gh4VRK1 z)z2rc0RDon#*@!@{wHlbD?cJX{c29{{54kbQKOq5$4kL&=CQBLxa8F)13zHR%7G30lPf~3t$*D@;OOf& z^up+`j79fB+VwgGeA`^sf)06V__nWy-=yK&qxd{O3cjsfay-6mV(h1gZ)O}8-Z^G9*sPEqo9WM9m+XdnQ zz4u+j{y+BK1-`2C%KP6ZCwD-C;H{`h00q2^>8k>%)8-@rxp_&I8K-0008xRWHPp7& zB26$FTifY?;sr`)8f4!3ww)QyEf*4~&?|?FdB4AB?|rh* z$;E`}^#A{V-Z!7m{^Xo}_I{rAthJuC*0Y|q*0U|6)U0Q*J2O6seT7^Npu=^hj3qg_ zt)etc{zmL(bbgVYrz@YO4_{lDHNq%YJHv&jXFijLGdcZA^>D_8${^c7GW*WEcJ~bQ3t9 z8JtLsipBoIpVxz5E1c=rIyTndyjo4#iSE1)krqOHO@U;bI? zlQ!+?X6S5ILMJt8gm*ZQ7-d z(cIgWiqm3fuKFh#@UiNj>}jK4?1c3DuXEqE7os(`ExzGCM}O3$*3Z^?4I5aKc-LP# z`zV4hpqTvND0#p$e(J9IJvOw?^z+#ItK9ZI`l)LG`{bCj|F)N$POtw1J(SSin&NcZ zsfX|8g0>)^BEYxXH*Y36LNjKgPoW9+cSh?J@~YEe9hHRD_D{$!7R64FV83tC9ITUzcqV>3ogGGsr;9&tQC7AH;wqgZO29M%yd!Bh}zD${3vydRp}v>i;4bZO99m zdBEB{Qj-y^h3_KRzV5v+d+y(7&)C$gr>#loMDc{yFS3zkN552Yx>;w_EJ02tc{Yu= ze)+lnw$D9|{c+6k|86jAwm$!_{Jzn9881B5PQF77oJVg32k1Z1-1cGnTW_CapRJ&H z8}+aCd>3o;JLXX{lD*KqTCY26{59~M*7nn#HT+hdQw&23>-IQjNhk)VZaHgvYNutu zuR5PWzuWxkYjvNSLfog9{w`n6f-l{;vU+rw;Ys*6BEE!&!^>=*{M=8#DWA`XC&9h; zG~3~m4)P&>g$z}ElsQY+%agQ!ihg47ZyY-H@ucI^bzt%Gc4 zkBpQ(?Ve|_7asDSf8ssQK>U2B@^LpbwdIC=MneqVic01&KWskC4o%O^%ikxTNwQ8FyhnfdXD%gX zAkX+EuPK8Uy*x-;x2N@IVlBi|@Nhq#g3lt%7cWoUJQz>G|4E*b%yZ>j=BxqaTy7sv zP0k3;NaLwz|Mpb#ng`%1+SGn=lBZ-}NX`M*7s_opH;|v~X=<0JukGA;D_38JIHP$` zeOZlsLw>n>&MV(07d!F|ynK*+`|L2~+gkS8CS?pR-)4(^mcUmZS0Lm zFM4$O^F@khXU^S@&Vm=(kslq`Qy zzUwo@QmPI2UHKZ#nKiV(fgI%!Im)5s(|#bozwey>ZEfS67PqY@hG;7Ue%!p~R@!@h zbp1Qi##yCzum+vx#QHpqKc{f5eg5NX!r?Yw3J#S!r!hpFcrWeCyM5nB-!@KFSG{ix znZ!vvw|vSh*(O~Ehr&TFKJ4t)_xHH-qi_FK^~b#S{uc(|lP`I68SY3setWm=kJw=L z=lkOATzmga`9;1;!7f`{Yle88uXGuF(g{z9&b`F)YR{&ZSh*$GX>+l|*dLgn`%Bn= zoQrL*z4zV%_xJh-@UKizzPbH8@jLo{KI;$mAoYG9pX9X8#um=~)`{j=U3uwl_~{a8 zRZW~slsfF>)7+6C-LqsJqaeA&|8%JUTWyeb2fbg4;cDROaA_&Yzi5 z?=Jedm56O3@6nOR2bHJD+*)DJ|}8YHCE7zRIpQePtpu&G*XdPcJ4fQa+AC=H*)cR|J;YaE)K^ z<3Q2mi@(Vj%(Le$`0?VRNf$5Y`!?jT#@DMY2b8x{kSAmP9p95LF?<9NrD_L(Kr;%Mpt@?9=cl|r~La%1y_r=#{ z&K161zKGS>QTNM^vO*@_3VD|Cs89X}a(=GF|1d^&Ir2~b2Y;~Yr%4;i+}m~Aspie> z@v5Cke!-4iu#y~%O{(EdoFn6L<>wq=z;@bR{P&*q9WbTK&lhM@v`^ac=fR7+t8uVx6XQe&ArWdQ8Wa|7Nq!tJxA5L(w-=Lm`6MDWlP3+ZJ^sf#{PH%ctc;rZ^s70hUutN9e;T9adJPW*m&eRzKihVr11ApRZ&JN^V#XcxrL42t8DmX(oTYb@1gzu|9YS*xh(r%rF z|AYCt)@pc4bdBXGZ(>?-F)>K8<9^A$MbSCdjCT50eBAQ`%>OX323#3X)5lw08Q|6V zF?eAbal9IXY&f&-WA52DP>$l~j2(A1Jg;XvfRh{(;y2N$Gra%ZT*)L>&Z^~>zWb>bwaPpkkOZ&-ncQ> zmropHUg}z&HcWeFEw4EI!q)QZ($-zHwVd%x0j?b2%cISFU*5ia+FS|j5n^Vi;xDLM zVvk`S{ff6cSp!6BWasydG?vb*RFB$@$&J(m67HDPzn#OGi_Na_~lz73cTM8-@Y7P ze^#F?+U5^lxi3`~{lj0|a>FvduD=XU|CKqbq^X!TqqNDMm+>QQkxzu0W`~g%Ng3nu zvp18MkgmhKJ@K&e=T9fj}>D2tO1HOO%d%{l|~HG-M<8?hzK`{?JzYI_2?66kHUQ-K_)Nyra2X=ipQKQriwZA$W^WTku{?Zk}5i5a_# zIomPWwgnF29~W-l#%JE^_{?>07x$EJbI|dbA0+N=EBCHvEp?EwcQ`)tgUjJNaPN2a zc=Wq$F0HrS=Q_|0UOjiu<0B8v~i}F>0CHIJNWMoIRrL?ta!oZ@TMS z`*&=BCas}n|I%4Qd40T-Q*40kT0^z|RUZ!1*TpXpubn%)%w ztwbj_WCXq2ejn$iz(*ao+B&%NW_U|B&ZyDs<06BR-%H2VzoR*3G4DG3XQ8vkpu7Ew zk?gsLoS67?3qyrgUJvA*Mu)sd z+W?E~kv@^#BcI2();aJ~9Nu}H{$l83?Rm7{hu@JlyWy{%h17>fFC4i!kofhj=tX!> zXKqWUho_=5(Bn~fvDY`chx2_Fy~kWB7#DbA)dTk)*L*AdTlCtg-bKflGkdV%ma{j6 z0ycbp6gb+B_rC0f>6Ob)Hy?xd)Q@eu_*#`4-*q{7ti*09V~pYQ(v<`O^e`s7j%VMP z=2I)$g~>afjxubYO4_}=Z*1PtnJhv8U9B{A!hcY$6Yx6zg%O{Yaju-Nqw1Gk=8d$M%HvWJW z)N}rwKR4AMpn8_nv+g}fd?D+V_2`67=9^&Yb#y`(I-!tygW5;cy*$1D zM<*<2E)@FEBaTk!MJKGiio7{=!X3;N{Vp0x2Ds04u~vyt!!i6v<^$`b_S<}=X3z1r z=&Se0og|Kpvu=XZh`}h_I`-Id`j&6`3ffVAuwpC~xBLEe_>GZ4_Sth2gRzDWg<{lo zTtc2fm{?PbSkvgX>|o$wY_`ePO!v7svLLo;;Ah);R(dB)JAT^1)@MEPKZ5b^BaeRM z>1!w7)y{7IZ_5hCz@==<82FU$Pk!;PTYd1WuXPEu9|i5B$f9cSwwCdzp7b5Wp_;YX zd+;LPqwwgDOYB?ihI?!}DNa>!>-Dsy{rH7{)Ni!2+aD~$ z4^xI8ri@tPvIqTKnOs?1*`YGdlT|;_2H>UNIQ_=Pj}5hhU#*X>Gjoi!7HdIQ?|yT) z>r==zK85<_la4P@tO0X`oZ_JRR8FzRy5aZ4`sqAT?mhgwQ_ZhtaUP@Q(p7do;v{lm zA3nO~z+1W5jh(>TWo0+w)0h9CN#~AiAoeqFOd!$Bo@>!mD`bta5*gIl>FR`6ke_Pz zDDB2N$tAJ<4o!;jd5D-a&E+_4D!$VF{MF@4kKYBJ8`U1QlZq$$LT&uMMY_6vW>9cF zU$E&mpX4DXHux8k*O&U|?YnQ`Ke?0Xe@oxg{%1u+-ogWXyx>DGf&BLO>{AbwC6VJ!{wndG5@~_tnfxa@-=29BG6I#K>1Kww-xFBLGGa&Bb9yp8;%9| z9!Pv^!Kvo0)ZZy)O&9TFXB^}{visST`)Ao_PFf!hu4SDbr5(2})-@k>*Lvso*;kXZ zgFD_%wXY`Knq2F#mix=#x8HTnrKHV=XwzNmLD!@1TF=Z|*%FMio4gU_5B;2+{b`;(`$gh>jjz(? zqof`@&q{cGb9+{RPdA48JYZ8agT%RogSRH_?T{DTl(k2nf*KL zThVkV`{7n(X1e{L{kdM`Qm4m$C}th&t||4q><9S(-RGv}pkG)k5bN5sY~}Tw|CZAO zJ{HZzKQ$l!l=9fUcwKzK>1O%Q4jJ2@xeDLrUxA;BXYcWi-gnRG$2KnTjcIK3joSBu zWxdi(?nw0-;!fB2LOtwd+`!zw!Dp4Kzr~!<5Fw9S`x-HF!R33C->m~*Rrk+(n_1Vh zpUD2SbUe>|6S<{*>E2J`Lqn#@hnR&AF~z3^JdeNT@}`|%A{)f3gLkL>?#{Wd{(OKr zcX|Ig*Yoi-Thrs4I=b95zqZ-=UJYsVKepTUe;=a8#P4>e`oDF?SL_9B$xU3W4~;#E z{qjNl@Xi4IFpxdzV^3=+d-9R7%$aQi+l|Vn{1p9ku+D7%BR&xLG=~0BUR_u^%VSS| z2HB>%VTzqouAg{HvQ&1O_J0)*6ydvKEN^A)6qnq`wuvJb?6aM)LD$pf_;I0F4gWWd z4ozmSqz3wPK4dVqX>2IAjkStxpCU6AhwKl2y@C0hZ_Rv~T-6F|VlYY@CMF4)5gj`& zRAln9sL?VxGnn<(iRMXsub|Cn!`M)i_R7=RyJnqj!+P5@>pR+u0b7`N*zZk5Z)2?E zM}?SQ_)81OUqkLLv=Yhov8~BJ2u5$^|789{U-5ku8i&!}5!!L%T;kxQ{g3RKu$J!R znaaS=DZ-RxG`Gaas z9vijEwNX#*a%@!RnK1Bp^smW76s*0yXLxlliFxXXP z%YwH)@919_XRhBUP5*W+^T-E}{yi~#{cCvro%ybe>(jsAq3yx+FPkCg^9z&y@Cb7^ z3_UWW8y$Nx!=rx-i||LHdn4fAoX-e;WLv(jxM%Dyw+Y{G@oP4XW850<@STfKkyerHb=o_$FHnXcP=d%h5e6?i84mBhv>*Z#mh}` ztt*q@J8> za66bydG#PX{h}A2CV#Nc{*&z|8_>&t5o#TW$Gg06c5o~81eU-H#n#!zHWM$T+h+gH zUh`nKncx+DM>+8QhXc>CO1oal2I?8TKX!Z{jqit^tI@kPT+r9(UT9qS0k+t7Xq9e@ zEgQfVdyV*fSNH07+ZOXDZLztW1roW>=B4&`(F-%J#8g|J2d5&>d$-vB8|mQ^`ZW9p zFX}8y!RXb$vX@@eTm#2uuIG#j#qWdWUj4Q^Bly#`Cz`kBS~Fwtfb@=ZSd8aV^eWGN z?jc(b>bE;+1HWL?GrKMiwxjozcOkxuSMr}W?}WYCj|S)KBLzhTgjTKAkrzKUL>7WF*&| zXU|6GAr~U>dA*6xI5&9Y06LF$`{_IfH)hQ#8Zc*_HK(of{CS~(tMe)|g75B5)p>Jo zChwbhARHT=Cp^8LlCw|Mj&&@4$a5jj} zyZo+!b>2lD`7p$K)9AZ%=ehLh(|5nWa|nGm40-dW>dGeN&4+?tW&F0hDHv4V>|(F* zgXGP7z@;^|D{r*^J!IhN)4$TanwK%=uj;hj=?l!rMJC7}YwF;^=eE6P*O^i+W($5- ze$6zV)7+8Y)||6z=11Rqdd{m8lX6==@t9TG*=fh=yy?Jc@~Pzuk6~|i21?WG5BKed zroz7!--~NU$S;=*Y<>H@w(fQHy!P43uo)gB?$p10>8v_xrrph&U^co+I{n;I{E*Ur zj0K(gY8-pQ_;c#<*^c7881Qm>12x%C_kJ&ORsE}Fr~IoF+d7%OgEw@hZvEN82I>UX zWlsEDjP|<C~sXS!Onjty4 z&e6sCoJroHXzYy%vgv#Map?|ku1^del@3n&@Obavj!}aFUe~(C`(Bj(EAeU76|ld9 zEU0#3v#W`jSPLGt4kmsiQ6T=~^HO{kifOOrdHwF(Gx6Eg#Akc%ar~J3j(8-awVb%@ zo3<$CP%%Jm9E%NqB{duCcz+(Ydo^*wdzb^&7pB5+j{3#^@9QH_+6PzQ0Rz{xl;2HU zaW!$po_9=L9~743br_VFuon(ZGPx> zQ82tYBQcuwYq**7wCO*BY;kcSIiP)|4(`eR(;nU-uI|ZM!BNmFj33SHZPk^76V>j| zWp5svsRdtpV+Csj#em^sL#D)#FYTLsiR@1!zgw_3ku~AQjKrb!zC`D}#3dB^6J77Z z*NNr3=!+3w9^JnbO>|<|ttUnQ%=ugCI#s*7f2VSh5ZM|4ByPW?%{#Wonga4KM_rF+D zwCkg_MfD#o#aH|QblYX}6(cMrvrX zKidUfOr0M?C)R!Pff`#N2mIu>>TIS)O&$P_ zZ7r707<-Dq5^pf;U zQWxDu8=O-m-5uex@mug+&j^-w;NK392%hZ@Jlh?3UiH9phh@DY`LF%t46je*4tyfm z7Ul5A2f@2h@b1nB$AQr6swwy-;qEIt&Sy_oF@{@_yKXEZ?JfGC_P$7aYtF-0@;Gzx ze&*(C;tp6}ef=~xY#lm(BJ=b6)b^1sUripXdsYQ=te3dU@F+iLg%sHJJyt80*WVNW zK04>+bx(;$wxDAw*h`+R*e2|y7|%p#vyA65IL9&yFJ*kG_;`{Ak3)k^(4f|)0doIk z#pXsfl_wO}7~!+%6Xtsgjhtr;jr5G{1?QOv?aBTLujVY78s-k`vkK0Yj!}2<7RJ6< zXYxW9>7VrW!}MP`%R07#acIA23ID^)MXj;*PIxtO5p@-%Etd7U_WJ{gX9`-LY6p*Z z%7*1R?bmm}w|CKpzH4r#_fhE3KT12*v;&-_YHP_9?2E_C6YFU6tMJZA`0S2}0r`T7 z-^*(4fG%<9=8h{vH7kEw6r7BnzECuUe(rCK`DjJKU%)GCcAUd+;@cKt5L$>qXhEm6 zpodz}LoMi`7W7aHdZ-0G)Pg({4DHbLB=2Z0$AOLUn!Nn@?un&w=o+u{C*sidr2oR; z9h@T{hX(E7|70cK^$uf;H(Xd6UVmX}obknXUs$U4mW-lq7I++e^kj3m8eZ~Ge8#S7f($A?*#T|A76x?5;5V z@5cUd>-I$chOq$4jhuVuZR_`ZuXo{JY`@=*Ox^0(_ip^YWU7gk;lK3N8--dwWd)~8 zPGA?fIT(K8{%RidZLV3Iv0t&#u^hjA^=&#MDo$+4F5XjZK@&p+&0g7${>y>K_}t{^ z;wDEIH#xev$@3Rp|U*(9b8BBf>>{v+9cbdK$zN;6U*y zW>3ob?8Ql(IMH-GxHx!2wQ&6C-tWTWFQJFQPdZL&!AaO($ur2am(Xu#h##$yT^%8q z)Agiu=~1&}S#~pT;v=%o=w_aCv&n75prJiM>Clbwft$GGtn3eSYxY(J7is z5%CaxsCJTYrS*ks?{4tSVjy;wB|`+JU$|KMRx2LG|Y=lEZ&D#rdUuK(yK=3{@)*ScwR@H1Bj zLWl3e#&2Zpfh>|9KC+EH4{TzC1JP2jz6)Qkm#)GtJOG{P|Ip90wkc1j@5A>ImuzJ= z9$`(e(;CzBFXSuFCwB7NdAXb4gGOz@b`;p!fbA%-wE^2vU~2=mqrlb%Y)66Z7r>Sf zY`pW?GV;TSWnO~MpmQ5Kg&1r*USVwO)5}gY?>d1$NOT$m#!klJ!YLS!?8ASIJS)fV zvzIwjr`T=Uw&N>Q|3fq*&Y_Sv2juFTi^x@EylTUJU%5W=Z)hJ#eG51FYw|WPSdy{- zGV+IzP22BAK0lgaT@$(AmpF7gyj*Rs>9)|WEw2@GF{*XG_*wAZk8BW*t8M%mm~RKS zjLYq}7W`F#zgqBD1^#NmUlsVP1%FlGuNM4Ofxid9-zUJ|z1XXT(7``h=U$BId43XS zW9-gO#)4F@VNJb;HT4?S)N5E%uVGEShBfsX*3`V;Xj%KFo4P3(jl$VI*vOY(8Ax35 z05*+pR8NF?e|d3v=@n}$OIP|v|70b0n|N6KGquoqxx|6D#DTZOfw#ngx5RPOgq3a#sN zC3D(3x8w(Ro{KFAZKT7tpo7~RI9o$HgL$mAM?U_ra0B;&FB@KebAq+Gy~me$di0#o zH(8g3$Iebf#?MZC=R|L_^qTa<&kyxBi`Nx5fDM0bdr!HkSFiuiB4>Zeo?j8?%f;bC zvreyPT?7nA%dv5;%dpq}+!GAC->v)2J|okKFERc<*#zzQF}5wv2)5VRc2u~TwLEaP z^IjP;F`rs!kviyt4`QhGZY{c?345d#UC@L*@&GV?16)YXD1Oa_F>+l+qLLUE(+7PD zA8!?8ZPr+qG1m3iU5W*Hn(a4%Jpi2k*sI^`eFn*vL%vPM9*pRCLa-l_Ej<3HJuXU=Zzn5y+e7CdE{oO0WjTx8;=&n3?4 z9Igpm7`;oV88ekLGo}|XZztx3Iw$9cB)i)u&gb(2K68JwKh(J` zGj!-GbkX`s@{(qU;#awTW~WXGekS>?UT3ZtpZTa9@`-YJmU@rP)O(x@zmLsh-ylEK zLHmjs4lo{zxCF&D>@vBT*z~~rV{qq=BYHJ<2<^VX@9TiO9h$gf?tOy2N1jjGdW`RN zo~tn9%P{)$Pc=TpK2;Eds+`nf;1hqi-!J03m(F7xI(SXLN%_tl3D z-wdtMl`-KR--_&^7Swt0#e?qdTIbuJdr{!Pp?Yh-?BK#X ztyNQl>z~qEYbiRblUQ$~)16%GHsW;^iyoJ*t-+Ql!yiZDuyacD96Keq^^vEc&2`W& ztxq=xI$R0A%)}oF?Iq`Bi*{1qLHY1oUuMs&y8cyU^vWB0dl%`Pqvedbo#)M(l6E!D z8v2gWj)@h$op<@{9rGrQS#$XI`d6tDvwtzQ93)%SuYpa!@y=g;(|%61B0Is$vy9cn zlk8ND;qSqXy{}@|a-D!oacOSy^w{Inp1{|X-{HnNv$y$>!vkLW+wmVm(_g-J;YDf4LY}W~$8_jlmataUg9mdK**D0MWzE{lv(w1Y=prX)uSM=Sbv}Bm ztbLuQ8aFOuY}HnN&qMIYA!ywRon>3bu)B$KB~NB_a1MCu1TTlcv#}MxNjETvC&V9? za`vH<>K6Ppc!=@)63*_5k>ha3g|iRbIXdtJ^(2nI^{q>SZ*YF!o7B}1zFnFL=kjx@ zzEnH8Lxyhn+T8vx5#4CZ)R7`*;?nc2{g1rxwRdu}pZ!hl@=Je^ZDlvUQDBv#uS=Et z@fD9q^OTgp9#8;`N zNtTt>`0Py&zmt9av%h(^!1}>97nh@Lq;Ei^}Pj)RUm!97NhIVM)0S}lO5R6OX7Eb&4$*u$Tx?(nXHo`L+ zqj%2Dh_OFI87lh2}@mk901ha2H}+x}s{ zaXmC_K<3u5o^s~1Y$4ee#&-#x6=S6MqK?Ovo9*iv!>HFL8Od{Ki&IcSHr%`OcQ zrG$d8-pW~zB3D|FD_b2}{RCP~qsF`Ncm?!&jGVLg zpjVYOc3;)0ri}#|InZm2q1R#Xd=#8_GskRv2;ZXD=p?<~B__C=Idd31A9d)Z@gET$ zcwc*&N03unSg%L?1-w7HwL`HGgV3u7y1U~S?Yfa$I=67a1y-CZ4GFzZVELjz;_|B0*i?SlHTZmM|UFMUqF89cS!Q_SIZTRZ9tbM)rl`p9M;UnA^?M#fL+UK6;SDdzmj~H`XxVXn} zJ*jbTWlkwZCc>O9L{{Wt|3`Vh;?atb_KD-jxbXUX;(PK!CRgx2Y;0IIQ9`r*cxZQ@G*bW?=AKusr-rlxy%=yxi1#dClDE;@t z8?bhy;cc?;#xzP#Z5Bq$ccZGeV9!Skykf$ z5c~EC=;+3O=b3oDzIf$|9O8FID?X~=*p=wm>QlZD>)fW~nHRalFHz%evfoM&(~}6Z z$7I!)1lN+!S6n|U_>+hF$1lD~on-kZ+_j1R+xDs7#H$>tRJ=-7O1w(%HY=gMf8|eW zzgK$?;g_&^4xq<>hOXKN{oY1LBC~tz_+MARGW)F1!x`vG^eMWsso1(2T{%7!Ay*+n zdq!9Cd{S3p^J;In{UzxAUE8kjgr4M;1jF!-9ZRCvL&-h)1jyTJreFA7yxX}mKpvW} z=blT^pYVUQ8hFv2(I1gtgC32bOENBm-)S%7!af<{$_M%OG#?`9EAd2)! zryif8ej|Q&Mj^3G7XDP_E4=2s=RU7@KO!Dv?&-5xv(T2y^YVY2{Q~}Lz2eG=WyH6d z^$PPz>y_)-r@aeXt$m-?BtGn{Y-49hc4%E9{#VSV`~GdbuV>YUiRsW79Q!u=cqqJTXpyqo`z4u z=ucO!dB^w{f)U!u{*i7HKBKo88-9Nmdi#;(Q)ek}t%J{sBkH}|x9Sn}XzzAw6?v75 zdb_AEgdBSY-8*n!bxC}VAEd8miHDn;v+kYs%P;-Xa{5vqVb)DS#y6ZXoTfgNv4Na% zxMR>h;d*i#Xm{3d+UcPk;X-W*AKrH6LVLB-0XtoZl_@Iw}^Bj7(vVNu5sN9 z4VXt}jPPMn4>Hynz-IIy@?K|6d1-M3I>oMYXo0N~xwTKuCuyOzJN>25V&&kp_$LRx z6k4pbX%W6ka67b6f6VnS0^jDlu$k)k-a!BGQ|x}musV$=*E@Bu+&VhXalR0C(+_lx ztjDir>gPN+JM<3w(XRcXe1S8upH?gx+TZ=r0rH-Am6g%h3&RR&kW^5g7 znTYt0_X6uG9J|*ZpPoTJ8<}J5ngO4&?_>`mco z1#&C}Uyl8H19*Q38@2))Rym*2`DKhH9gmY3+hp)~iZg*H5u@SaZW6dF)0xHKt_<91 zuiFc+QebBoMSOpE^f7ivmEAygD}k$B&nO}nGn2SP_@!^HyLyM{8-*__ z`Mt((%`E46)_t!mHg$+51V2OWdAVxs9=(_|0l#9`zU28y@C)&Q;=Q&C>&oCHa@tlq zIj|4GuR8a68)GYCudImknHQsPz4#1#!1wg$-EqH8&1{YP4VOtvK53dO%w4jm(v z@FnMvH4Q?~5VU%K?8QmnD|~mLy53s#h-^RBQIoB&?5N>h-8Gh}16n=JTD6t?MM?gu zFz{4kqe?z)#V_;^*hn^P_HV@LrhFH#30A>*sRzzqd0=$;Z9e`uFTYIzmKG0umjK^0 z+}r8E*U}F@8$T_qDcE;d)IyC?*=jA1P`8yaPDB@YY2|}fd)Y56hF6xrE5${*CI>JK zt-bhGI}!FQ273Qh@B3EX!0(f9Hdy~5@B87bf!}955&V{J|BA(22d`xU|2KGl3h>_n z{OjtogZN((OQ4Ht=qZMJ3}-l|jO7PD8z*0<%|URo&I{9)oPlAYopR)(3zN(L!s+L| z?}rD$Y1`oa-{F0K@gO*5eN>KKa{Kq<1V>FDP67^2sLy5R)zt0S^L{E$CcR1|x~x?``iTHb`Ijy^p5Er9 zlr|liLvEp0o~MuX9Pe1``)r?k2jGdfs3|a9S%dAfz4MBXVEa6{xCk_$^>LWIw1s|mJRrLUP`d_@C#C?$~o4=BRrxs+$YuG=M0a;qt(eBm(==i3$ zEqKKz8xH#T;1%sLrPJtD@AD4bw{Qm5P&E3M#yfz0nmquGJ~aXwP1U^pUmpoBrxs$( z5HxC{|B=$DK`;+8Zx52s9AT{>8of3EPHR(eMG>49MuDd+Aob|=Y$l!Bm8vT!yJ`)A=AoNL>5u*ng z-(3TY@5dt;pPQrn#t>sW#va^A#}?B5@{rJ54=?hcezi&P3>hoN9 zb{FeN@A@aecddUc{!9N#ZlvS!hk|Pm+iv^-xctlq;F5inqbY06#UBYi53kgw;te6zkQTy z>m*^-y5O_)D>+?GEO~KqF1ob}99yY2WnGZ+{-?d~2i$c<+WYm^s-+IipjVsM7Qad3 zcIZ_B3|`;Bb2%w_`ZwxC+oL8_PHX}scXIz+IF%pp5%?>Iy`l3)&Dj)Z@lY$ zfAPS);n>kBJh7Me2IGlI1MtKHBjbsqoiE#SxGtO`?~`NK9R3zCjFcx@1ovP(;o*V3 z)MR$&us0so`0LZxH@lp5@Dyv+bZ9t8bo&;=ZpZ4AIa#ho6nFQe>DU>9y$Yhd|{aMXd&+0l~aGt`7z&1kD}qz) z_+nGq`FC$SNndPgI|J$Zf91Ww=FrpuX!ey6&?dp?|3nBr^o+Mpp1O#kV?sg)zC~$zzWu#a}!O{7(16vMU`Hdrjox!n>B4$a{nF^5>N!(YMcO^ufM=9=`lp z#-3+q=A_^r?4|wxF}VDBpZ&a%^71j>84fQizrf|?=RLgawU_3n?=N`peTcQnaCl)a z@bt-~bo|@2zayO&l54L1ym5rMX&3IFr}KOI{L`KjXDcq&I!k+ueSE*&%lBLQU~DTc za`)p>`JSAvLFeEe4^00ta(+#LWsMgWD;<^;e%91>$`Eh6sl?Y|1{VbJzC zvCQtAR{pvx?+3(hs*fTGqx9Fe>CcfhZN*!LkKZjr;Fkp6esia4r1<@vjo-f>0>2Gs zfZs0;6Te$Vg5OlVo`T=M_TqQ(@MY7yA@I9(0Q?>&=iIYz_QCvHn{D{_{a+2vzn7l@ zelH#-e&>w@zv~8<5AU-lo8;eJ!^iJY-WyCl%pU;1TSkiC*;in9uio+O5coX+3?r2f zZwc;U$cLlEFb`WkY#$uI&wBA29zK4*J_LS`vA>Ar!VWjfmp9S|Y1DA@F;Mbwj#*2#gfJhi(0K{Sf%Q?+oyJ*D&$hG!py{A%Cy;;x{mS z{LUHzzvQ*`!*ACQM<^eb=NS9p*S{ECK1@6V{A#~^IQ%>7PlVrJvmbdT@*&K7gUN@| z0r1;&hWP!vA@I8!7)B}|z9+bcAs@oT#(U+%V)o?I^EHm`w(A$oH$J9wk}=#F@*(^^ zJ_O>OwO6~Cy>B1)!r%1;^U>Gr*)>+2s^BW$q!IfJHqT?q zE)ObBPdQ*6#N3}n8@5l*KL2|QwW6((8K&NT+Wqa;Ji+e9fZ5My!|z#KCJuD69h1IR zxSt#-ea^Fn*80xH_XcVayg#-N-;o+}6qb==4W4>i$hYpz4k`C!8)q!5E{T5AGo0kv zte9Wo$C`=*W2voWC5kUm&5|iW>_Pz04b7Gb;*+Kp6mZdiSw zG(wJ@^6GV_!)3G?AZ}1O5%LL^!zXi|1-O-1-~N!!>zvV*`o%()dUF>+|vFdGm)V zcrHL5-5Z}v%|lXKJ8A1TP8+U&A(ZyM@{I)B)69*E#s7m^L4h54jVDralUqn`c?NaY)8OdbNc}=` zX3B`oUi*IUqS$$~H<3#+fcI{_UElPQqDtu@N74*g&BjluRb4`-M2Tl?eAQC zljE{)0DNyaTlgOM{Fu0dyB6w#cOn12I*+>2#DMMv$GW$RdtXEb>bw}mKD2Ot-&XET z!EfW%Q&;?F%W}>;As#h@vt*W9vu5b`4DL%Fy3b9?=BxnvQ=UX67c~jJ=k16`>Mv5A#dCvSeEvi;{$XltOba&u z;6yWWBK557iO3G;tj>VWtmdrF(^sELzO!+lcffo4J4bm(`1j8BKXO*OJJ;{<@SeqA za=sefoI1b613JGb&U{dtL-F5C#y=eX+sZs1ivOV74AHIiS`Xa<=M6zOd#(+OZt$i{ zx7VRZ1e|{m-Euv2n?4W?kO%2BczggF{GEpe+dMRI@t-$;~Bj75>0XoxL1Iwy5^q z)5!0Kta&pVlwY_dLpfj*&il}5yPk<_gJGBbUD4_0|Hy?Wko6H{eUv$<-1Inlt{pk_ z&;-s2WFCf*&63&gB*e7FbhELE?yEY{T%XAqFO3VRgSseGjg9mfWTs`+KcU(x_wZSA zOmImD?IMq)v!SB2D>l2d%gX)9Jm%DM)XvcJHk@;etm~6~_IK5F>39J>PkgCr0evdD zFK7Smeb@V0I{QC4-`BgJEZy|}*uL=ycC|0~y?xA1>%-`O+WNJ_SML0f{_xr(vL_;= z$nhVaMSZC`22W9Jch#eu3chUkoZR$5Y6EsD&K!VqnX}j=q%ZAU1?_uboTmZ=DS+E?sPx%5B^`woa1+Lxvu{-Q;?ghG9N)?3BlNeP&pLl`qOZPGxy<5$Y=su{(s_{2tijxN+ z7K_dd`xWnCZ|j}6h<`03w*$L;QTPR0f9bjBX+!VYumr$!W@|k)i^2zxDTQ-NmvYu~ zY~q~KO8%E&xA?$&C$NXfhu1sl{dUmrcZt8TE+eP@fNY^TrFvhu*MGq$+v+jaG;8U* zoxXQc6DMyvYh7w(U;1F?=C?Snq?5K)Fs{POT32(bP^rUnaChhFch4!z!09eTa1I`n#1b?Ei(eEWQoXhViM z$4u{(IA@xaIA@xa(4XEZp+CJ-N`IfAKg*)79ykeqzvU?xU&51-v*1v;(^?MP&*%d8 zxfi73UUbx1yP|oRIqxTCMD;{;23i;RkAU}2GoQ@67Y+R`vhhjPBa6U$f*}{aRQtpX z?<@1=nt9jted_uMj^ebo9R7CU_%Qj(T`!T}uk+Eq58r<`kSH88zo(0F3bwNu*P-Y7 z+R9Wd4&e9lmFA1uyI5^Km)eHl3)8;Fcd6tB_NI7!Ec3&zuQT4%=aH?}K-qM3rjrL*pvd;D;}& zRD&PBs8S7nXk4Wl{LuIl@WlhrSoNip>#8$TC4+9HPsyh>v3qwx zaHMA+Q2S$lHMMxBlLHXj2|scEK#^rNo(b=Vk)h&yjZZwR@rmy>KJmTACmz=L#KRh& zc=$~C{sgp2^8RxzPbKNT6TJv+lX6VF{5JaJH#sweGu86Ai!tk*3;!D7&EMGVA3b8c zsScdtj%tuMlWF62YCp(7^1^$)*Bt7!5*_bCw-_~m3R$z%kH-gPpYgHs``91uy%_kS z@4L7s7?We*zB`7FcWoXv=W=wiR_1xFJG?x43o#%c=c?kmnalgzLcTBHY7$N0(I(LZ z9&Hj$;L#@01RiY?P2kaQh$ir8EzdWJr+L0fJk9e>;%T055>NAdlX#lvzrpib&*gH~ zW1%mz=SFZ`4ZjN4dEj|tX5QwWZFwU;BStliH-O{OS$Ug<-+RFCza)CEiSK6K|A<a zl0R+%xnzH25B(2Zk_)a+BJR{llD&2B-2QgZ`=0tp$0{cndtmRavIovhu?HdtGN@0O z*%P{jbCQAQkxc*QL%YWtJtFy104*e63ZRALO98Zyd?|nyk}nrP3&|Jp=87tGZ4dSY z@;Le~_62RfMSH^IXTW1OXT-!0W+d8U8HtV;ynLz}ZP~4_QI99dr{FCL9RI|<$N}{B zyA=t+7e9zy62n&D_s*UQ`a;I?+(>n3e*e>a%AV+f8;mwlFd>vnOw!wWywPM{356SeJ+WV-4;LfK9kB zaCCTqqr(e;O}H-rHsSsP$ueYM3>jGBoC_sAE*UR9E*UR9E*UR9E*UR9E*T#|_m9}t zKn4a}{Vy5lrOh^YyQPmV;XmZeln!(8wiDdQwiT}C8eC=dY`{j{@_z!ZupuJgCJK&p zF8NS+s|RnRus6j^E3T#Xy5?kMzTt7r$u>vlw>dh$&C&U7j?Vvuqw}>!m`}~~R%Z@M zSM)FkHTSx)W0G@?xu+W5kykwP?>S(l&wuCMK(MCFKc4I6dFf!ysVZkqRXKC2%9&GD z&Yb#$Gp95Mr5`j0r5`j0r5`j0r5`j0r5`j0r61fm__q%4gxGJ|%GhGt(4`~feaR%% zZHaTHp3Y!%aiKM6ix&^bmniK&B|IQ=)R%Z%a;E_JOPqOH;>^<$XP%Zg^R&d7r=`rd zT3{@YeuI7m(r?hOK>7{(6-d89zXItu=yw6*wb!8ds7>w0bB%5IdEzDhTzDRiteal+ ze`TF`VK}lbbngF^b@4PEAz8N%-qf2{xE69P;F`}hn9ch7?EW_EUtzNv|5d|SyB_&e?A3;GsrD*osfkzi z;x9?stB%biev!>ITzhrH6ztVo9ecG5dzH2wd$lcTug=9@U6{02x7+I~+g?4#rjdOQ zx>5DLOX5_d+9w9?z6aD`RS6WASZQ~*E=G7O|S?e2pfjrcF z8mYd>W1a8li#FNDY5KyM>$YwDq3;@fVc(N&OrPg)Zy*{Q+t{7!Jm=~Q)u1+Vv|*gF z<$T2dSX{lt7QD}On(GwTU^4RymHlPr%br>@?taIy%Cn99%=@U;`x8>+XS@Y@whejq z9P(}x{{QBTgnW%!lWDDH@mXgaT!yU@W{seGHQb9~BWv$M{y@cC-E3@d{DGy`q8!%c zT}gl7xDorclK#M%_`s9CKxC>Cst`o%o%sH94CzEMH?3`o(I-8vRu3=qKqk z>8DypKh-+=sn*d?4=_J0{Kh(SE)3lx+w#wNe$_HBtLV3uF;~%VE&W!}uf|+OzZ!ED z{c0Wi3Hm)VU%NfOcKMHgFBao`Puf|(KzZ!2T{c618d9Cqh zAM3rw+t%-na`>AFpqB^ER;JYBKr?yOOb zU(MavxG{57VtrP8AufQ z0*P;;mqN(Z8{osk3#|m_4F+}Y+GqIQU1|OYbyjF+jgNeyY+|PKTIVZ1{yJpdZGpse z+E6=@+tDZ0tYK@=jSKM?&twmDEn27RZJcdq80vc7ky3-+Y9-45Dm zzYaY_+da~`^sl|vII+I%_&NJv9EH7ZJt-R}%zed}E+r1Qy2OsZj8Mngj`>({d>645 z+S5+`?#7SWzo+cYIP}aNfS!-TGqTn6XXxo4WAD#!Uf}QiV^i$42y z!5Urf=uYVcdEp%^pEBC zIdJ?I;d7LGvG+Jby|XOl!n>%WtSHaaU zpmF;PI{z%ICl5IjVLh>hcK)llY6Aw@A8n5P(dO76ZI1oX=GY&<_%GNW+UFOpqVQ2A zJf<~JB|N76Tq7^Ag^g{AFGsTBYx7PuKgRVaS0mR(t_@uMBo_jC&p9#2RubzJZwBX^X&?C$;kW4He4c0}?mAU* z;Ni^d#t!;kRfQs zTIt5)z1MV2MjxV64_$87Nlmu@PiN-lwVv~mu_Nt!mosnZw}5+*Mm|4|jzf3Ho6$v^ z(O1y5^E~#ACI@JXGed#32Yn-0RkP!L_V7=0_2U;uk9@H#jaO*<0p7Fi0f#@3Nxy4I z<&QA@5NF6Qt#3GC<+QK-I8FA)=(aSF}#+f|xe((3D($0T3?+C_r_U!uL zENopUIKi=ELk5Dg0~n`eAOF75iHa9-c&9NF-XRz2On4^`Us4x5;^m(!;h&x|c;~wQ zyz}t4J-mah5~bg@+#3vDjYsFQ_h9!3##U%=`;zQA`dN7Ao+0?B<755#XO+u8mA3t{ zLH0*ws{O&4V~GxIgw9d;im)9bzx5@Gq$|K-fou@uZ~=0-1YJ;o9M)R706AQOE+{|_ zm!JzSKn|Cp3u>ijdA?S9mgj4wXPtFp0ngV;&+_~O(z84t`K_(b+mXQ?=*rGf#Gk$p z;Ec1(MnCdG{-`7PhAqy7R1D=9{3v@eGaKPgVs7(#_VSxzY%W`qyLsV~jNs+gsK&#) zv7JUJ8#phQ_HuispMySRE-4;Wu^)lgGD)%JY|WaH+e~iUS`)BHmq}L2W|FMbT3WJF zHj`wfY$nOdPn@yMWXG))VKccnHT!TLyvkRV3tb2Oo%vmFWpfs(W&9Dc39QV_&0YRn z<42JFBtDS+BtDS+BtDS+BtDS+BtDS+w8FHL*Rz70l`wuN`4)?^GB=wz&i?`~3mjY) zIJhiua9QBsvcSRR1%Cou8o$Ig{1W)RO5p2SXjsDdYoTEY?i}xapxuGy}%a5#%F2t7N|7vnbm7AoTq%Fwc8ft^z z@yS3b-&d_g564*N#d@GUPx`8=%Fv!Rp?j6 zAxE)i`kh_H`b}#%oyB9XE2XB^5AR4#3R@5*`n9Ak|af&<1uI8NEc` zbNSAt?-A^`;z!Fv)+6QQ!tguayDMGVy0l5nvzXz)6dnMcW0gMJJ}whX@fYl4s9Ye8Nsp#tx(y6%12+l<1Fbnle^@ewHw%R z2Y6mbPWq`5&Va1L=4imCn>@QzXYC4~<_uYEsrlrkPhUQ5miR(^X8RVfPZrv7{*Qgw zTC|rv6V07RmM@-l2-~I1m$52?Jc@2UuPnB_W981E~`yvWk|^=I*Z ze(Qlbd&mtXRwdY-AH7WhcpdD3mC@oT1?&#E2ZdX2U0NZ@(MZD-$Orkzi!oolRB*vpIR zN=6RXXOr#OGaL#y^cCx zY5Qtlsi8Ax!MSw4g8tf9mzQ?bm6uLE-`fAk3txLDH~ZP&N!o-Fc^Yy=lya=i&9jan>>N6sRxpl^uCLt8phb;ACvtm~>Dz@|ATC z^KD<=sSO)9vM)xQ^~)QUub9=t+NO><_>g%wuT^VdTLuslN&5@ysdK=ZCRWKh$2<4o zZ`GYJ`BA{Dx(ThlE$dqize=46(NKw;q3GWMnaR_*cAD`z>dqa*1c2h z8?|x^xSa+~TpIp}--VYh)~sDM)~i}0NpAIklN-R#4W}O6_^34+{ESM22R}U?{Pd*YXS9)9&v@_?tEqpr2Ht)H-d+c9H!QE2m5wvn$1(Ui9dGvw zZ}9Ua@bkl-dGzc}55JRr{jy`d@G932xW3QzJ+4={ytazTfr#0)RQ}?+G`lty zC{4KWWPZP~4>q8Cf9KCi@t-Nip>sESjdh6e=i(>n0zSzAlMjg<9>f0b+$}!?`H;(4 zhl4w_7xx14;C66-TVFopW5i87dk*=K==Vd&zb^P?kMbc`;!nZ;QNGtpoMF(plF#7F zZAbRM`ib98KeyTabu8l@Cm-@5auk#KkjOFNLC=BM{d!k%fqGZ@kQXT*Qt}R-H2ILo z+mw9B=ZIHTJ|yp?_uIiZ$CHm&R7gG~@=R^Scwcsm{;Q7`?9qGBTN~-Shra84`90H- zvm1}DIj|rvzj47<_K0YEfp2u*vVBiD@!y;pg5s2l%NosXQy3#~=@ z?mIlY@WX-7jivUpJ>NYmbmT{4L*46%s{*D4e(t7xV5# zsW?l2*QZ=W&qvfGmaB_I&IC$c0ctSYIH@S8lyBVCI zn|i>{;S}6R|Br6Hb^zR{o{OoSf=HbD0B@m@T7 z;7Y}#XJq5i<-)nR^8m40MpuHf<=Z*Xr*mR|_pK=d+;^}SW>4J})c!mO9nc$z71AwE zdXG=rr9Qnr10Ox6y>;lywif7x?aA;AJez>O-{9S%^Y6qzPnWKILvK`xpmSl@WNx*gf}O8b%RUE!**h;R)hv* z_Q+jeWW9gqT58>v`m!G6k)_b!&B^`ge}KzEPukMv8qwy-a%@6{`v&&blj)h*gW1UQ zEbPIxu4)ESz*I=4EuO-!b24L0l%7SN!FA_hZ=c$I@PS}oAL^gkr=~Rw>6!!M;OP$t zUcoAu1*>502CwWG@CnXJ^hOZ&H;u34!QBMhoyeMW%PXUuxt|5T$14W5T;dFD`Oei5 zciXf&_etpXc5Q$6-5CSi-y5D9&^c?AGxuw}`?HGES}r9wFonHPx4}bCz(a4rJ8w@h z{Il27L&_1Hw)ImU|9H=)c>MG60RLq8#;5ID@Xy=4_w%}l`|5Rd?tcKs6LpUJ-RnZ` zQ}D`LwX=cgT40K#|NUym-8(Jh{(|S?8O;NAAcpQs&?(Kp+E^ZLsYYIPZpQ_~>)bJe z@pXpuciTn`a67{{Pqy`kle^p2ivzY*Ha2KqUFw+%*;kibYG3W^ zIPx;R*;nb69_*{HA3gheMv%_XRyt;2V6Hz%`^x?DL;t7rOwgBqYf69OwE^xyV>gf& z7V{6jDI;>q$& z)S7&X&nNkOg3pb7{(?_Wa{Kcuy36fZ^qY~_U7kPej+MNgp7DoM58$sp=%m|Q@oSs0 zwfL`!HS_nPd>Xz}O{ijdQ+JAgvV+*c#*dd8UxE1Xg5KgseCmdQu41iB{D>b^ICiYS z&+O;EG0#c=gxE1wcCFj?gnZ2F$UR)+9+-!pd58Qq)y4#3M|ipOLHr5)9{Ic`4rxXg z;9I92z`y3*_EzO+@ZazsHmA!bH(^)4O>S%jwYc9VXRMg$0J)Ue_&_!;x`aGvu0J;b z-)W%xdvKBOH;dZP`-m$q=Dq7f#e1wjH;26*TC?dSc6gIG>g|AEwuHI06rddST4my z>3!_kc!N3pw$pFV3jW^nZkOn0Q{pZ0lz1!1S38TS*?`U$T^w;Qo>b>v zir@RjgaPiGlLxwQGnVFBdsTn(-(8ceuc7sr&lQ;0B|KAKPfF&|U-2MsKA4@~k^KHC z>V-~;wi69)U+t}b^ya}!nDfqwA3RO1tbPzQ?MMAqkfvuBpy^PbraB9q#HX7+t#r^0=Wktpd7eJ4nL{5!2jv`{{nN_t^VJyUr=p& ze*J=Kr^j)&^wvzCJew~vIgyF|$QSi@wRWi7lFnyStwS63v>kie(L#wjKDn_OGa9bQZG4q!EThdg*yS3DAbq#hq>q-xQz#qx=ycYqQ}V>X>CrrmC&T!vuz*b)3 zxEEg@axdk1IehsF^ipm4Pmi5^ZMpn*Q(Imjj_~rerO00yeum`FuOa8%aTOIUwKJ)Zh=J+#(=GnI^ZJcYJv)_O|?<+LFyS(|W;C#m5{S#VKOx=cFL60Pt zGM~4gSD4>ZsU^QTSW6CGaqvpq0-j63^EU9D2%gBFttHnv7Cq1XOy+);`!=)+&V8ZU zaO!Tdwc!QE)tL8`c(viLF!!nrw>nckot0s4?umJ)RJiZJ+nW1v#BHVqyukdAXa3Ea zu$NoSnfq{X?vZKLf*;?658eZOwif)2+DQ62=FgK4@4kySSqJar(@oZW9#~X>2bu#s z5X`SsaOP+*zoNB;c5I3AC3Y=hsPrXp1nDyVGRM8-%8)w&AG~woY-ofZ&b$WY)yAb- zb7)6jE611u_j{>pP%L2lZ(@XNsJ&LK_ZE5XpHkb+8WXkH13M4Eo7RSWXQLBU9^2+b zeui#%r=dSK1fLu}z0cHd59l1nx~0}5-e3+=6Irvb3q^x-dJXM*T4S(zj6(TGQ&+v5 zd0PPv@NE#MPH#QLDyT;cug6mq=&8}zN>|?-X*F@e0pU;H! zKKVgtqIIE8@X6X4;*MG;GatR-WOE&ba58a+bZJi9fsLE&(Nua(amPjEB&;q|{p!cy zTl-x(M&-d~^DItZU&!#PmuK+!*8BUT@a)xmuHrML5dZq?Z%=(VPlsWrZpi0fn{SBZ z<{Ok_=-5?UqkMz%4$42w#5SmoCP58W<;p-!Xfn4ZR5>@VX42NznA(?Zs+s&EHMAza zhldp-ckG&4v)|U&P^(r!EPoAkF&EuBF0U@MV(b2!yt>fGKkUps@DY55IZk>lb)j!y z6XsEqHj-SX>eH^RcJ|&!?c4oJmR|Yq)P#2MxsGR#Qy2Peo_(9TQ1V8mF4R6(ebrdj zAP-O%N*%?s{iz{3E!4kdj#Ij4&d~?%eZUz+4bf?)hNu(U{LUTt6b5e9b*jFqziNmK zjvocb{Wl>WHzHeipr^s>Z6C+C!68X|`IuEsId!3f%$nnM%wuv*fx1xoF?FHzm8nUi zPg7T9`Zo1~X51>q?XfQOB>Fkc_EV@X^d$N@dVvp5Z*`$3(ck_|e+BA7PokgyviO%A8H>WOC^X%1ynt6VN@%mI3ivRAy=lSwxJayl*BMnw{mBjREj~?xTum6c2p?^}cO~nLG5jyJ z|MHKHv{JABREZO*X{SbQpHsAKA$2QS`%|p&;@<){dEZB<``qD_E?ud*PtKjM;N~rkhMs$zetUKwZMnDefk^shY@|oe3QB9xtMoO%r)RrQPo0l#XXJdy#vrzaf@U0n$Cg>ZyhGO@{Z`5Y|hk;uFKSo=J9=|ZZwbH2S(FRU+P9@ zdwk^LC-g+Oe7;`--E8gX7W94@{52hVO+R|~y?4`(_CcubShb6W9!8hj{SGCf%R1S% zoxo`7+L1|Z~EtG+Zb5>vDyEE zuOGb6B&@mw?i1NTjcXjb#_+e}qhwFLJv;Ax9=}L;Q;cGtQ+b`+RvAfe;0`!yDb4A2| zXlC+T=%)Pre#d|Nf0I9MKSlod!YT5{q5yv!{O1$%$0rK#$Gra~{y50JtRJNQ7}pDb zeBu8nf9(Imsp*fm?>ja9@ta{;{jsDE{IQq!^YzCsFFmpT&>0-Z2W9UcWWOghbP?=V zNoO2eDP6Apu+|=a?sDv1G4^h}Zx6==>>;`H3-93fFu(JB5o?}py!QzI?_-T)0rqvn zx_WoPJ+hD9e$&Qv4epk2G+<9ljXiA}L3}?1`!UQ(-@sTqiH~E$uq7k#mxn~s*YnKN zEq1**d*`Qg=0iTtKkmVvy7;m|`ycc6D7y*HReAXzsI4|@)}D?2eY1ZDUm5VwceDB~ zWBr`Itv~TfUVjdI)2PXJ>)A)0q|efS%|>Fu?B zC9ls<`hC6==reRr#Em$iJ*szf_$R-Id(_h0#kc2fe9QUxmYba7J=znkcPxIhn6u!1 zVbhK}PR-XSU|WfAx{1$=^z-7;)$~)`5`^vFuJHNNr{RZv*!Blt6Fk~uV`0-*JN^MP z{`r};3f*D6GIZ$a82oYMF824q8x6Fr#DDu1@j|57@z+%952?R@Wc+|_-djEY>}W|q zRy3~z1rt74@cy|F`zmy&XcazqkRIe}a_CXn_m2&n>Kffl#!($>ie3;LN z@^E?F$K~e%p0N0gqlP0Wuky`xoYRChic&|`qD4&QbK;CSO=kEVj7BQXE@{2kPlL4CQzz;j-P{#G|h|IB3G#pkQw_ZQ*y z1?V2tX?+*CJa|05oRv4vFZnP9;j#F8`Y=~NKhGTJ!>b&QLTrcn)p(+_Y^$LIGT(Hb&i}Y7`rbbsZYAfqt(v>p>nk|tque{^ z!_i%^&Y);;Uc|4$b%8%0uLt-;{3_o2^=gkt_4n+%v;3;>cLcuM_xr)y;-4VD|AA)~ z-?iX$d{B0NWp^d7qM!6(#Hsx+4@S@4N|y=7EB*P%zfX2nUVkAc;#SjFRenD{t{3{a zz8k-10grHnf>06 zdOD$FyvI}0#i`8^o=0jDJ{*=lp1cL_+eOFeyn>mJMqHi0)&UGD#%?ouN#~6a6H|+$ z9AbKbGy}%vkEb!kl?gjISp9 zu6?Ql;m6b9&q45~uixC=c(A55;uuo z)j*uPh;zU0a=x_v=8r{cc00@eUN(Opc5wCJyB=zT9$E*}|MI`(3yV%VM=SqX5?@Z| zXi0Z#4J=BHt?~{r<&g39643r0&PXic{8Po$i?FM4{5j8F!?!ac>EZ0*_vr8YcG9Kz zZ?Z-I;NzSahir z89z#Og1Rr|uz@pd`~$^GapuyT#WMxp9i5cI2UeV=GhuBUpuA5J{ph~#!$uz!oA$xB zDPk_Q*Vzy1clyz?$?}6ddIxBLE!W(iWodv7-xZ*NwV$fpIXEqC83ukGqAU=DXxo!tX<+#L~ zVQ^hlT+|}k;sZu4&hzPar}AE+8U3l>cE*(K(N8H=kyfUTb^N4>9;A4*wDl?@_$Bn0ahNrf)tvtz|cV z?><`hp#0x<$-D8#O1J(iXI!*_C-iz%d#B^*mIU&wc+KPvIgfS-ZQ7Uv*^Y;yt^9M3 zzlsfhnRb#v<|0M=d+1ksV_IInFCFXpHxK`Sp7434C4l>j0ba5C;$X8^U-=4k-Ny%I z&+pec{5peQYum9I%r9$R?R>Oms@OC&*|WjYQ`*OI3-syYtonh}d@ma0Jk+F!@- z+~?FJ(6veU?gGx9Nx_5fq1RMjw_14k?Gp{q2cAexcG8z}?upKqX+nnKNBz{~y$U zn%E!s+juw5I4*M(d}j*pn0z&~R39bcL*BpHarW#({@wzQHuzI*?7RrCwc^1sk@P0y zunqoe$L8!9Fuk))dy{FeT$pkVMf`5*pgCQxc9psBYh2j?!M76lJYMte8JNKP!SCyj z=YG$Z#g4JLvN$imlU5#=z(c|Oz0KE~ya@9dLnlZdNOtn&MzS^%oRZ8zBRr5qmuL=& zhoj1ODUMZMQn72f<`EsFd9?FqWOWF%L`Tg(?w!S8`&mI;|7pLi=%=uvyP4&lAZl{U1`du*UeT^smp!b6P$M`Ld40`nT zY<6GzIvE-WX6aYKbFws0+d_2k;=?QrK7F{$(7@tm+j;nPUjs2Qtgp*&%;TRs3h>VX zWB;=LPd@*Mcf>=5_(%CQ$%N$}Vd*C_s zVPNrjPJAO;i{CU?$~lS7Miht&f>iwzvRnfIFFuB6riWhPB=a&8;`}%(KaSa zqT9_{8n#h3UpY|8m2CSlC@d_?7s zjQ`2l!b5)XT}SJGF|D|yMSjrT#04G11?}W!6(B!BRH=GU)ZLA-kf_BFKAy*ynlg|C@Vr}Vu?t)Of8>Gpk08M_#Z=%P+2G5_G#eVw!JcuO{4?_A>h89DDv3anen~{>HRC}rfu!e7N6eAe|YO@J?ne9~rT~Keg7MU3E9|E*Uwbr|q|FZd@?(|TOTfT*S zmjrT{1g6ozoAsf5Uj!J8F9HmDUu#tIeLi!%D<@wNoSS6BGwd`0D&N8&4U2%!|Km+#N?Yl?ze4sC-i+cp2Ve>;!T)Uwq{AT_*NM zeuA<0TY=d7Eydo4Q&2%(SbhI z-!x)x+36P)iyQkRAH(mHGb4gJIrz8b4dqiruLIOHTiKP4)gEAC#4TRi2(-NFZ-0e`^I-?l?9nYf$w_tLNaUJMVKef567 z*|l7HD7XrOrt`*F7LNoC?}*2KWAPH{HxnK+yF6bBWK zvjgwc`1UV;qBxs2nK+xiTf}ql*Cu4{gmJb{2ie@Os2w~NjLU^f_c+_LgO~HZCtu!o zHxp;)+DR*K0|Wdgd0P;Ww{h%S2*%g>`dG5z>5i;iNXIsSqv{Rt*I(5*(%G_g%8weo z?Z?IyJWoNB)y$jf8Zt31eI(I!f+ym~IkvC$PB;@=E59O{)x3M{J=xTpt2RpZNNW{> zNqwodNU@K6;uhsYXuCx?_+v}9H^4I*Tkxul#y!)HlX=%0$JFNK#o2xB^JM8F9GZOC zPK7RNZ{;CK8|5N{bm>PdXlNS1)wcEUwSHLM+NrOz)*6@8)~Pw!`a5>~ouH)zB|} ziM3A$f7yEZSV8|t^pan!b;9+?TV{;O(4S{syp8Pf&UA2(5o6nUyFY(t{I-nW;K`S< ztMsv$S{cREHrCet5jvOt5n}LtJRc7&Zw9yFJkQ43{(49zZm{2N+~9rB@vnwt{i`H@ zt4|Aq#@oS~#=rle%dBIVcF^Jl*&D%)zKcUk$=G~w47S_Iyyc98Ua@|heb2_-*ZFa` z?Z3$H-^37%q5h@6Y`Y)PxAmdqPyExUto&*3a?sygdxH2|cQINXQvH_oL&cAo7#v)C zjluCR3&!B!++z$*|E1^~6NBSV=EmUiyUI-b9po$H_l|(K@Z%KUcfe=8#o#vt=<)-f zE~1V8^(h`Fwm#{2968k43f5;^$XqUhr`q|yy}|L~aeP=4k5BRA@yUKXJ}TtJUs(2IKKrh99%>r}Zyv9B$*jV%c|pO;!5YIhi;dezZP999?33Luey8iV^FG zj~4s!{9?uPykp~P-QswDH*Mj|f_mML$+rdQp_sf7KlT=%=CRiLF!>_%|Bvw}tAUO2)-4Z@G_{WM+2(!1yA#_y-&Jj% z>r8}s_XVCed(Y*ID!*}m5w#Z7S=Kk5!JR$MR^@f_Ya_eO?I7j>ygp)SH;8?`1@Ie} zS8pKPZh4t|B8?r^eWl%N^$yNB*18HjW5{?RTpOw9KC1w(dam4fKCXJMH3s4O=inL! z*G6zPF%Y^z_}bcSTTkra>)TITr|0wXF=~`E{vN#i5_sEqeXW_#Y`u}0%RTkTV92kD z(Ryg{)^C90|HNFL)91O&-Iw}fAE%%Ba~OXl%#ktKe;>>HJ}2+H#eYejyo@@R`Y%3; zfkMO|;VSNz$?5g+%iu_|4j5Ni=>15UF`T?y>FIZbrzF&bpf=g zb}ovJoSD0yNq(1by2_uE{CZz+{&V}QqmPC3S5JSH=wkFHaX@bUobpUBoU3>GML+b_ z+%Ud5AXU=OoGgITK^SpFVW25e&1U}hY=__#E<~V0WJ)Kp# zbqBH^yMZ~MM^1zHnaAin?n|7YqP!cxoqwID&|hI z^Nk+l*F~oV>*b5Ur=B}A>#1=!@eB4Xg1mb6Bv&q%`h5rY7p^t+iCOsx_9uTg*k_ov zBfHPQ^K0#$qn_@``VN&_Cq2$y6yaoOYm9W50~cL z#}(fLzr5_E6F=vkT(ht2jHv9aiR0mwI(W63`A6o`u~8+_O8Br6KCFZf#bS3-&V7*E&-0#@ z+X8ZVdEypN4}4B=@VD%?WHjE$JeQZao;>-oD*w!%vwy72&RJ_fW@YaV?(*)JbMZ;v z-<5a2+z$HQ<)l;aa}wT8z}vB8aW3EPa{9)%@PCYVb!XlA;@iyuzNOE^F8CJy`*}UI z+|xVXUMhM9`F00NV;XHMOeOzOCr+j0PskK-@{_|z(@Vl;c4ze$QZWr<1 zeEcc3JC{BZQ^03D@Q|15`nEa4;HhezQR0uGngZF3DfBy<=c{>Mi*FuBhn3Lp4*G3l zpM%9w@xIBc;1gIlOzbw1Tp_uHcKjIefyTd^a{#)!D$wuV{?}n$M_Na6PKtcGM016^ zfjc{$s-e-9+;5#|EF#v7Y*+ku-O*#M%C~R&L)TLs%u5G$x`Fdk8Y5$g(N=8NUKQp{r~mo+o<1xtB>!RW zzK12oehtm|o5?%iAM981Cgh?LI-$>sq2D6-b#*}QGxR5(mE2c4jCCXJ(ANuiKQZdW z{-@4U5uJ?x$@^c^`6|eA#{V4e%RPFn4Y|mSiCnGFoDVA?_wcIqKYzzspYqOD?(ICU zYhj*&GdR!9@)_t?cL{3k{};5?eAs8B9)xeuG4eaY_h54>nagz{eADS}*!L@aKX%d& z{I*5dtU`1Bl>J?EZO)*$_K@NLB;lFxzm2cuNRmgdD zE>e@^`^V_(cKZ4leceu9 zAEU3^>Fbm9^(FdJ?yE2F?J04tn9o^fOIS}QmfgF2SGma_){?7P0H1j^v|he-|0vFC zLEj7Cir(-If3(fW?%9Q7oo7=IV)v?YY0`#&AfI9pdClpx)%Oc%zxZ4S8%eEXEK*Yv zb|!1C@7ihf%DS7M{>z$n-(NZsuDs}xqet#p5w2X?fv;6gU-F}#J37xi!@r*U$k7q^ ze3MvMzdyx z`mo&N!?FZeTwtl-9FTsY1J7I&s%R+%2J`*cynFP$-?0(*JjeLlyE>_jx*v@n=X{rI z>asAjvFD{7+uDIovxW7kHPqdRcWnF}2TsvR|BoCVNgrW7(&W|9ozf-J(SJ=G6Q>WI z2_T=did;#E^k{X{plBRFUu{_nb!EflJ0%8{yNS)5`HFlcpjpC~so+^KfLlGeB)VHa{O+-(2T5kb_u` zzi#DnwfGh|Hv^~SWd(3*uGzbluI2oRTF#%Shp!`o)A$x%-bwoKJB;0iJ~Z)gL#Y@4 zQE&HtLwQd87aJ5Z`xO_#KdB;*mlyf`vl#wqgMUvm-YOc0bah#=Vkp4 zuTGv%KQZnpiw&wXV>GhAx)I$Q%xxw%m*m8ZE2#VaDY>>(bBOwmuWnyY?kM=7Hu=@X z@auZ?SBl(G3f-x9Q#&~8+T?)Gg@40aziX_&)DCv4PP|W%!HF zoD)r!ePw&9v6Q*c-p7)y4<9<_@q9zM7qeh*#cv<>d3_Oh$Zpzymfx3f*8lNA!!xl* z*A(bGLu(+Rnj&y+0OzESbA!)+i{QT$IH!F6TjcYf;#TQWJzpN+zePU(>G!+fzX<(A z#D6m)=zHQqWUHQM_|5AYn?^>H{Y%_L13Cs+jE?bPDU{a*wx_yQl)4S#Uuc#bQreAX zFA&StUv?h-es#OYzaGtQgl59?@RUe;26`oyk=L1rc82HuR|@!61E2C9tI?0S>%k?a zZY$)EUnk#%@#Fmqj!z8!k!T~nZgBj`f$=kX&FBkn{MIpcJ<0oSbK*b5r+E_~g!hW7A~p5?97<0a{mdM0Vh)RRc9xTPMrUe?Z_Rh+&YZF3^DVkzl4SSW z%vruZ`#WHX`})k(m*?fr6UZQEf~TKjj<;-cqFab9b~vG>_ypeB4-L+U70XuLpSE(#Kmb$gcOR-XmuXoU_(B zkIKh0x86|l^w%0kIce-h!FmF-9?^6E8=a=ts4wra|LG^_|CIv$Yff`;KtKO;FJoL1 z7~>6}Mt!Caec#nf-)9B-J{9^92W+Q)vq$NlAhbialKdzjG~)RAZpiRAgyf*&23(Hqp0w4-* z&)-So$Cw{F!I(eH8}pR$Bae303C7x#H&#A=ZV&S(IW9bZk?m<@Q!#7I*Im~Qw7RSC ze6GxcA?R;5E)q^hkFglFA1+OZn7v>$K z&(K$o9Xirl`Sv)o?#FZvVvmyU||(*GNrO>A{VA^7{`PcX)vy^Qf{V2qRYC(sAv zPkZ!-z8~oOl;LNLnZ1m$F)+qS!;g;1>a*_rb8n#ULh#Qr`sKv_&~V@n`a@R^usWst zn4b-d*-gF+_}96<7rE|?4(Z()x#x$cus-ACW$tHH9%J+ss@x35!^sk)gXY+6~^Y+gZqnpufe;>f@5xyJTh&j!?@s7dmrd-_a3gWgL+-4WR z?Iv(zE#Ryka2qb%W*5M1c^0=X3OBwN#Et${cW^}>ZVNSURil}=uWr97fLlA?4Q|9L zi#2b&V{p4M7q{yJxTR*W4)VnUxZMbDW4Oa$Q(>Nr(}(U1>o#v+%;FXiZhS9@8~rPX z-vy0gjZPO3gCDH zIFgHeqz4?oB^(r_cZ*{;9PSJo91dPtKz9)T7#w)V;4mi_hm_yO;6S|A zc3S})=70mS(%<%g!xx1^ZFd|Jw|O|ICgi_ZAJq4eeoaVD-d?_0qjxs2bCz$X8zVK3 z2lDkx%y|ac{ACQD(z$R6@ToR?c#5`Gk=HYO_R*KBlTeB(x$qgstSytbhS!cxJlx7YM7M~%@=Drhk1sj3xiO=6w1+q z1@kh6dYW=iuiT8zyqg@_X8hfUz_*H;+70L&t#j!N{}8Z@#wTnXT->7d!bN%ds2w{0 z2fo{4=yfmc_5H$Ojw^r8i-Y|9py)M7{hq(|DbDLQe$AlV^9;u2)hh^BTc>LA{g)4W zxFTQd_aO%y;S8W*?6Cnx^7{vMr-AV^M{wQ?=SiDd+X>!!N7M1Hr#zT^+X%h0=cxG4 z%KTW|hjp!BE%Re=;QdeVl7D(ITyEA!4qPL9*)Ml}WJZX24zW+S``QIHT2X6*G~b{6 zZ`K^bp>%R~oxhgb^Lm4Aw{0~v0RLD+Y4jETPVHeWwb-vC`#C%S-a2PWbvo750Vk33 z#BI#u;K;MnSi9e{^UUZYNB8~sW#;^F$Qf$;jfd;f-$k~xca`-FV|OxZy|-lLVzA_b z?^Z5U7o40?XYP1`KfV{EAMHIoO}KSIPktLo-E$nCvSYO}&H{L{8h?N_Ju{YF8%)t& z^Q$_;Kb*_Gtb890UxH&=PZ&*it!#3(0)=}TEZE8LL7d^gh_|B`> z4R5+SwVZd!f3MyUsd-rI0uQQg#W|Sr*X~uL7<>W5O;^>)U8c@k@!CC*c7AM^F}!hjummOJ0#T~1AkcUKor zcXbDc&KzpPAJSf*kN*K09dXjBu1F1V{f*h9h`nmYXVP8wL3?Fs7k`p90qHt<|Y`gUcd3V zCG*>mXd*n^t%5$zwuw>2?CL8?Y^T`hhX+}+f$pE8&9Bi-rcMc)sdyrGhbJd>VZPJ1 z`jtIS%0}b+#gXe6u*HF~;N1Cs*v>29v)?;4if7u!@a_%F4}Hrv|CQyj-}^i^CLj+t z`10WUYQg!L(?=eATx<5si&me* zd=PxtuwW{qe#rL+O}%X%JVn40T-!Ff^%T~&-|qp2#2Fq8F<{U-ko_l|LRC(U>IC%6 z(rbzFue1BdRI@sQbuNdR@qIOBA13wVgL~YE`H=L&5aiLs9)qIO;b}u-Vu+Q@r|KdT zL%ca%!+hHBW`7QM*?7KpcAZ>w{H~9~F9SGOc)j!ZbK%t)n0Eq40-badum{GU)BqnX zVO+&9$Za|aJj;1!KKL!ro>_4FTky<*!{@OF1P5#9Hh+Jx+1uat3TO1Z-<-R@t!oc7 z_$4~CgE5lWihbCK*Qra{;nZ}EaMBNx?-Om|_jT3I_-K3wzyA{X!A`}KB~k5<(;V@< zM*GZa+5c9{{LKlQ{n3#rq=FG$C!VGsbhdi#hhtt5NN4sV{c|Lt68rtg{kZ_rI}9e)ozz(;r;-h;gk zV|x{^j<7Yh-oCh@m5iVFOtKq1e|WM_Uvq!Xut@sR0`on~$WJz(8qs_VgVw-s1RbL| zuh5*o$vR$U&VeI;&JSH_=iH0&#CN}^Ha!3S8c#m5>!)4N*sS?Zga#{^TX_Ex=GM&X z&IwV$rrIs)Pu%!sYNyPcFt5C;nEgAVA8pk3F#K8v{Y<=%jCefgt(ClZzT_(Rnbmy< zRKpG(3du)r^m?KfdTlrXy&fw-uSfIfbue7w)dzB3>-*udocOm3S%@JUiFcq+C;0D! zcF^W`~JBjzP z!Hw{2asp#)&f7amO<$k(jxwJy-i;xbSF4u#xq$4@XJQQfBLi`M|7LH0&^U9(^%>b3y`|9hi_HBB=4?6m?_lnkzj>N_ z<`7!q3$V|D`HO!MT7{{vZ)DzRXLX|d0d&+;qsULl-;hs}^(}OFB4>Kb=YW@#D_y|* ziCv*g{E)w&-L_qby&_ij_7m~`-|=0!ju-8I_FBINeuR@&t)^|K^G=t-3n_F7wfo$zRxb9(2un z7Uaj527CHQ{P@+A;K!Eta`g8$$lTdoun{R)04GM^Jy;^(z;C z%-?Te_E*4*;9=@vRQD%cZS)d6^b9$l7&-yoq_%uOG+xW^Ya;MtIrbXfq^;FUJ@6(z zeDYHj^1sS;`@ESwYhgl` zH%Eyl_#WU*e1$>L|NIKP37kG}ZWC`d%RiuB$%gXL!)dFUcl#`}*9~4bd)?se;9fU) z()82F{D%Ct!M$$!-Pfg)(yU3UZ|!T8Jm=Ta$B>I)-aUP;O#JVm&)x7K0~{@#;`o8Cp2;{O%WrPs3lo3Rhr z!k{kwB=;2uZG-Yh8C^Pz@$vC*7hYx1+~4!1{Q-LdI@IPvW*K?U;wRj~;HEv%E2vQ> zf0)5dIIZ$=It)H_VL!J`eo&?D?6d$}jFsnNX z!k@Q3F5VR{Yp%6dq|~4996gV(q>gQGL{(=Wo5!GcW%W>)k+m5$;meFlPdz4XfD}$pynAlxLMc@C@ zc~khys@IX;wg0Sq7M`!j_W3=~;|0IJp5|*w-h2r!j|U>#XZO(O<9?s-1YqnHKGyE8 z?4hrRP5|F4dGIMe;?)~PwvVDugXY?%#~c<+pXg{LIiie)Ihs!)w*~yjH-!xl(xb!M}0MeB|oC9NmZR_+c;h z)10T~$Ag9R(TVz(F4@vc|E2!?oa+8c>6ZI@>HqEif1>^O=eQ^P{{?IR-^$S~IdlC_ ztZVjQ|IK`F`EYmLV$Ux4Q2_o^wg1z4q0b|M{tL~oC(pV3BU(A`V?rxty6&UYS?SDL@tGf4JALzdjK1)ozlC}TR zugbel(V3vThMMz(lEes!AzsX_T0EUclSY=r`Cd;V&+^AJxj9QsJ!9})K_pHc2sA(o}+h(gQ&L*oV%K<(+B!E z1@|L~hhzsrF>g&>aTi(JXz1wrdz3TR?|K&ESrxIEp5@yEdtdap({!dm_P*$@+2B79 zy4*zWb6%(>Or1)De-%eiP6yH$umopyNDpw>%?fyl!>m z!f1-KQ#eB)ngpICxF&%`HOgU~RY9Dreeh=Ol6(__nRxnD z&hzd=t@1k6D*ruebAejrb-`NY+n8VJsST{nscuGfE1_VmGB_^s*6r5WeIf1OY-^S0 z(O%zet+Hr;cy@MO#FHuSuI9fSX3skCz6aMsR`&CCHavN^?*~}>za+07B!UerP!qCl z;VIOF+{RpbFxDRuzsbM*D6pu0!SZ7f{8$e^QV+f~HhKL+mM<-QujJh~p?E{Fq-q$n zW-VT9{s4LL0`4&n#;fAV#g{@q=`ws{zW={Ce_i06KYu@?Hs98tnDv7H1M_q2 zk{;$~=fvFk@ntPDKdkHBZRZEM>}`Hl_cA{&G%-1Tl=uE_OO66Kz3Jmb%k^*K&ezrW5N%0I=|D5T%tx)>M>>Gz$*x%%TuC#~@_`s1od z`U}w4==ZC7*B_rhvuFMOPd<%QuW%~*Lol6+eO|-ds?w4`oYBG zt+j)lgVn$j=Df1e|9<~#FTVNsd)&*ibSLKxrY^njwW&YzzxQ|MvaUZgMl7qnQ}P2n z7`-*3TJETiBd1~f;T2yGExQjNNPVt;j6NRwj_I?GIKOx>wdMaDS{A4O4aD7r`g-`< zue~<)ZExJ?)hBIM{5Z610e{EH`xI)Uv0l9RzSmY?`dIE*+q|)2=-EQ;iox;4OT4i% z@ZD$Ic=g!%xURnbYp;#|j5p5n!c*{p^8&5IkgF&(PVKqQ!392@gLHi!nxIp@B-)Ga zf+0Md{(KstlMD8zGaAf#9e#KHe#Q0PJt;b;VFUZGoek%~N8}fi+4E=i{yJNqUS;-V zUlqOKZx6R_7RWa*(ExqqBB`d-SsU&*mI9`r|4mlfV8rjhX5b%E?|uM*IYTkStgmCPkp`9MBOlb z#p$aKSyf-pUvmFz&%XsempRW!muL#f-07|E4L?IQ-WnJ@%Q8L>I7!F35kE72v-o8G9w~SM&Ztox9wP z{|fAnC@>cr)emx6ja&+cjeVe}oyWgd+sB|EddlG6hqf_a?{<}XdUrv9|GoA1vop1k zmCAqPpV@s*nL5QP_8+eL+H0YTZ@srNMgE_Che`G)&S&q6ClfOcDR$G^v1Bc!vGCFI z*T22`rtJB8G1ixL#+OG2+dvBf-9=`znLT+SlJ?A#+-laHt*vR3| zW38Mom1DakgB~1StZ8Nb1;IhSHGltsm46Ta$_)Nz+;Ob+Io0(xSDO7ZvaR;MBt4&h zq#^yK(@fsR)%S%*!hUUH_O84wjJdynzhm<&v#?LW{EBiPs%?7#JrgO8xH{iXd*33D z;TxlKrsyo|hBLi7;|Azu@*mzlY}HgXEB7S*L~bC_pu5V7IzLTbD@h)t>dwYz+Q^S> zrf~#MgQ`_Bdzlt=X*QB*J(PJ`u@tTs%xdD-|W@CNcP~?g;&z|vc|5i zxjI|2!3phYINE$~*a^3cbc*)G;2WKDIE%hwGl0|2!APD5&{rIsMvc||&f(7MxU+a9 zXM5|MFmK+xyhS79X^*S&Gmpy#Gv@lEp=F<8?x*tGA>LQ6XXpRZ7|Q#wZYCqfnHzP?$U?ed7j@xw6EnIy(^v;46*f*8ngC>y-`2Zch*!Rclu5CTXP?@OI8NM zz6`zu-s1Oz4X2rU_;JgrKW!MCQx6{-R77n@Q99O$tOf5nYN+U2z54i2I>x)Pr$gze zYD=Hw`;hvyYEcuLPwTEv{Cm72{&_2-u}{UKH*t83_pjo6>X&udy64x~o6O!ta~{NI zCvDrsf%lSeybIsc-uUNsk8xsiwzl-Xfy60%m#;3rGa2R#T;Mz5-q2m}7_y_ip~%n` z$=4-cp6(Ow~HtOpZ!QFmK>v}@8L zbk&v6Q~No811+%^Y2B9-=kB;9cqhS|v&f@~#$5b|FkTW`EgH%>z>={>;D;{b#pB#f zw*VUM^!KMTPnolOPA4B*%-n0gF?)>H?PhQGYW5iG93Sm9ZihDe20PzvlFST&R`e@< z(}w;_tp^64#lc%T&8%np_>Tgf)Ou)#4%N9k!clqHyNGd1z_E+9w9)Lh6kiE$(}!?+ z&YU+9O|8Ht=ELmol}?SxgPG@oS!dV?W`p|*>B3MavC7=oa}jgTK^uBC^-YZd-v#FC z5a*kvz6q>T$OkhorGrabUdn^{C18HdhxtWdZiBxcsp1Z2?GffYY@Io-bqc|q@_E+M zy9mF=?n(b%0QORz@8%34LvQ?h1N(C3EeJd3Fq<`zR>nj(>s;(0?5_y+R$xb0=fS?$ z(p#`^&WD|~5W%i}&awWXLa>`X>h61a|C8Z?Jzp5B7HSi_U%6>!16u*FX1RuYc~tUiO{0qg!r1%Xw-y zy5;UOxr^v^_RkJwuF5!@V;(YihsSq+$2tAqM+en~Ij_{;|2-1^-o)Q#fBH?l`!t_X zSv{-Yv_HK)W#TQ?m-TsHr#>XX9R$)7 zH$_-mA;y0i9=!#cF}Bu*5<8sqMtq3W9nh<+F0HkTNx+%n|JB|3&di&(PUm-R8QlC(f_`)6jxqYH{|DeZas)BH`+R5SZaj0Rwy6hzXF~7uR~(qXZGK_Ak+(?X#=7vgVTc=YajL+C+l z>^9lhgmB$D0U{d@m`W~ zHsUuXmIickmuGX$SuQ?I{|HQaS8W7~Y@Bd=1b9X|C406Qm`XA*nRR_&`W5iBf&2Ga z6Pkt`OTP;z*?|q@zAdb>g|an&$9oNWkG96IZ&uB&{~mBv^Iq_`;s1{_Vdzi$ade+u zJ{~$(UU(##YfIlo;o`Ru4#MXGC%oroaJjh$+CCDXYm7E=(EvVa7|psEYuqt&mcYd5 z{@aPO!BM}NwNJ)L9${aYS@M~{>umEa?CWXb?|8C2`rJ6q zVBnpV_e9)z_*|oixfeRC9!kuhZdhm1bIwhjv+|+%qreVc{h3dEfXOMw6+OoZXWGY) z_;83fG(TIcHisAhO`C38ES z&!f<0%h5IW&gUG11hQj!-t7Nr7;N@SZbA0Um`{N74U8vU2^_T{LgJfnM`K^uR6PM;p`oW-_RXXX{^^Rx81^R(`L25rxsfj(t3HeqiJJ+VQ- zKE1fEa_jlxE$I3e^zG=JI_$mlrEGq$XFcsgMzQ6qvH1_<1E*f^e%6!57e8wbkr(tT zHjKX&3&dz+_4hjoY=N(rbU#JGxy9bp1#rvZ6@C+L;!(xq!c98;JRi48aEldvz_>A% zU@&<3e``!=az$(hIuZNxYyhuI!7F0VU{ZVq&6kaa_c=dojA9RH9^uTY#{zAt?Q_mk zdL;0C1kdBVU&Z-F8>n{;!c0_*mdjb+=IhEn|~UIZVBGM9O2!+rA9uO%Thk=UG60PJ^iY!{+W25 zGaq!n@wkaP{~_=G8)C7zVomgH`-D(>|Kw1*Vu@zlim2T`Ncxy88Kl8-;gYkzG z%{+(S;>=+pS(Z5)=ac(5j|mtxW_u;)r)_9(q0>_pCC;lIx4Kt$oE!N?*H~v+9kkew zuOS!(>yNAObsECaz36~<@%#63-qgGJ{d+lY>RtT)y_`4oE`EOpKE|W{oToaVL0LcN ziVkeS8vJH!OFjl|1@jBWhp%)05YL6#_~&EU0}QQ#aE}M>nEa6jY;t2+Cg+j>2jlM( z4I*)S;vgcJjm-&tJs+!MtbK(H{vvI)bK7Bq#T=HuJH~v`zG?bld^v)entfIc{ zc~#B+dwORe_^ss3Kb?b=@v+eXT3=EAB+Q+TjggC^d+wM29^x7O`tzsxkRPl05l>p0 zg#&-5HaqxpPI?A;hDXu+GgzZ~xzxGh1!Q(7vYVVpACv3S6FvmJh%4D=m2MkV65T=G zYX@hX?BI-(9h~2^gB(?C3g>e|mo|82i!&tJ);u)BOAln8>mG$OUB!;YcUjNc=5StA9AClsIm1VAUM%+&0pk|zviAMm`MYDS zi@@39^i9<(lCy5)4s-pzm^}5;KLfuxPP(0T`@n4evfYm%bDjW8x{|_)P;MuJZ5+d}ZtyaSD6zCqRRdp8uAb$a^>9 z>mgt3!D&5nBwT(KGq!!*YH&$4pXZwRpf-|zFY~+~&(F_+&G<-z`$adSC)J>9XqF}yV>#eLQ*ECR*68@I430G`F zS15NL%xQ-QnEdPH1ml`DTJ(i%RCe9RUw6%GCqIhVq4PS{Lq^>?|H>8qT0$|gyBEiz zTNGdVx@YSz(6zvC?Mr+V=Uc80y}DzOvrPBME-v=|o~6HcIz&AIhr`dqO+LElOGRy_Y_ z$WvzR3|UKd9?U@>!aEAD9zns^igbx zliq309UK%r{j-N#$yIOj>yR!_FkW(qXLtXcS_Avtp4B2hA(B5QWzZE^{!XxzF~2?> z;wAmF@ObsXx$xj$JS+Vjgz3%C^bFG_g<#@dvJnMf(!OKCHP?qLJ|yz&Z-LFilkYDJ zw~9An$3;NU7X9bQ-ab@^9vu_^NX2 zAU%^jnKhlO&9i=b25(iF7^OJ6)u)5b!$FT-Zfb_5PvEgKc;s!?f; znMY6$$vw{Dp@Jv!Y%MOfc<^lB)~eYaOdql^*K8AXxPqx`RR3&RV@#O3mF z6ZeDxoi7K6W*fbKR#EZT9_E&8!4x|zC+#-`%v`P@Su<9Uv* zL;kEBFVxv(=oiUxC30w#OF+NOGVyO#ztm&f6a$xMWZJXq(g_pj>pi~@$@9To{`p>m zCDW&8Y({Ja<2NH;YrLA*hjwaWXy5Pn= z?lsXw`1b9|mNLoaI>%AGMcl!;Bgy85nqB>!$#H(yx<{<6pR1V5ldq3P-K9o8*Ht?o zHhq{nA=<30phmjZNrT%^{H^riHGYm4dt~jF$?*d3@JYv8o5(B0TV}fQ3Esb#bB2}k zEWgOaVH?IDH~LAw5VcXjcV@JOagBaLzsL^V@;hJ!_C{=`?t>r(GrB_c!C}^MoACp7 zmw0~(MECvsYcy->)jc84YfnDW^66Bm(scVNVjTjcFsqw z&75<{*i1wBe$kEQT+HFoUCKQNpY0qL{SnX9hw)E+Kj|gikt_cKUiw0SU*vy|Gy7e# z{3f}X4u94tPaNmt=FS1xi6QuH%7HVirA-Ksn1 zA9|PbPH$YtyU3mDxzyK4ttqdrijE>4xt)7Zoa0?jYwo2-n)Y?I5~uE6Kz>U0!?%}{ z%roMYD)A+?8u~t;JeF#C_1^r~i@me98j4M>U3y^_blB<7bH0Abr*F)}U=yP|Kh63C zb6jQ4Hohntj5XBfB>F70zx#lx7tQ()|2hDikpuDr>vW&uBk<~O=lp2fH;GBt6bt@s zx_@}5Vo2)P641-$QTDvfox`R+(DM;B?pchh+NF_B)3aed+h^J{FSY@+lj0?)F03193^jT&u3cn=Z8Js^?B?4 zqaJU)ohLu8!9O5B;I96zrN7Pe9rtR?wiP<(eb?IDdhi)}WB$?~Q}|o>T_dl7`$?!1 zMCU~ZlViJ#9NS=WY?qN^8%&PvGIDH#$+2BVjxCN{#DS-p92<7;3i4 z#WWrby!$^!<-zl$4^L2D$C>yw3y*5?R4Y?e4qX13Y`p5j8}$;1uBPO5pkpExyv->Lgk;8pZGdlHGM9y_OpJ&E|Qx`$q|NipwhPvU1e zBS*Csx<3V($=Q>54R^d(^|mK*wznry?J|23=VbRJeuVbQ1=&4`LHhmT&wL&V#HP`N`+c^uz6zKRuoI1KYRnTiBTR8h?)DUr68Q?}t8M_&>Y3>@f{lAiDKV{FSn)y{OS$Q4Nrg-b2 zOy9l@4e;nc1^PZ|{z0BC{DU%MbmyO@z!<^#tuXquJAcZ4W_VP2exF8vjP=Z;w* zuRo5VGecE6U%WE<34F54rau4J;HfJgv;Pk-b6({R#_w7Cq4%q+luHer|v zxqN_m#3S>FM>6&Gem$)C)iE`YS4QXIqsZ@y@&29st(a{T_HTYUIpuj?oi}Tpb5+ap zRERb1<7HO__s);$0S3Ke;Jy74;*%BIS?~S2@(=R!77$}pf9&+=D)QS&`c>`Lb!(2a z&V8NSIBKL~)A3)Fr;p(GEia3hyDkK;m62+E z&FWhRM(go4tATec@V*4B^2uzQ#nisVem;}<1bL#5`bcpmr&onsHEADF)0k+@t;A8g z%G0yS5n4O=5;dXr_xP@v=>+mIfjNosxBQXbWNMb?T;mZh_hsJWOSHbtywk>^O`7k? z2WO_k)Iu)M+_%m&=f|f;jWpxljx4W3mhJymmW>Yi+(30|+?8IC5_KyPqcrTrJsM0r%=hv@36;!G^p#JZ8=d?@-aja{v} zb4;|*+JWY=uUz+bVL zcs@a&mQLH5i`W{?xkvlUdeEcWbp8qNoQOBN!LoBi^xu70l;5rH1(pZ;2+Ma*6&8HY zt$l>$Gkt{RxOB~_&?RzibWI;&nbk*FZa7uCus>!|A7Qz$kFZ>Is<7-lH(J+6Si*gT zqDn?ZcI9JFTHB2J9z3;x3*|dXEom^TszGjI(M48qi9Iy#)LC> z$S0<|ljl!&_Z1EAtmgZbi)Ogz+&RPD7e2dlW89g0=%&*2;TucSHS=e>=^IMZXWu&0 zofjV7`FzZodw5h)Iz6W}J$%tD_t5Op^p&^Ha%;oqbjJ75ZboT3U0Ia=$oy;E!wseB za~560Z^Ju7{FWY3ls;U``-^6~ho;c}*4gxVc4zhP=yO<6`p{&?nSZUDp2)bjUh7uU zXWegUH=#6rh`n1MnSY&oc)a?&&h)w9H~hxFuES&0=k@NPQR?%0)91?9>9aq5R;tfA zZhD0JoMZaj_-on?qt7z+`7!tK|3}>0fLB!=`~Umo!i*`)ww9p^``1vWYt-7j5^z>^9|Mcm4JCnb$-RF^Wf`z_bPRURp(a& z?>DHU=|W zem(I1)2j39R-OJ=`Ry2WKB+pt5$M{ZI=^AnS?~wye3d$Psm^Z(%pI!pn^v8rzvsIu z>TFP*d4c!0sm?sB&YD;F?J#w2jWK5#@s(?q`2t;AVz6g;FJjCfQ>6{mT~FN)0{6vN zt}XNh%nHiuoidWGf|sdhBRFb3=B$$V%I{O={W8kyojN7A{+B589Jq@4w$8z|jxu_8 zaHSpr*M4x_DH;-NT&qPJ?+z}{Vd_~4uBXA}OR#Yji8kIHT%i{z^CY;I@oh z!@Gm);307B0au=AaBwXaZN0c^>ZxZDxORby^?}u{g`$mj2UqFyl-U8U1$^rpV&j@G zdU$tm6&wUt6}aY#h9P#lazq>NPP_bd)RP6SZQ!bNaLp2Jy|_|qDYF$^Gx*j>v~f)l zJ-j=(Jii0i7H~}#4T(0cNurH+2UqAf)RO_O2i0GRcDvF<8}ClL4n9Yj3UDR!ZJmQ_ zwCL%@RrBBA+6b;uqG70wYlLXy-N99QfO?X^Ri^$LYU4^2ZM-|U3ZA7*F}ULRwq&T? zF0bg}-D#J9Ke*O`t2^3kIU8-Z-$|V6d(qJ2;5`!!oxOMuK0}=+qs^|>#I<%to1H5? zW=9)kn1`%>4D+qt9UA=mC|?8(jnU>?>>Zp~<}r`IL3!ULHa*8EuXl%@gHJ(EA@sZ& zZNA+QZJy5an5Pa?rsNWv5A}SjcZU!DUr~Q8^epz6C!dQp|GCIxzO!F6JM=uQw)E0- z@JY%qgq|m(&G+_1o9{00m}hp0{!49oc8Gr7UH<$Mdgen1nWN@t%4Gyj%(bkL0 z{}}Zw1J@*QkvG`t<3iEKyMrrrCuK6gmB+WfVK%PCqK9_}m*-J%rGaaaXc%Unk0I9aru7+u0(KUh=$8-Txp_> zcL!JMPpKyvTyg5J%WPbuMH}x9F3&c~c)>M_Z%Zz-+ciS;@b0uL^b>G(8)jFMXmD^P zind-{2Y*aGao{>j4ozYgt^V?gHr^dvHCrk39{b%6B-x?!rTw%)S-NBW*1zc_5 zY7`A4ZCr1PHr^dvp3T(r2DrlDDj8|F>zHWc-N6-lh%$}fdX;bM99#{erx(}32f_6w zxDJbk%WYisqK$V4SIrNprxsjqfXjEejq5ql#=C>7^aqqV2Cn^lTXMPGuBSy0?@qf4 z9st*?;CfOtIJowRwq9KR3hLPft_JnjCv03hL>uo8uGIS}a~NDzeCzv!jcc3e;oZUI zxer|R;Myu0K4G_Oi)iEBX;)|?^*ji!TJ@KMt3tH(;yQRQWu61qM!q#h*|^F?5AP1H znhoIE53XX-Fv`ZYPPFmv;3_Sro;$(ywEAn5-LBQ5jd!PA1!a_Z5?m|!w$8y-Bzk&r z`PYMM54e_zhAV7bg`$mj2Ult-_2hwTm-_1p8`omd#=C>dQ$m>?;9A7DC0E$(S}1yW zciI)Y2V7O)S|A!6T=PX+FRp`kQ_oy*ZBu_;Y2(TfZM-|UYVM-UR&ZtUt?x=3*DTS) zyMwEA9k{lDYldjJ(r(uj(Z;*eu7dAV&tz~tsQz+rO%iRrxcqA=Qvt3FzBR70aixhK z-W^=2YrwS;T*;#0DjU~m(Z;)j%X267i~<+&1G7r5vfDL6wDIn=EA*d~DF#;(-_|*} z5=Bohu7lqL*E(>;iH6ZOF0W|g-N99}ntHlf``oGi8g1h`8wG8=JGe@}OPST+dM^rk zM%(Q=Lm9n0?J8IWu9e_A3B1n1)k%51JGlJcp`JEy6{)|jwsD0iuXhJm>PpHi16L#8 z`mVNdy(xNlcW`;W4X#3Py&)Q|w%c_~wDIoX3f)0HuYxO2{pH|l5N*A<4i-^nF}M!% zE&dv7ZBQ?Icz1Bs+zzfq;Hni3*Vwq86K%XZxJp-0&wg+%RDWG#x9e%q#=Fz5g5{K1 z0Inzbw$8z|NA&dK@-G9|d~od&4cFSZc8E6K9bBomQBM`P=BmH0wQ+3|ZM-|UJhxIN z2V7hEw&Ys7U0XyC?@qfyh2Y8p*Mp+L!BrvJdT||GLOmP7HB0@KY~v~uZM-|UY6>Vb z16;*?>r1wAtrI=GJGe^o!8HY3cZ!B&yIreA8}ClL3i7CDCAcQ5zZ_geqOBK~|C^MV z1g>R#OWd8+UxlKFcL!JMH^7wvt~}9@V&hsY+IV+xdA?3Pi@=qp{z|diwNSM2?zAiP zHOeG|YXRTZIk@JFo?cuBzY4C=;F>EMQf*v0qK$V4SIt+bCktGo)L*GKu34gucL!JL zBFc;a*9_5+YPV|&_2`{?@CKZwzqM829NXvx6e zlBoSF#nE|ppMKxmT9V88v9q(y(0jAZraS%S31Gp6z&e4o0bA)e+kp85dlT3jz?N}7 z0$BBzfHeR+3@p!Y{x2{?u;+m72eydw+`#g`2y73qUBDLj&11moz5s0Tjb>=kjb_ta zzxfAXDS|Bowg6aKw)qmUk_Eu#0-FykIomu0Eckg~Il!`jjm|b}f%ycR1#AYeQJfzK zR{c3(lYvbEHX_@62ACn(Bw!i9IODq)SpF@*(tsrcOUyR+0IQo1Y!tB3z~aac0xU(a z5x|mwd9%$LU?n#LO9U1NtlMw?6j*Q`uSf}4C16Fqrr%r%%qQ4>V9x=2!*AXWtU3qS)4-kt zcFb?y3d|5}53pUpUiF*#!1A+!RRP-ptif+C23F?>whh=;V2AzYmw}}SwguRO!0P?x z7lD=dfNca;0j$<<-U5u+&*{N3V8y_m^P6*l`2<@B>`q|&Ig1CZ`m?}R0$UC2X}|dy zV1{5tz?K1f(r?ZLmj4-Gg~0NF?eUvafYp5(*dkzyf$icf60j7(76MxUY=_^R0IXyd zu=&8|0;}?y>A-@Y0+t0V2iP{wKLYa!HVfDcU|ap>Rluqzxf_8pI|2$gJ*!P_M86zRy`G17+52)BER_-Fhj6oz+MGb=r`Me zao(!xQSQ)Sx)KZ|(x-6Kp=PxxhyI&F#RdCj!d>mIZ8--~1UcL$DdZW&s=FH-8K)e*&;6z$ODr z@|#30MZOM8Ek%U@3wn14{!I=Qr;IR+0g1G_X;?yyW%*790m`1h6Dv-NZKl z^9dFQED_jQpZR@Y)nkEqfpzDgb2y&~%n*z-kD>Q~o$;C90hXT*>?E)=z)o^MGO)Td zV4c9)fOV382Uv<=VPK8G+Q^>)tYi$ZH-NnfEbKGC4lI}o>=>|Dfi?QfMZkQ5H2^yd z>`kBfC1BMlz-ocj1ABw`31Eg`&jH&H>=^MO!19xUJq_$hV6PGj4vaHC(}TN!?E%)n zeQ3al>qq{8RRKHfGc$peTmx(yu&u!A$+H72cr~yGfo%a+>oX?!CGGN8P_WR7Szzo6e1hx*?)5Q4#%fAZPYG5mYJ<0w&u(~UO6#-iYY>&_U1h5pr z@_-cr+vPKd11q@#*kWLdfbAe37ck<5(L=x%0ITBs0WhCnbAinVwvF=zz^Xq1EC*N? zu&tae=z>1MW&xW4Y>UtA0+vtCq~K&=Q-D3_GtU648wqR@unb@o{}!-1&Z7tS0NVv@zR&zQuoS_nfb9S_*Ju6&SV;n~ZNRny z%kh~H0}I9j+XC!CU|Bx%L0~??HUg^vHp^$;53D*4SQ)TlU^9H?24I}EL;nH06WA2u z!-3_;0$T}eHL%G(a~-g{7+^)fmI0eYd_S-h!3u%p0m~pi1TfB5Fb@J-3@puO-T^G= z1-1~_0$|CUj{xQqY(B8Lz(x~~3#^)Rfx#?bIlxBw%x?fQ1e*nH2CxyFZv~d`0hR%5 z3a~_bk@_FXMM&gA^Zjh&Uyk8_j5e*Q{?i}cF5&RzfKJd_>S2Y(cIo;t!4@Rdi=N4}?g zU*P@+>Ubae-8v#^-}T}9&KU)}Eu#OI(BJ30u($7dXJ4F8W57KdJJkby_kr6Q1FScb zk^LJC`ie2^j%<_+bA!YMxHoN z#d`7wNLHEKt$O}3f?TIrB?pKPJkX3@E7kb{^kCNV)YFRbGjwL4#2{C&9UFJM@ZlSX z#1|dUc&H|a=9+@8<{WPq=c2)PX&-!UJ%1LyoSZK3nLYT>u~~O`EPNJi;J10ydyZu( zym>A{#$Eo*n=JnHo}UQf)5+pIcg`n`+zcbSVH5eaHhr+^{&*w4Vjh2YlNa~jqB)mE!^mwRZe2NH6hCX{ zK}g$YePzotW@-$JzkcpkZlMmtASW6!8D2y#HFD`i^3j#2 zP@d1S1H#Bq_i!tZlgYV$9&9l5O?VRLo?`pa#re*G=u+-B!xKT*rN%z*3Y#wJp3%_d zwol)yd<-Y`ZH=st`VG#c;jf*6~^fn z&X+t|SN@3gJ@dn(oVU~ORmk-d$hC43^z_YQhd21Ko`pA7AAQu_r;l>t2IfWoJ_->l z9N9;InHteY(4jucrjPvnOaS&zbkcmrq4nG4_HQ@y+q`dhj_R!2e8!~v+vBvs`t5(o`=s9@ z>O4Z7lROC(MG1)&w|jX7c3K)<=VBM>{d?ilBZ zI@)-botNvyyL?*?rx<(NjA50nYaV;{IA>6m?{oq&!Li1+*T;Ec8yY`IUKN0r*6ym; zW2377k>!ak`W$};_*=Ry4L#}Rb4(?-BYoZwXT(-yeQ1wm59bLImXEW>a=c_5JrcC? zL?`T?kIcBT(1OgWk86zRKI8g!_`iZ@InOel+jx@Q^SBRs0?k{a$oa##X6|m}{#Mz# zx(CC`6@wgppIF5nd)I59=MJFTK1v$dbDld?1Wn8AGo`BgdCsrozKc!n?b;ti#+3If zw2ZM+GH$!_-=Q5CZdPesssDZXY~uBH2=U*__ia(i_%4y0ek8*vTe znahq-&v;LKMTg;OAZg9Mc|-ACqqFe`nv+%(%q;$ioo7w4?8Cs@fevp+x2vssl&e&^ zQPu8G&~D{*5T17Qh3f8@Pupc9WO0W;bk}~JQMrV%&`w*DJx1paY?2Pzn`jJaNc^DU z{#&5`5|7dFHtlWjBvy1ALpuwR&+9xM#_%PbpWFL`N2)xDoz-1-p8p{8P{=!!F?`AH z@6x}*BO0`xv*-YiMF%)k=YGb4a0{pYewx3-{9SAqonGiFGz@D_i7}!ZVm{b#e~2<; z(aXi;fz3Wx_DC)IBZYC(q`3?|AwK82cqyxOsq~%CFe)_v=zINLMg3u9-{J+l%vk51 zH?{k&_T95vf5-D%p5O31$MfGj7LT#nC8N_F86`hVPp$%2KCScP(DhML?|l*EpLzIC zJhqJZyCfs3C!Kow=j+q=_c3=z-uLqMtMHRCH(Ga2)K9kWcwjyZF=hlSz}FsPUX-2H z6pJn1{%_X#VS7G}t^79ggluuG=|aq*vbR0)9<5b+a)Pul&Xk`fnlt(@{}cP4zsHih zJ%%%=F5ac1$UCZe*ulFLyqb?)JfSq|7XJ9j7XB|-b9c#R%Ps_O3wWbP+IZdk`;mBm zF%aII>nqQ}%Ra<_c!$||{~f%|wD&^s{_x}Cy~4&j@*>;&oq_Py571urX9jFb@w(_`gSvpPU=4{CBb^!;Tym zvPTwn#!r;;5!^A;%17YV^K;r6w(VFmj2t&3$KGMK9BW;Ou9_Ap$M3&0!1w|0IdTl% z{{1>ecN%nEQ<;NLq2yoicWFPoe;WvI{Q!7#&c$oB`yspCODDJ(AKtTR%1iR^efTWc(uH<=Z5uk4^H%tfm3w5L-QID7w|79i>pvdeQ`tA! z?Tx?4_AVU=Z~Xx6EgYo1f3e%!ku<2j7_hxJemuOVvcF@u_Z9FCqAv!-JANR%IaAK< z-_?V(_XE4Vzr4uy4*7U^Pi6nuZtp`E+1?Xp`sxi!p6dr_Z`mO2P06(M)^{(my?^+4 zcu!>$8zX&{dy(zkI}qNSspt0ZmOw2HKw?eRN6d+P^j?_RsT>o2msfB$%RPi5!Z?Ol42?X4RKZ_e~{ z`}f!&?fs+O-WxBnz1u$?-c#9|?Dmeo$o7^GgtvZx_J#*(ZPby1L4h?ac=*f8Kk|h#jp;%`>8*GcaZhifb;&ukBj%}Pg(Qe-ivJS(1GyQ z571ukT+43nXHTBW{)^4$%@^6;x7q7ES8rSxUdw(S8B#>KHG@iR2`{(hqTghd7j{oCyj_sdI7^yYch#vo3a3wkR@xxhu6l?GFQdk$@-!<$9hsvTdmD?(XJ+5@_Dlf#3TZPYZJ$~iTEPZR|>ec!z z{aW^{N^Yq9_5Z?8{7%Ykg^#08ZmTV{Q+tfn_(FtFd%xQ6NMr3;cu(Q2bxFC540AtejRFX*4Psm2i?Ike2puu z99a+JXFNde_ydYp$Y$N!gs(dsj>t7h`DXU8o5P;WX3A{fZoZAQ^F`X(ZNzr6SDf2S zJ8d6VEdDk7em=LY>(0~GuSB*LpStii(^mO0<_qR1#s_-kEsw|_T^@5Acx)hXyd>;toJv>^B!*;P<~$9 z7i&yh%ARbHI{W6%`JClfdzCg@G8PA3{08%p(_oy>{3_pD@e%90p&IP^W9n$B# z_*jEILiS#2Z!%7A+G6AeIZGGfT;22J<;ymrDi^Q0wJYD7{Aa~!xVUw8M)dRlW5GGi%MceO8YguV{Z*U27F=Ms3Ky}BlRnUV4w zr9RF(SDqiGjz;!SQ}EMS@(eEJa+k09Abpx1(Wf4#PqmJ2mOL-+mFIiu%g|!c3l4m& zXQ^lDXkXxLSwiKqG+*F2F^TC{7=erwPhf)NTm8tMk7$f+`&jOxh*6$HwHv;;_b#~i ze{t9I$aDC!BmP|e?1;Zm{ye1d{@>(warv{2`x$SejrY<<@n>r!f53G<{^;9&{9&K` zhRV@;n;7;K-!K^N{8SzH{Xgy*2SH zb>5bYT;{}AF3<1@?DQSz*D3%?5EEV;ZGevLQ}zfPTu7`x#6IQ;t20Q_pL`bMCA*Ea(l-Na)J z!l&%Q{(LIFI6l?K_8Y(OsXq3i`ScRGxCR@;k45qcd>@BT^9SNn@?!3z_Fbev0^i5slV>14Rec3{`f8x#jlub}{tNy2boa&a zsVwGPc`A#!XnC4;9zIe4`#OCBLB6D8~bZleYfv#W9oOnBO;e{sMfs#jjN%j;Y z_j%$vTs>CEytsrpF^V#ZYdo~3_*gl%Xfb7PW{-R}-;a5~7bv{J*ypFr^~(8G%z9=W z_iwE9Wa{kNY~U@>vlD*H?kmUcZDvotb%(e2J}K(4_`SoMIhXSN`Mv&M@H=}De#^c~ zj+9a839s~LDxORD`|!P(waz-<0ol0Xdj@=Oi;t^lW4#kce3+XTo@Zg*^hS%F?>|1Lvuh-I*7qAAi#(WJiy@S~&_pmqJqbI>7JvrDK%pKnm zYcOkkk43&*TURz}^XOXwZE2qi9AC|P;R4oP=?^=1!uI2fyY}K9osms>^kboMpsmo8 z*}9T(j9x4yzV}n=k3xT@8{^c5e6*u)Ec<( zABFo!7ZLZ1-0tCCE8T}6|4f*5L}WiI#xfpVD?7Y}^0tnYO!B=|Ua}d#TlX#Oj=|4E zjMgsbJZKotgsAIM=xsr6o58Pp4VssEGQ-R8v8<*|{2r_Jto9w4&3FlFyiiu_QOS$s zMB}EB?*xBLV{@7BKpW%!h~|O2{Kv99Lpon#4KxoOF(DzLLUCCe@k_+T_zoB`#sS3# z#wGBcU>wk0Bf(|<%zQI$hU$Guf5Si9FC|}1bf32GLRKE**~#-LPb+w(4_|ii(%wkC ztYc@yM&ON&z`KF=E#;Bk(4Cxp{Sx9Q$Mj82*W-els2m7{z-?Tt@} zuaG{JAEq5YOta&MX~z%K?D%0ym^ZY3l^>{;_I{Uktm63&&q|(e^L&fv4xS>O+j&;- zEa$QM9NDq%n1(jVn&v~rk1B4I#P_)wtdVcB^j~~u8Zl>0#ObvotF1-!^PR-B7a0e} zj-(FaN_WObRk-VE+7kQB1O!5%hr!Ugr$rv8a+gWEzIDhj{YDs2g`9pfJ! zwlHSe&<6>~&x9D}#VlgPxz{D{Zt_mwP2TC@2JwKLi<;&Od^>?NVvN~F&n2Bv#OHM~ zCWFNLg^2fSBF<6vQ8af8$shCOzo07_l1JD9(3i87{k zA}@w@&(RIs$CC(sLw5guA@jFW2j}s6@T$K4xI2-b4sXK56Eo%o-p;x?aEkf;j%h~V z+n@0SzT@zu=mu;m&(O{$#_Pnp?>=^O!jOuaiIepI$e6GMogsDCbF5>}VWwX=2ob@My-?Y9o^~SrghOAtz7U zchkHdM)u<1e_}Re=&#j2%FLz={q?jj^P9-H!9PnL>kZ4ldfYmXc6qP=AA7nb$D7%N z%!QD-Fmq8Xvh^bNVk`b-^gv}d=hV76r`CEB&suofk+TlujQ-di#LpT+4qI|^GKU~%v*{n# zFJ5jWSaRmtiSo<$%9%aBr%2A6Iyk3k&zrNb>8Q`f7dx>%&O`xf?riJ7erH_MvRlX7nw(etIb~aR~c88u=(iPF~<08~7>afN46PCV7+W zNe+7C4S(1s5&cgOWNu^|57%VNH&n8!DQnG z$p-yBkZfEUDI4r*v`$7Yz}ZJGuv4^G(&9b8TyP#>YV(wH<>CqMjbXpUs)O^k2ej9t zx-48?$;4b_;-KItr2s5t25X4 z%7pI8bnjcW^Y?!bzODWjGSSIh+UMvFWa4gQ!aeVG9C|)V>OEiBY@L}!9?CqK?7JQK zE;;st8L}C4*B19dm-#cT^~(xDCVT(y1vZy9AH|2{{zIkNh~AauRy$ZCIm7U0~| zM@fD4S@YALwc#Rs3(T?TG~%Zne>?r(ieBN2hJBwhW4nzzkI*#(`WvLz+AO`M82(;= zgFBzD|MTE_Ew7`GUNgf*tiPZ3uND42>t99?}uOP z(QDTEa~F^5YeT=W=INu?BGI0M*YAO5bhPs-S=V3CZO*p z(x%i5?iWnp?hVdB6(AoP+oG!#eUM_59LSu>-IdyREbDs!jYOL~yobpxN5nP}; z;!6%xU1zNF=zVD4dJ5!|aq8*2kHH>fgs%P}{Im45?p4tFnuW$%?S;lm=H0V33w>*E zijZ|z-mUWo)_Al)%A1QCP))#)=Vd6`#e4e{MUeI~$t7lcVa*pyi@Ch~JD|Hrf z_qW|M6?3h*Lt{|*+jSo-c7)ap!Y8=q7QO3VUwzPfA6eA(#9RBSxl6^{c?*0Aj$*ux zHq4RAwLS`+I@)JmDPMubgKP_@Pxl>`Tw7_`({-7ZzkRuvC!*yA(E=~R5j=45--nDw z>Lc%`!5?Ql6E&5y|Exi^&WM_dZ;buoyxGR8QusAyJnNTe<5zzAXiU1+GRA4?%O$U^ zf5gjooUhrp^tO9nUm9Eej}1fXAJJOpTa=Bao>*jJ$z4&~RHv7Bx18`jAItedd~556 zKK}^!x^)(T%Q~w&$uO7KpWUjlqqF?T#x$Lm)EN%_j|`h%VeeahiTqC+=2H0wMz9uu zZ|X<+10waL+LR7I3!$+P8k6Dm1JD;)raw=Y!&CJ|DR=wnezCpiUY#xRv33&;I z0v{c1ZQ!h`%7i8XgXfti-rqWt$CXp{Nxsu3KX>}X?T-o8S+CJO@)$%1gwV0sj8FBA z<^p1I_8Q!SqILKC2EG*Cqsct3*pW2)Nq&VYpRr13*{kTY6!=(mld&p98`B>01$3q* zoQ5ukH}bEofj?EZFeX`l4)ptCeiwXc0{5+;-}K!d)qe2hAPdEk1!Oe`S-`G;#v5-` zs&Aw3@@^}GKNfAwXA^+Urp!_!x}k8GvCW023I9<0%vT!w>dE|FIMp~>$oXaJUUd_7 z3;%50_u}B+2Y%sk+bvyF^=V@jddw<&$lF^spt3F<(5yTK(v6ZI?&@>SvpMH4=wtEO z<+1HM#2+2Sxd{3jdQNLzF60a=ZA8Ajjy|%#za2ST!LyvF3HfWGzJfJNy2P`M(4jhR zHH-?@7WQ3tPQQiIkfCIarRdK2$dBTG9>W$UHs)v*IP2>+Jfbyw|2kzaTxgwPZ2u$F zVciW{Xs>sE#~t66o-Aa1JF*z5pAwLXKKg<2SzMiTdJi(?o#`{{ql{87%`+sd^fprh+rz%Td>N_^chj2k- zQ)gJ+yd!rxeCU7w_;GwRk>_ptj7Qq!j7Rh@_W>gdpI|(uGFDx=Ja;_dw;4e0)UU3b zgdBO5PFauK>I_a5I%>nCC6BoEy7D6VlFTF`GwKiI)}qCg+i!Efk>q0_S&fu~Pe;hX zLHN?6kFHevd++xQ&Ojf{VvI0PrC*`(9$n$Rp1mFPPBHgchd5iA{&04n7CWL8Tkqbh zeJhCVD#}Oq==UpVyVvloUD8#&S?l#*)5mr2OZf>xvvls!$Q*mMj}+pZ>&Fh&ypl#9 zm*5QPd*9lfd^a}QSo@#UBi(MxjGbpe_1CbLti|R?<^Qsgz7@5Gw@7r9kM#2%ZPB5z zFIz@qw~6!X!aL>x?#6)TdH9xcuuGT|ib|kacvW8dMdkk-QNBLO*q4JHq_W{rRgb8w z>@AhoJg5Joo&U8y(cguvZPli6{O$7053OnB1gQdl4Yaa{wc=L#y~>E`q4z4v3;(Yp z@JknI{?5S$>rbzBUYGK_Bg%U@YulgR{`7G^db(&SXAUo*ZB}2g?!M)G{e+G{lA9{%w4n*Y&Rl9NN+Ctq%Srt6s4ZrB3Ee`HWa=;iL5IZspq(e0QAhQ}F36dFP&E z@;`nO9UrE=a-+0h|Lhp%)tblRH?luXz5va;JMd|Da#ywfPKWo8j)aD?k^?1CT{A++ zg6`o9GdC8*djkdBxu`mnONaIQ)FpiTH@;1!uM7At--n+q(Z99;c?!&(+8C z68g@^*4#_Xt=ba>ElaR_w7)Hy72n62Yibj71pZDl8u$;PH4R!zET8dc=B%jQ(>~97 z7yg76f^!tS7|nb^8+u|0$fcFX9r1b2os4IQ_5ol+*vS>Hn`g z?Z~13)rQ=Dz7egr#8=tc8zOl6%YOWP34QxfQt$f96YV*go$|BS#~9>}V2%B_#u@(M zuaNs8L@pM!+mHu2i&`ro$nHD+P*2; z5=#!~zIpYt`_Jv~fMtL5`irdo&hcbkXn$WeKz|?joYUVq_?G@J`umyr=k~X)XVJOT z$-1zouhlnip;K+1*?udlZ*pw=^IErWa(tQf5j=3)KVeK?`=fa-x_tqSgi9~N&ZLSMdUB(h(z?)8Ld?!WfLH7M>gEt$Pm#)RrA zvF?>luPmlrtbz8XK0d87o7@tfcq5?oHhFKX@#L;OwePEWb3ggh^q%fzY@t)M$Hx7T z4`q`(E^N&^u70-d6VV?3C^5!fTf<>*>pY{=Grv; zmuTSqLTMoG=V<)e6A`NLp53BrTRLSF16GzO|jqTPM&#L(zZ5>3l0e*sJcq99hZ*sM#toJ?4l|lI7xx3_bA38cE+L#f7 zZ_*iKjHm|mTxTI=w03dj_m}V@mGkDQr$$?M<_@^2O2-> z)yb|tn%7Ss6HjLI5PK>LU&wZJQMS?b>nQvj;?ExVDgW5Fu<26cpMONTA$n~CM<4ds zEcV}_B;=X6B;{!kZ&hCFiRKYLvxNCIltlZHSFP)?`#UF6cW{JZ`tVKtnYClxM{zU$ z6%KdZ`#ZHC-=O>g?%bpQ-S*x$MEbX{KgzY==gL;b4)Wrg(Vl;lXvAKxqP@ST-5b!u zw{eaH+cmS%h+36Kj<+gw-s7wnVz9}iGw(HG8t(nz-urjr6S{3^Y{eM&Be&h7;Hzz`)daGP9mBk)_#s>7Y=4i|Ci1Jy#z%aT zF=E*;)N_5ma?Q}{%A)1}bL8%^e)h;b%OBgj-qw0SIKk6E$> z4_n~jdHVvri`{DVMHl;_k$q9k++pcmbgA;vUQA#7Y~BF+)YX+%U-+!Pcmo|4IsO%= zvy^`Lf!h!0K53-zvpCOfeR`LZI)#OOLoO_n( zbFEb*tFE1TD|YHr@FiswerfE~EUoX+6EUo-Z;djh#jtK~b@G&PKCI{<=@Z5*F)Pl+cvTEjb!x=bWU&)`f4#e$fJ#E zIhie4*d@%dvFNT^bXP69s}|i=i(J&AyK2#0wdgMK*wuSSZ(_VqPo(bZQ>VrbzdwrH zXkAr1)Dw7&oT!pB(MoLB)Lr;b;zVPz5ono(&%pAb*z-o z|7YO0XhY|;GdAwSXV1QSk%4SHj;*^JJ>2xN2LZ4fGoIWMBiuVgJ0wSbrS4 z0@zHQdwqe=5mS{+tk)RENC#v31Uk)*`BE&BV!m`naj1My7QKJ{!`ZDJ$YLip%n5Xx z{37jI=OE+qxxB^q$LAX4h>UO8?itcB=fe&6r(P0MQD>b6{tRn_L}Y*H?oq#^-F)xv z*|uC^?GM{$QIYLd>X&S{z=vw+*WcsNCB!b6>Q4{;i&W`y_#pp9o#hvgs#JW`Yafu` zn=;z3mVAmI;_Gdym-6yq=>H@9mca86^^Z+60^>3~0mWcT{#+SydEUbOBfgiwzjFFn zdq%1BbIm4SU06*J8F9PJUGVtlnR=O0Jz zI*2zs;Z35hVbqhz_m}JrqgReIMne_y{l|9Bzs|`07W@owhuIU1#b06*G|pqM7M=Xd z-x5b@82f(j@tGDJ|6(2RQ_ygd=WU+1cqC`P{B3q%FTTbnuJM_}qI{c&f5vxg#An%q ziyB^(`kzMbY05p}HAbop`bOWXj&5iupw4#UIX>f&TrmdF3vV+PPTt8_+GDI$n;MN_ zoi(f%@{G97`?ybRJh5)O@P8H)uk}1*uWg6s3)Vx5kN%$64PRe8;@9AKg)lZ1>Xz6W6Th`aOHE(ghi7CUgyl-i{*1 zd=>iZNn>qWp{>)0Ay;2uzj63w_SjjC%sowh;8Pn7^E7lyr$0wMVdzj^H&+*jHX@JM zFTx+HuxXGVu@CKq(E6lr?Q!I~qsVT@i7L)CM6~4;^_-^e;mC6GJ>;~%hn)8JkkkGi zFHba23{Px8`(`fg1#_7Pz}sgY_&79Z-k`oywD&YVyx~zsW_+x%HvU?lIpPyOGtU#> zxtxCIY`GPK7xa#x?-Z*jec3zT|A4+z``)3gXB=Ir7)1GAIu;t{nQex-{@r_y+20S{ z{WHdMPo7nH(0|Tv+h*&<$C&fKMjz>5${d5vABS$29%N0y+^#ba`0Xk0j@wJ=`w%o(w5UIz z&27sv=AsVzL;aOOJx4ej@Gkq1f=y&DN?|SJKlPQc~-noJD^2tC()o7FznW;@#vr<;7tXmXH7t;0 zPB8COF>h!-d5b;YT5_(JnBBQW9^X@LZfG)|YB-k#) zY=F15Mq(%HSk}M^olT!5_LsTkM&`m|=9(qoZ{6X}EsF8$nOoTB`b_1m$VU%9kUfhJ zyWoo>_dW9oylY2x)^UEW2-&GXb|$S^-j#{$jGK(@v}Sx4z7OWdSZlvHQU{g4iw>IW zGjD`ejrW22qEA17zmvXEd+&#SwJT~S?ZB?|)2>F^+r$|+etTH-^ynvWgrSodf>FY! zcj>2L&?x<+m{0b>J2y>Zt?7yB9MAtdjl_mBp4&Y5U_QL}em{N~&RJS(>Ho%$5nMU2 zP7>Z8om7kr!(-{Be>V2$q`mUX{ET@ixDuL*9X$Y#FHk30-~VLJd32KM1@8swB&)xV zH=vWCp+_fChuaoQCovu(b<$DV(*bPa`E(NFN9&@dWf3}QkE4_LKSC#2G#r739-Ra& z(n+ErQYY;IZ;wuL#%r%^%I~DJSB@^CpLG_mo$=nr9NgTakL(yP*`gXlI?vYX*p9?& zcHY8W4?~cz=hKbcxoeho9cR3A9%Of(Gd9~8@7>tzKK8IO7@KX_{oNxO=iIH4$Ji|4 z|KKp?I=|6(Y~CY2 zEud}ix0dhZUu2hlw@}EcQ$`ZcYTgJEnC_%wCD)BD8wTj_6r{A zyKnKg>g(w49;I_VZrzFnmCe*d&g;2rZtoI~CA?cW=zG`Ce+xK2$M2J%d(sT-)G3}o zcrmsTbH)5M6T9ZF8QV1!y6FY+h%$Yq8f9+w^JfA#=+%ud~O_Hlrj{>o0fg zY&_dNbt8X2&hx?FZC^rqnkRrydX#WZ!WXBQj8y2=I1%0@;BAIp`GxDnw}`&hT&_5l zCdmiyS{piR0&5JtM@(j9dDSPMQWNr#5iy<~cjow4p=k_bSaKAF9EewvBdrr%S(0v+ zjEPrE@Ws9Wtv50*iqXUJ5485ks(mIflAdGGWAR<`Sp<*z&mYjoxUj~#8v`!+42W0A z=QwE67;S;3jo`J;)*?qE;Gf2a_B?c^(<`1pV>7?W{$UR&cMjz>S7@Ih4xY9#j=SUS z{m?k%$^F}&JEM1>qE6w6r>y2kwXG%3Fxz|DckVp7P5jPtc+EMNAq08b0yCeJfnC%!E-s!NS+Zqm+=he8OD>u zb1BayJVSXpStFljz5F)o<&)mwyTA59_oy3U$@3F6q_YFr%8E+r+|B=6*8b|*Kk`&X zjVLnkn`cFFrw;lpD=M+`CiwRj_RiaUe-ay|6FWoe+73%UNaqaMeFgOf^*e2Qn@2uC z*QX#K;|k6&xc-EnOi%~ zmOYk3!;F0zYp!4AR(`(<{FZ;2SXAQUGHdDc8un~Nll-NwZ^gRj3tfqi$QsW#aSvNC znK3m5Ii+0WI6lmHiF3yB5bBptFokg(i>|5W@hgUjIYD=M$lmv}7RbX-Dcan-*8JG> zC&}fN>NVs$HLpiz8(Al?p2sA( zH>~=xX~y99@k7^k9({kga6zBW)6QXyatOJ^{ys{sfrgzQ6mQvS+`T!?u>5fk8Q6b{ zd763v*#_rhSNj9ZQ%AcQS6;@|WB3y_)^yG}(w|&RY?j)RLfl{;dvKe0PbbdmR`x|_ z8_^Br;E~SQQCIdzd3@CU-0i^GHe;XSaO_yAnB8G`tC;QZXx8j}Tg-mpczCLKN7gjN z-rIXl8vBvBzsPrA;90=)d7jVl^vGb6_<8N_BY$#aFp2eScW*rBOIEJJ-u(>8nPhOR zWCt0nLFXy=z-@`_V-gFv9T|&ZPPkQm#$?rP`5CRga?eFS^B%H<45=;h=-m9^GI?`^OezL68N8+RT@Er?NL$6n zX4+Ef%!32T=UUq9%BNMWkX?g+mOs`TW%*-Qd`CW~=sy0~ZrLkSqSneMiY_+0IS1a2tx@{iaxjw-^UYmoJ%F#l2>CFi*;+ z&^kzQ$KxNzCkL)(`crmIZ~-y`{@9;p2jbCPvX6^c3n=cujXj^Vgl{OPeNnZ;-4`vu zZ+8c6Nr|)fMP>7ZWyeFm`s+gIZ-N$VH0EP;^PRG_oO~MUr-jBo>9mfyhS|*d|M~Kz z957ZbM@JOb7^}t;BU4<--UaPt&RpAKq)hj7)+~)RdK59X*~XfuqO3SYTCHw<^Ks{L%f0P3ZG}HjVC7R`srEBfeq;R zIo#V<`vG%4?>4`N?8d+Ra8puZVEw1i{SkGlKIK-3f^Ukij8fkxm27_RpV$VJ%K`2s z=2AIB3(%YR-?)RUcnkV$vtnyX3~z-?pX&OR=-O$lGH8GC6Wpygj{o7$LGBzBKQ#Z@ZH*r{BD})r>)JjRdz`^ZS`??-FD72 zW?ygLZ}Sd!AT}{x!i<}wDCR}xqgdt#^4{z_%>Np{@=e^tzP9$X+g96qAm3*{J;UDr zu=JVy9H}|XA;_g=4{T&?FeaNBAFcCQGpuIZ!sj^Vl}3Ehjo6Ki>~A-+zun0Gb|d@S zjqGo0f6Ud9SNhSB)YoTTq5q@<+`3h#a`XsqE3~zdXBay+liUhxk1&=s?mFp*n~;;_ zgPv9S$VIZ>v&s*w9zCluXzS|Yr!H7BH#+J1GxpeY$DMd#=>_OK`Vs2~hd-?jKL(;#BhnnYF z(c@aLHX{>nidOXV^P?hYpnWa0^XsBvEqaDAZtKvL>CzcLnQs$mC_KRFQ$oBK$qv6{m z>el(bc+SXV@&7B_Yg%A*?awld&LZA5cUfoJS#v0_O#33+H{T>%K{g0=q*C{PI{mW# z61!h4d``c-`(gJe+YbEKHqnKa%eUe<(kstoS+TBrQ}?1jpu>uF#dcG?xWD=jcs(3s4_k6A{Hu=-ba zt$w?Y@|wR=opr9pvrGRHoBqA2&rYZuFVw`|G~INo@IB2W>Dus_OqEwc3x^cyyK(peUcaH{R@%7NP9POu8d{; zuJ}9l1nZX&e&QzlkCE#b%kMVDK08%$)bV*t@vZ$HK02)%-G8qCErGj6BjcHU#QkV3 z98AM6oF0 zKs=s*fhW>e6&yvs!GkOQ+g|6(H|3$9eu_=%_Kp5``)37fw2zXm>B)Z(qF>hIH?#ax zC$OO{{`b9;Ky!t1|MF^=!axB0NaJ+SzRg7^c+Ex&DM<2xS9w(xL{)r#XnW`eX)`53j9enNQgoh1{i z9ZQ*Z`1<1BO^-z4QLF^9ar;{FyQ#h)bh!3M|Mu*F9^%*>-=%MJ6TVC3Ac$Ekdym2d|AV%aR%8zabp{LY74Q@9V9wSA@h67sjEWngDy$cGr+xr23Za1!-S zHcal2XmDh&Vf_c|?+>$f@gYM&Y$5#f()-T@8FwY}>CRH$C-08a`jY?g0kS{i*eLuh zn9b9hZ26?F5co$>Pd;bC7?b!l(<>W4*0$|8GIiH=5c^qv%w*ad9%4L`+-|JW-a+!C#wv}e$l@EmobuDy2+W~6d!cf&ebEnVd*l~B z^qzOJ`!lkB+fV1}MeU)Ji`B{zWS7mse$qY#dMP)|8Z6(Dxol+4uQQL=PwzeRIAw5| z`#!nlE=K0YA){k?YKSFLTl@R4Zlv9^A+lLVN8!V=e9lufw&D9E;Lzj8ERlL7M9%AX5oswI|#18&{5n5m1NyeWOsjq#++*^B;Nj~#OtixP= zZJ#giz0aGo&E^<7hfQPy~32bgbl?oj=w`6iG0O8H%X`!6wO6bN<&Ivkt&o4hyjUc&lJ z`J#f%y^Y{XWi2%J$Jv3$*iY16!Cd~|N&PSK5U)T=TYksq9?Jvoi%Rg*wlI$~mNR4Y z9d>w#IXQ|wh8=tpO*t#p1saNoUuntc@yYG&IX8kX$z>1TIyZt(t`$9UxH>y9K90GX zIu23C*9ZBwhHvNSTlOZZ`F6b81+Nam&vD`{ZL)kk(3U}+%Q=%Q+Eg#{@6Z;zd-i$i z|F?+xwQr;E4eC?g73IE>54DT$TWQ-t+uyj?J*RUJ`mS-luY*2YHfMLq?ri}6GS5pq zM|ckN$dB)Vm+vAw+2qR-jyz=kW@LOlvU%&8?a$WI*VhpTf!(W|Go1nYq;Sp7XN!Rs zQSKz)?xU`!d0agrxt#3C{Wti%M;`mdH)wxZXIYD}WF81EzBi-QqDcJbndsnc_luf02ALFA{quna=0$Ze*>1eVp5d8b@y;9x{PFp2)bh z#4EAyoNp%(w>IG#-?6OA?Qa#gR*GEeKJq+IT+tZ#;Lasw?5XBZ-y!xO$tfL}vu0eE zWM5|zlp|F>!FJXpwhYGazLxk5@kIGR{H`xmYcq5kd${<-ZC~n%lk6E&Mr*ZM?2qTz zKGnT$OhY<<&*Awcc=6E%QpqKfh7Z-Rhdu5vIwFhtyAb;Z8x8!fUYgUTzAx6k5;jZ$ zycCaJe$M4wXCr(L$%jZE?4hk8+TDg-){Jg%!4@fihd#>HGZ$NXzu?kY;}&d@HtZX# z|B#s#=#svCTH5t}=*@snbJwJI+2uT)3Fw)=P z=j&V^)FV@6tj{;lztiD^wNFp~t|u<0RDN=7we+{xdqmF0@V`43+B~t>w63l4=TEU0 z5{tc-Ke@7ry)4=h(E2(xK8M^%mfz9Jld}YzN#IIlZJ@SleVEVMz`z$UP`z~*QLp*O ze_ik6;MTYZI(?V!^xbCqPE(lMe}Od3kG=DkbiEY|GRE!$&QkTv`zg%()#w+k&s0up ziXrUN4*e>09suDsYY;WXobTmNsU-^G$_wczxFp@4@=JJJVVVy_WhFV#1uU+9LM}(5=q;;vsjRpanZcb4@DaOYdVDyD`?-we9Eg;eUm1 zn$g?k%;8!`X#Kb3Z1+CwumfTAz1#1frQg${kt_L}(9{37vQ*a9J)=3Jt=Vk4R>FuHSp%NUnUoBy8hmmC*R#_KIz{pDT}L@W|3h8#$+yWZTvs5nt}w?r*XVl5WyJS3ga_ zPU!EC45NFV$IqPx{^IZ0{;OAd@=rNFNM{^3VaM5WV#Ax!UHaaYjU~ti`utSt2NC{% zWN9$jctrW{E?71kTGU>hcSR0lw;gob{GcD0&wL?bJ`FJUMf%4>_zJ?aI1h{u=tblD z>6#zWLAEVS+ofY8`?7Ce+w-|>z~(Hw9&7)AI$LrKb5=UJ65gC^R$J$mW34^-F#Bhk z4}bHPxiywp%xLbYH;nkRHj+PEvjYbr_>(}4;zvon`TRn(BRrouOKV~Hl7UQg-(l-) z&a`EA%U?7IkF++`xeS|@xm}j;8b0Z6F`cPUy^6^Y4%QR+fTJBBaPj68*0bW%_E`LV zGwm3T#R>0kEs5{i?;S?Y(7B4K_jcwmAIT3|ZWs;a!&pbFFQ{kf2j%xSBZuk(-HYAR z2RT0T8xHTAk+T;5E(cdUXY-CQU$}C+Z>F2)$6LAG-KSu^(qC@d_+C2g#Os{X@kH?#!7TcBKK`)x56>rxD}j+mE)(eN%!0sZYMe!G8Zd zzYjK+lxIofX=gtkwvu0o{MkLa*44Le{ta6P_2%DL@r$!t)fUZ@HM9kp-CHr<2e+m&hg=w z6Zh!Zc|eB5^!!%o{w7;Ioaf1GU(B6(i#(Y-(Gf$m*7gi3Dgaj=IBKv7^2z;T7(>Z@ z;quPA``B;sPcWX7*)y-BY>;uIHS#r##UQ#uzl9jsTo??2z@S2 zc;I#XH$?^Ld`qt{yis}`dB3L8nkRx2;eYW{EuAK^kIqDwSmp8tF83zoB)8HBTGvL- zQ^GIbp74%6@&gO6_E4g=SJzBj9q-Sj8G8#>-e^j{o%8)jzQ_LL`vYT_|M2x&uY2Mj zqPmIa@oRA}zbx5gOh4q5iPoBp zb#FSlqP!%vviyU_O^4W@Na1gTzx|5$$sbX9gnN0ZYi|Mi#ML2gU3XI#d5{BP{0dFX z(X!tyyb=BRJ(ni@9oBCVeb~gjEq_rFWvu=~ul46!q&*eMk7ni=tG>c>+qlTB58c?m zzGiHUbLh~xg*Wru@30U0f9J~o)sFmU_mlto(j@;^^y)rrqA>a|4!LXd%(U!L`Lry% z3wzYhdk~wcWij*RBD<_*ht;9`_^q4$<_ojOoIO+YtoE4Y3+jz+ll|qbP+eMAOaB%c z<&VhD(!9{ZoX9yJYwcbKPVF@>WnY5zQD^{T#k3;DmyvgzD?{o>87*f%d=Yo$vk z@h<(ho%p)Uw?5ozjO@E_okQMG);tY`tdry;nTb>Ha%_)!blWc3xN8`n zv`zSl&1+~Q=C6%-^LF~U-5cMaJGV5y>Tk_Q799TAy4Jh<2$&1TBl9P5Pes;05BYK1rSZ;iIr;S4#Og#4^ZED#1=F!A`=T`EVE-i=pS= z)SuANV=F{&$)aS9mJIwx&O1TZ>lL zU(iN>iN}{iuinpNTfcU$ZSBan#T$FAtocpnU|ro1Nt-K=t?;j#i+wZ%z{Kpg1El zPHW#L5EL+8hT4u$Y!e8|C0IFXhYq$47rC6M6)lcr+L-{>3(^bLX{R&2a4tEy5K!q% z-zI|1|NC2e?_}qYAUf~o{qy;3PR>4iul1~FJ-78d&w3UYH8H7cTS8si66)HPP}epG zdUD&H&fJQ&y?OU;9~ZPQ-sIU+#O|m^I&BDij9s+)6!u0*Q6N0Y=L=~(+T;EVHvHtv z(NBzH()HNs;A+z4@EZ2OgyqYoO12z<&t@SXy|~g@ty)*@w{oTwUtx96!M``hclZwz z^V!RW99FDSHl1pN1U!EWck;PR43~u`eG>lT8SS4JPB_cj&MgN1PGq<061n)(Se1hy z``64HbJU5vJcT@MpKYl|-oewz!iKM+caT%-udr@R<6Z;ywPa&9u%5B5or3Be%?Xcm3Qr2GVM*zK-OqaQC8zg_Rpsxr-SeH zyeJsW{4%%g$T8)WcTSP4v(GT|zQ^9?ZLg5`UE5{97v-H8v=Qe$)!&!AuchtUKPCMR z4Ux~%{W*S%=U6Wq9|v%n+_{6~?C5We=PPzToaCbD2mRZWj~y-_p5Tl-?P&l1%j9Us zXWQphXfO7BGf$RTv*`U8{1FAu3Eq<~z;2%+9TWpb<97vSa>t&~Tqob3&wc3<)!Wh@ zBH{c9F!bs?^iu?#r?p0mHIZUDOQc_*2g%WEvd(XFaVq##Pc@FeNBSh_$mYMlVF1|- zk0r}H)ss=1-zP?@zr8tHWx4FT!PjB*8MI}~S*JE#uk2Fp0q5tM93K0(C}VSd%mL^} zYcChBTLyv)T|O9G8$U8!-rS;Om@oF*h2tr{IuO?UM45B%9L1O;<#(YOosK#t$>6l{g#o zBAmMGXfLk2c;`=C|A(trFATS^L9S|C`KqH6h6lU9;n4?LuN^b~)4uZrlqPmv>(%05q>AKpM)e)u+R z)!0K1(^iR<*0}D*V zYoT7oUK`ioJ`-G{({!3DwDMZXy?~j`3`ut}nVUuxi|)Kn7>ordUnhc5Y%0 z7P#|(Kf%N{My3>rR$qOkk5=O&XB2t;OQP2m#2=H-cdAM8t(4#7j)~v>#W>Ev(7OC- z;C~LkgSX!Xo|^=&+~;a|?iuD+?<+>5@w5cK_QFoy(-_?63Nvbdp*EEROl+a4j(!U1 zXB*GOr`I+u<@;E^6EonvZtJp8Qonn^b4y8WlO5+$z41Wxao|u}qN9g+K7zhCa)otE zgf^Ft;d~D9dLjA&nIV4{bIAeJP)d*jetJnB19bYMWF8DnWcSmH6mM@dxu{o_AuVtS20vvghXujP>(_ zjQ6b{JG|`7&uatB&nA3-$^0D0{=H*#Ff5y?4cbqProJq^z?k2Z&OFJw_NUN}Y}^EV z!}@;pQ{=bo&j_w2|H|y424_v}*IP}BSBMUu0dDD&JHA~Smd-NmUfb8M+I+;*=I)$e z(Y}meQ%{QBUfXPVuiR?V{)vC2E!89P@{-HTkMWy$u5EU(X*cU6&ZcNm{8M(C;>|y0 z9#reD4Ot<$4FBsL<-ZOD($xC=ZvT}_Fzt4DZD;{w9 zb%m)1-(P>Y_|-Z={I&=Dz6x$tpUL0>8ua3JKe!EpTh94yDgnPc!BZR0Q!lN0D1R$< zuXk@{9D?12yPYwlqiHQ%VgP<@*BPnovRN$4*dFZTY`lBD+9 zgd^JQ08eiVhxE(YiDpjCIG9iGIIi}NBQIFQ8mNhJm@%yNjN!DQaeE8}nhR&XSf?2H z#S^T_28917$?zl7ZF~%AWWQ){TW!#U+G7pZr2Is|t~`I2*WhD^*MP&}wVvK{h;04q zuJtwd=U?vQE%Zlkep$x=_JZq6ko=JBcm@2+PE&r~J;;ts{Ni_VFWuN_*jM09^P7eY zZ)T1qJ4)~cZo-C0#SVLjXG@Sfk~!(b`LUB}e=WbuZis>B z#BIGc!vWb0FT6y4z-_fnh1d(Js|v9f0`)FVupOIZ=g6n+<+aaI|MIh3)44vwHI1uR zKR7n;K^H&Ryxw?tk&&-``Qm{b>Q`C5dTaw@pU$%U^^1qMMFEmg>2Lg{yxgzi&yPLm-#!T+m?{4s&}IM>^(yA@hG-nkHyZ<9s=x{ zTp3*H1B_#xXBFE60izI-~_6OzwMEZ=eMonRl_aSQm5P}@3!{!%WeA0LMDRcoB}uzV=e z71inIx4H3<2sTHQb<0!GB6MkDdo`@DYni_q<|`AMSM`)wj~(LXg4^#0_$(j~opC&dM03Ih_ku?)B6E|P6e@>Z=EBoFf9{h-xGacOg z&@;cT{4O%_`u_V1wFZfjPsBc_X{sl4(!qmb6~aRic#v;Y`!piC-~k(QFL)3?9%23~ zz{6TT-Lc;@(Aaq=dF%<=GIEx&>+f-lJ=K#NLB7|43-itFoSqVRq7HhR#k@`+wlIq` zbbMA?z5MHT9MkLXwBIRD!c+56Tjq(M{p40FPPV3eYN%=?d9cWyI_B2(1&c5A%#s{` zz1FTSpSb+v;x`Qad+n{B9v{aq`^llh&aSdTf5t}>NiPeFu43eOX&f8r$2*@v=Hffw zI=Ag?B#)e7Ht z@?CpD>cH2X%=v59H|)BmWJ&-jVmtZX3<^r5W} zZ{NfB<}2-*%y-alGjy<1IKwZaG57QY!tyi9-m75`K}=`FI{qDdyiWcReW^`7cL(t7 zr7x4~PG1jieQ3M+n|_dui|!;R3LENdDSt0R_olPY_z1E@^jHEt)29A@F2Xr#`m_2^!kUfvt9#^HV`yn!1X<@?{azP`3h&AIWN0c zKD+dFEJ@$^z`J6l#AAw;@3f9_@K`l&>9p7B~^X?ZyFFujW`RWmBJ=<;DzL*F+p>roC?|$mE869ccao+YiOuky5 zKgvI})SPoH+nhN%yMy_v8Eu`d)Mp;&2#J2d+21g>rRYQb&AA@XuywEox{LCjbT@ok zZSi*ieAThnIf^|R8)Y?VPuC-(&Tk`MhP(>bw`s#Hy$6j{XQ>U&K2jT64<$d>he!Lp z5Bk26{-UF_F85XEVe`hYXDckLx|F|@+itL|&TM!@^%(bZmb7%Vbod^|I-A_nHUndN z^(0`F9@p>kS{fp-V@WiP8v>}ftFbG>tu3~z$ib_7x(L zXBBcy{F?zUG3Ta6nf8N;He{>G<}FFFuG9XoKKsj_s~Y%eG2^L7dcIP z4twT3%WwPt4%_l3npIX*=aD(Cy!jw~{TG+0uMa$aZd)^#OLvk>`<%XAeSP+2pQ+z? ztUxkuL~l+hRr_XwC2MoOcy+8eJy)yC4sJ zgT7tz?$_Tc%kbB)!?umxYR6IyEa=u!?9UX=5>n365a{V4_Rs8@I6brn{m@FC0BUa? z*R!qkgWl^VU-IBdE4?!hI&J|D;t9R`@AUiUUbk!FzDn+36x%U^f8{88=(QceaHh|9 zyeM1iv&_z;ysx-pVj=NDVo3H`44IAicek!57jE`J{JZkUEF^|U45C1~=xX6wS36_K^bxBA-<%m{ z@QuxB@a@*e*6&eb@DnFkVe~b=T+7s=@@MmII2f+BhSXPZ7J_iCJe^bW?Xl*u&oj^J z#r5eQfIECfr@&nYwjs{haKiGX3I?u&tc6WQvBKG_B z;wV9T#6dYH(>mD9e2FGM?ck_)zbn6g8#u;MS9g!{Sw%m$S!SO1L6a+>A>u(M?xWgk z_?;9#>7_^ID7rMcOL!`T9>J67QF)f4N!3geJ?d;Ho%t@h6s}(I;7YLWPNK;+Xz&&A zvKL(42aNhY0XPqH&z7+ZyR??@$g&gpR#9ln{&U-s?`;_1-a77O1B2*E{v64jP0h$W zaw+3U`#H|m)Xq^gXm57w>|tuzU7Is6CVr3vFp!OjR-9vPdWBq!S49| z!R~Xr?eFW5LuJ8ryS==Z)0``y5AN7d$5 z_5-kY?Oauk-S0c}d!PEXzxVIgzIU#0gwt=1>GyW^>lxGEsozfet#>8(dLP= z{Z}y-^*h||w-Z@at$z7V+}1pE=&I1Uxc&RN!W^g1;ik_n&KC3bd8_(tqt9g*_PK!H zc4@2!h=Z`l`CQd7yU#Ypx=elA-`ze9Tygu}xx(R2zr#$wPtY$q;oUv2j|%Oj*6F#z zVWB&q(FC9JG0m}mKe6ZatJt5w_~P02?|ka__o$cYouhF!Y$wW2yYruIU^}-v+vzvk z^!pU=jUxv9$~D%Dudt6}kChji1#O)xblT@rvFXoHS7t2r#R|#&iIBrA|J@;E^Vk$$ z{rdAW>ernweO$CxQEQ!j9UF-Hg`r$>d~(V0VNDs*8dUl<)-0a)b=!P3)WH7b7s$az z#>bk$o00pa-CEMxTPn2q0oHzEzUeuAzR=DE47ao zVw@YXpLxnSW`#O5Pw^q4<;e2(IC8j(c`D2@-#0=(8BJG(It=~T_s;FkGWcre9r1$B z74hQvIBi1%C(1HLI(#<7!SfIY&-Q!&JL$cD;k~1xox={F#53*p3Z3`(?&>vDYpm{L zre?B{+0#pHnGL>-%to)B!cOlevu`WAKxY5N05W?LaqC{0&D_MM`+8+|rZ3PZv;Smu z#~%Q3GTFtW008%$|uHj=uzN@_YhVFOb<&N_%Ct z9~j&C?#k?BnOv~%+_u5+Qp~wc9|bQ7;(C{Ym-reRC(&~Q;_8Rwb-@N#Zoy!0^E zOU28Nfbn8@`R(35yu2DHa_s>0(vXCgcIagnw%p$DNXMsR z2iZ1f8*?7*fo5ui7oEx0XLB|RC+O)m=3aZPjBf9N{~bDMg-#CBmUR0MF99ElK}xr; z^5Ekr_mb)4+a7$p3O?GvM@+UoYv(93LuZ~;$o|1b#6In{f6^U$JlCFrZnlA! zQKdWs-GCqM_b_J_f*0ZS6ue~lGO@|+vx>fa2{;lygrjRbI8yAfPp12gOfN@{4l2{@ zJTjfXjZA->ag6ktF?(hD`v;KekAq)uY-IY#50>dSOz_Hdf9T42=e8k}-_7{ls8Cos zaraOor_aTQ+A^8%l99c(EON0Qojdma2hsVz4M67!;;>%+_tJTX73ih&=x|?m{840^ zna}=o{w_F(Kbl16!!@ta2y^JAbD!pr`EEfb4kiy>I{#N-bNOELnt*oqVkeDf@6^NS zlvjh-5Q~*PGBk82G}+3h@T8hJJ3Kbim7H;cZE~Otd&ss;vK$>`<2M%1x&Xgst-zeR zdZ+mKCCk^X-nGIbN%-~Z9q(E}`X;^sS(1+KfKMbxv{snm?2podC6|B`)uEI8$o1gl$N)Gg0Vm0L z`pf|LKJDPHbpTst^P!JMQ(eT|ygYkRntBqN8Z$6W`GvbD2cW4jrN)MF?HPCd`LRpD zpG#9e2S%572coHWp6b)tu8xX2I!gMf1iIStT+c=Ilk#KGPrdtYrJtUsUspdxp(*Jn zViw)$&f477+v2y@Tx42B-3nPk*$}00<8=n z(+1?VO&@@l@Fn2oCwo6UUaCI?UgEpKO<^C+xOn+{;bk{?DeR9IgA;Hg+t-VihlQ65 zZQlX$QvLyWsq)~ZpKQj)oAC`9PP7mz5uYm(WGj%cmy&nQElRf}1^TA85$FF%SHMHf|{ONmr@w*kAAL`Aw zI6T5SxRWbDj9a;o@@qC&?5pNHg@zlfmF=vrs@Mx^VtmB*CK8AAlaE-&-k3r@tN5%S zMw^d){HS6 zwy)RD*AW~(?gu8bFNRC;^qs&_m@_M!nlX!WTK%2*d{^#Lbdq!-YedGaQpDOB`_%`2!6ztd$n+FPTG~A!41x z)>g9CVZ5~SL@?Y8Jjw%M?@xDZjMc5WIcjT;Gv@!rr#;p+4$jutI1?_%Qcr_RajKod z342frx%Az}DR7f}RS3*8_;g|30?d^{`n;T{%qEW#G@>_!<8GLixy0rB(7P>(A+Ctjco~tQ~xgp^r}_^<&Y8+C9a5 zC|*8}tC^U2(24E;(Ru&B^y&Kl**76RnZiBG`RB$v=MvNQ@{14tD1jao+x9_=c77x^ zG{CR&Xf*%AmDw)<9YmptAmbwLPtE~#_k;t+pUeFE53k!E2QP|=oBAN&MzGJvKiC&1 zw{ffd4aF+HBv{jf-M{w0Dv(`xR}7GUO3iA{DHHC2#aS1rzn*7U_fOFtG0r%WKUjPQ zO^$tHW?1tizS_n3Q>fWB{sv-7#GquWx@*IS;hi+{1f*vlV*Mjr=soSF5MLw;;RW#| z_{ior#Xi?lH&T9J^UOjf=Wsf>EP>a`!6$eXKFwZ5 z@SE#PH#DYmmc4kL4PIxtxP>>|Joh7KA&#CXUEYmJ|Fe#eNXs^EwJ&iAACe^ zhsGFx0q>)8o?nX&ETBz4b&2_YwiaG>+x#tUmg)=u+7x`bLxHdVSZ)}_81e(q(*4W} z^p?0CnxK90=kM{8`oVJr_}>A(q?4nsS*t5PYv(u?fad`Bs`x}VReSsX7mbH=vkV?z z8w8K^mBQS-*9;!{I~k8&JX`?Bao~VvjzAX|gX2lT!FgT=j^h`H4mdd{%1q0xsCtH*xb2TeF<}Mkp9hFEW2x4YsF{1B%nhrz!eW9W=>v_VX`dA5C}U0rD59p&Y5Qy0b-V)i$lg z9+2Gicd9OFqDuUe+Nm1b?%2v0o8A?VC?~s=^I-$*nXP3!*cZ?edAjuJK7Zo`J&*k1 z-hmmxXLDv)&mNdj%BPRdGCuv!9vFT2b2+1HKbOmSsk!I1o4PX5Yl-kFadSTK+Fg*8sq`nUsGpnRWH`b+@Z9LB5f%9m+{mm<}` z%NP|O5dI?nMSX0}MV`%AUS%$nI}?LnV{3TU*r)Ql*!81am=^+bVhuH1sN11_T|K*t z{wC9(_9SCN(MPJOyOEIWar&k9LHEn-8PR+09_Xj2LwuFqBbL5nRbdyl-Y75K9Ot*h zs)=2)NnV52OVCMdNLrMRpGo;R@;O!D`xM;Lb+(TwqZh}8f_K@4@XGgSsbA~@!7F*> z%9?g?tvrzk??tB*a{+GclM~!V_nqsxp#y#P?!TgM(S5RWdhx|Oc;9NYs zQ|Dpa2hHDx9m2SV0JFYp9@F!J;qNkD-7g|Op=Ty=wtLn3>D=b=VrTrb>w!-8c zO*`q#MH{@J{WAJ&2lx0YSD$1)BumqLYaVOl-aI}ld}-A?sKe&MU+kTS9}Y4Pz@~Xv zrg`A+->Z^A*advElOK5yOkV&Lz;a@R`hm_kx#!Xj(itpZ>f&X!s9<RPs zkfCA4Cdf&G>%&X~Pv8EuAie-UbFB5)lZDm^?dMrK%FdOA zj**jgE$IM#tz$1w+0bBEvP}LJd+ku#rF^`xS?~43$w3Dvv84XBr_H-RZU?f_VtOZZ1;OqU?z0Q5?o6J|osslRkbG_TnV{9ZlRBCCl$y}`&!QHjWsM8{ zJ7*f(^yctlx;-yv$=jCC#=C#Cm)=+>dgX)G`N{!@x4Toun!MnHxp`JMev-?gh1hNp?fyTC0yREvFW&Q>c#hD^XtnS?(T zKADMJed@uKCm(u{ng-`N@B8%3`t|&sdM$pL^D`fBzHEKxeE2NRxjnwg=sNs}`TzZm zw=8UszhVv}^sBZ;3P$8taE$hJ=75{~U$|4SA+uWeTYDCFZ%yq7-)`FYssrDSiGq*1 zKeUyCyq6z&3oeE z^o*CbeoI@T@Bifb53XNx!il^T<10b=RR+bApd`vOc&o|JCj2z`JCdr}@$vTUQkyDuvg_ zf2TY=5kA01qE=3N=PvYD%MY!l1nX8iS55WHGMLxk3rpdP_137+`{WoV(C@p(8Xi93 zuA}zC3;+2;=0LU)yb!~7GquKkNR0^Ax*hXNrwJCjUNCmTLg<8cCcuBP(O$(@_ha^6 zpUknQy#hT+|LXa1-!2cge$G0`IN#iplU9$-)P!Bsy@$HA<9S!lX&uV>4o?La0$uEBeo8X~L?XhHkg;^WqHr|ULM|5zKvx|bl-~RIO)!=U)>$zt76#i_y zDVHs~AKsq32;Q~~fVad#YAfF!Y%=u%9o(H}ovr*8V`n+|D+UMj5B`R*Pt-E-z6K6o zcW@~9A0`L51lTw5d4_edU|l!GTJ$#f`B~<$`kyVock0hSX}$RlwVQjgt(E)n*KT0! z?z8?Isbj&j^D>9jzqF0Ju8}?%Hm%ng+vP#YOP<*}?F4+lR-W=ufzNnDI}9zl6Vcp|RG$utxD+ z&>8m|@XWj`vY)(q>df%M_h-I!^746|n>b(f`>XFeG;c)kvAgo$*k0iqX2$)7Z%AX~ z>T3=yX57UG%fp|7W}by+PWrMti5)CztFW3{jSpZ5wqG{1Gprx&vUkRxN!Vupr2E+(;fP`8u|g2H|LGWuAl9*nkq(E(`KbIerQEwSDyE{(bg2_?ISn6?MJUi_G^A<_Ya(%m5Xn> z5<8}q_uH-ycE4_=*I#O%>aTQwJ~W2%oYL^pk6Q=tV2>?+$m)E2m+Iqn%U4e<-~-2_ zwu=X78+fnV!9G^Etq%jM?672f=wyH<7)(t{i`N)eV+Tt^X|_1 zUpepW9m4)ae5*I1d-o$(#*Hou>w6f#>pt{Y5A%DN-`M+kW3JCStC}^^#aHt=0s6#; z(>d$;hqvQf>#W62Jj&im*>Un+-H6;v?%%5~=5m%fIS0g~Qag{l(z8hOmHfO5@A!+1 zCHEq~jlRflBlsx$fb* zo2#1ZF0K_^%ej_u+4il;Tiu#pJ0bL|?Me576GCrt?~6QpJJ%Puay@n*wYQrRW3b;? z557fyx@-Rt1LS_Nd)@o}{Q*V9;gaj6s}6cQzSXR;Wz$YmN4DYpfT8cmYI}rleAcP>D>U8~bc5vb*vrhi?}S^AdmQV& z#l(a2@XP11?i;_u7b2IEeujo*vzvGEJB^)T+lIZqeQZJb_QwUO|H=EUe3x&3e2_LQ zztcumD2lFVVI8JilUC%Q;stxKlkFJ3{E5_#uEIZao|sBca9YHlbE9JHpKziA zS!~%hq5h8WzU;yuv)(alGUVqK)Sbe1o)Y1`GPT1R!CvdR`6&+mc;Cmm!Q>hY@{HOv z@``q&tWAu5FrVyYE>wIct#c^rt0=YAqrfs@BKw(j9>q1xBkxwR_CZIQGhUR3u_LYP zrPgc6DYvY8J+C&}fK&O-bLGqNfg9GZf5%_cZBDy zp=tHnY5e{O!*N+YbzkVMChk8G9vESu`aq1%K44d|SDdAJXA3XR6 z@{@ackQ#|P%cgzb41Ndqo;6tkc}1N4b%XzW9NsURjR};~cEU=JSD-JAf-U&p#~{ ze~-@5%5d;!)51+%>MsL+YUd1Btyxc^&$JFt&zo!fvs#Du=$-qR+cn4m)@15O{f#v? zk{><|G}gi=#O|9!x3US=(uUUg0ou;u{n-6BPsZ0M|IAmf_-K%Kv`12LsmSfMyo=st z-Pgi1Pg&NB>_IOs`g-LH9o!SYYrlV-wTNj;_8)D?SFCm-Jmayg zyGK}4T5h$vC;Nikj}!&Fuf`{|Wo2zsjWyK7*MwiizN8PN3*yUIH&uZX#-5L?6TErA z8l4Y6E~Niuz<8@|f2#jez|{$SW*u2o+a#M;ZO-Cccd2#Q@kzZc?YmDB$-MKJ(SHVjQ&kGJc7h`VK2fmLc;bUk3 zdCeMW@~7v9v7-*IM-H}>TiugV@k?a~yC+>fH$46?ffqbSS!>ue3bPv9;y&slz~8Ey zQNg^^N1XZBoOof`0G+haUdDsL$4>_W#T(ahzA*EwwqodLw+5u-Y%6W5A9(8t>6gRI zO$3}~Lia16rOdptX~)PN?4Td&NgDbzdvzG&8e~#0et@BcdyB13N`}gs@ zO)uy%aHHQeZ{m0N{vH2VYWC;p-kzXcBl0Bn)fv{6vM-nQ^c>8~pB*kJMW12+D#mjZ z+p-n{$o-!61B{=Ngf{vFO!UP3*?Jo$H~>RspudSH#| z&@?pjIqLe`vAP3y5v$uwtZoSL=0&_WVUiV2Cmyc2SIr3WBbZmOZ0O+`*$>JabbV}J zBX8c7@5$#uy5~J?njrbqciw~Iw^8^jrg1U8mSw>D7VB%|N+vR^XmQ!JjvC)I_iQft zzKWlrju&++iaEc1-iY-2IndP{@YZ%c_7`+;3_E%V^SW7|&j!Qu)2xG8*Uk;!U1%Mw z_Tm5Gs_+ztd<)ml80*`CVaK0+ z|C^hu@nf*gd-E&sgT__L+R^quq&8l~dCusJ=VR3Ga{Ip+Ue&kGp%9E(o7Uu0`v`qA z|GLuf+?-e_(I!++;aVd23f14H;dT3F$TF|MVd*K}z=tLWl1bTbqi zsuP{1e4>BmxhAedTrY9udgP<>;1kq&Yt5DXzN+yW_C~m}vSk!<;(FvnZm|1B*5I~1 zXP;lVg0rr?@d!88pg2QYwbk9a44H}Slx~ndE`v7Ljkazm!nY1D6xZM@^TX>!tE&$c z!;>Yxq17>Xg3rzZ@=xcE$gD5&1*!R#SuG!V5q!FtIV$130Q)0~8E1q1&+u>&wo1{6 zq4kneuD&Q{et%4ivN&LMqd&U~@JSZmK+GJzKYF>fXu;}9hlZfn=3S?ILp%N4n~!h0 zIy0+&!HVjs^L$zLr=Wud{MZ}uQzDyIhJm9U+18NBSupUyT>1RipMP~XXE88F?LW79 z()KshuUgU7Imzm-TUFGh@ymvIjy%2&=DLV?Pa%sdsF9R8g0-F2JjjPqo^3~7d{ynC zXG(c4##*cv`Kk8`Xvg)vxM#2!9g0kEt45ad?q23xpGzIQb3VK2vw*e~D;e-T(cHpd z_cq>bzz>VRWl_Twwj2`d)axJBfE?1g;WpZBK)$aA2y6|Pdsyo z5BrMeMRS4Cv&lcQV=z^#?(9l~w#V?BWzOm@3|%&cyeQ~83LN`rpw(N|g<#-aPgb}aFL@}scdZ%{08KK$+49TaC*fLssBIUP zeCTf?ZBHbYI1&2O+$YmV^7j)w-%oxWo)9YehjZKB;QleL*STKfdX?)HF41={FOQ*a zb!^>l+6*{tv-^%%IMtB%=Y4OjEZ?Ax^z42}3QkZ!CdCp<= z&MWudAzoPsPvwFy6R(Fa&9lT?`#p>8-{L+y+KJc0v;CfdZ-3)HLylS$+cDp|+{Ekg zJ0a@EhdSRHI9{Ksv87)auRr^;EuW4})tD~tTW?lDOUR_SWYYtzn>LVB%eu1}zgZ>v zK)L7bHCA^=9rE*0WObhm&-bvhVzt^_LZYN56E{uNw#u%`d0ei1+O!5EP;!wpW zY~NUPq19bD8QQIr|0G~y=F6`qSDJWw4m^N8jQ>k9bARKy9r#UnPX4pHp(Yk@_OjMN zjE&H7;no@9T;l0k zGe1CFF9NSrI=;I+dp>*5yp1DYB;yL0*Duq*z83;RA#+<2v8I*eA!Bz~^1&TY{lWsl zf;@74f$|$^O;|uaJ~Uw3UB`F|ps6o8`j?DvO41HMMr7Z_W^dp7O#!SjFv4>WYM z;NiQ02RbUKbm7Pf#pW|l6F5uEUHjKCM%J15pPHh`mI2rP6P&d_&ziL-`dMq!-nIX9 z)_};M*d%D9#A<5cx%I5sSl1Qrd9c#tJjc|A*8IHduKDeEz(WaZN8U01Hri^fz_-RY z+PT`slGotN=$u=CoI(C6Z?tW6Mm@6ppw=4M;5ACzNWS|o;_tekP2{55Ye!C+9A4UA zhHdy7G_njB)rROT3Vddb4}5uAcboBeU>l$v>2bZEp6cw^gZJ(6rP)3W*8S39W%Lzi ze2Xo=y~cO&sb_^p;XN{&HNK1I+5Pd1Z=@*-Zu{YoXUrVX{+zD_n^eP2cvN1A*8GCs z;B$6uQ`-jQ@j_(&quAZ`!R}9q7J-}mk{c7;-??Q*xRv|HpUE@5{!HGJKT|mq@!7!0 zclk5Nn%Wp6Lnj)bGy2lI#-E8Ujqq%YXWPpA{FyQ6QMzhCwUe{WZw0rart)6~tuX4!>}uqiS2V99-C5>#)~Wsu3$V z4DNu%@QiRjK-+33lX*+cFAZa>9o*x@B5RRxf5Cm@YemNAv))d{H-nxp&cz4lw?8WXD<`=c>-PWk;f9U^t8o4=i!;ELjl&m!iuS*6ZvA z9i_Rh;B(wR&IrE>KQ|-q^!G{Pcpcao><8(NV7vc~^Xww$^RJxGTb$3EozDe)zD#Y$ zqg=NB7!qRLb0VMk({)dr+x8>w|B&mSxth2%X4fy$vdxd5+wp@xml{3|?HK!?{Q|xA zzt<|5^rp zSCc1qS(edxZq8fEB4iNl<wWn`_R^AHexW_z2qZPj=uNI3>SQmwR@R<5%cC zUnTimKsU~1-%ro9s7WusU|Q!J@ZJ7ZOS&?%nM>A3Mc5ZpfFbo3eNXLNE_(|(mA-(v z!hVtN{$n?59LZ#a`kiP`z4Cea_mIy#uXl}nMqX$i zsLo@JKo@Sj>1*(U{2P)jk3$Eh9p2MkOs`MHeP*+sxj;_ayk|Lz@4l`boRl9<#$ef6+dtfb?@2Jxaf84 zgo(s=*%Q#@*7#pSo`QQOzy|n2v5uaLoMZ4hYvPQ|jQS1KhNYI$v<_&dgmoeOx~SFD z?#t`}zFoYMpM0jm#(rliBm_6|4!-Pnrh@!lC9Ek2J5OOIaO~lnybV?=_5ba&6=VY> zfN6i8^=1Y+XSuA)H*&Uu`5T|zPW*-KWAQEES1jf44)BqQPu+*VZNE8NA)}gg^`f?s z&^dB%_|;5w#ZMnRx9zuF zv!S(FTr;_5aFufz+Do_Px9WvQ(u3VAp(U4oj^V5Do<9&7rFD1hw9{?Guzg)GMMr79 zUB+6#-&p|cd8;a&b8E^>|N0#}eOd)I6*O;ojMawE{$1noe!t2C6S>As(kuVyz!e=? z+w`9fo!k1u-k+Q~UG;nW?@#Wjx4L`qvG*Xadup=6J@9Z(PiA-=>-;pXJEvGvW^zTg zArGEJmQ43G#Y=om31mYn@}&p9@0ntCPe9MK)m|BDLtpgN3=1naqNitQxQ+Q}TjQIS zZdnJ~SbMdv@rBw7hx2=Ycu#=8bHZ&e^9da0SzysRstsA8{GEDmp_ISiSF112xAA_+GS{a{+uA)z!2m+jv ztvUBAl+N?=d#&J1>W=4b3ZH&}xIiZ7R<3S5q}YJyt!c4i)C15tIEYOz1y7|-Eyz2wml8SHwyc)-Ynv1UFtMX;$j2wKpV6~-Wm<1eSY3Q* z0(qP5DddJS{x;4%kX&smTwwMgcA)39Zdn2>?jFRL@jnM07;-|EV5kNL@IMd?z55QG zzLm40eTT7C6V3Tq?tHOd@G{}wi{lB-x~XWqjpMde`wfoQjdO9F-Vev_^DD?b9D-l5 zo#%z)V}<>3+_tI@$H3DB?F@?J*T3@tI0nD%;CV0{PXxyk!7=NrCgp1w97DgCh-31q zb3*$B!$-hzJPF79p+os=#ndtm#$x&#t zf%sP${@XUryXdj9dvQL4_83>Fg7;-Bw!;UV(D6Lzcmi$JfP2yLnO+=cur6}rriP9g z-|*0Vmw@9l;Mmmn)OyFErBl%HT#odRO0fs(%p8RO^nJfd^)|5_r?XC1FYs`MQ0_v9r!{+ao3#hqi|Go6q z8Qr>fN7amO6VDwwCv=Ru<|A{Bl z!)?1W!W|3Ib)2bD0WLU;hRe?t2q&JL&F^#gUC&~RaP~$A`Z<+0O3-a(*!6ox`|5>f z#Vhu*?-yIDTkG5e>)Sqjq&B|#acE!+G%zyA@612r)>`!hc=ic@j7N5-yKm_(*48@H zu>!j@#@~00_Sc(z;n;WW*ztR@YftJoY?!LiY4uCpaZM}>S4}Ptx42__Ix`%9Zb&#D zFP&Cp1z)HlKkTU-E3`L{GnQ!UFm#09HM|FVv6-B~GU7#5qf_he;NEiV^1CL}-nH1l z4e8)H13c5-5Bj&Kc1k&?%#LF#h8<|6mPL32`**aKT*q3nYIOPlZT9&#;y*|O#$Ydu zYIDb*de|ct48P{IQ^5SG9nQOGTE-Zv7()g5?3L)XM4jT0snxaEXj(V70fW}j(WLJW z(N==JGoml=bL-80;UJ|tO3evy)$}sYeTVt+?p?kGnq0_rGuKUA3%KTU<;rj4*!Qoo z*FpCEb-Zir=a*CL`abCB|9&~G-}x7jlQ#cU>==Ib6l=&>E<8zF6?yiV0`WS3s0O;M zfi5HbjUB8w1acWKr8hahx1aU+M#2($+n}YeTK^v`}Kquy6vo&@yUxIFglv zY#tGg*9Ai4;F&qCW zvh8oft-DL%XUtGrF=U$djtUOZXoTMk-#G9*jIOccTE5O= zd`-FdMb-h6=xRMYo+kfDN?QGFE3Lkbx+$}k-`SNbxWL!?(N_J29X_MalxM!@{hk{h z%AnpL@kQm9tA^cOrSpaxHLYOFQeo-i!aCUyjP#P=VNtjluqqCA1hjC zbwI5oI8yFzisr8`dn;jji~}3X2HYcEv>%m z(D3V!)4t)=yBNptBh)AG<#hTV!VY8~O0G4mx)NH^d-fcqy|R@^yNKFk%X$@f^XV(P=>ufc=VV$5y)0cX9;()yH?`g|X`p7@Cl5dUkXJ-3~s_tWROVAHESCwgzAjdp0>x5>7Fl$(Gb>eDgC zEk26E2l{&szH!CV^T<^wq;5=P`S`Ax?7c1D>JR@I9$bvRDj`O~yR7YV8^6l9Blnd~ zyPwbGIq1bH_>|1aypOdYcue32(^+Dwp)vPf^yu=5Q+sjm;98w~D>;rUn5UEHCVOnX@04AO~a6I`Z~_t7{(; zjOvs5s2duPJnG#qvzGb!7VT($YKhBh4nEHLMXFn$xkP#E8I2W=54T`>@ze#2 ziF0$+2h7cm*Y9|>|MW)34i0KVTiPVxQJ>LTRm8RSkga(>reA~#px zbLgAM$7a_3lD*&jms0k~4)5G`i?!&d{MO7nmAs>OB}eor`F)IM-F6BVT8lQ(M&|0P z4{h928h*sIm)Ti%GxZX<_YmLrKzk1%e-oS;yPI0I31}aC_-vH6+mSu{$rVuil(>Fr~K$Le8oOwL_TL_9VLca zao+IXiQf7^%NKXOLL9Rofc?uDM3YCC=XX__9Ggj@uZeL>tPpQ7(*lYKn4X`24isfcHAs&+g9eLz#om@48P9KELbO<9@00>nC4mp!qHM zivi}BxlAyZ3D%<-*V!@g1pcAEdAM*+zpc5rop~r{PVob|bNbD0=Cs_IQ~V4I8Nb?{ zIMHeMzKgfJj&>9G+3l&$ndRUy4jl`RD{}kr2#+2Vj(^KmpW(i zR}3^~e(n!AXZH;}XUe0xm|XfLd6)K_k+<)eH_e&m&dgi+!1ERZ*WP*alXEbj{Qyn0 zE$p=)2Gmj8!26}x4__6$7qK56()@Ys2eUSY&!kJlZ+867UK_|hEm)Oz$X-)X{~Nn+ ztrH(qu3*4QvEhZQ7a4bgc3QaNx{#TP z>F_ghb7zM2X6352hS}bk-fnPQ}@Bt@P?V^zBSyXeHRle$^7MP+ZBb zm*n{DjegWQ!GEDKVXw-5m0uxJQQH&;2IZ;6=r;~ck~g^(@Ite54*zF+;A=0Wv7be< zDZ%q57sB|g(ishX6xGrU`b__6A9mIR{ znX9$TRbY_0di`5Y`-9lLzorc@&3=@*n#cIQ#yD1MEZ7;!>r(DW@;v?WPmbM!y&=1$ z4Vz}bd8!(Gp3Hc>^F+L_cb@1sjz8s6=P8?cGPX~(Jx||b9CH}MY_3^cGr3e>@`GsC z@G5Jy4Bns0^HaEPkuUB;CwA4(Sao>`o0IuaZaBe<75|40_=^{i6v1-rk0&i1Jo ze`mlsZ=86+pNC)8o8RrjPnJ*Km7m&&HI}b)6EVho{66{c;f&>rr*i&!z4A8T;YIn_ zMy2eNm5*O*DO>g}=sFzGp634F%kc5zD|@qs80RC{+NJo-XHpMxHa`C7$P{wwQ^VTd z7Y&q7%f|<9_DIWT4NvYG{$>SjWTOkl;*%PGCH50-w2Vp#x8|mXmFufK zlGfRMxjJRkYcXqia(min|6%fbdT4t;aGYelmq%U)b&z{=dv>9VU(wo`JQ+9dB%iz$ zt&x=z6lLtn{c2D?3i+F?Z=1%R%bg-Txc7JBYu8xs;nVnclkky@p9{V(v${8v%k_D3 zL9z1=Msk@`_*=CZTgKRaO2t>?lk(!d3LLqy6nM6OEM-gz`xa8e9pESd9-2p6D>IOv z&ER4#cy?nZ>&O{Z%%qw4iq_BWK99ZF@<*uqHlFoBGq!vJUTD73T3HEhw5M(&pKcpv z_$mi$?htPeOiG0DTKz+x5e5o zcapO*b!KGifrqyf_vze)?XH|h?XxR`N6Rw&^-C;&z5G~OKlJgDTdT&EL-zOCywjG! z8Ls%9X5%{*KW88ZdNQn)L4ET52%oc&ZF{WrM%gSq)ER>Z7xlm|;{7u0I-Pym13Y!_ z_bl4LGpXb=C7Q8opsgpgzkO2Q+#bkgZGes7BQM#V+nuZ{qS&l4#vEr&C_myKi0SHH zKK$k0FL;#PR${7t&NzrdyFTKv(L&ytz~5U8e;Qg@toBOmnC!3B4u7ki2)yni4ijw- zPVX$6i9@$z5zp^YL$~f4VjOrX=b1w6 zQt@{obX|B0{`jE$y#7uQxCoytcC@_@EAMe|O?ylEJpt`LwKcQfygfy(`ZdnH?SK}a zBJa8tIYNCWGastUR>!z&7`LC;n>!!7srg@JSud^!zB*tU3k}Q9d=L6dHjoX2VzBml z;LneNZ^kv~W*-x`9#n2_T2#z`ZzVh0MF;jl`;a zp?{Xl);o{SBoAR0xd*eu9XwY!!WSNQg+DwYKS1qx;lYjr|9+7Ef9>?&V%ka#x2XTe z`}&W=d!~PjS{H)d>3=)@N9$*X*8_cr$`6uJe#fjeHVQjK5%qrD|zP9oiiM|Pu7>4u<^Y5(o3^-;6!?2Cw&#t zR|zq0wOzQ#-bY#TU{>$^nP<8Gn4U!@mMpUOTox{Oo?ULsInA|s_HODzxzDmkLH1k8 z(xhi9gWcb7pQ&VDoI{_xkQY_h%T@TFehg2phbL>%HS&Fw!jt*%poyq-yVEXpUoNXy z!2WI8(eFpuFO+8myMM_Z=_tHZz!_okhsUu4wLcD<^i6UJj_04Rc|70x`eRy0s6Aph zZ>nv z<$p*lnX~&{25AET*2)S)2FZ^lwDBuTgJ4V;=n{uDVa)#R;a_Sq%2SBGUQhq@fbg-0K zR?3;y9+ZajzLj_LTMKh1o!f9e*ZE%ag6dMIT2KDsAuIKGGxwMCoZge4F5$Fm-c1j_ zkm1}*_3!wD`m@{ohVfO4|&Mq-@hG%f9?IyqkHK!Iv;$`w(Z7s zpQ!zX=KK!!#b8^!Xye1K^`?D|G3><1>>%}&z@cjUU@JzkWn$N`FA{o^ofRbZ9OE1l zW7l6#Y=|?%_iULGYGrKNv#C62&HY-=YR`Y>GodBL=eAw_4QwNRvt`>w; zL}P;Y2CQEWE&qA=6@B9=2S#k%TZWw9#yn4HDW?`5apjEn=hXY(FMV9{sG`=+5o#~= zg>t`+jQTopVg45GW9UvBj-f^u{Y{8GA!M=Ik#34(!_7>o{e@~lDX0ChbniLz)TCfM zHr{62yvsAC>5O#;`U%?5`)W)6F75H~CqM7VoAu6^Uv=jZo7`OsNG1nT%ESIVa1Pz- zzPp~ug!jGj+1UEnN3!?zcOZuxH}M#7$-cFqDH~pUEwUSZYSVs-$u~*RKDDmMr%UV1 z$G#G8Cg3YmtBc>#p6cEfQEmeKDH}M3oRQ8lD-ux$C#smi-SKCD~^ zui58C*#6)pQFngIx@>&bKBjrKVYKh
    SnzIuWdbQ~L`iaY4;Nm=EWP=q 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�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%0DX%c9C)4Fx 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

    REL(r2#6F(OteW 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 QPiO^}XQ?Yol3&H2er#d3)+}GsvUE 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

    x=lo z%$8;B>DvOc`9ubM%!5P10rBTmn@>VxjCQyfy#Z&1NmEJFG&y?FjrgqG=1Q)3U7Vfq zX`-#ruVeSCs@-0-i*vEH9~Ax@kn@3Y1}bdFyO$3l^>8MB8#a;Fh93o%LzZAx+M5cX)1Wl7Di!hK40~e0SHJ=Z=q_8(u3g;a>(9f?X7okZ9RXtO-XUjH$oBz(a za}1l8J;$T`@3o-M8XLx6$Q;?VnfoxckJB8jM_&AeuBaULp5TR6lw#O5+~4eV?i)pu z-PdrGqCTEt7gdgZ!{ieDeMFd4OoE)u30j)0%&4(Iz&y9L;WdZ`DR1`cNJ8u+Tzoh3 zWOv#p>xQb5ff(<2q^?xz*P?{i1Ae`D6#Utsrz_%T-EthvcPlZsgLYa|@NP#OX#VZ> z6XuTPbH}LK9&TdS8oI~elb;p&B$5WzqLUi11hHLOv3V6#WuX5jFsao-a5@zl6l196(k}`Un9)1Rc4tNGURa6|M~g+?gWr5b^!BmiF7- zN~ss>Zw-t|#>GE90S8dQwcyPsUoLU#wAh~+!_3@kc88IkFL~F;w@ZuWZIa7Jh+_R# zLCNH>R9yOJtNtLDMA43Mm)jKoz)i9|Z)OAXK3O^MpA9V$l;pPdwW3V&Rn>x%l#{wf z-;xleNaY}6o3$zc25={|_Sx$vgq3T>j}dal_5WJ%NIebCM*wsCBy`rbXty|eiHUU} zppa)?UiiCJE^w9eoxi{(=VQ-#qYYXp8S#0t9cU)Ar`r7UZONl;u-Jp>KW|_Zc0PW= zy3e+#CVfy(wyeeNTL52qfEydoWKW~_BKJ_dS+e=s?CM(dbUXKbqS0$^c(y@ajXm9W z+#c?$?)@fP^r;5c+8@grduJnl*^>XkGcc~;*`&Rhx;B;ppT379ro)syAcbKBx^J|h2(qg{zu)*-_Su?Y{82N#aBeYN^VE=x{6C>(G?MB#Aopf z#m}?Y{WTGU^}W{V2W1MfmMR?vf-A_cBD4a^d?a-@h<;xW6P-TF+;hXBOeLKFuvkH* zzKZerUqwXN*~~BlLXwCHdJ(r!58T4|(6&s$+pA#1D(k+&{6gz@g~bc4dWGS7j=wW) z=M|PNwAvL`UTEt^_lnJ8hENIs2=3m7zrNAj&(8oYH{4Z~_^b+^S#;ArD!UKMj`r_m zt+WsV8>u6Gte(DJC)@pN_4Hj&R?^`v*#;Qw>((VUN4!o6uPgK-$$*weSKVL8#C0=+ z{UB2!ms%;yU#%~CS@%{g{-e&lS&RRUWi{CmFs>(Bn%4~FyiUsf(AQfnY(^x2~Lf_Gyk+89v&4y z!71H+DEdF!L&*Q?JOU0-CGrdZR8RWT|G|)2-e9`J4pk)N3R`cvVa#rsv4@4@Y&iz<(N;jPFQB~Un z%j#N1qOdO&Z_1fc+>dK#yS7iQjcZ2{1IhB>fEKRJA@lT}NJGz=ay*c0r`K5^g(1hh zQcMji9XU~e6&udT^K3kl9i~GxG?S7|;6~TxVJbG!j)99qsn)v%C_&3LeE>Jfv4yR4 z>qPHy6Yw9?3g<8vOq8DC@-tnGvjmI7_}XHb#<&HE)7f)!yNO0PH&=b6L=>~9Qw+z3 z!mlq;H-Jn|azh{!Zj1{_Pe?Wy4n#k(m*S13MQCZt<4Xfb>=(VD9EsZf;yiQ{IMGl@ zOj})Bg;SUWaz>)Bnb;74Q}vzPS<~$8Yk~oEw*)aai6{wA^!^)BwC9R1yNjoWj=Jpv zzV@Fo8!O#j(VRFP#PH!T+1{uO5}aX^Qi+@k%u12qxQcbxyLH)tlE>Q6OM59C<@fPr zIF^-t?S$bi741ODEy*zn_Z=6#Cc9h?b$4;!1dA11dY-mnqJc?(V`UgEdMr;b%0WVS zUf!PD7JQ>Bry@V|Y|~3+SxlstTj^4A>bXhDv1X{?H!%t!gmp)$uD87mham<=B2Nyht?o6R|B5N5kXTet!%qB-z&9X6yMCc-cm4 z6H0|YtG4#mH^}g+1rq!DzZLLh&;h9kxKthAEOfk329TAm`X4&&dplgF`z2h>fR@zG zB4KH7cV{Q|b#?dS*#4?{eCM-{o}7^K1FJi(ZgkdtjM&Abs;e?ab4VIZzlnOg%?&Y| zv-*YpVi}j@z^GeV--%kbcuiB%QLr6^bH%@Ztm$KDKD$I31~KN^~{)`4__&4k<&y+_me7C)=-nZiB%1|B@FB3XW)eW=Ng zm5~9tdvd(9wq_RNu_Wtdkeb`DelC-uXhYbojpFUl5EPgkUJJfcWARq(=3|0E_ThG<|*M&JkJ%Ex<2z93Og6h*gThC>O7XY zj_IX+mhdsT6oj~#;VWbwEr57Z=9$f0tFu?^0cZp$|ufw9oDM>}v7Eo=^G#a~&q z;qfr`AX|_>h1TQt!90v??#MARdum)GNeq$%Q@x;(T@H85cd4zY(7Y(N`-O@%;nfCY1XHsc=@80Vqxd0veYQJJ{C&`x`Dp5%?X?c~ zoZ0WK`GfNJ^Job;T{MOpDW3w!yTm6#_dq+it6br0gv(~qT|N{XX28Lec45x|qw{kZ zmyMVyt$@dq+QIqccy1iT5vNbKxf|25JxNue`#00FQo*qms@kL*L{le6??FVkm~X?N zhsHgM7=V)HXbX_{I<+@EWeqSO4b%qNiXm-T3v9oHwo){;ire5XTvzl?8RVCyH+j1m zH;n`t0Sr@>a}RhV>N9s^w2BIq=n4q1D+v|@IKC9aiFjFLDD8CYidJerxd7LZ zRHlwX=a!y;eu9J*;EMTK%)9P+QD$eG`>Axg!sFaYj1^onvk@Z2rq|#M+VQ`bIxd=1 zO~31A*j?)0-C26q>TY44LnF=Vs8>T%~8u9mhx1B^hfIGyK2kIr4zUVx8prHGx z;hw4bXRDSI;+!snL#aIpr_MX``%varX7&mL(@uH?ykj%5Gn}g z=wF@PB^ys?@bAmW*F?IDerexPxcE|CrT<7=M2E}cV@NhwZszlBRDgUuo$_dE4XE#l zPH0OdpJgq$K1TzBc?Fa}r)+)YKCQZ8GFOhD-^sZavmrcD_#W*_mH$h6UtT-2GwjSk z(E=%Ea?+^3TiB`sIIJ=nqSClUXWRxU;9#wJlWcYy)6&U;DP(W9o3t8j(Z%hfIqhJE zPZi*vej5AZkYl)MrTnubK0RSs9A-sN-}=NupgSCFzVu7nmMTtcACDnD_N^#{;5L!t zG%~gRP5TDfF3{;Ph{FB7jZ#KP7>hgv`lQsy6QsS0yg+oB|&}M4d;F$jT^J{Ttq(Qxqw1j74 z`?k>P7V$8!LA1q5r&t3@djZ?4#R>!Tj zP-p<8w_G!@9|M&S3+5t$a?$rkEAEksAD9eE64-Uc#UgH@-Q<9Ly~NJ&w2|}Vr6b!G z{8UKTJkK@?Ad1nu#bW2tb_7gKY+u(;>?e5uXVZQjv3whOx|39WVjk_4qDQxQvXKWIS$ zGK_pO=0OIawj8a%B!frBuAwd5^R!1HXs*Y)@UAE`m z2F@>CrRZby>liHbj6v=K5BFvZghY9djR2;izsoH#yMg3xKoG-f-hnrq5@Ozul#}~E zID3-`gADx9#S8lQlc|c@%NorETPd2Eumgf!3O5dr^h%~ozx~hPn&#q@0PIM8CzfiJD-z?)Cs-4o+jxJZd!@n;Z7(-hSn3TcVNAI{wG)A}?HUM#p z(|G;rbORAUOA}~QhFtqp>m%2^vE~a(kmwT5ogNrL-Gl*Lz)Ak1t9wuW1E!sXOJeC< z_oo(fdz4Zrh4X5P=@e)}&Wdi7N=UtomaI7ddcl5yLL7HC&8o*Q{bSrXmLMC&KZc*p+5Hw=m8iFp5+u7!T3GsRj4_Q{-&$A`?-Jxr}LEbSF4X+4o7rb z??C$r!p~vi&TAd<`>WR+-M!}9WowRJYaNjq?V~l?0 zy5BbpL0YjSn%su!v=ba8JcPVc>x>q27Z`su6!hm+Uwwn!fwDp~I7}KiHt*eae{8#* z&~C@K+r!=#*X`tXm^@TKW$5Lfn(?2TsNt1`s*Zq#|2et|%{4U&ait811<{B-FR6kZ ziBJatL`#`RlZmSY&)b=4dK!xa&{v>fyh-!jLeybG5TSEUu zk`stG4{byE;Y_Y%pcU3viH#Q9j*EoA(?x88$p!M|=DowOM<>A(^4nu$e~Qp71#vvA zS~v56hdn7Os*KZS|xFDV(J5< z?c)uSdk}S_jl%ly7@-9@zrwTO{TJZ-6btluQfQ&rRqeiiU!xJMk=6$da&1FipRE-o zE~g;BbIw<5wZ73us*4MNWl!Ys3hCSs3|T2w?VQA33CFJq#r!v^B*H)KI!&SariQ+S z^L$L*Z}RHn*u~wib9W=}_E6>?&FsyR`wNApKtDCy>nC_As?vBz+r@w1{UE8tyV^0f zvDV){EZj#0zq>H~{QAGC+UCT_2MEX=0{%%P+4I+=0*-&kAxC>m%aSI$#}Ab3igtHZ zyFa;`+fwfPS z#0lY9F9#mTyt2Ptjm_xD-yC>^KBUhE` z2XocG2wV#SJVt69(EU9nzqn*?5j62RKJ#rXX^Q4>H8{0-(wPGAs2~MWvEM9FJo$il5BRgXD_Q{$<`rwIJA;uz;cB|p zNUH1NpdJt1?`E-B8>ZC9?Pa`9GHrM`JI;v*NrdjTWVxXNQKJ z<^ETjOCdG6gE_^)Jh*|lumbp2^v-u8>KD$j0c-7R&i9W_svu5?-{#LZK*G0`-0dYp zRPw(oxtHW?@np%~DB1G7chYaD_$PArRBkVpR%1fDq~h0ex0US95>wZE-3f|wmJRrk za_zA)nT>vxlVi;8`s`Pqlx;XJ2OII4z}Q7Ow*>>Og{ifS+JiJ`1s{(V`e`QjD4(iS zj_^G}x@3#cXS4}Q;Ul^s#M+duH_R`Hv`Wxo6Lkh$e(T#Fg_xneu<09!H(0N=a|0q3 zf6#ilS{i*qydV7FP^eTe(R)mzLa~T}#4F{mSM0m0RPaGzf2i1775lVo$5rfDP=5tn zVILRv&%(_v+1hNH5%HiFi9_aKkvGA2Jj^z|4J1Zzz*v-g4zx`f7W%l@1}zd1pKal- zz6in(!E1FfY@XiZ6#Cv^Ikmt(EO5dCZ>|Lf38PLE?KXZdYAmxnz%yy zSG6`99WD|Nvjz*KU$Qu&FJa&Pv($@4Njr8zO{M@IvWVDqDPQNppS0WGs&+aIqZqK+ zHKl|XV^U)?Xjo-?EQ?>ku7~;)_Gc6JVW+FN?1L&Z;K_~|MGGtd4k^U&ge@%_0@Dc( zt670xq!rM&HX(*dj-kd4W(X8TCNX`+M-xoBSs#uN3W$mVkK#zz-wom09vi|4X&KqD zd}KVLr6*fIY|f6*wiFU+;QA2f19+8hckV%Q6^Vuyz3V2VX>N4y6sxN;P?2V-KJ3Vc20iR=bghrf`hx!U};uBln++j(yD*3YNOWR!c!XQwkT(l zCsX!fH-6w7GLC9Xu~DO2soPGXpC*r+v?iC?W3D09!DX!=%^#j19XZLH^OClAbqB!h!vPOHFVyTpVz0p9A4a9z2 zu@mcSkk!HlG=GeJ2}p_kziR%ZI&6KHom%aM;ujim7Q>A~cFwAPj^5i#4LJ8W-VER8 zOOp7mBx#2Vw4r|>KEt(Ve2{#;r^FHsqIV!6y#jtGf~b0P4WDP-4V*TDrP)0o)+V?R zu+7JSqDx?=g!k2yvjq^^#sNnKfEgTGvd-5!!%;_Q2StmUY;VV^38;gFhd^4Pa_l-NjKttOLax7&}AC!tzM7>B@oeg%57Eu6r%Hqu^iXn=3E`CqnGZzM%qR?_CR zUsFsO0*l=S;#$FR4gcgu3t(?=_uG&HWrKJNTN)>SRm2TD7wqvoJTYu&d?=(hgZOq) z6Ps!8aM;W7#u&ql$;l;2t3s#%9b9k=pjx{cGg0s7&cOg1g=hy<`**@=+u-)0w79l6 zMkQ-0?rh5mTR>I?Rip|39I2>=GsMVsKsv9HJDk6+18=+Ew8vl2ZCxE?UY4z^*YEAd zj(8Z|FJVUHP5x2jG#4BD88RaK5@)NS0~?_puWtdR+BG_lKvyOJbtF!7M0LZ4{9a1u zihsDx(y|=O7&TOc@?|#HVvJGV&a>oVJ!n%>{OfJ*#%@`XKB2_8SP&HaqYt{mx+^nwJbjndLM_1QT8vtQjos*_ z*{kWnN!{Ad4E@C}TiInlYwyKaZ*&pOfX^TQ?&_*O-es>>>QCl&XQy4?t_{4Jx&0XS z6ZUm&+c()2Y}Jf6C&*AZOzekXAI$>VIC@KhIMr5MJ%VPA6Lye9C#>#iOSo1q14`0# zhiNAFrF!{dyS?0Q*K}&*-_Q--RF(kej_t0_^Xk&7PJ6d=O~-ERCe7flELngsftS?q zR<{DV)^w>;>Yj>{v?dUNIUycT`lE3o2ZM2xxXKy>*{f6CfC3NE_^|kJ80jf~W`m=) z=;jIqSy@LrzN8(CAbC4#LS}POZi_kcSH|{3KQD22?e!8QE1S)mgG` zoHsJ85_0J32kPU1z!Oo`L{)=uvc``9n8Q`I0iyTqZFH&#oiI893qf~^=mWMq*%{Og z#Pd&+__)+4CCO87E_)>wSJp<}3f&vtP!?j23gLvs_Ejl%80%sF@N&3ecW67m;&&@Y z50?tiUs#bBb6kv1Qf6OG9hD%^fiN~6dUq-K220=%N*s6rIv}al-%j2fW>~*SVVt`( zL-y0eQ-(r}^w<5q;E|rVf2b?Lp+a8pP=ufIS$7zICjtn1tYn4TW4W^xj%vS|W?@|_ zdaqk-VTWTJKYZKh<&5B(s^Qm!y*)#2cqsU@lgVyL@LjsDqyV9Qn6Nf+j!>B?RKyhx zpwISol*7@4cpagWEZ$oa6$A}To!V(2zGQNks!du`HRLe)_S@k-C{3llLcbw745Guz zNfp!PE>C*Bv@a3L=3g0U4?$z2FvcDz8%r-#Iz*Zz7#f){SJ;8dkA9UM89j#ktyF7- z^M_3?ZH%^Zi`;+lQy9y@c&Nj@k@dccjCSeaP5{fxAJ%?2HBcJ%_fkq(1{jpRY@xWN z7jpn~0b^A#%VBNL34EoahKm7A7?f1MS_2Z$6BH7*$Ck}4)WHGK?M=-2aN>+fe-f-@ z#=#$suS-CX%_J$;6h~2x8`{zuX7A$z(LTKm^%qu)8qnd+Y4c;@{Lox*pICe!fW%~g z8kt6EFSqQ*X<_vZbz9x=owjrcz|+q?A8z?D1RrJKU&Aez5>y&)DL<0W-I7qx-dirV zVG@7tb@h`&jj%HWny292vD7lc)O?2@LTzS3=Rr2zM%R6cqN)hjI?AQUT;!6lD=l5iuK!7k&={L=~Q$$Wqiju*U+c*#De~@xxmdiuGYU2Qfvg zBvsvHMe)fVg0_~cni2$GZEax^CPim!;l3)ZAi7+fT|Z$#sgCB7y+KCZxD<9MoI_0G zByO=~10LLOp&OKdzmDj1Hh4Tcp;!YkJa{FAJq~_u37fF5IJd(=_AtpAFCQjcKi@Q3 zSY%fI){UD21<;lCbwno4g3i2$7 zdI{9FZ6n*5(ly-IhO_D5mT+_WSx)Z00Q>?lLDB_b1N4DdY;AS8IH`lA(M41A3tN)d z&3m(+Pka?5qF8xhzVY0jH?($`Rq;;Is%x%S*apkZR^TTQ-cn)rt1aCp2GYyZjRl|z zLO9;9BzJ;i36NM&N*^fV`wI84oZ&xe;qLwSZ-1wc^a3`mf>Uu< zJQWJXDHNRI%hqN{>!b$(h5wCP%)p@b9L>2g>5Oph|KaV;1N17Y{O^0J>fZY-y{}1k zC+X}RNLWG$AWMQEo2bCJprT}yag;$vouJO(ND~l4M2LWZh@=e&2oc#q1rs15gjEO# z5t6Woh^PpNfJlCyZ{6qV?m%#6-ap=Sp1anqTes@esk5K4EKQSaN9IN&>5en|jQy*9 zg0M@?c2xL)9cH8v`&;Us7xkpjt23}`Uuf^L2}}(b;%t`t5-)it#tz!E2*gdmOHwpQ zFD3f24^ZvizKvlzJic;A_clV4Pxt>)TODEVDW_=Ucd;+x@w5}e$h*7g_*ZSP-QCj! zI|_{RT_~z}2Sdz)Q}wNI_{~_8$c`;T6B_rC+aNweL`!j2v%WCD1>99!7;v7&)j*U^ z?ltH0){eYgPgeNJt0P8xY-W&z+7;I95}TjgEe2X0OSeW^K3dz7N1KrR%!V>h6V1iu zZp27K>u~=vnHjMf=gI5U9L`Uq7)eMVzWCZ=M$L7QsePE)3et(nUXZK1@WN&=VNbF& zir#stNYX*?|4t>5xC9VkZB-Ehx=5ly1K{NqVQ;|(D1ZXo=yT?~=ZgXeHpj0daGny& za(P4cU>fdEv$ZLa3;aW={}pBl472rJb2E$#S<=14*Yc2dz7Dta*dJmY7mQDn> zRLF0ZGoOTJ7#cwvccNV!{=#W<2`38H1a)W)=>@FUF0uY(BW8%m9{JH_h%u6;sHArJ zQ0WuPN;XvLSXNTWUS+)b54W(HU;07BPag!Z79Ns3PZ+-TUzF{^vOQ3C50yn1x?h*w z#xlD9qwJ|5zJTxnzi)P@;1I_UBdi2uJ_>Mul2LcnInbv3m#|r>g=l@|pOB!q2E%mn zAjnt-+OxoEc$&$X1*=Ke_rC0XG1)|%Wz7I0f{nO%xcrc42|F*^y}D)4Ntf6`$;nOf z*JoDBrUa94UZ?hoqC^jiD`z0}k}PzKb!Kl-S&hVWn8qNwd{y}tw^A4&#O?dzHeFe6 zpzbkw%Qr+qZ4*&zKnJzb;Qp#Bp-tR^aR4tvAFsMq%5hhy{Ab1E5CI}xa19s1!VSrj zP1t}=vL82TRQOkf%1qsv-j*YDNA36Xs;yQ0%2OK*o>VX?!fWP2o`pGc#Sa)G^_3cJI@tsCH56}C?>|%1= zYsSeJ4l$2wxK2L#T==<#+bsOT(lwwie2CoG-3i4#&&cnsHrabwjAYPK3bV6g(gU)m z%IOo(WJrnH8Lp4`Bfy2OW$iVRb8^jT;k%OLR<1 zI+G^}q-W_#Sa`CJ3W3Tv+i0X;Cp*0N;gjwtnKDUw=wEbh)vo#Ql z!;h)*3*9q7VGYSM7=W_sYo->HjFnVkvyFE626XP1*mOpJifFIo@|Fr37(Aa)aAtlv zZ&9>jP@Mpjq@h=X<|24Q#Zcj7zNP}bJs$t-AR*y&8a_p|j;6W$$fg=0o%50`LRN~M zN#Q~Q1qEhL2ie**w|UlD*L6U&0>H?r8E`Ghym${mV`6udo7|M=%Fx zG~#Mbz8tlWK5w|E$=%!Je(l0~=O2aNz{Y`3Kd#yTQPveQdF(-}JrI!z{?Cz$bQ5L9i@<>n zUC_cDP7iNOu5H!YBP+73Tyq;#mS&#lW}IbPF=+h~a!t`@tTw*bwDNl7D5VZzgPiaS z3;JKS%3m#eSqZlLk~OON6=H>H&hwd)96#Rz3%1y@uhAo6e7FMxSm%GxYL7HwMNa@c zMC$&}t(E6nvp=`m^R1ybOb^Pdtq%0|X*FvbvabNFGQ`co0K<5osKX}F!VuwzA^dmrJBvb#Hw)HK*?Zx{=>G- zy7SC7`R@-R*l4yB@nM1rX((MAJ@qjHwG_347WF&Y?7=qo{T7ue+sruae%EHtwz=PH zE0cXK7&7=oa*nJS!N62j371XB`ct&nY9l~h^jNT45QKW`BV8h*QJ}<^e7wB(EE3#|I z!_NL&E=lfit0D}8O=w0G8zR8Q*&vlk740N#1bi{1SNTXLm7&6#jlaQxI4es`yV2%u zKx_%#09;ejyG%{a>&WhC->fg!v;$(lY8{xt!HF-Kd+q1v@)AreNy z#*mH?_~J^QmPryy9~@NBZigkObuu#`QlML)^$-!rBX`pHiCn^+Hk$y!r97+>=1qvX z3wqp6P&Dx!6?Y(&4cd0cmXdo>(l8!WA-*WC%CZ|_Na|a%7;ftrOL;=s*v~q$ zABXU8Yvt@NB6mt3Uq(FBA(4{oH4h@J1}#NWsyRUrGK4{8VZx0zeS;XP_6<;Jm)L&E zX+7Ca+1sp(vF*eN1oJ<@0qOKFnpk&0R|WYxME}wBO=guyTz_~Pk|m)+1TsN zU1#0bo4?MsPS*5*sP%SaO7xRt94>sP&0PQr5&;sJ-Iuo!C7LN9yvGa36U&;9V;Kw< zr(@}aZjjH`)Sb~!y~&c^?D#Q$@t8^%;L=M!j|FRMr1;ieO68QAlw97M|6q*2Y)pk< zHx9j%;tAGxq(Ev2XnkdCR=t^VTfVXTqU>@1(1;xnbh4faXN8Z#G-LHSZGw+l{OVeW+?;wTNpz5AZ%Ttx)Xdsu+M z4gd<>&Deu(+odWYSR;&NrM*nb3CdtRZXL-98r^ff{|<;joFFuT-pNYSB-7zQmaieE z47vkhFcN_ARC#}NK70-Xi}oi=mV-pek>p=g&TnQnkR{c|Q@F~pm?OLf19MPj6dBBD z3?i+I3kyyY^WJi}D&4%du_yTnwdPYuYG~&6gt0WT4IXG?c}i9%g<{hnWX1F44czlq0b zB1xFCTS=<%;OE^7N7@NraW8z?Ui>m!cZ$R`h&V=urkP-2j+Gi$St5Uz(6BWFB3%SP z?IJXhZzVpQ22fK5caqrMv750klBz9kyNUHdm!rxue+n~)dC16%h0tfw^@K^Q;?1tZ zC5*W&rqi(uEV6F8u$8JgDYRWppiD?9VZJIT-R6%2E$Oub$xm45Aed#WtWFOkS41<6 zv6$k5Ptp|fVQP|0A@Bj^d)^n`@80L%Pk@RvJJq=hfvofgdXk5jACDP&6>Ni?kzw<2 zHyHd>YN!%qf}OA`uJXba(KrYjKcUSXXiGZJCnx)i1Sw||J=UcUVh5$|)&zdY&Wv85 zU3OYdO6t=y!&UK^@XaXd0>#T2pV88&Me=>yR4s2J(=5A)$e~^fWnU<74S%???Nqm+ z%{I1;+0d5q)}uFx0;ikHgRT*4$aq|d+s?Pxw#N({t2VBAtjz30@=m zYrpi5l{MxfymPG!vkg*B@cC~zY$)8I87%aUKUwWa9K8^aohDaZe=LrCdA9op^-1>LbVt z-?aUHf&6YFwwzb`oXg)~?*dC5O?{HEG_nTbtskkUj)(`@VxPj6X~&jcYj12NJsq z1yg`6Q-E!Fz*#(I%XJ;gqyF#aUbn`-E82MW0Ff$O? zpX)s9W1UUO3Sat9_hkU^MrGUj3ZwHW=Igx%b?*OS#Gky%jLcWdoqf-_4Uig3|!0N%T;NN>ZRJJ36EuQni5jvv5E_E5$CC1X|;4|XG zG}@uizhAJ0up@klC;vPBivPO&nQ0pxaT(|)Ne&K&QI+VPFdsjR_c(+oKeVf-VbBE@ zX5lHpmWUl>0 z2g`T4aJS=&-Q6IUAx)a#$ccKdbKghM>l}e7p$K>wM=4fE4y3RE5}0Bd(N#7Od$TES zk&mXyi9Xw4ZX*(HN3c}8N45ETT=ia7=|i)#Q}-<_H6TjQ7Do9KL|Nv34Bf%sy0rQ$ zmX8X{U1dK~bu`0pisjr1^*+1ZA5tC{E!FbjqDPx~&fHfsg^k5_<11w8=q62= zh`&jwjdALLP3QFE4@IFgUCQ^fIs^>B6nhNGLb)}nTO9tGEEBS2X%{0qXw#0()XDYc zr}w&2Ja)xL#A7-?)IW|O8J3{~M-#qXSYVK-xN4GOahAI?bvLEbzpVsO+vBO{tk=E_ zh92v?>G5`?BFK)T&mZ5*!p$beDua8FCO%b6&ZzY<*tL@_BsW9bx1GzQEHbLFS<$wX{3^5L)tg( zxhW2NlC+cyTTrWYCRbzM4E;fT=*uzchz2NCevDk0@i4RR$!Nl7*$i?PI_@ zM15OwGdeDtC{u#vNp&S zQIWTVlDn2cgDmV%o~HT+QOWW;Di(-t^!|UPz^7Iv7eHDX+ z&7PXBr%>bbDa5jtU!hEuu;wSqljzzu0H*i)? zE=co7THOP!{=ruNK&yMOHT<&EO}7Cz9hcVW`2~^{tZj9_R%EoI$#XQHs%X+>l)_ck z0_6nV@!ad=Da&fhEEDz;S)wNpQX@!{ouQZvby1!y9HTJzv5Np%QjP(+Fd#AxNatnA zo!kS+V5i}vWXm;%`L7ZiZ9B=B7D~a1x2o?=p5uEds#itg7>@eSq58ZOW60ZK@aoMb zSzuh{AQ_^wq7o8A$%{mkU{-YrC?-bqmI}?rxAZ4VWzj)nJR;p!!T*x!;d?H$NxV7D z^rDXb_&km+wGnJdE>VCjOTV91FJx8n8mXcSC)CFeDVeTn=x}1@MJiU1r}IRNE+q7t zb9=fyS}?BYOMZqyF3~rC>`QP*7dv;ZZ@DF{tWKMV@Kdt}2=;a@=SW+SVuylk!|zCZ z7&Xz_q9%dH+&XA59_^x}=+yq?!AxMs5W4gZU%K0ue(LZV^GI!xCulCTU^{_ASW8wO zc2AOBZ+H(-5G!D6_9xGcdReuSi)LMYPxs z>KB=xseVB!GK;+8MWNP-%s6Iy*o9b)X7+sM{+xy9v-E2jRNSJ>AD6ioMKTm%wU0o2H>jC7 zH2WvXzE@A9nF?;EwOkZtq;f=IA^{Qif~g#++0!YJ(Q;eEd?yQIWIRZfvM0k>u7Oar z>5c5u$3jLIJSzddVwV&zo+*@|Bs;R~gO^@=g#m(X7=|HClfUh~=mm^z@WwI0-S3=LYi&DEbwa3C1 zX!}zz5y+K};8%HIiyd$!BScZj?n&)lDBOmUzb7r-n<8g99=F+y4l6!tp+0JFgz{KP zX|&Z1UxMAedK$nJTdUrTy$b9Ubi14|2r`VVBE1T1w6}DW+MDQIp}rwQWM4|2E(t53 z_t!8LuOg?I@Hy7e#cPUCo)cEae!0vLuxa(~NuDQB606>QnZF}*ca{9zOj=-3!H9~A z`qkzJEew(v^9~Rf!B+|>bbGWVXOzLLr)Q-B_mWW32zu;M69g#`TC{bQ9lBCdJJg&Y zLc%-(w+QXw!^C9?iV4LXAy|G*grOjUzWZqg1Ye$Izs}&4wgAM7A)9G-xVw}-fkZBQ z3b6OT&D~m&Kg9=pSeWshn6O2|w2xdpjUM6cz^_6YY!1QVkOaLI`jK=}juScKX!{!6BD>&zl1vPTxOuF0 z89Y`+c!U^NDCEY7DBUheuC>*>+D*GoSvu8z(N_IM+q7rM0WB>u-NOnE`sSzy`HnOx z?aa_t$b3Xejp)FecWKE98-t&sViRI@HHYDd7KQ2IRYszZFfIZGI71e9796lT>IzNT zfjTlzDc5+1b9cJ7zgYf~rGGKUHi6v{p|UZ!Uo-LuI3-y<2KZjcWIEb?LQ|4F)ig|B zx*Z!+q-JEGRBoVa%&vuUXH1dgU#6q3^cHig zH6`CH(Y#60e%#xTgg%Q30@7u)%H@7@Yt8PrOmcn2TKXAf-&Cqy@nE5`w{)k7#J{CG z*BPyS(=$P_`_b0}m?s81UeJIE3@;aPwcN&Z2M9x=C?e7jZ<5;Ak*+7nB$lhIWg9d> zHZ73gQaxdx@FzR*7sQk%`QuuCqxPQkMnqFwV(zNb5y@d=_QHeaZVLW{S?;)L8_CXp+pIP<8ZHLwg|#MS5s0?b6mrNkoAER`gD?Ns<7+fM_r= zwy2-l1TtUb+pcq6*Smv~YY`VgH9FF}iQ8hWJrn33i?blH8W=<%O?z*Z|ovF ziHV?T6eg|YPK<8dxBc9H*lH)sY?nrNTWnD8sh9x3gJ6$`Cpq*8V&$ z`_+xvEsfaC7PaV#BR|UasvLYZ(`^q8)Jk-?jl@`{hFX!750ayZIpy&5sFUC9NaUgB@c zl9Rj1aphs;)DS{@f=i~vVQ5OeFeljxb3IfcWx}mSqqK2Asnn0)))vYA5I$gdHNKXb z^bl#8oi=Img{Bb+?0ofMJ}>$l&7Yin0$%%hG&Wn3tKR5rb%R}njaG`u&a=(3CHbpW zd*P<0z|d~*XU6v*O6;9L_lCex$_&~}7FuQ^%bQ9a*EpGP+Gt}V-PoFZft==uOh_t$ z@CYlrPDllP(17sw`1nDLdAkA!+5CRGm~QC&=j>zoKf8}LBxp=Cf*L~x;n;9md-lzC zq+l4ieU*T9LJ$(uPF^bJ0Cq>yswR)?SqXEn*bgK-Ly{nxVI+a4Dt4Vr3T5-fmxTK* zgfw8J;7;NM`(j*18kezTE%vRb1NOCBT`9`Rkcw4a!!xeE4%D5q{xN}N^!J~)ht&4dtwWIL=U%0Q4!EGZ3Wi%QYc3!hw!atf3v zHg_?LbzH6>+aj8h9IaXSp;%x^avjH~qQ3ICy0o@0CqF^yN%kf5M99%1<%P!fzoJVb zQS@m8b4Z>VaO!oE4QssX$%khfUDpO+>l6u;0S3)s>Owpur!)^ICGbrDDC319!i&mK z71wiqXuq(rAO!$F*+Onz-xedxxC#9t`PwfV4s z<$mJr`xHgn^JRAo>iV|}Gbr!XpFpSftaE>H_7c!fUB{``H?5nvf7m96A;lJf;_uF0 zm+{W#@8y{kl9H4PZ(g5If^PE9x(2X1qRnq<3TXxMb}v06`NOvEzd;&YhE>2KDIulE zt=;abPP@8u)b`)q6Q6Pb>#b)LFmr_vuO^=sJLwrsLONh4YOk|qjtEfB;>rSRp4ijM zPoQO%^3piQWtRR&21&+MjO?0W$^=ajqL8KtwluPsY3%C{q*k_B@{q>&P{GP2e1t)I z11o3i1)AeT?5=}~Z1`&S6%_<1{_reWg7j`Kjf7o5;V7si6N)IjFo-8_#HuQkqd8jZ z2p^okZU8A-#4LF?=zeWx_hWXXpkNw`;vv0;@+clgO!r1|Ns(;nHzYDS6afq*v9Phr>cfy7LdrYz^(+;4 z+Jl)5E;o0}cggfUF@!mM|vYj!*zo)A%du1S`lMw-61Ru;b?k*U41&pHU5#a?ySaGp)l#T zYyuk zQ>$@%XmU3cH>i-WtsTI-;s4fSyV`NG6!NRYK5We?==m}L15A%qkCFyrNivmm>EL_@ z4WD2J>OGSD2z=-n_un!`R7d-m+n9az(AY9`thB6%P=)-9<8A8gqi1)FEh~KnrfQm> z`oZKhRHX=lB;F8JT|t!7<9d+OtEG*8Yj~AoYHcN0x1)P^wF}MtF8DvznoAJSqPbC7 zMuYdH2Z3x_i5)jxJ1I=z_}x;rV1r9&W_r8Ua@=!-FEGFOAZ@Q32)}KaNQfna@$zM&$=7DAm2`EE+Tk zF3b}~Ft)7=fJz;l1QE$%$Br~_FCnHzkkUkcorg2f@~0s}Ac_^C7J0-;<^nI1+$MQS z=Fjj@LFw7Ly&<*rsqJFBvCN$%BGmbUYGN%yP53bL6QEus3`qLoQH8(hN!;m|Y23FB zJ=$RkL>nb4q9|BIHvCLZ=((ywCrZ_tBB8~I4B8a_d#GW@m>Tg9MTSJTtidOJlefuc zea$7$N`sY+Iad@y=0GeWOfbw~;l}R;zbr61cK)5rHob3>O+;~u0!gw=M4#Ro1`w*s z;6Uj%3Q~~|Q9Uk2BEVkcB@$>HbHoW}ZQJ8MJ(s!sK4fHqk~)ij5s!&ynFmQc4gE}$ z+tDEn#=5ryf}5h3g6rXDnASAh<*UNK$0QuRaXU6{8{&3G-1fw+kK5+B%|>lU-!01g zDFfjJn&ll31#J6C&JzN7*+5H-%05KU${f{AjoSkIGnhABY3* z3$2n^(Q)$G+Kcdv;9@7gR(zry%IMe83ssuRBnM3Gw3I+13h#zGJ)V^szUTeL-Yvr? zTFW7%`D4x=clK3pCwjXbsj>{qWJdN)j9I+B;_Owdj?l>yxD_)ne~EYBt3CXjvnL|! z6*&bf2%A@z5=)Ri)BY+$~1N(uuOZXOdsdvanT;78!4>@PKp|#Xl zs{E7S(cbIdWv2&Q9HFy*_PBsG4O5yj*lQ*B*|`P%1D~8VDT8=QDj!UgIuSnPICMS9 zhYK8;Tf$vTD7L_{gh?_EAX8P=n&F4LZML0SR{I-|e}NgTU@J5Lw8tmoRA%I1D zJKOT@Fn5?x>lk%QqYw(Xq7-=^A*#3dVdx-16eiCQKmX{5xqghXx>s9<5>VKazC?}! z(}*9y8rE4}%P{tSw%;buhm+g->5g%pObZYpx(CK2Jc{{=ev+utc#Vc-6Z;xT_ko}q(S=+u z=`ni=3`0DCG-^w0);yW-b$zAenNoILhAq%@ssEFp;~C+j7Zh~u>6BS>Tq!-Vl#=4O zlC5y|j6xC7e_8DqZ0iVam6?d!BS^CS|>cF7g=b$JZ#WS>hvZv=e82Zabym1GE~2~x?3zI&B$ zRhbkWY&J)p`mquHev6R3f+0<4EVGj89qe-WkXa zcH!*;X~}mfiuuP=El8qRT)FZL>U^Ym;3&gn_BZA7(@2E4gr81|c>^mpye={)jM{*+ zTFEDZeYKJlytn=qDu*pPY3< zFQh;{`aOCplCIb^NmMXohY0`A#xZ+=M5T7yU04-d^QJJc>Z z6fA$)p%Z|+!pW!D1BY_f>BFsXBI%Dfgc9+Guq!4xh?p-(4@rLZF|h?HFM1oD-$Z_9 zwx#6e11b2;12hC@9B8MiX=;PU~P!FleLJ)*mr{OY16nG`9=8&?n& zjyhreBzwuC=w;GMX8d3k_7HAeSruVbToY-2&&P(B5`z zmMqA(qW{L*jIfn{VMfzdj-SP=rQ{Lts9h=pN`ECP8VJqFy9EYy~;ygXPk{s2atb;M2J*+WIZO#9b;4?J65x9->%BD$_ z6$s>iRB5U6r#iOoR2Oz^n%kP3p=^Mu5u9PI4746d9YGp0`*~=(jinHFPy&Ym;F}%d zH`Yn03Uo&7G*<7MAWr%XJ-{y7$+8lGYSavI`iaLBCpL+o?%fZx5Nn8 z18!nYHQXN06lL6QsD_`$Gr6MJW!3P*c!uW7 z*-$ksi)Xj$?6hk5W<0}c+Sv)!aC|%)P-0pAQ!2ET?$MCqJYKl0{Rgxpku>CH#v@+KmyfRM>Y>H@1;B2hGwmzJSrKF$L@h( zYs4cugKyI3EU)b^3)!6&ySaS3MT@#za|d+e|-b^bE0nI>OOpuB;O z7wd*(3&XxRJJ@QcP{HfYG zX5{huB1z4-zclXYOvXk7LY-hfpDgFPzTxs(xu4bcch>gnYWt^a`n02;Ywr#qd+tyDiCpVWI?k(FV5EL9QjS=6%ADl=(h~t>K(2NL6Tp~)z zuAZOUEyd1AH)j`hHEmwcZjH&$Ai?<};Zy+;(OC?-^rQX*_Fp!!Fd2dDIh%w}k|{Yv z8gEUAuHV@`x;qhcj)bD#xVv4qhgcDb=D?FTqjUJQogsSguA|+(N83F|+uEb;{-gav zN87KCcI%E#A2=GL0r2QEYQb0h7ma{VdM90mkUITA9FN z%IHr)+=5h6;B32Fs zz(khzf`ggmaUW=!{f7E>l7GUG?IoGsddnC@Ic_md45fw?_dg84^0;Nt7$m>>z-%_a zI0yRMjbUbXx@+_QFRlxwX^2(P3{#ko{7d=2j$XWOt&$OZE=Q zxQblgpX3 z(4%`0uDFYMEydqd+YONhO(hQZczm(q@M?k*a6LuJDjBZN&)Y}ch zY(JKwnl+%O=_7F3?f5LC+)4>jT?mYG?BWy~bBr7BT8VK%=b62aInl(@sVI%mjA=i^ zHNSUWNQlNWuk>$rl%ZEi@tS@+3+y^8Es`QYF1RF01%4d9Q2+p>PjkRH2@h(Nq8M=? zArPc-Q*l12vT2@CWlOS<)p{JbpyE4VX%Ir_A-P@yD6sgfe-s`c3->1{@&@{-(y7rQ zZ;eW(p)Fa#b=3hStFM3p)IBW5;Qp9q!}lDJ&`vbxRrqQ=Q>%-{X+G56o01D$rRE4| zD#$@}@0VCYwk^eNf7}ir zu^LD|L<0I)IdHAXzS{ zm1rxec0#JD-YQI`$BDW`*0>3sQiZH3O0=ki+>To{u7UJzL<|Of2+w0y7rcl* zL8V7#sj)*584Hd9*|Z%_C+(c9u9R-1N$z?N*L@QUM(a=XJq0XpEuyl46ajeN%1#|- z3X>-bJ%U3b2O?{rl8``I=>7AlR?6YPPpsY%oI*)m9VIfH9YmTR=GRc1byrpzLc0fOc6>wr1T)mkGr-61fsiqzH@{ z{2mMn7C_?w6gtxHn%p@FX$OWEe7B?!<>c8(OjAx@s_kj8kgh_1Dl6I%Gn2C?GYk;f zNc*bz@M}44SEP{S2r{X0PmudyZ9genXZgbnz@gdA46(ln8DN~ADC!iOK$AddnrTr= zCUqoVVJ!loL$nvuAxEQ&*C*?BELCvFWPX%};Ja8_DRC0ThrsrlKteA}v?|hEDq>2D zQUp3A+0dwd9G4qk|SRbL(fdu?=|jf<|O@Sc|a5$f~(zU}zG)Uff`O zeh;(AGDdg9kFYyW1~P!~a4mpAGKl~M;K(ewA=u+G(6wrs+*efanEA)4AWPPhmfh@% zc+c4arjI}+In9;O$-jyV-ep=CGygIBXHauf+Eyz0sq`cB!0}mL>!h+D3ek4+SO?zi zu%w8hD#_jI6XbG*$dv*O^oiQ9mJ8oa99|^-v5tplCYKaC@|5*wN85)P@-8A_SN!`h zOozY@lf#Zc{usU?s^evqBd&eWs;a4cZ1Zr#CnT4rc=g*kthFMNDPPQ;F%s}MgeF}f z&|T5;2|R~Wr8J;4E=x{en2IC1zLTy$&6Q(+^dzJ?ba>+9Uyt~X>FgEsrj-MX7b0E& zz_1J!WE9@SU4)T5%~j*$W0DIaO7T(sLlKN}siK*2Yl~HIAg7sJnLn!BC#RVy3MPCH z$bimcDbmsrL-%98dnc(x{me9VSei{(`{Xv>8Fa)1gCCoGxtm`==8s= z+6qvbTV8ReMsqs2h(V+nc163Kk?sn1XS=_q(XJ(BIHHzWwjDVF8nZ5`pvL;AXcY#S zJC;jC+)#Rw*@A)(Y6B?;mO%Sc(7h0HRvsUvvJ;ZStk#^yghUD7Z77=XV#PgHZ^C^Q z7DcGSS|tV9yLVhU%EBxIdtT|%D_DSEEfM`RweOY)z$t5P+EZ#lU25MhF+bB6LHuQ9 zux@daxZ0>;VPe|0;NLXuO75PBms1?&?OKutrxxggVIBbVr}2}!2S*) zwPT-uj#-=PT*t^|knSOm;aX9SYq5O(IiL1^Nl)gVYe+Uu&B#Ke{4`hh*;VZA`aXYY zpS!Hje#jXZ>heAY=SThS%6_}C&#mgSmBsZN`ocB+c6mS8Tv+566Z3Tw?a_Ys3|BCR zAW^q{Yn(rMoPB*d0+64_t|5`&Gmg@Uk0y- zOh4^ze^~~J@MZ6T;p3$;mUyKrgqA$IYRz#T)Zy9{Sup zYJR=B81uy*F#n)oQ9&#Zcb7OEBxHY}VYG_W$mC#-$3_hsbXOLNw|KYC^HG{p(A(*@ z1ag-9tD;2ou#kpyJUs>5$(V?Y)zHM@Kz$$*5#t)!K9(_zSLQ@%^j!O7zInc~(KjLw z-J`@;iL=tzX+HsXX%>-#?b)B_+z4|mEx!G@>eS)~)_IKpxsY6q}$d``uY*`Jy!GglP`GkGkj=<+U zbsxk3dx3qpFmF(|#8>b(MnzOZ8s8&*2_VF8SS&Ju=RE899{H%Y5WKiFIk_y&2o^S~ z4XE88aiw2tOB;Tx{zSUCDHvKYay5n3sM}Nfgu`0x=eoJZm2Z#w`Ub+baE@JUn9Pbd zJxmgxmW8p5Y9MNwrp}w1%qP-rbcGrQL;q#~`d^?*bi>ptth6RPj3+@JI*GSg!MSH>o?U$tf%XmBB0p|b`E<{Nm zkI`Wdim?A?)`aN)Dzo+89%YJwg0Plox)hCKpL0zLV-q3Lqf?0tbZ0h&-k?X6l2n*6G%JnXpq*&N5)H6c;!uws$A(d3 zI(~T6TaqO)&98qr2F!Q_=>xqi`5$gi&hGbH`uHC>yF?%VBZ6~mv3D+tL~Q1NNPkD@ zq~|%5ePXi?IljniT>i-0G|*fiXha;B*PP!W)oM`<@5NS?F3h8Kw=C$5@ZM}yCs?8h zgL*6h(@;2Z6jx+GQ01v?3BXJFe=^L1lnRls*6|Qa}sX z?g;l9j|iEe^Fo8?f^vuOhnihvA_sOUNI~r5HsE0KCwS0+T|FiuIN<6$hHXLenuhPP zY*L#|V=b%#KA%iZYs)nSrT(QqXdP`5py7`&d}lRBGB>N0h;}BjD$SF-hs*5Okt}J4 z@h6f3Ye1FfFBXYP=pWxMBshN-I6j@%m>iTv{i{0|GZ-ZX>S;a1p?l2_9+SM5Wz06` z@Ho9v!^HmCs=RU*1=41d*%@AihG?48P?cEWTmeNQPZ01kv(skLW)$+a6T?HQqOy{c z&}+I_tYsoHQ$@HJsi0iEF>U#5P;@uH6rI{Z*;veO$C4#5wsu5Y?78Nog|2Cd)2NXy zO63PPCFjh}{;<7&aeKRe`r5zbXW!W$X8rp8{1yAz zmHWX55GVtHtN@sOFpos8QYJzg>`ggCw+`DNY9z937X#Vi`$aBC5!-=c9Gna#*tNzj zBQ$nwdrux^{{{8I1{p^AL>=9aH z_a8v(PC3AT?EqVR0CNBT#DC*UApbepcxDh{t*k?4v+5C_7t&sRSymeb6qE6!KLp+68j-G9EsN zw;nkN2$qoUy4}N1cE@g3b+*X)Op)HP|AArZMm%>Au^lLW=D`$K?C@Xho<6dB>`5XG zQ|_P&_tRwE!Elp=TJ_)GBfVq~zDS?}FR1_sm{gRK`;Ni0P;+V?3G`Y~)@=$a>5g4hrx0?@N=5zsz{N@J0X97r{e(Kh2|O#vSgG+g#ff z=B^aqpI?a;(#g~O&Ob>BNt>j|R;x*2LJckGU<=;qT$@9v zEaG;MEf5MkOBNBt1Nmu&{PbLi$0cg4`bm@ETvupO2~{%Qy7rTMoJQ~h~Sg(cPv3=EkIF5KmWt%0hZe*lgAZip(41T)=J)<&!#U) zcwq#8ijHSvz_QRU^td#X@1T}_A>)ve=0oZ2hSla!itT1fWu*`JLoEqSh7+F&S> zc;a_rn~^UmR43~UfpmdFEnphW!hu#Nj4umji3simxvZJffbiUx1_(L9V2mSc_O@;+ ze_gJb_HpT#^sC5h1Y`VotqWlGDoyD~&ZW(K7{}RH4N9UhSyjn41bZCPPcjEy-k7Yf z6?(R|f3=c*JGFE1c8a3KL%_d$7SGEpe8Hae1Kbv?AQmDQW_DaOuV06CMMcY_dXb^? zbTs`+w)$v*v%V6>)z&p{@7222;P!xY=bDyco=EqMWUnkV)*%l%n=eY~kqjjSP31@p z8nn`}4cs4-{EVwWCnJ5^@R8zf7S|rJtWrXzo)hMir!O&o5ppZKN{nhHd07`@mB@k5 zcMTT+XD65OG-+6kvYDACw=FS%$3iO(5!#<;*10Nzp|f4<&t1c<1BOs8E@w@}?*=;QR3vq7DGRONQ{FGoS?f#cDOUIG-2mR&RY|8M`cVfo zGN0S%O;_$Gh(Q|(mQ$sLsm1;4kKeSF#Olyd=R3Q==~H<#vPF3g5hY|>Q4S{*EG;y$ zQx<|k)LjtIJ7_SlWTz0FlhQfSe|K&i<#8f=oi+z*lO0=nLt9;JYq{3v1GW8(+P;$f zq(ZxYoRbs`s_$DBI~Q3N&zT*E4I3k8PLpv4OC@1w#`tZmnX)MLZx$*#`?;2;s0T2ia!Oica zQ`WhGWCfI;1PRfHOC)jwYgVn3`Y4f2auZ9*4b|+g756IQZ>9^=qSzrJN#5I%ysdzF z!Rsm_Tdf3g-`ifT!jM&AFWR6pstpa3!&Zgjc+BL|Rvu&jws^lUS&qbn_Lbbu8a;p~ zv&YEcmOoOq-)sL=+3gA$$r|jw$$8TmWt0bvcDn8@$4ecjVlY5j$mOo|1nDGhFv9-^ zltg(2*FK&EapGFhIX>(#FXRZp5{9VlMu_S1T!jD6q%6Z z?~%2U`jl{q@C7V_%pg}Dqv!*8fVUyls%}oq<_Jk$q@tK1>_bP8qNI` zdFOU!omK~KT)O!?@x{0yK7Wp<>iGOA>?r8nCv8VJ3%QpbbN18CAH2+qcjCpDcssv% zkh)mj-C?$4_BEN`;jxS-=miXEit{ds@KW3w8qkOR&f7Dn13^GLr1z)`gsW;l{}O5I zKwpSVTC-jTw3uU$15-(IvSWQN^Nj?wa|4BH6aU`Sp<=fkljKHsd86CU?Hl;HANl&> zSOGD{g&=J_mq6cDtUg(ABG=9h?8jODK|PEK;dBV}Q!Nv8DeH)3+fm>9Mg$#cds9!m zGL~>dz7ftd9lJe_18qH6RpPnchrl`Wg4^`o>Fh6EsfAw25f;|b_9DL z1L!s+k3&9(8#96mL$vmc1LUykIW`wGn=u3VI57i6I4nQlTv&kVxb z#4YT4bys$L8+sWieR>A3beufcGDpXV>Lccd2<-WJa!4t;yAvUTP&|%T&^l$UeeK$$ z$EL~iSVve~UZKuP_V1E#+2?uSbLkO0q~vQ5m9o1gvkg$HW#VxN?vwQy@S+z&6JDYz zRM1lSP&nU~1se)0*rmwTIm;#r;&_5lLOaWCPsgwUw{a=yBexE?5;?UCI5A#VZD)gSgpVy@*S z1*_x~d)WA9yJFwQ z-pq+EU^V%a-TQ94>)l)5{cc;@ZbReJQ@2qBr9ZV0iWR?vor;%ft_rk4x~x(DJ0Qrk zAI|+f8V36_DA_pK5c zg0!Dk=%=@_lrsWwR*)Cd=|e$TbXA#xt4hxVpBymlF#GT>$@NWi>VL2fe4gjNPV^%J zOejx=!a%-^bD>bUC|Hos51Z_AY=*0)=v}qnr{N&y?M1TOT!tUq7FD|sA{MXVq zJ#sGKxM>kP4B4dkJT?S)v^Y|5`8WyvQHpzYDo6!z%-*U3fQMb!ZHmI%nYJe zpjTZzWSz@k)el550_2Owp?<8r;1B4Wn9hna{mURM{)i*&k#MDO2H=_aT)8D0&% zS|iL0$=*Z_a@V;m*;^QaiWnorQldap5jzb$o+XC{o>^swtkkN{qMs*w&yLT{OwL56 z2nQ1%W}g25s(?^fP2S-5mC55*q{QA#sDWHakSUP<qXKGPP6XteKt) z8md8x;6lYqzxx)3dR+3bV4KCTAY2LdT8U7mR@1x6vD%xN(yXD+&c*__55MjPuY6&c>kwR`y%?nwk>(o4ts3+Ji{(Z#CD`&$$&|MOkj+w5|0 z-Zv0i(-ccqH6~Ivb=;xjGdb1=cM*K*`6pA9F&L47dVKMKL_7u zH)i=70+5fXzS71IvYtFVzeZ2~G4sF8 z>}e6`Qt$nP=dOjCb9(Z4LK_oK5s)DP?-N9S3uJCT5Ce++ zM0uh6eG2~!?!Ki&P|WMmU1rGB%I*H9lHFV)LP|(C!SH0SDZ-)H08x(;7QoKrfW19Y z&Yw}vNBRT5QGCqKsFY_zv-#V+{leQCAK2dJ$=)SDBxDIHfqe$W30C$~?}~E5Z@U4kX~>Qn8<#Mzwa%K~0MgjtV;ou8O+b-FNvl*F zM32PRu3Bz{98A%S!DSmVFyfwih(R=fQ9lOL(wQRY$HJ2UBY;M4V?PULK{Jb@$jVct zrYLR2{plXfWIpo^_qQ+97*c2CV{J~lgW>Vzcbf1vw!2E|*0KkfcwQH=W6N*P_Z-+e z->Ye#^c~gx{JyrILG0STjR&OrHyr3Nb;D?IPc2d#tz!er%gL>XD?rc=ui9lZ@3n&>9~Hq zhKac{(wcf%?M1&8rHeX?ZE@VC40r^^(+#NAA1RKsRmCFXM*iv@5~GQXx;|Wjna@Oy)Z`?sZY5T>C1kP?byE`M zasSqu4j zij)3)S$~$Csgv^1{PME-S#oyo7*)+D@X4~r60YMwRaJ&yl$I&>;5kJp$gMY&f}5h0 zqZD-0xs=jr;1ss!yxM7r(-Krwtqy1xaoxO!ukH8q)A@un?spS9`ojbyA$#L|&eE%% zBG=_e-_?eVl~WMT+91 zx1zH2<@Fb6Uq2qHv<7XlsqM+#qWwlbt|(r65RVE`hod@jq>H#-{MGL&)WFDJ3Fj?* zZW*cMyn2a|yKgwcz2kpT#$9a5V%#*uf&Ab91eCxkJp@(t|IbfC14#R+$N+Ds5TjFX zpU#i@+l%fqOMb@HRs1wpr!Ir&zqu&pV=>wbFDdqbDLX~7fYtTenzB==$rXNLaaNb6 zEMubFs_K}zQOa&sL#Yn_zRSl9< z>f?w}n1Wahi^A&AU<;Li>K-gA;feocC5#bjKYb9D^iv5a@*yhG>3mM<>UFi#LE{{q z3DM1q`-4sw=(hFs3qcn^%^T|%^lkVoCXeev!_Z)C=O82dBp3Kvz9r(+_;qjDX~p+4 zVAE(S1Ez}9*1`UuqjK_8WxxMxZE$d^jdez~=~D;it2VrPo~E{VwfN#e({&buO6BA^ZoC}PIYV1ulls0uj3LP7xh=Us z936xGR)y}3_u=kUoSrXEslzABTY0F!)`5khcuR4mj#Me-2r$9|#9wkoRJhj*($UsG z1C-s&trfbp`7)2~Zv3m)Rj;4b?G1mMm*7*dyLn@o;;XqDlJi83s8n)um&&>1UiQc{ zYGhE$Zht_rOT~^?^iM!xa4jzeY`F%rY+Q9UCyKRDFj2Ha_v-gmtH`A$dW^@BZnc8;bPEk^e!fpUF)EK@J#4Aenh)>j?s_%=^ z_14y&rOwg!-*{Ya!$|3oqc_$x`q>d0Lfmi{&`UtH7uEnR=(yGB~^RY&8^=CHQGpx9Ah3Q(EkYIL& zWQr;)2w`YWhbnU>Gk>!`RyXT!f*!>vZSy@LwCl6e{*#q^$qxP|Q#Eumjw(bqZeS$C4a9d-oIbZhb@I@FB$$#RXK97V{ z{pp1Au_3u&_&Nhnlo;LXfE`yOARy_})TlB=s>wsckEv2MY|xL}M8~3+M0yLspt?%7 zH&3@oJXzzvn(2vB@{}URSbvo^KI7}{Dq07{lDxi!Yo`?wCot5xwWE4@J#qOPt`$oR z9lJW-h;M7<^v*Yw8>xdM+DM~(e@k4L{`ilI3KPZ7g4(aM7CMhrY;-*v;BRim4n$wB z%W|I#B;93_hzrFMfL?fhm`{1FcBD^HzL=tJ25tDbxT5wJs6Vrk6d{K z72=C{)REHV^EEZAR!3e%r^uoVg18}hQdskIO`ipP)ipRFCyyXNTdlVpWB*0P@wNC> z5|8>?uJV+wX?Jez)P?>DkTh-rGp{s0;6I%5EAw;X8k11E)rFrcFnfB3Lm629r2-tf zUnvCt6ch$bJ9GiGOln9e7cu68LlVPGl?W_}<{uSM{q4gqA+Vh+7F7A#j_m#pTh|dD z?w~?hxab>;jE~V}&>gF05e%wI>1!>$23bDkWbYYDcUpRfWcy)3<#59-GQN)ZLp(7p zn_8j7v+&R14<$%jQsqSXDZ6MJRFbh2Vp`z_s~jtPz6Cwl;Gv|TsI28=Yt$^|h|EwW zp6s7SA0<<{3=RtzYVy8r+4ACP%H1B_9UJeWC&G$W7rXfC7z3*eX|2clJ0|er2520f zRt!a1V)svv#dud4K2cub{oM#Zq+ddGOnJ3MzD?K=6t(iI&RRoQ3^*gXX3?yz^bzCG z6W|Ue6?GQcko(G}gwT1svxUbf(ZxMFxc|;%p;p%o?8Su5oz^KL4vab`y$*_s;yTO-Wd`_64GaalP}@x8hYeD!cW>3Z2A|w>!Mu z>B-hzC9-y{zO7W!Uhh1f<_QcJc#J22U69(>SdKwkHx%m++REWL%lBjf;ohTJ?alkdHxrFb5(C^BV0#q3fKG_egBMin zkk?ois7uSbn)cQ|)Nee1nNKpvINEU3_y^1$H+xKpqwGd`ohu$ZQDktPj5g{;d?LFL zr6T6f&c5mtQHKx(<8iWpMU9c-5%amJjFy%>NUwj?j(86m1V4T)aEcWl<~M*m!n`~| zp{#kV`2I^n_EocW-jQBjwt&Q;CV+#C)HMR_d<&}`uHV9U>LXwc<*Q(M{018B_Vgq}%v-mBWI09b;QtSu@^)Gv%cc*}A$V`rMiIW-O^GAP#BJ79nFjsu`bfx3 znR8?BjNzM{zDFQ93w2q>a9k{rl5kWx9YbJQ)3PDOzZ@y0(kO zvZ%m?K^rfdsHS6Mw`*}05i;`YOP&nb!@z=wY4DSsWrnM&q{Jj#7}8pPz5y5Pe_&Xy zvi}jUWFMN!wa?$C`1HxRq;W;VBvNAJ9XjqyUZnGFNopsh*^<OH=5gjxQIf0Z-g6E| zq7`ZOJxvB;Eb_vl3?bieE92Y06g$&Og zFk>oj$@w#ASE>Gyl5CKR7N>Iska#4`AQ5?$UVk1c6~_BU=WpdjsM1HmKi}c}Il;ai z!a2czn}`O=nLgYjI}|;#4KclV`8G?Z5%*xE<3S#%(=!daUQOU@OsoU(_UYf)ZwtC0 z2de~9$+jaL1oSEKV@b-K5@(_q)yd2UDsEz(#5$8ylYoDKWK*mPjCN&NQcg0(mtnpT ziKd#zw934X=zoy{CzcGoftPM_EirXmI^^ds^DGcq+!EcMr?gE|ij}Ypo zoA}!Q83EOi^T9lGB)=Wus`9J6(BEXRUxx9`WMzAK+~WpAdek|F703p|1>TOwaDud% zBpiuRMo0#DDl@CQvM>BAFo>+Cn)KkZvK_^{Et4IV*GIKjE&Hmjd3GVW#8hb_Iu zeKAfrk6E{qWpkX_AIEAH2&OG^%fnF*6Q*vcC#WUdd~VXGi3@)3=fIsT8jPZ@Nzbd2?EAcEMA!}H>!Hjkn06G;DN?Jf{IbGo3Y7k(7iWq3scW( zJTA7yl|AB>*0}8(RkFDI=Iw|77iG4JW%e9ZGT+3?G2CU7={i~&e?l zIM%h}%@->fhlMyviW@o^*3E3hE%OC6X8`=ZdfkxAH*t)934xM!3qBX2(VRg zP2rMOASrO?6LUJXAL1dx9C8hLC(iFUiGZeZ_M|C~TD(oNW5-Y5t#j`F)InN4n%YzP zwimq{ISgcDS}KATuTQXqx8gh~Bt>zy7z&KL-;U?MRwpfshXi8?q63RkY=0{Q`(V$2 zZ(^Ono^12I>V^r>qrv>36cavK)OLd0SO|4BGN4)Dgq)R7)EGPBS;d_ zF%7)m-`c0DtI?S|e(wG6PWNYr+GmFqp7rE#KYXLT&M5Vaq>#rTwHM6csy5ARe9_z0 za(oO-`br6S7ZOveqiDL0Q2D?20rVB1uJ9^cbAe*Ll(Tc;vT4aworTTgFCd&!{NOCc zT5=Rj6%)cNYKn-T6^cYFf{#7*M62mBmV7(~n}SD+|3#67z1=aSA%g8cF3kHoSR7@s zBkQ~y6~Xj}yHm_IYG1+y>?CCYp?xeZkn?foPB8m~x#P|K1Kj?Q+t`-HMSX>ZOnWXq z+#Tlr%_hUIGYRlQ_c3%tAJ@BL$o?WK_AIiU{q`(Zb>U+Y8}s3;Ei^mTV5w zK=~3@!A9AHa+DREN2foA2ulAvNb#JaYQhJu>z3GZN!7kQY}XIlD`QCaQ|M(3Pz2#B zo&XsMr{_*keh249S*t2(IH=x-X${v>ju@oF-z~h{I`CmDu95aE?v`H!M&ll3b||)b zK$Wqik6A5z7j2H41pLNq+;6ZsJlhg-Zukwh+9Iz(aJcM|>GN3I1fnMD!f?3FW^YMT zw=sMV-Ew$Q$RM!clWmBL7x!CoTaib7tIBTR&b@6nx2rnUe- z_lMF9o*cEFfDFg2ms0y}DwB$M3wX6ym0l=}w>q^o{E0xSHOrSYDDo;+iMG(XTG6^3 z-(#K@oea+gWcj=t#`S0rI)GTxEyOuG?=Pn?s_I*f!EY-+$ltAb(A6xQ#`cGlVhU;= zjk(j?4^z8Wd?YT`bW@e$L1zcz3 z6-k%rn|TVHz}%6Sl@Xvj8wfjpF2#Q-A?zfdQVp^J#);2DinJC`$nsR89E0IQpTH`| zn)O<= zQy!18~$UTji& z{d04HdK<5|2pD5{B-@T=`r z``#H>dQ=!VU1ibx6g^YrS!frd+bEMVsM;c&fkn)0g6TUTgd=emeW+6}SY&Zlhw^EJ zC!7-2sZsDh)E<%Ie``14x_w15r5w)BF|w}c7LAegXlb-~KIky44q_Q+FlA+&79#g~8{JsXx_%z-o2nXf%6pvr=CIipYyODy$B$_q}6OeYmw~WqHBnacZ6M;N;Q*Y771DxFijKMn71Beb1(Kk%jqSn^n=U5YbNc*!yp2GUt? zy0WdaMjcfN=RWKks`_01M{@bXmEbKOGJ=mMbJR6DMSdtcB_%h})!YIJ%Qh=M9}mWx zB-}nWp#FnoaiHiw_wsKzDlH}Vd0Ty`I z!}4oA^D*|SE3Ay?ax4K4DOD$Jjyra9JCim5h*jz{^-@xADoyh1V-~Qk@K0m08&8wm z3BD7vK*pje5BRHLBtkE?p3$~NS}ycQ&_2TTz(xiTCoK%ZLJAnBEHHkKL(vw2wAQuW zEisE{gvk~91MEo|GmFiU<1^hQf(vIE$0LX}%aWLw1~T~S1ClN|aJrQYqFmBT*w}xlj>G7g;(>9wi^QENE(Q28E zI#C1!!lvQOqp#^_!I40voDGma1h-h071#^xP9#TiS(y=1!d@`o!VUZDi>oK1hhH zg~Vmj|D7)QK8;vZj>KNG^z9`xwB(#Z06IWO;`=iaSIP&yX}?m=A?{sg_Lz=zEm59Q zJ)xPw3Q1urMK}VhL>~o+8zzQM94+g^QL_yl5Ja3!Q9`rn9InKPGA1lAys4JlFVL2w63mM!W0&7BD!|CBr1P+Ch|Yp!q4;p39AYLfWphh_apt z0O?(Yjta*CA+9BZ0DnWP_(xQu7H^oXEp!>Pe|#uQcu+J-fn1+PUOv@UZDpU^im-KE zLAYY*-oS_qMm-q~?MO?}oj&`{^m^Nt*=&R?(Tsm!#YdI}>!vK6^0_EQeI-`aFzXu2 zS-BUE1E50l`)xyrhbq9us>gMo)^fYS+_wyAuJmP#dnp-7X~*^|p!f$Ol^ngvCBnv7 z@5m7IYaZ{y`E_rB{3!(iUH3ylxGE*m?2T+eJCe|rJnB;to>Hk^UK~A2$^ZrMJ!bYc zTG6m0XvLBC4tp8{6B=6(K|-Wkx-f0IIc=blXTcOTX#~KM#fPTsL{qqDr!{E#!@|UE zI9zKdo95c!dkQr7r zTUXRah#sxBax3}+B$$>Vtl<SK;rp_Slh#4pPu3X?G@|z~+T_A&HyUjeGdh&jYW0TrfU+&B zErhUFeSaGi!wk_;tp_n`JecvtMl?j-Jror6dJ^4Y1XT`!G`s38)N?f__yOHdgO9$Z z*+sdM6kn^7FahpuX>A$rE&Kj9%+36oa0t*w^$%IY^wBDn&1q>zbUYIX)k)ofwb#&E zIHLA&gh=}7)-soY;bA(-7|`GiV!jXC28Mnp>$WnUDFlmF==vqft3z(5(aySUQa=jF z_;BSTp}k|T8iy$g9GsGAyBJgSqgu&iXj{HhV2caZ zcqo%7MpK$4YMj@aby%NrN41Fn!(5PRX-#l9fIq?UzhoGAdOg2Bc$BFvxIEI@Q8r3a;9fCeu^)6P3n=oi4yQBqEn6}By43RKkV{h>YO z=xk5I@F%Pe36x2TB_-T1AmjWi(`b5$UpNCW1(SlCLE18d%N=ra7$feJ2Bx34bif}B z#Std2=sBN~3%LNopQ=EmR$UENpc1{{Q}O^65c4N7EyYi0t3#9jwGgHt{f(oEn=RvQ zL-m|e-ce}`bd(!8TFE+_lHba5JrAxZZDBa-!id{)N0I@tABqvX`>jHjD0Q&{?&yQ# z$f;N?Nq>j?oNQKFRandp9k#(`C$e@`-;+J z0CQVTcj|0F5}B-2AY^tU`Wn;Et2EJiXCY$&{EMIsk}OoiVzvgwchno?AuA;vj(q88 zjhPWqy!Z2FG){dw|4?1fiq{+3#VA*G#`w}B&OHst8{y@HsgAC@^(N01U z>^M9ZoL`>4vkejWe@;UuMQ+41!{nw&Ec^g3>lT9uxEHbwIjO_K;)jQ;74!u?vsF9g zT2v!9ucvJDVtl0*`HkDX6UQl=MF8&-S+^uf(pia7{?Is@JrX?x$Dd6?4(5XsG$OKw zGMG(po!7n9Ks1wRc3-p>gzHAI9Q!*_&BI|APbkA04=djWoQixamFf@5zYi|cJqJa{ zD{mKbL+eR=irQBBfPyfYRr{Uaxcy=2_Jo{+dW?4!f5{gaaG(cd6{KZs5_>`;moNlj zuoM$ULM+L#6m5HwAKlje(o8apeLnN}0apO83Pga_sq#BWdpts#RT*i)lh6TAdQOj4 zQpuyQv1TLYhs7(_(WaMd+?xexYxq@nN2WNK1#}b|-Ns5$2HM<&5KaH#lK1H_sV3`w0$HQxn>b><)$!Xz>YD|yzEn!v zPO6y6>&Kx3cjqL&6Iy{~HHoi8duyLh9EnmsoA?V8cP0g#Fcjm{=}z^?yvOP9W4-;^ zxtAR_#^+(<>;*}PSf1kr>GjT&=dDnIel=-cj<{}LNsME|zK}rpR-}Bt0;K||PEPHl z)Zs9HgO9(N;B-=Vc7qoaODaHFp}ykXjXv&Au5L9vyqy*QVfPfa@rz&^#3PiACEV*cG8g>|? zHmv0BW7a-)|BqmYSwKbbOq^X6JCfcwDoPZva}C4-m^mYLXQsY0;Nq%%CXTNGecKmg zzcj3vt73PKpyF(2pCVbTOFK}5@%IVJ&+CqLX*UU)`5R@*v*up3bU}KJ_g9OONwNL) zxOt_*Pj8BiV?*Vl54Gb3wSpRwAf1-jr>M>>FY@?XaRD`7Q-=5eHMcsu$+??d+Mj&M zZvZtndGZ^jpGyOI@NN-vEtp{vMMeXB1SjA&EJ&^u%&4eszyq91rT1!>QB)M@R4`K~ zuUZvKPVQuC&hJvdO;&MT)OClnI)5CHBay3s92IM*O+yZ_)`pzC4LMmGa;kp^OuwW`Cjm<&X$B(X zCvYO;b!+OrBaWrP1jf`me9R~7e6_oLYnuEBJ`)8K!{J`5F=Lz0cp>Dp;$`%1Q{o30 zh14Gh_El~_*jEVCIHNE`t(qQSy&ozM2`fc+#2M)pHQZkl3!lM3!-^zp{Q0)plVfCy zuy3x$$PhZB1t8?WBY{Bj>OdfMjiv;KNv0_p&HF*GOu3$sXVFq2Tei8;g`Ns4@xP0X z{7W$o4>=Ss$SqJqpz2mZ#1tuo41Uk~Z@MPAmqbj*?Lh_qXkUll6`9=E{^Uu|DLVH) z7@xsf7S8@T82EZpuiK}4?+5TUN)9D&5LDWd_;)rz-p z6V^wvY_cdp6}%s-@D3b4{jZoN8M=}%O~FAb0IXbkn?W5RbO({7fE?>pd?<`JnZ+tG z|!xSGWE_017TrE@O7Ga;R#({mw zd>$sNr%hn`N+)c#Z#52k}{$Q9vN3M+M-2yPGqyaY~;_;-Mv0yH;+_d#r)e1KsKnl?EMw#a^+Komd;6*R8dnwYG})T@h^h5fv+&sSp+sEX5-VwPqB zJf`?B-t*ssFmoF~SRgS;SJhpq#`QdhphO2U*{7(8Z}JOs zlrt^cM*?IM3h{;*$o?Sd+?+k03$m}X^jeBG<@U2Qxf7%^4bXR|0Q7gv-vRSP-DMcG z8X+GSO1#)Nz2VNVcvvrRRZt2;SN` zS_27_O5ogqxuX_$Hk!I$sW3~*0^NbOB_&%~U#qvux^hE)u-1cmA}e*n>yZ48EZF>w zl_L0n>F++0-V(@!<7_D?E&T`@3e<~((S&q_=`%CUA6 z$PIF@Y(LM-VOFBtF2>M*E5@g>d zL2Ulh;5XjzmxoY>AIiMbZNJL=lNpY8U1VB>IVU*CeZ#W;ipqa#fTmd0DX5wk&`c2Q zVL1S|C>nv^Cb6FDK}PA&a~T>Y)U@dV0wTNuX%id3sXWLqvM|7~x++{6xwAplg2&*LX7mF+{>~?+c~+^cjD<7fbe=lCl4F z$vsy}sMFA9?vE76OE0@I`hjxcJP^Bg75aekKD)-(_Nr#fVqom4!>{plEZKbT7&1&n6cV)bp?m9l}HI$q|E9~9w>hg@X z(K#^nbmz3nr#dE(US$V`mAZe}}>nG*@_!30pKQmiV zvR86)mPHzgPWJLrc}rP=M81epP(dRr<((7jzn1FP8^ow>)>)UPFxE? zwSom&7sknj^~OhuaMpN(Hv`VB39VF`VGr}GCD;K6By3F)0Md4c`Pe4R#I|9d1pFy7 zKee>h&qYD1^<9zb-dD{-PxLkBq5AFIexAGi>Ac-9UF%PB`)SVCcAgp>kRYRdXKuS{ zv`H`ao!susvmfTRPWL|pKySm%10PQ?jP)Xmd*Y5^Xw_w|O|2!2mr^V;paCCaQbee;N==3l z4E5b;4>ugjo@hx6O=b&yA8uQ0h&0x5bS+vkf_7u1m~EUdM0*<$Sm!+;gEH3Eyc@bQ z(DrAf@J*?JdkIL57=kJNKMEvhi1;aKun{-p%81rmA!ALp-a~T|`cb_Ejc@x7p5fAZbgV^#}uF1-o6jY}4^T({SRd)Oq%cCu{GBrNMp%d^BWKQtewxt?nG1EPO(jG|2 zR;52Fym5Ccd~#Q&`0ZZjqEjn*A138$J?#?Up|-{cnAfZ3mW~*hIZ}*)eYs?FWEZ6v zki;sf203D^S6Ddq03h@-l0<<{z-#`%*9?55efXMeib%m5rxI(lQLnCn?rd{qVAq>Pa z_fEYw6ibxb)F#VN6GY{dwQqHKt-@MW$zd zT<%XS;8|3etmq#3eGwH=*aY>O<=HM%U%OjhOIEo}f<7^u+SBy|q9aL+UWKv5CI=FP zXAy)8Er2?@g1eT+cqh8dN2(waO?@vz;$pcr!OsE%?gQ-40<$`_LE8m2&{knz3j2IDW7(DKqAn#^8Noma*PQC$zVo#p9=tR4GtETvj;@g*7HfL&#pG13g$IRY;!RY=T zwzJz!-M?4ei4W@vrbXgb_>h(+(95cvcES)9sn8h&Dkur&J0wgTG@kjZyE|LasX)72 z>chZFlM$S-qVpWKY|KZ(5sakXsJGE0>9fm}LH5Sre|gdrMb@|V>8bT12Ta=&tlX_ z@4vGXh)^KY{}->C6*4R+D0Htg@oY=ca; z2(98;7LU1M%x%%0Hu>r!Z+_rE&2@QvU-<_|teq;DA{rsz^Tr8$L=cd9EsGFXOaV zdKOtlI^c+1yu7RJ#han9DKCnS4HTGJfk+15uZWAw*i`=#^9I#B^UD*EK&<5WnKJ{?&(u(()`YvriW1?@?XM8iTVtlis{mr(3 zcQD_A;xCKmiZS18?LvhC9M%c375R z2rJ7UV21pjZl7dtbvekNGX1H)JIS>)?n(O;I|$EtpxdRbBisRbj5jZrWWeEt15g4= zwUGobHJX4YDf&;;ijrg{D3f1PyDT~%iGizvHCQZP%lpU?STq~&Qy@n00XL=4qZ0i4 z26vC;8|iLluN8V=Ar0VC&I_nf&+_OFV1xlCSP>7U%#(#hq6>m|iYQ!-$vgGxp5E%* z6|~9q#IXOTD>IV2s`wid@Hx)TMLOnRrq_>eu+VZZF)HOw&XEw>{m z-^F&H1m+^3ECoGfJ0#@A)z_JgF+VO8h5Ng*gy0v6JsLeLC}N0d(&6kakvpV{aKM71ye*S*xAE(Uj^-u<9`EH2lAp09Q;9xH^i;DFHx`E8AV&gHcahH@}0w=(e0Rn2=@Eac}#-5BNh+ZAbrf_M}~Z zjOC}BT}+1Gpq1zAD13MT41souzYaz>l~VhV#l)9|>8_5yI`GlGMxQ_KkXa<62Rao74sy76u(QY(RCA=`ff&~{irfGGZR`cP3^gt`FqfiqWvPMtCcb-^FNpQ7*icaU>@{#K@|>?H3(L_!t=JzI<&U{h@b@ z)u&WDg>uC`iVG)(VoZq^rEdJAzWFEa#-WBRp;udWjS(`g-r*WYRx3hYkMY!tZco!_ z0D7|hXp*|oVz;9@39%$vq@Raq##Xn_w^duxNm-`k0;kv=c`gKcDMFjF4Y4U3G;xZT zBn-uq-c!3dR<RpBi1Mr=GJ@Ip1xTg%nqVLVD=;pLX+aEriyMs8;^=IiFH^SiKGd41$#^Ol zV$>tO6?zTG>0RA?S1CzoSEn1HFj+xa;0ohjS)(QfEkQI8Qt!+P^%+I9X3`Hcy+|Ha~G8FM%& z;s90W*kfF_dalyJM3J;t^bQOaWnu#fX-Dr8(CRiR3=VI7e4+iAv~LUSi3Rrbwk)i1 z245QT?E@z4447~*?0dt$Yc;qcS8nL})h?2Bb>c&L6izuWCGJ`HYao#V#+XiIHX>a+ zfBziJ#Ym>5hCeZlafF9;0-!qFe}JGvE4_PD!7sN6jjtKBl60D~ZE{~id^b`2%hr7Y z_uar<3Trd^1RH2JH1&%gR#b@(`{gsv2WFhd;e2w&756Z6m3LNioX{|>vh9KQ`|>Kw zjPqeE2vjJBelozFc1Mbl@0+Pz&TzWRC?D_R&kK{_eFS0y=E%_aetV-|08hh$$xjR} zBoJ3ONzUjF0zBs15CA0g^EaJa)i=<6V>4_o(F2Mp;~#DmpnCqXDxLpR*_|l(21Sr;)cbvcEYfMC`1kb+ zkBV?$VSJDy<8!~^n;G9_#qV? z`3oO8Rv9if@lJMx+Z>Z+0AlYX&H3a6OZSVSZ`!?m`$y4SdNL8PVeF5f%?K!og4I{J z$ya2(Pr`nmsqD4*A!NRs8VSO8At&5uE5;aRo|9@3RxZ28`tKnf*D9{{m8GR?iV; zB0(cL6+-}dajrDXXZqwUZh>;DG<_wYZ|@G_MGS8p0@I5-Lg0pwnLSm{-*WC=VAgq1 zW@bl$-CCM#^79d!n2_v93jE=fhMBoAHrKtK zBOwNpnN`!46iq9~^Z24jFvtv4y5xp=c2^zP90;5&4xizJA!Ud=nq|64bWbgv4-Iy1 zQ9Mze%qQG9!&?DZLgHiv22DaKPS_JPga&}mr~w5wUSUfMRuFzLylwV0LcOpKvqeCw z)-W$;`gNB45^?}+{Jdg6s>JuBz)-H2faYYhQb)F7VZl+z>xx_lfzbNxP~kk#M+0WJ zXMH&IBCy(CEzrkrt^?+faLt-t6bQOt4?qFH*w~ZAEWA}WEG@n?3scnemo|g?tbMCI zdRDlusTIi@C6dFq*C^oy~i)I&_-{0*9=djr{8aW`r1N+-JT4z`C zHTRTdPn-L)Q2?7->x{~AmK;w4Cwr|w$nTTB7q*L;w(b1(e*d<0?L)K>)?qW|az{Cc z=J8^9r#%XjmAr{cq>h*OWC>Z0SIP&4c^2>Cv$R^R`MR$Kox=v5=?mQ`0`?lOKv(ab z>PU;cUjO3W!#m$J-Hi_=<2EavY&SUzO-+rtK-e9NHsHji@gj*6d3@Mk zH#C-a2@S=$2n-@#L2|_!+jX_!%;To^a2;J?B^Z3sr45juGDSRsivz&3wq_63wEwI* z60vGEoM|0kWd3$`o{q%RIHXK`^5vBQequQg&)#n5K1DnG3Ey$T+j8UrPw%^~pE2$V z3k6_hc;Oz~NW}|9`LKA}Ls<-BJq%?YAmX6tjs`0uO*D#+nWG}s5AoM-6P3p;83L0j zE-pXDbb_%1e*-Au^H4!mtwfdrTAsU}b1_f#}>w7ZTVEbi-@-mC}MXG(Ek2gb#_6?+{JCLHR+E-}-7YRID z3vRR&J>JazgPJaFmQ#qG1pOj~myyVfk-wD2#-HtoFMU6>V*4H2{?T)tWI$w$plD^{I|v(NLmp=~1KzSNY$MW*Jqa63 zr+!5y8vlz1eC&(jj+u)1Sux1ZG}2!qy1Hlh-5zel>j*iMzaLnecrW}sE>kmPqXP50f?)`dtfqidRpwj5EjMZQ*({uf@pzCgByQ7yHwrH<3N8dXF%d7fU14mub+d&;O6YTD6YTL@rtMZ+ zcZJ!HK5CD3*zGm@bk}=tJO+i_d+o<{yP?V+o^T6@q@wI+qd6pOFYCpR>@`RUu%MM* z*t?428i>7E!ip!kor*yuq?43_k&u0<0T@R7BVbfH!Y8H3cL_JIu-!$ZLx4sg*Z$~w z)CZG$2JD+$z41erl2*i9gpm}nZYN!ZKJ2ZkO?CjUq)r6Cqn`z+Q+pFh!aZU2a1TIV zT+=nEC%+f5b@Id(<`>CVsf`NgOU*kP1jeG?*6qy7;Tn|)-2QTCKKl4A>?>7HN^qPt z=1eZ$d(!%;pqfPDdYbi3K=S%}=STBEU<|v!zHsgBYWPZDRk~M0!!Vt)>O6Txz(pf}R^#pfAODlBpb} z!>j_Bg)$FS3&tt-qtV#{oDFVPk9wxQTZ%5{2EqT-+i0UIA4pBFJNFHD?iKb6!yfG{ zq`KJq)sUWa2q5w0T4^rgakG8?k2JiBzgHUf!15gH{GU~t><>13-!%83>;#h;$JC0V zd0$0_##|k(5K+vjw10}*}BbMX(giVJ`SYI}ODIW|IxdfIHx51zci^&T~f-3-m zg#bM4%Oo=tq!eOVS8&n}$9UsxwA>?KYur5jqpXS{VK4bR8oYVdWSND(lD(8K2GQCP z+_?8@Qf?P{^a*^#(J)yQoe<|g_V$3cpLl<}c)a`pD$MxS1DH7~HcZXX?$*%J+K zJc0(6-<0nSUPFgM=OllkmR}T|raF!2H(vX&^c(JBK!U`Jsuah?9Ll7CI zMn{=|CRMSq;)1fIBi%|)ZPHPax0UhK8X{pz-jNN0&tS9TjEZRIJOA0~Z{JVe=B|PKjmz?K_{+MJvnn!e$3V-5nGV(DbfG~4q;v(!5k(myhigs z5$1n>*!PG1T^0@iMrTw#h-ZqLi?J=|{8@{R1ql)r=+eCqo@%z2?HRsH+Wh2cR#bek zx$i<|tOTE-?Viu7ojdh`=pnf0=PbnF&wU z>}|R7+a9!nU{fq6FKW>?lfQ&RFKmU(@$d z$?{m|7Dv%3{tP6A6qhlo3qp+s#22O|wm4Z%RKyxWXjy@9=V0$nR^DNoz_#d# zs+9n+hC1>RELpJ-#vtt)wP7tN*bIDa%UCSISXHXCOeL0E&N#F3yJEO#UEA@-9+>L& zFN1*gKtLzhYHZuHDg33xR$*(l&-M2x+gSTr3vY|+w}q=;!zgSQt&mG8PzD1mutS|K zRu6i5~>Gwi6uHfT8$MG9F`u0u>NZ zgzs?y%^B}kHg!NFmr$p`ljOCeZ(o%h8TO09z7+QF4Eye|uY`Rb_RX;0d?gB#YT;>s zew~+Y&Zfo_bj8@Keuz;<1o-_Nj8YVN!?Pn41I#Qw{udwy+27* zS)CB;bQCsJ()kjbuuH8>$c}wOH(W1T8@n&3kfSv+an!|Q@kPf}fC*gfu4L z!b!@8QV-K*)*#548R1!%J(${0d4_1nEwO#O&MiZp3Mt;=?7ihu8IbHsm)TNjG|0I? ztT|vs+)}d_>=DDt_4y-`{S4y)ta+JKGm@``U}lx)#qbK2!hxkqJ_?J7gLY%W>iROB z;69T;FJNNY;EKp2gKf3j%?V_ZdErfaF-Kt-|BRc3Axu{kh_e#h;9%;;Iz8)QK68De?_u5hCmY>IQ%{ld^ar8`Qx$ zN-BwLMP*l^Kk}JlLq<|S<)G*w86|s&fS7~>aOp0#bJpGxjy-IitscDvSj{~#J^~D| zDaBy2VH-tZztlEQ=7Tv$Y}n=ryVQ5IJs^`ig**8h=-0dVMAngl2z9%b1=X(@V~&7) z_*+NJ>MTE~57uiiv*as<-S!|`v9w6Hu@i;8X4|ZMwwq^j6Sh3s60L4O;Uc>r%NKpM@^68NVS z;c9(ra1F@FNg0wf)+9$tUqJv2gm62ETf!!ZQn5Arq;vhe1kP?%ujos z+JDJdp|(TYKn!rIGC}MT0#yMou!~>HeqgL#jWWcHx#0i~@($wom~g+Y;a@TMdDs(-p}iU;gLhD0jqP-6AKd!vLuR zlKt(VWDbjQ9*^c^65S3`zpZV>f{Tq;91mK?aI>rJMzK73n_MM~y8e3~^&I6uQ0oY^%)O? zhajhZj4y4B3Ejo-whwT9Z(hGWB*DiQ0)rm&BmY?!?GJs+>^3v@6h&&Pf%gjb;A@<} z)cIcslyspN02=|&lrdcZCoO`c%efpkB9lQ|KoT|KxgN{Oc1$Su|3?}hy;+v zBBeJ%LL`E~>x--!#Wj!xX7!R(RJ|0YAcM*VzcABe{s1Qk&m=NBFLDcQBeyta;wnpQ z)AF(z_iqy~2OVtJxs&bac40JkO?R_hyZ5l&ONbirKDKvhKeumsfbCy8i2Dwle4YP? zQlvr@>;H%G34e3uqb-Y{gdW1+tiMrbpqk?MsXgO2bp;ke=QFogy+NpP!~ZisuJfr) zY?zROkXMN62}t3uP(wgysy#C@F`VHr8CUXt+4$2SV!lv+cTh(AhCs11#7e zpVN3FN#!z@3}ubL)YO9T|4%{oCp}Q10hrNcL9TQ~yHl_xi{;E^K#)Jc_BN=pvI--H zbm515nsfJ*+|Md@YP)YtewGA>-8xzN9M|dJXVgEe?;CV!3%ZoJIa8e(aQo8H&=vII zNq35U>SJrRnb8?FszX$dTn-I*4g$yVEh4>rLIs^yoUQPA*e?rvKVzST^O^fvxY9G@ zp5p%P!sjm<;d4s1x02pq3VkNGLZ&$IL!H5 z5rqXjzzMP6$lt6#t(vKIsN;$J&T-2ygUiBspU|y5E{;K(b&DMC3ZZVcOz!W-_o$Q% zr8nXG5k(if3Ju6Ee5DO(iaGQ;O5g&{&g{mx-QA zM!EY+SuHBEHpCx`PURb{{FGFHkL&lvnA!K6wO)#bQR{4g)D`g<_}{Zt~^|6 zAbsNA)>hdgtj61ijtz=4BzlqzIpi+Z8dFeq?DtRwp=?!pstef&K2K@_y!aM|WDZOz zYfZ*q!3};d7^2KiNH55fA&V}=TS>9^vvLg?DMjPHDzXZP z&PXhB_hre0nTn9TB<%1zXeEOnaKQLdeHtZyI@=z~+!IhO=zN-1?L*`lbPmJqCCY{c zwQ}o=Mt{e+*;ebJf3*v9&d^90K2{j~dHuD3`Ha_pkuD`JV&WPKKG*YaloMNavfAw_$rcarSk4mWIeU7_!kz=D8l| z{;IocksV>T*5t2>#^kyE#(#8(oj+#x)K#zfT3>#C+2U2Lu_#(7_B_Z)0(}M_CP0>& zdR+^Lzq)*@zbhvpS{Z>!dgO4oS_tT;DABAthYhF=4Gd0_(7bnc9RUO=CXGjZq&}RE z04W_}mSbvxOvS$Q>SmHtX zKVsY^%Zs!r-OpU?l%fc63qvy!+ih8Tg`U1hPXq3i^ou+V^k?gzChkbF+yl{TVjO)d()o`Ud?2jp4UHmX}-xq!^_Qmx)Tp14g;>yhP#WSwI zZpQiPe4rLh%BLvqP5Q_nPo1c^x1_V#IGhAeqYO(D#-_e>76?FTa(h+oS=UtZ*|W9S zD*O&l1S#@;8TpNivugOAG+5j_z_SS(St$E5eIxwMSHnGekG9II{`Nfc>U;k7eR@6# zZPL4^o-2p*a(H(q=cT?9eX-u+ycOE6zLa@Z?HmaAlSYGc=z93J^)-g;Bb!X$TM7Nq zZ+fO0?n(Q~JY&68J#&bAlRG5exugAydODYuE#x@TTgz-@ymuMzP(O?-r(0hw+7d(l zm6LYGB#VUO*C*^oy!1fh-<+@);he_YCu(+lt+?UxNstt`JUwntje{n*fy}2jlS*;i zT{dZ}`fX)@_5r^;`qJ}@>LN|$- zNaNr3*}s!1-hSAt63gopyzsML`?-?3|GLk1@n>`8zjy@B*56UJ@2IrYBYmj9YyP>A zGx!FxuOK4u;1Q&$tZ>zlNqFYfqwF0#oW^%f_-{?v_a^My6K>5!yn3QkuI=S_W-N;S z%HYP?)f1AILPs7OhYvUn*;gu!_$e@wxo0go58pPSH2Xr!F4eiSt6Fvqwrab!W!LNY zm6qM8;}5#s4OF-NAK!mdD_J!GVSwV=$_cw6fZx6}XjcV(sC32ztlCL{-~=4~NfRMM@5|6M_n*#=C2h>~ z**9W$OYFW8=Qk@PL=Cz(tlD3V^ZL7?nPW8XM`L#1nETOKdH48@-50p{hW_~L{mJ+E zA_d-3tRv?Sy3Y=JoO<}{552WtblD?;a0hXkM0&l;uIO`j4Epa3+8u-TovB;9?5^g( z51MvEYv97pfma#>pY1Nc+&g$xKb{ogZbfLHS4Tgkv+Kk{9}F?Au#mnl0}D*>076(3 zH$a%>S~8x$h*W|lbSE!jGzZnxT*Y-8K{ZIYmX)Zgijwv*qnyqn+E_97cN zHM&c?mr!xo0sMt_skCp4l1r#AUuy^X*Sdokngf%A?e*?pPjdO7Ao>%G`+VCcd6 zTAZ*J8~$B_;8HpcGVA(CwGz&Ej_x9W&Yi#5F58Hf?nd48*GT1N-&<@KY-FD_fA)Xz z)5#(ZXNn6yt!CcCzF zW9GQ{QiuQZgdIC+$4n-BHty@OANBaXil1KS@c%JkFHhKiP9*y_9_X>3^!WXXpPuRP zzn!o@P1qkNk^>t*@3Eit_}3Ia{i?%1KViS0u-{E2|Im6J7hjlk$C>{%yxWBRW+Hh* z>y5=lR0dB@*mD#1>_qbB#yxZG?z#Rg#ZRZ0e+-sx!k(H)-rBftuKj4Pe_Qd>>4XwZ z*t!XOVj?-B@xWaB$y|SA@zbYK!%Wzt6ZXhN^3K+~ii@8y|KNl@G-1D-NZ#9epWm;u z*|`OB6DZl;rskSt*A~d3C6g*N19(W2htV z9BSsRA!Nqh-VYOqOuJ`+$7QmjQ8yJUH5hj=Ic+S$+^CcCwEosWKc-@W2Jo9L+J z0e@IaMh0>*^o)l@bfU~~FEGVkF((x?FG!u}`4$BIoO=bujB0T<=r&~X94e#v6Ix)#U>tP6|; zG&07prF?3YZH?2?D(en=k|1;56ZXxppA}ZnAl<~rKHr5d&*xmUO;#364=W~^^iNDc z+}>oj4BEp3m>!2&*;}JY----xt`nVF=UgWYl6LlX9^y|Pk53wJo-uBxkH_GYLf6IE zRNO$o#|3VN*MAjm7Cr_F%HZRVfnj-aP#6}|zWH64h4~nP$iI#G$0e)$7Aw82@@^$A z!2bm*8jrr`G73t4UA89jND3FJWUBkBr_NNJ;#jxfyaO}e6>w1)V2@=sEO+4|Dfe@w z6c9cl)1Bt#ukq1%0Ga(Bw!$;Dz3is&(Quev<#G_eC_d5Wr1y5|+A({0jE0?LZPYYo zkB_;>#->n{O7*Zh4hIf8;={Eh1qt6>9I(_ztW&U58-5o9aWdYwGr$T{b)ZDc6)V0W zwi?ETorMR55Xi&b;mV{Km9@5fs{L(zItBQx(0=?DX?K70MVH<;U_T-;u>03GA{(#= z2HcMa1hoY!(-HiB6b&EFj#8t)u@S1_^+*+NH6AHOxe47P5AqaRMOWQMtF6#b;xa(2 z3M^V{yH7O`(lZmUHD@%iCpy=qj}O>mG_dxLHf9^Jb-F^oL&K8ejh1bk9dByd4~nK0 zga{A~D6W^WR0APN6=YyF5V+hB$u(y*uqS%i(skqZ1a!qcJ{~_dj-JRpH9mzMvo+vR4-D)_VgEphCQ)Sja$Ro>1MoS-(fa8!;){O+9Vur<2yU; zyPY^t_03rJnB=lGrMFV2U`;7qjj#NIk3@&z%S+IVPdCEeAQp&!Pv- zJh~lunJkj125&NV-b8%*M101CJvNTwWn*Mius$E7)CL(v`T=u3i31Vr0|Do8wvZ|g zQ}!S=N%6Wx*p^SHb40ermh`L?*DDYx?^K;Y=Z^6D>x zj}(a{kwf$waj4Ke+|6)Y2=fIq#`Dj)pkiL9La3Wo0$%&R6V|J`1Yho${ z@vU29l{j0km_#zDNHIvEwe{B-sYCFz5e>rw^**9j%q~<*F%Kw#O!|&8rYG0?`Kd?% zRR?@Clc~5k!lH>CW!k$yDbzDk0JWx5(w{sy6d?feCBaSK^ndSE}?avWMgR~dRax2;e(;4q-=hDNYgx9X_|@r(8w{oj1Fxg z*^WkwENfgJ#i4cpL9P^?=S#Q|+Xy9gp9uZ@6?hy)ta(ZdEd|!ho_?s|TGz&vM+sA1)%6l?BI0Su&iOp#m$am0EtmVfPq|Nq#%{RVpp&Yr6oEE zQxQNT0W`XzXF`~eU7Fd&8Wvh^-zVKonA|&E@_pymAkKq;<-ymXgT4*2R13&TxWdX!~Zy@_ohiPeM}dS~&yRiQay$6HHk-KBtlzhTDzp#b=_$g%0H%$yuID zRc=O5$Qt6?PJ?6*pdB4xPjMb6rHa#BcDRZLA9- zYtKxJ`|-4BUniSL`z+5FFg*AhJg$6D{QJ2oQL;X6jO{1VEKdD>3rPlI z`+c0E?9_b>S6Ml$ock3asx12LH$>47u-5!W8%{gENX`!_E(Eo3POb;mz`11Z;cuwW zG~(yw#{);n23MYA`2FwVRzO(~F(!dpkAifsVBG|Cg@>mo;ymaVWxzmKMEN9}gbNt&VJ_X7;l#*b^%`lKJTSR{GWOAV=jIae+DRKl}J4h zy5!0gR#6A5N8?=HI0*IbHqGegz#supSI5Mcxj&_4daHKAxOyDoX`UF8iuxlu>O7%Q ziu-2T|JzNE10ocLp}y8=~LdGVZz)E;Txr!roYj~Yg6ACDj4QD zyq{l+_gDSs`ghk^8&!Glk4Nij=_}q&2vFeuC^F0#ToK!sSnSk&?r6i&WC25iyt2I} z&=&-+o+8gjcQHPB^p{$CPHYzz?>jxSv+<5o?aA9vu;_i@ZpPV7@IHWHfcFV&2cMNP z4AQe`*+)n+$Aub6l;pn>vs8EAeGe ze=M46?ku2@mUwyfcSSO-G34kN$j?!YuB_Y2id|AsHD*BM3Nf~0_E>D!b1D5y3a>uo zE{pADs!zv;`_frtaC9AfL2z46h0KVLmR!K2yqgx|VW*B&>CCG;R$U(5SxlvW+?i0zsr6T<54=@xAFCTtC7N^Jr(^M^zG5QJy;=qOS?0VOn2sKb>@eE-I+Vv zoe{A27W0@!)lH&fJJJghy9mdnPLh-$j%eZvwTZ?TT~!s%HvEE*9sZF-@(I|8o6goG zTdz)RP2yIgxv1_Fog88iCD$wnLU@=fFfOm$zL={@ytVqH(8Zmj>PU1UUY=b-So$iE z4O1)+EylbAX9XT4@OM)H3yQWH{B+Uu2j;Ao@{12_#$&)5Q8oqVV1AqEx{mbwiQP5b zx9Pq+@`hH&qp$Jx@L|Zclm0{(-n|{ZAfAx&s8iEI^(6cX)U^+E1`hVbvOP*l$x*ukBL?7o`Jn&yRI1z^i=i2X zE1;Zh+)y$NyrBF>Q8XufSlkLyrrsqVW%Te4t=Fue_1ZM-^RPz)#ytOH^gyGoTtO5; zRg z)Hjr@jXJ2T3KVE)-=R^>v`dAV5g_ktX7VJ}ieiC=$jBDrbBfa^JSl5GFl+RNBGa(N zlFf!8R*XuvuiMWWl=Xsf!*bh%>*#k>j|tQM;R0bFs;Zbuf`ro8A%Pur)`#U-gbyIa zL%;qHtalvAUk^XG)@2XF$5tmGS$rzqK3ao!0O{+TUD|J-?}v~2ZOMP!|3S3vQziS- zs9n&nAOqR*{p=D7dD4mXl)DYBNa(gFq(b#z10;_j(J1-h5Gn_LRf+XIV`6!R=r?K+ zhvhZMR>V4HtK!$MB*5yDuKcb(_k%tH&d}a=vsk#7TY-;+nq2aiC7vIwm6v-1H7S-3 zZpDPi2R?Z)o&!%;S0+F_A>CUz@Q%0W6V=c8l~r3+?G1akvPx9$IR%;KSy3!Dk(={e zbZ=L_xowuW;@Mp!E=k60ywaI3!JVAK!`3PPYUTnj7N{xiSRm~1d^pDL!HOp#)lbUy zP?^SF-L&hP?uxp7i6pD(X#C5jJ=8?Oq;?^Xl^O6}#tGKk{a?z?1Hh{4O#JUV=ic}3 z>+{~sn?A2hA3z5N9k60au_UIL{U@8IDZANC{O6zDY<9CP89Sna3ZeoE0%F64C|JQ@ z?;0g`P!Z8+G^p6+|NG8;Zx}4u&A=`1mUB<}&Ue24wf{hV*uZ9gV16hqu`k9@IYsxA zQYygwiGED)5*?CZ2~vkPSIl?ZWDh$4#KYv8!6b#4#aPTu|6XqovpcmTdmZR3g@0BB zR;3?fixkdBriJ%GW99}hq5Dp6C-)R8Zr2V%@|WaqHuzDu53T9{Zp`^nW6rq?Dug_6Bs9`Q z1;4+z)u_?Kfsv!wh9kdgimhsp>l>6TFxNH6a}D+-O!%NrU&+gcyll+NvGsCXJ>p5Z zGcUi-%OiQ2h4WFpyqy=Kz09wd1@&@6UT##k#(Ok+jJ>Y`OXo!mYMu{;u!rqJ3Ozvs z7y&Bi%yNpzp3C^pX4rG#zMQ;l?B+}!t20iX$(S`c#kkL8yz4UN#tc(j(HHcO?qfl$ z3sSc%9Y8@5R5?Ja_cP~aiG!rkAF5xOo!74{&3a4p2CvS_YvC7V>rT=WZ&B79o!74{ z%6ji-%tt$Y#hkCtnAI2qecI>DFWp*>Jrym&OGAe`@;%iU14f`oZ~}5#lfa~@fDcx9 zHO-77&bVpHB6U-o6SKomPn%%qu9XK5la1M5%<7S~-&cIZlyjtdGy&RmBBswgg6^sm zeh;e{+G@B7tLmg&9x)$*ATUZJ2N5~7cSS3m?c|v*k4%V!=S0F&*9+e2Gvjz>JbwJU zq$hGVsaGKuyMG{rc>Yz0auwoy2mipjzSD2LR~OmZ9DT7Mn<-bOH$+cvFq@)sQQBUZ zHW#JMp9`|JAfx+HuHz#IX3BK{QiKtLX3NWKdISssNGQF$zWi6cK;o`&GJYe(I(aiq zRX4govk-gJ^n`h?6en^&wE+VaskdKN-EV!h0NZJUY9cu?Z2wN1OaGRINL4~rsc(yP zFtwxK48gxoX#x9eFUTp4a&n{YPj5755NHfQ(Fjj4o5Vd*TZCrNZOT!lnC7sav4J31 zy_G&zsu%-!WkVLpz(Q34A}wa`sX8L1t{Q!jl`YU)&!+vC)3K`?y_JpTtc-tl1}OH? zEh#qxQZu`SNKI`6qKNA0lxSMlC1tK~IZz4_JdL;;*o`^bFVtDRdIeU?C|vA}ybZ$|3PrC6obIPujDauZ=Y z8Tb_qnCw!EisqQ^xIfAtGV&s

    H?yx(|!u&Y*_=7L1MQuy+;& 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�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


    unsL!!cV%bItEBgV)9I=5wxGKYeL< z_jumktKgu?mLi2?HlTO`kT87w{OOm?cdMT&BQfv zH`MUt`(HP3es{wg8Q|R&;Po`TB)oAUy#9vw+!lC44X*-Tnc-=De9Z7B1$fT{?3-eE zdDq6>$MCcrmU8Z!XeQG7_(qx+x#VZ&Lg-%92kCmU)W-#$DSeT&!^-R9tW9V7qm`4g zQuE6-{O)mgw6R;ht0Dc!frfj8=N?X)d>=}}f$R|tyAQ6<3l_s|W$bN2 z-qTSV!)@%j-ATI#4MHE+;{8A$R(Exf__)50)!xb;TqhZOhmq$wGy!S(HTT>(q%A}% z&{AZ5+{APL_VF!ocN^UN)UR{y7tXK#EANd%%01U}_a!Y4oq~=>En&^SFKusI&y{L^Nqce z$tTw#(+u|!&z0-Cd898u!Rxxtf%@QXjk_gq^HW}P?i=#_g4QDS?@Z5~xQ6RU^eK8D z4T7cX_9dP>hca7;O8UgzI^%~wIbW`uYp%_3*Lbd6H}6mSVTj>iqdq*ZJY6qzJS@1K zbwy4}czcf}kIXMx7;YqeB@-FgnSCRq_d(rJUf;~vP!Qne-NE{t;TCiLF!Ur+KkVkY zd#rmr^HbhG?mja9 zIg30g{}3y`$n!^&_5zYHm3RiS_N#yF{rAcTxvy&YbIG#-Wv$QfANKq|NQ?Z*JBmBw|d|9d^-2L9!V=WTqQxxlj*(^plZ(kGc8z)g7W z81lS{-bQNoWuCipwHj`3B%uNE(Ww4M%wduGTw;0N{YTxOH8RdU+KgY0BhM+Q1yZ{Y zN&njs*-tyTO}boV{j91oEr;6{uJ$jj;k82@47ZKv4kt~*o5a`O!*|H2i@IN}rMF%C zf#m48D~4M?otJ*OhHGBEhHHt`A2+9uMVi#8;fAA?Xd0S>`oSwfMa&^9JbMCrr}TR) z1uw>=<*qA^JQQPbDIH%NOQNjQW>tE%=3 z6-d{N)WT84=-u7BW4KQ8w}#&G_d zXdzNR(@jf=92TWMpy$vqG#b@Ewwi12nO%v0#m}}MDV`p8GeZ3QE_v0@&EZ$&=b@f2 z_Dc{ym&5(iaOc5Wfhv)hE7uuRSqWK{O`4XtehWrC;1mg3Z?^jWu2!RvHspu)8WOvWs0o#>dv6y+|vP}8yuwdioP^3OlZ6riKhPMbw=#S(ZMe@E? zu~~zzdlps1T{FY|j(jD@RC5&*1q&x@z(G3JE{F#CGFFtFpYAyZ87NgO1P_y-E|5!{;s0d6XD8w+gC_J z@Hq$N>U+luSHxYd<(cx_=Qh>}XxOPekL0&p*~fG&k|5WGeMe=+f92}>Lj~Nr|B!3z zNRV6jW857JH!o!c-}c+B#zxO=S$i9D>^LN$$CG?FWXH^VyOleK_2JZgWw-^#-hA?% zjV?gJa=VnYtI!Qd{9x_P{yg1>s2_?}#$8v#-Cq8!gxedg&fCuHn6=q@Hi%hWqZn;D_8*+^>bJ{oB^IW0}X>dZzVP zzju*@yYgS~Lj~OI@3((F%m0~i&v1LvmhMImpkRBGb&W?!e;moUXZy+8zP)MvEr)x! z;cl;Xk@rj7odQ?qStGIK1vC`}?M+^v?fyr41>#aURc^Y@RnOb2<8%ewbN>Z<^H*~{ zV7T%e->=xSKEz&qj&Ch}d$51#9Pn=m++K!TV|Vr@q1{o?4@ZzTt8aC8BC*`3l5$f& zbPsUzf91Zi;eLWGXOr)O5bkB9RdW0lI=`U3lLFilxT6fWh`e{82ST`y-IwKtkv;~A zy-PZ0?tjh*aP!y1-Rp+Cz3N#B+)oYnMQnKky@P`OU43Pi`+)S%P|)7_L3`K6-A{)5 z>8bMSsTKTElHko_6Sx5UzX&{aVtyqoBRD7jE1xa{r3E*oy7n?-aq^ z=U?EK!#(<6;O1?JyB7Zfw;1llhIz<^g3CtT;+Q6ebN@9O4KT^n)`;>wvFb2 zvXlO%oVS49X!teutl?^-15l8E9%+}Oo0067??!C-okRGpdXBr_@a262{mC~31?#iE zZ{Qh@1+SO;2G~V#pD^5)$n!dy5yJhDv_)ts3bvC$0j|r+agz;K-j}h0e7~Tez52e4 zu=iSw32=+xejLJGzm42U0d57{Rfbz*FXn-0cNDaDf6|UbO;FGeGXmVA>>Rh_kC}EI zd_Tf)zaA#_Zd=}uPzLv4xH|3!-(z68Tk~EPoxkVS$Z;ncdr#swwnFEipdUJtCgal8 z#6dsI5BQ-3Zac%hkvw;z0Vvo$WW0Nl^l?bIPZQhru_VBj_LsLqj=SFYL#_{AA>SJ) zX!m=h$$Lq{-t)2Av(+EPaPK#Ef82+C1ms^F!j*O>>r|&>f3V$Uf4Omg?;<(wDP!-q z@WR%q_-PT@M_r9IS_v{vhg~2MSk?SH&%dTW+|r|4bzN zN~_|^@v6A4W{z88xc^^2tYMv7*1wW)e>dF!uOF0K4tLj;nR(`ql-r(lnX4nI$KO*- z2Z}@S?G_8zSkFX5(5dKbG>d0hi{O@Vf24N^-|dm(9*3{%P5;@ihD)FW zkkmu*|1i&QN805`!u7;*uYSE}>Uxvz1FP6G$Bi*|cjx^3&_hV=E=!SIqyc+=$B{l2 zeZ_YJClcHKDYhux)~#R4_F~+Euc3@Q@1hToq*h|LKU#e;X?o8ockdjx$kTVnmzy_}b~UyiFqN1^;y{78A0Lf$JUqMMf6Uxpj^+!WCNN9?t2 zA;?X@9cZ}K58z%MWwH~omRqjp?m^|)mvjkim)q!_KS6E<-0^Vhdpqir?^@IsX+1tL zeJt`PX}i_qoi*ribR23%8)@y^Nk<=FaZ~0#TkgR*ZY6x*cezgF>4|zHwY!t&4<~Ir zk}!>U9K30$4vj$Vu6s)j*BB)Z$#K8IO>nO48<@`dOVBS!xqAzU@@se?{Uqv&I-%%a!IQB>_D&Ty$Z^9f(~gwP&y7fbFZvep;qFwsJBXNhXZ6a9vfMAdGwnjo zFDL(G@+bJ4t-y z0`^V7#;)~vCKZnK3$p)bbN1zvf04JZFF$jC{>_osI(GuG`mMGYgnb=I>xLwBCvJjW z&5dmvZZNhTmE)EN?AoU&%k?3j+9l<&S-Z%;!P_PO-if(cE=k_|klNKy4q(^8$MM_) z>0{6cB;VN3cZ(EYpZHD7vmEYGt1{zu-yhf;i$T(MlY{|g zCOPhZOak*$|Hn6L$@3NZ7AgO}^s&fk^=r7Bkc1@h11JeopV<+AND%%h%5RqAI{uR3 zk0Z}(s0=B8yyyQ+TKteSe>dWN(U$nh6PcgFZ<1!XM&vmgwMELG?)jgSwgE}VIg~yI z4Z!~3o`x3K-qzcndkX6Yt26wA$a6e82}!w%|7)ZRHqwir`XB?}gnC zRh*jR?)Wv+Up>$Huc9}Q+I_U=eoxx3XrIG4f@-1p@O1C>63^}c_gZgvNelREGIqBh zPXX$Tl&|CZ5YnDUuc1L5oO_A5c16ba1b<7pitW0Or2MoT*Jy2q{{eZvL|-B0OaDcP zliRuJG;!o9|D<^DuD%+Er&Ro$N`3~=+$%yD-cZg8DK`gy5_;)ktSr}*0s zaEBZ2V0>GGDnjg){Q{-pdo+!I&(2SZ0`^wIod{R2kCwyRfZ80Mt{1f^ypvNk!9|ug zq}`y)j^JJn+69f7L*E5+0oN~sJloE<%g)2kzh(Fh@@VU*6_Oez{I5L!=kC1Ej`X{c zTxawlwzl{EYSZhClD0YSKKK%3i^N0Z8HUCn84+^e^Qt%rH71i*jy^-uj}+FSuVuf~ z7`Q((hmcTmKI;^oC;vZ*3$F^!UyhWw3+a?!%{Dyv-w9oX>>PWBw=>-eH*A=D7|%&u zkmEiuemI$DGuOe~fTVqhokz((NWEx(XSVyKQw_f$AC$no=J$+$mAf~2 zm3!P)aI?SO*tdyxIqt3yZl2-hZw0qrfLj80DBQesUe_GnrRX{&C9o?-i+>4`VWd5c zUPlwq6eM$oxwEUK%DTB{_oNTf?|zlF&v8@X*H1ItT=IN})*$8k`ViUmDCVQ6F**z# zh2%X+@}AAE$n?ukkWaYdk=lD>ip2UD z_s8Be+%S9pz8<}Z`59ada@{B@@JS7T?PBv$yGCtN(fVbk>=B-t(RBJx}-C zbI<2US4}vzz2CV$1b2D@?uWMg z3s=Yc9^U&`uIu;2Er$D90`4-0tNSXJhg$+S(b4Oa5czt3(u10Im9JZ%)c`JlYUK~TS#=?)yGBf zB}A^r57u7!|Jm>sptq2ow@c&$+VfvXtJu)1_vyrLzouNZH=|3s`5Uf|OKNj`1C)W3 z%NBnzZVqYVkc5fEGNS96 zSGdy77IaNF=fleO1A1(JL(gq_5Up7j-zoz=P817>UxFa0y_Wj^SZ%jAy9PU_n)6g>x*Ea33dF78t zmv9k9Q|8)rk86K>b0ti8vb%{3*u99@ju=W5qk|H}O%c{V)K zo%!1T;{ADFjvt0bBK2?7a%Ypa2z`z|LhgC1{=IkJ@?gq4vZFoHO$&#+ndARPsprJG znUC`lFdo>f8=@dkrZsbepdhL zI_Dy|cPHT9=Wuz1UqYZf+(@rsEVo7@ z=D<)(bRo*W*O>W@y>_x2{*7|JWG~F-x3cD_ce?ort_Eo*Wj?GY`LvyUk`K$DVdldV#f9?|+)?bjH$NTP!w*Gp(AMn&=@ov$sXaw*51v;vj$P7 zsc*5lj=t$;LIQhVC7;@RJkav`HwyO+2;$$N*gGHIa#W1e-uhxK_8xv74{7>83P+y|w6k)ZPrB<+V2>C*2&MyOZnQAhFtej`vyM zWYW$>5~9Rz`>XBFY|4bRzj^(*euu05<{;h=)QUWvkaF8v?f}y6Mh~K_bCOJyem-ro zHLf{k9)}f!#qtBIHH@wEjH3PU0SHZKl3FmD) zc@Awty+F#<`_-*T>xFJXt^O)ok4x=&)BZSTAnQ=zYLN5xN3Uda7kRau4dcV|p0@(H zH^GgNHy_Zw@MfUzklM>si-f=p=T|hhqX}pXs{aG`Sdg?kZHR03y9~aBBDlTbO1my$6}-);+68fY3%rj4-ANmTrlCiWp)Az8$tw>< z@T5FQyM77fEPqJ4`5JD7yxsV!6&(K)s?jvgecy8XlXgFP20e+QKUOfANc_-^_<#67 z{g63~br%WzP((iU!$)w->xVqJ$EJ9Gs1Il*ykF4~(YU>9t-XCoy9ec?iD)r4>Umqq z-*O!weu%ZdxwH>(HE20oN}|Ndti1(yrJIKn*jx9) zxVjDOP z{*B(7Zq_8Q_Y(4{e{1iDy}59cD^`fzk6j4pQg}VkB&7D9VeJhx=iUZ77oCn$xS^@# zp%#D7qdW}9-sC=%nbGOyIJg?LJmip1?LB)x>@9|ynZVuwVh>*?*Rd>5kr3FEy@P%B znz59#1onRC*n9bY*c*lWB-{uFv89#y5#FIK7$+d<$;94X*4~du`wks?5o3DdWa8D> zxdBNVVK!DUa{pJ`2vSVO_;hn>>aKpin7r!e>~h$h$9G7`fqMm9X)mXf)EZtNbT3l7 zCs?~nNUL@+_lwX`=oHlEX6Ef-iQW0cue)sp%&ZCNW>^BdJCIlHexe+9>%2ie+^4PG z8Gt&$yB$qLT0UO0cK<}$KPYs`uI*bfHoNUx=rQiIC$RT4@~XXWl*3;2b0*x91ooZ@ zSM4p@2YWMqDr;}yq;wMwh-F^T`gf0G@5=qK*F4UA1Y8-LHUd8y-YoQ?WA9Ja-r6lI znp06LbRo*cMr|+htiAf2ZSLfBb9DlHdy!B5E6cw2wLMn<7Q)Si+Y)<60?LLr7R^TL zU)!t(Qd+U*0-cFYL2mn2jJ+xSnS-Jn$J)0k)awNHwkMz3TZuo)Yi}{!_uxjccPRO< zgf|F1D)x{j?Zr{@1+;I!$al47&lpq#Wo(N3H_G2)ul64W)6&iQ1ok!|pWuXhEPs^O z-V(Ug`Jqu5uDwyXYOjfH^DOfmaOJvSG5IIM zdlRj3>}_xDZFDK^80v|-pkiz+5z(flZ1(mR(Q$U@xpZ@90(e9j`r~Zi*AwTeVHx-ofRtSKHqx+|%U%>K0~kXr(1jV`mnWAEMjVQ&T-D|Uw~~*gbGhgIBr{#8{-FlbfSD_z~`eCZ&R&C383N=Ev zzDzp~xBAasIg1d>x+*Pa#dBDq2&Ysy1KST=B&6|!NWbe7lU|xyT-r3e( zSzpkU&%dMt@jq9YDfSZ7-W<69gB!uN4)~!PyxY-4hx?M{t|V9bC0{`99cdekp5j{;QPV z1olQQi`&aqXZvig_Q%C=XTg>F)<*mb?_AUxslD9(lo04k+6XirjY3l2v|dE9*S!yw zGmmwQj=g=Ruy-DLUO=+GLi~F)vGi{b@LAre$z~d{doL;nrj%U`x$~%la4T2w?A7_z zg)o;QwO7_x681R1ng?6v)3jb>zRvX#Tn$nlWZ&s6a3xjjZ9u%Q{js*cd2n09jgU7B z&^CB!ncTNPYHve6BLpUswg7#OmY_1_7kg#=p!F?dVY(Tbz~1$T#^)<#Ua`FP=D>Xx zuFMBVDG!w{XFP-IBel1cSc|<^k~R9efCzqg7v?z#mj??S;}j#c{iO`yL@_qc9JVDF{|-nwpSAC3iDUVF3P7QmJI z)&hGQU`sP}IZ}I16l<|}2x*g0KJwSMT1opl{UM;_;04=Y*kq=l0 zZv89e_ceG+(Kkr#)$)62N7@Z^Ci2@`VEx;=w^!ftm!z9>)613zDGLW$ev9Gugd5?v zYI$glJ=Y<>y?ZJTCBE{I`4Q^}efExld7$>@!Tmgez2h8vwZ84i-i+V8`ljXAEK4_s z1^;!>7KPgiu8!B=5+9(i9DAjmBn18=t?HGmPe<~6__~?QYhkDK??Y{@{c+Cn zbaOpiX|pI=<^=LILj#e{cgbgjz{OWFhk)Kd)6gt52Hs>O*M@V6*AI%1{bIR3OE=?u z{`i@E`@2p?$5TkF(?$H=?l?jGKnTdb)m2HCAp2JD>ABh* zxGmsnDB+xKN6DSMaizmeIhnL^=uza3E06n~`Lb0!x9!;X4966pSCHB#V+ulGF=?M6 z3I6>q^gQjnu7KM+0rxA1dr^#3K5oux#{UVpn;mY~{osbaOgE3fmHtPdkt%kP!8&VAG4A8AkW6y{}irGH(BBM`R_ZL`R64`<^}R8x4ZY1v3jt8 zbP0=z-E}eQUtMb+`VRjl;4XEzIs3uQf;$MVwqvW{4W@t=JKVD^SJuydPr8J?y-&Ir zZl1%Hb)2&1aI?deaXMj_^`VLUpzT2k+*uA+pEvx~;WoD1@;q-?@ICXLa3fw`^Dn%# zYb%=CNY9(D$GeHNk?2u04wX;_I{)I`mo2sBL7(%=_%Yr5?AZGf$1g_zL&}|M?LDkB z*E#51Sx-a3<~CmMp3yTEd%lePf8i(bksyB;sw$Bk~Fe}J1| z{V#yc8Hk13Zg>a`h_Da22%{5zz!>wt# z^8Cz3va$QApEK)z5X1UjsHX1#N9zt$8n{WLf^OCY|BkQMh zv)r-wi$i$^f;@|ma_w61z$c__;`3r+e}7hso3B!rwfq*qtyC?3-sJtsZ24+7I^3(R zz4HF#Vm_C!xAz*9!2JVzwLLp*r03t?9BvoOb=S9D{9tmz{k3)9#^@&2lVY#>SMA;5 zaQp1W-aYkaxo{gge&CT=lXN|M9w7B^j^%nD;C<+PCi_pg=dF?7zi_h?aF2Gl1NVX3 z$;T~*JJaFH^XaF+Z0K-hT^3oI&i8S1;YJ;<_~BvlKJIWI^4WVT z$N2rQ#K+BtI~cCEJJaF4jlOcYcD;V!q%IXr6kUxjN2_6NKp`gVN-bC0o!np3%?h|u zemA3j9N&oNupTDXa+WD)jq~;bX^WAB<-{Yi;_E1-4!i5n@=Maq2Dlo&;P|zu6v;fF zjK>)2$F4I^$m0IvQr6)UyW_F?ykJNgACjI7REL?B-toQy0;ojtZ z>CSQ{|0{i~Th5fJ?M@!tx(@dmY`FU+;z*j)@J4A{K0)# zhb!gx8uD~U%6-yuy@<>DH^kVma(~xqni(yURHqs`c zIp|p=>jz8V$+ci9vCQ-7c)esh>*nBUka_B2@@zs{etYnt%#-YHo;rJ5+43v%)HyrS z%^0{ko|N+2dm`_xB365wT6^`oCEi>4&4oJ|Zp3EVft{({xZjMFJI4Dga0Y1?p^m5> za@S{$u{O(mvh?%OznCwAYp;1s4~`#!CL?JH#O{ff`weN^P>t?!soirdzddPP(f@v_5Ze#jeecB@%hqyH0JrjC@qRhX z;It=x?&WX`Em!t~sA~tWGL9&EVAtn~itRY91a1Vb+AHsI$$>e@;V!e>``hteaCA4H zJ$`?MGUJHNK6|tNNjHt*M!dY{e)3F0Z#Z0iek8RAZ4Wvf)kAXr^x5oE%a!w&jgO1} zO*ehu>iO%y@dHsF()0JLwf9rfenp4&q@5-X5WDBE{&ufCyXUXi1Wg`%^@pCndgRsf zSD7+G2<++nb+&9he>q7(^E6zk*An#no$YXsu-x*TzXG`P9eefsUEpv}u-rYJzigkq zkqSZck;82buQTf7aCMyhAZb(4D`*yS`=z0lE7!|XM>3Lw<|~K$F2`@5&HLAg)xS+0 zd%q-I!rt~9&xiY)!!0J?pD3+YoO_Ao-auM^G#cH7q}}Xvvsb4lTYFpH;$6o?D+bL; zwc_V(Cda>mUPEfHj>te?9ECInv39S{Yb*^HPI1B?fukpn~>HMN$5wshTrag&g^sUVaWAd zZl$2<1Xt@t@0WR=o%AtCxw6iQ5LiXp2J{O-v07XAHhFvRsZTblgJ^|W4Mvn(Z;acBE~)5;ZCz$|9dRu{)qp& zR_{mVz@3qR+rZ(@+7E6a+;cr8&!hx>-*O8YtjjYp%9 zTh1EoC_7#&f}4DJoICE73g#*DJcIPSeQLQi+VS30(zAKbP@#|8$;XYR15X*gJt#4U}2F;mpHAwq=1o@6Z zI{xX-A2R-FK-xRZ;WZ+5$M2(HYB`g5BLANc_gc8>-=^egjoKo$x3{%-{sYRq zi@a(<_BGy>`>4a!@tSL|pIhI@jaCnuq$A?(Z9XOLpA`^=YVEg z?oV9X#royL>5t$>yu7A4$G1l#kaD+LZYgPp=Ws2F>LIsZUS_#Ej>xYaG^^lhJ?_Tw z{m~et+&Xp~v5>USQ8B8uq(T{P6E--LdZF#GIWib~=1=Rz4)RpGm3^9#a&=!Td49Ds z8i4wsPP~6t-_@CIxmquBjtZJ~wd3dQZjQenO+w1O)Y?0bw2#o|D4l(4TtAGlT)n>& zIyz{shpT>AN1h$17S~V8mA04==uFzpXapL9WdDK<&)924%T+%VM}lS)T=j!oH_JS5 zKKYdUzU6wS&--_8*UcqxpYn01!+hT1e&FL)=bojXyV=^S{x!!0&8t4H*!!x(rOT91 zu6e2u+@%ipb$CnAQiuDI<;wVa)qh?ezKAb!+g~YT64c&2xN9BmS&YY5!TieMeqy9|4r^;b!I9~Gld&}!uF4_xq%$JMdA{HUzcg62W^S|5HT&tK?Yq58PfY z#T-3YQrRE$e-+FL{GI5WX`PVcax#ME3HTc7lczDd9?2P!y2kAj2`NvIwitbaWUsrT z6mMVVV(iX8gX?XFb5g5h^E=0FMM4*jU9VB$Khmn+9v|xoJalHzyg+`fpNI3g!)Lcq7!1dX#`Wj(low?U;qkN0PQXZmy4;5BHk{+?fvdxP9Q}`M4Qp1#&59u5wY0I0 z3ksSB&2ooZZ5VrDqwYx0+w+$DEoqz3U+82e-nVRs?+eq2UnhL!W;P3&4oAi7srX^l zm}GPLopJ7?ww?0NHznF9Nd21!w-;RXLq~YM(GaBd|8UElPue2%1?p3fY>J5I52#?) z6?=7Krq5>inVBtu=6=U+xo`X%`Tj)e52iFFlxsajKHP^AaLw>I*Z!t*aZBJn;rOEp zys9YTaBX`PxR11Hr~o~O+c1^FZ1F=mE*j+P^}tFHH1;Ly96PepCfMQ8$c&9uLBp^bH2O5tTea~E9gw|j8> zK$MHL-bO8VGHK7F1xWhsmx0F@it53ro}X2AW&;fjC1#|P^jKj?k*VxrBhcZ)~e&|3|#1btENlk9WA0?q)BD zOzzns^@DPYE>AXLK9_J5u{>uo^6s+jqRxpGw-1`e4!7TV$z}HEmU^pP*`NDF%gtqR z$)4=ZzanVbI9&0sNc<=EUQVpsn4$I``8*MKEAvaS^;K{OI@}EGdG1Zt74dWZerUvJ z&8@xdh^1ZB`)hjM)DL+bf@X}vO{0Juf7{t|)xQOB|4YElbGXv(h`oE_X8X7$aBn)MY&$7!!=n!OJj*4D zg$A5cfBP`ha+g>?m@9*3JY4l}7U!iW>Wkd+AodO-?JhJL$vkxK<#GRxv0UxXvfw`N z*emP760L6*?!K&FtH3psoVR?qOB}AWzasgauDv)Q*8YA}+4F_p4_bb;T`z#U0j~CQ zaz81L-}xAFxni&0PnyOt{_Fn9)(@4fz2>T*sd#Lhn-6aWdNBc4?#3eZUR3n zCr$3(t|9inPivv|gO-O#C+-6}+#51^mVtb~C*b}=TG~kV{y={2GRxKSkOy~)!#!B# zw+Qa*4);L)tM(Sd{ldpRir;xW@|Rz)M(}KEg892OKL3`${rw|~kH~`C25!CB(Z-xkzTMe- zE}uz1Bw=^<%KVhHX9aM3JKO`cSJtG&`gynyz}5EbK+Es>+MZp*eL9D`H+%Qi{%SuT zg1gM&9xQt^;cjxc2g}|pxQ8Bh@co+)_jHGQu+X?Q$?k~)>K{LSN9;m(AUxeU3 z3^x+1Mcz6L={H*>XwS5Lkbcv@ziX*&ceH)Tg8Q1omG$p!VRlHs)%EX3)uJ7x-5EJ8 zKHf=7_O4~MeJFst#^FkPCiY&JfV(Gq>sYSZYdW)D;`q29)ZQKmxO=jW&4sJuhXZXNbo`KUUC>N+xCdH(wLgx+ zUEpvJmc6-fS2^5+Wp5tbtqynFQe#GN&K^#1-e!^ZHhLfF``L8;S7&?P)W4b62hHIp z#LwH*#mpy@Z$0vlOa3M;bPxA*k)J!pa@D_~Ex*W5=3gJW(3Z1{?RX~-Ze54lmOPzM&jj3|q&KZhy9ImvJyDJacPD**$-E&xKZx-BM4tH<9uzANDp*)pjQW_iMP??(FY8!Dj0RohQhF zyTjq`?>s@N3N^;`QQS%@c%f44Q@x_dxxt~HBv0N<=rW@-T9PYvD=c90EINSsEuiBdlcae{~Kl23jeg4gY`^`b%Hu3p4 z2W~0cNUW9et^;=0PL`+NEQEX5NpbGp{JXFHW)a-8;2!LLGtxb1+B@6>wO9Mi47mN^ zYI}B|<@bEsZ|1>lj-ztnz64jVV-HrpSp>Jp;qJ}eeeE}k;r{OU;b8eU z(u4bCC&$m*-t661|7O5F-QgZAdvoA+aJUD{-dwmt;A(j|Sp8cO+(#Vlf!eG6TQS^M z;JWSE{>*E%vF)T@2W0dNn$I1sUU!#wUZb<+>byoS+`k;I&J&b(UL)IQZxP(cDRDoj zz2%+P80xb((u;Am!&Q6BJFhXuXKxPN9EYp+mUmubvd`W^xR1lt@y>zPHy!Von^-UC za1XTn>i8i9_cMokuA!@J}ZX% zv%@`5dv$zP0yn)uynox@d5yG+-u2MVd4lYq$#A&)JFij4a&?}d7;Z4#7YFa3$O>w|N%~!?>^K zu0hjzjdk`uSsvWsaJ9a%Jl2S0-wBrst;~8Z`8?76Lai5ta3?ujS!1)ibvB-*-oLUA zXHVR`zN{~IxU!}q(Ygx1y|S;|p14JD--oN=(YfB9d@DIOl6p1Hc-Z@}!f!k)Sc=^B zhml(tfB5o$zmdI#ocwp-GeW}rIpkkQeyx{l$oD%+z1Lf3DBoY#`~JXi(q^JHXc1b9 znowRcZJFt2`T>t|%`o}6dlUm82I?0MeXx)C!VXiiJO zEy(iL*9rHs{osb+UXp-YhjOjo|A zYO<+=#NPTgmUi%b*g1Cu&3BGJUcG>Kc8+H42~zF|%iVTbiaCaK3I25{>I;3pYBAjH z4!0ip8lfAJ`k5wALg1wPdHxVxjViNuRC8k2&)L>y*UypR%y*v_-(P7Yc^*ekA?3ek z`OiI2(Y%TzyhFSkje#l8)TrGOUxlB0AqgdSvws2nNbLW3Zyb3J8N*&FNckP9n}op3 z%Tmncr1wSFpzf&Ax}=@_iPnBOmp}LM_@R4(rY(FupSP3eUNjmhU)Dwm{{_-ID6<+(n% z(b&;EOwRE~p<|KSeXF&54Qan134ap@9^`jm>s%TdTv=ek+vR5 z@bBL!JPA6U%6*jULx(HY-&)Z9#&UlPF_0W3Xd$uhDQlH0D4l*XvPQ%r9NV(UNPr08b;NI-xF0@?fS7e`!j7eM%oL<2+ zvi1(<_}j1NUcJNp#&RDf?I|STdE#ZT)>xkUp|GDfMhZP1G)KVI@z>_=DP|Gn;brov zy+2!Sr5-6}vE{BH9?7~{egCL(b?j9L_XN06FRxj9Bm3R){M{E0cbnyIAngy!t?)4W z1Yql^>1Errc0AWA=dJjOpgF^_w=&0X zhpXr9Z#E;5GSuAR*09`Rf2Np@mYYR9iuTv<2ffaSJ{dGE;bz3F;9Vl~Qex$-r^Ag{ z?(L+FwA@EdOEzhhcJ;&Yv@_y|=u^xWB=Ez-4)?VE@Iz=y&}1d>!!r&yx*vYXhkJ7Z zKg@Hu`n-L4{E(l|JTTmd^{ zvzB|cl(juO4O_(z z=7pfC23On38RUCye6lHUxT`GpFVeyjE1DD05yO6D*ghO7O>Tjcp1ZAQxd*K)s|#Qvj?^K3F| zi#Ee5wY;=LJbPyjW{iVEuQ9%H{IHtiH=t6aT$cGr2n>4y-=Rfl0a^oVv*nfAxDcl7 z+Yx;uXzqop?c`q^ADT=$Qf?c|-AdXiPqL>0x&RHW!v3_V6AwL1CYE!z9Il+VlDBx? z7OvE{PUv-x?|whe_7f|&ujP( zXT*{!*S%Bu1CuJPBJDfmj`6g7X}pH-iG{_i=TE@h=y0Fd4{j#h9SOKUJKWLx!Oe$T z=S=y$=5TZOgIfZ(Dcp$V{t55MDeOar^t{dTzBbS?pSBJ?hVDbf_;NFv$a&jN zEIyWc5xd^{i2LbqwVbWu_{vkMr_*OFKLvE1^l%S;}hJz&{$;R|y>RgbODONZ98?}g)!DI71) zM!rleH9^Yp_m;c7Wr|rwx`fY(zma2~#mBzu{-5zlDT;*+K{L;>yUUwA&riN>NbN4M z{4-`(G?$_4(3Qw-Hz!!TwZALa$o>@xxFgA@+^ze-UFqXyZDJoT#~*LQD?(e5`lHlx zx6GkD7BJREx1$lLdbMOz4@q0pgjjq&n6ek^LvTpOUqSN+{D|irGv+1s#6q)>+Wn&Z zLHqePX`z>y3qZAzJdZl2y4U|tBo?-eE9Cm1@!TP{nOD5?UYWQma_0}kUI{uD zl5AQ3GM%#jwflCO4Xrc~+oLk#gr*ZYgQOxt_f>e<-^z zm-<-e5%Ma8%s_`L_fBe&w>DDlhnDL_-oO5Rz5U!mxc4~Ry6_sI#t!#W%e|bmEYt_- zy75l@erZFySwE<~xyd0j!{N&M!tc2r?B{SdSnlvAlg(YEOOX9}+;+%sZwcIma2f8J z31~F=r2I~FxZ4CoeIDL3#mu(cwG-a(Qo z?ecc-!wR2}_8pQoUf%O6A+uu0eCPb$O?H_dLs$=ib|q-Vts7t?d4`dA{?LpBgfev*P8nGkNYtFCwu{ zey_|`iM{P!qmMu%Q8pTY>Qji<6?=VLzK8?Kyx32Vtyg0>*#4!3sKn@8J(BxDl1`|)VGYLVmB+q|@pxdX1Y zi&t^Hv@<=3mHUw8-bvaxBw=^+f3jy)i2ags4-J|79X~uuzL{taQtouiEhVkWeCjl+ zj@&UyvCj{YV93mM{Lql&&qp1Qa^JGtCrB$mucP7`)D>q85vl35=TZ-(U&{%F%wo8a z*so*$h&-Fnzeu^?T5h}7xrRZvpkB!BdonF|_8`x{k*XoH&awAVj(-YGMauona+i|! z1^O1%Ii2@YI`<;-ELZP?N2-O)AC7-Z$RqXcZ(`-{u-qDNFrSPXpgVo-Oo8QU`&9rp z#fqSL<NAFe3NTtbSx@?Womi-PKa3Qa^;)7a+Z5k$UNn6ujTk0Gzuwqisk-6 zTJSCQRzfEums{ZD<{TR`FFAhb!tq1Uok+QFS?-Ud{f-WO8@o}cFYgZg#A_>~hkN#_ zAI$L~^S;Av&GA>G&PciIE%$NKUP6n}@%J*eJtEmek#ta*#Nr3#7Mu_=-@w&!_C0yF zqyLb$@7w~C5a?P+JB6M?W6>jMv2%S?XxUrvvEKiSoD?$uI(}Y6o=?%&NbNq^@~ghX z{b6(ll6}Tx|EoxC&+huf?)fV|Ib^Dz6R&rdkw>`K6DzlobTl8mgxqr6*>bhs z<<}3H`f#-zf5P!UqI2Jkb6Z<(%A$(q9MlH2KyEuc#&Xrq`57T|jl+GL}~R4MRO@?hm?Da{6RUsi?k<^ zgpJ%xs>F+eM;`6jDP>H8p0`Ld>YcTBBK^ZG^1Y4S zdwDv%w&-@G^|=jPLSXGue#0{6Ls4~92T9)?YJvs)w+5#8LicKVv!T%+L?$WAp{8b4;?Sk1~!jCQ4i#pU8E1%5C2H$h|CN4uh{j{Sx{( z?w62Xgr(4qxX}a;^-SO%DGY z@-{be}%o}zk{Z{k?lZm~Er9W4Gow}aiUB5)H3z5qmZwLi`BCz3V;%|nl^u3%mycKMwX`6nx6?u4)HOh4Ke z(ZB@ljQ2I(zw)`u_B<1BXA0nscew9ji@RT*+s+(vSBm+N&n3up=bpIvT|;IXTn!DG z8!aO5DkQ1AUQFAs3dN-TiL@V*Jdqnh=6NT-u2U^_@^cv}A@Mp>^1nfTy`DCo(}$wN zkkm8z{!3!nP2gP8TBFXWBg)4Ax)1kYdoH^7_s(_JjUjV%W3L~qM}4}51ivB|M@L}G7y zK9v5cU5{jQBkGORXL4S*SX=cRFXK6jXm`ekaIH<|XYBYFRr$gzm%{DmeQ99mD%LEm z<{BQIhnk`4$1z`pX4YYTn^@R2>03`n5{d?f%mDa0uATch?^eMtZ<1I2@uKA~C2b>P z4hf5pdwr%h>-Z@1wvf3CZiM3s$+CvLzoX!najwoc-b31JXcbzD(vD}nCd#kM`U~Q- zZ)c2&pQWy54q-kkfuGG+-g+(Z#~*y>p8UK9rrIm9__+vfZ5iL#pneEB+)b8Shcr2V z?++<^{z`q^v=g`&c}K`JcDOgp;vH-FqX7(Q&c)vC-gj2$&u3a53dnac`6x!Qp!f05 zA)lTXz2DxPwDw4X>}Me7rHFBS2IW+Lr><|w7#cE}4)<#E$$ikS4tItaM)^Pg+?1XB z=F9#TiO#ojbKz#e)%to9ypEXE&*8pkxp$IwZcWeLfm}?>yz2BV#;{a(r@gw)Cp0W% z`Z)HEC9nAJQHRSCgP6UtpTQLF^GVp-^8`6?hdTCF*ia$1cj;3O_XEqFMcV5~!W#B2 zT60JRv+P>V4aG(MyVKq~L*_om-o@mT^;ydu?uV8eotkXEw%i|y-S?C!SNvO_vR?>y zqQm`_ifk4S>NzeTQV{r2j4%N!mu(;cqbdldP#oPD|<_L|&~c@1tP zW(E79W+lbil~Wz=4)3$T*`z&ohG(yoUm0uo%dg%a$%Xqt0(&oVxPMu0dHkC(B4oaT ztNn9FcQ*8zj3wH(ooa(Ux@?NStt-W&pDN#Mvb~_ht1BWYf_@}Z);rLBACY$NR%I#vg?~%3!{epf#Zh6bFTzyWW z;NFng=5YVv__VJpnxm0&ds^-_q}__{Lqm|ujashE*TvSW-N!uO1@Zn<{V zk}WbeWcoUGUl2+*%gOfzQoGg9>q*;+Dt*hmEU~l~I=?@`v0KJX1#s_&YwMT^ljlTq z3R1hDvUa~fT1v5`8gnG^NoX#-#g?h%`CP_jdi|955Z4RvBe7hJ+sJb*>V=g5wf9-z zL(*2GU(s5$0m=N*%6VRYy3&4++?&vK`gs#V<_pI!rR1rymhmJ~ej0Uy5NJi(^+>`^ z#5pKYeUv^>pNq(UG-Q5v?3Z=m!^oG5)bF}JSJ#&d-@m?GeY3OPJQgxFn#Rkaa_@Jz zdR^~wC-Avj4wb9rFn?mmTmUyBMi8cO{0ub9;a*_{?V-gmfqUw0*GKOhOe6U%!O^gU+E)j7fvxOc(T@!<}Rukjso5J=CT zETc#!9^*?7u$lT`G{{ng5Meif! z>-yCu>zRK?60Rfej%vX?&T{=_M~(~43Yp1{{W;`$0F6V+*LAE_HgLU&8le->X~?xd zBZ2+7vzgC_ul@a{iFkK^43Sqk@63d1L2P%?P)X*jbm}fi^MX9*FF7nEPtlGCYDSE1tC-A!gzb|F?qg6 zzaZtGEC<4``xEy7t^tb?4Q+$&dFu=t6S)>W7qR9hfE`fdnb9GLyM8xE%PRXK-MPacF_H35XwdF zUU%%uQ=ZBs~BT*hY?j^4E?)Bcuwb}CJ zeQDZngyx6L6OR3Fkmt&A$!0CF`bFnCPWzd88Po$Wa{VMlTbUw9YLCE|HU(5SHi6}Q{}X9jQH>J%1T+!$Oq5GoUub<(nfbv2e4n#8 zWR8NX<)t0RcSAFf+FhMCkPx`}H^$BANi+)OAz7Q5!HsL_N20`Hx7!XEEeV;E9sW<` zIq7%G8&ZBR%OCv*a~)_NnuZFH%n=k?{xZuKzi4^PTh96r_h4Xl2M;?f9p2G|8N{ zm3o7eKZ15g{D0Qu6mtXVcc4C~A9B|wt+9O9KLwwM%qqLmTVp-R{n#Q|3ueh z^D60!QLPCn<}G5k&Te-2+7A|f!Ma8Gk(i0ByCn}zu-QPY{1+_$q3$W>kZqF6b3Mly zQ;ok}zW823uUnmQ_NtJ1)8QXZo+`9A4T*P_d&}=dT7NVIeOB3Y_#e0lrlcacG%+c(EmcFyTg5eJo237L}Io349k`BQb_t2=tES5 zTz}7Y*vHcrNGO4SCw#3>KafZ4E+tlebIae>CfOXj!^<~oO$BojfA6iG%=kKF^5E-r z*=giygPuUj?`Qdw|AL1~&hO6yxTe#Ptu1E;VWy}zm%B_eV0{ner6p&5mVCtj*d6XRQyJ zQn(t1kY@xMg{0az+?4U8O+(KiU8^hg(VT|Q;WTa$=M-?vpVa5Ki6wO-MppN}q{0`Z zZ9+P?FUh$ZLgp&+OSwu5a{a{Tng4JP9m#o-{8QvWe&445_{^l5sb~zEfI`@ifhKa^ z=MxX$oV)FG;Wn;2FN)hI@6qa!lxl84@;ik;HHJ4S_mMUcO-1r-$ow;sP2_0qaS<16 zXM6@n%fJ6URKn5oEAOG21w+EgM1$|%{rk9bcZAH94mWjm+4T`FSJp>-gCxlMUOB%y z7MAlNLCa0(FV+RZ)%lrMv1eol)}ay$A;Ld*cy0-VDx{j@k%SE5^HHLC0(X8U?{Dg> z!*4~NVQ2(WzSu|zj89HAX(_2D6P<$2LF@48b|f~}I@60?enxWGtb!kjA=vMkJa3{U zNclZHhX+P7UfV)?TE$fJ4{<87+ulsHe0k6NLOUMLPYIhXj^B?aSignuIcT;hFq zAeXdBXdar0UP4P?u0&GEih3YS>i2I9_j;kmq~!CsIB`Bng3wQ&UYBbT{gY zh9Q?9YUue#`tR&)$<1CzmBQvM__`)sL)sfi!h@$L#h&|) z!Ym=P_+NthK3X|!vK;OQ)|?$6=_QR~NtQeOB*lynpvLubu&SzQc`Ri@byHBx3c)Tn`mEowO!MLMvh! zORg)9`@;1{5!?+9HxQw*0IsB6N zd0a@IrRWQ!c7GrTQciv&%~VP?0py?m9_sUTG2BZWuKKw;d6m1ua=pm=cW-_!f!p8V z)`E8;I@#ee6(AuX?eC2VT!&wvzA2%BiLqQf@2D z9ZcE-=o$1l>hwJgz*)&AAA4&N527#Bx|dTmY^KB2An$7}B+rM4RxH+D=(-GfU+X)( z3CQ$!d-uukw5-uWfPyKFYjj(A7 zSKH6dJ|Zs5c!siqOS3|)v?%KuZbb<8%?vSlw`*`rHB;bCFZ*WqW8=O#1;sogDON77!9 zRw0cs5~_?`_G*VM_tm3^hs`L*&$900Eb^4z>g})d8UEyUzl6YBnaQShKkkL16Htp4 z+^g>5mFIeAdu2rK&&vI$LbylrAVwsXl|AcVUWfW4u~)eAY#kx+0%;3HFkeND*pEhi z(aUm^`gwh9@e$PPwsAij?hn03-ml1~+@CFX8)+5#vt|`lLGF7tM_KO9_iWYQ|t zmp9oL>VI%gCZBTGTJD9UwMSQ@_j#zv9mmgi{1Cf7s}nZqnep;Au2Yiv0q)HXSE{f0 zVHjy+(8I{zzOA-geII5H++J{PnKHk^ta50o>5A0eS(aNjJ=L^BH==9N23SS-cnRx^ zwpi{Ed(D)2bl4omP5F8;lPGr_zZP8=jB|4=HyWZ%MK7YvL5#uANjBN+k+Fn!Xe572 zTQM5$J(P$1x?yuf`}ldQ9i}fv^O4%C_kkX+nrePR!D{q*XaEl^Z#^%R22!B9I6k9cH=DTuE4x0gJ_On9f(Of^NsYVQndZ~bA(<_gpYbwk_bxl5icli$DCvfJWgd44!QBW$*I z^!!lD&uR^`2l@&rx0B`0Ka73_RjNfJjE-x}d=IJ=Va!SVKiWw3Lvh2fdHTv-{ZJog z>v@yso%iI2HcfW*L)KYgbI4Wk@_Pq%+>d4>wKr<*-A-DS!&6OlB=42ic1P+(XUo>| zTX1&Rbb%|^mlG*Z=aZ*B8ika5yybpO+Mg(R1fQXdb9nX@UI}hlMx2FTwf)U$#JCu) z1}zWCcg6j1A|LL_4^7VB)ej|b>vW3G%b$lGtUcZZmE&(i3z6E(5;+NhhDW8EOVKsxbNoLMR%h0tOTCzBxl(>#y9GZq#Sd_Gd{Qqt z*^DRO`}fA{oAk$=x4_iy$>yYy-VgKdODt>&+F#_tT>w|-F}^s|<9_6DrQZ~8uP(_u z*F6f??cY4=fB)$^tRlGoC9wBnhb#SNdF_ovX(z9Vj~|kl=XnG_OhW2k>4$_X`&ahP z^!yJnZxX z-1?kw<*I+5ak$dImDj(K3+dnBW_Ul(JO}S(^qRw!{!O^8@k2)>;Sc)$sVuJl9Y^{;6bHkCTZxks(8VBUiHuEUkxZ4=RJh?TaeL)Cu#;w|?0g@*aMj)sl!e{B55AYL{1(9d zHfvX|z7Jlw=UaRC#2xJ8mcX5JL%cm}4d)AN*7v~+_dLrbiiHMT^7!W?Mp>@5XQoBi z4C{8_{+;OaZzkN;aJ4+_uYYIy{E!Ftr0%!PJz@SlW$7kU5gZC!LR+)#F$`w4zMqL}AZfT@3# zyN1u!BMCCExTk(T@8Ynz+~KxrnQU}#TR*qx_hj=RpG%N?0ej*`E(x1)4)2!Ve^&4Jy`Z;!fnb%gj(MYRyi}R z!sem>2W|n}nmKWM50)Q_;Lf>~ifh9s^zp0Fw@6Z*a#rCd(vptm8i9KyA_=*z!{#mW zs~;=z`K0HPOkHBFSN*(01C2?$7)g-lf#qJ8JU5g<2|PQA{fwHUtW0`M9Lr@3Q87<5=rqJ45-qb``XmSLa}HPEoifqkj?zG7YG zppp7vn&oySZ78}MoqcAC$@`$f&g->^<(eU0*~q(&d3A?7n>>$Dfaek`SD#axPnxW| zlpxoEE?51l+!DAw;rh?pB8R)o+FPFU7P>xchB#b($JB=oSLzBO@Cj)W))KElu7C4< z{>_3Lb+}p{HaJ`!&y^7P#d76;_EsM9;pRD9wReZZ)p>8Vx8iZT+MDmQw*>ApaO;T? zgmm)!O}&T^>v_}n7BnL5GIS+sdU%Q%z=rdB{a$FfhuiW{&?Ri%bnNX)9$D{{L#*6@ zG`#rXDbggoO#A{8|3;efTxeyUuk+cPmlZat1LEbO{#8k_`^YOCuGDKnV2kBeI-a%^ zx#um~tZco==o&T=hpS_zBgv=sHn800q)E7nxV?{?=i?T_ZR~KfIld!Be-N>9S$--Z zFrG9ClZmfnJ&@~%Vjnm2hOp`8aGxj7#7tw}aJZLR?(deHdIJ3#a=D@AW&IGnk^4*z z_e74Dbt&f(tGzue_hHgzp;yrKqga1P$D;Flc|LAox3HPva95H?-iz=(v2t@Qx9*9a zAI>2@1G)AV`MKTcKOJsQd?4*kC-N!x3CrzkxwjMFxr#P$WW4-lwkYd|NRP0o%%%pB z*cstIB6;SZHAuPBEw@FzRMQjPhU#;ZHWyYg&v-~%HpX)6+j>#lD{KbB)%qsw`W*5t zM#_ELa_v`}ulP*b^$rZuwZ65v$g{UG+*=2*zVN278SU6RuR3#s(7ndz(1=-vOftwM_$~6snr2YMaSnWN= za;uzze_u#3M-ltm-)zh6XvkWC!%o9y#{h8ZN zYI*2w>v0C$M-p(qcewTTgBykWyu&?=vLNH8^$u6&cL`B#j%q4lqFi{KW+jmAu3?GMK{My-+h_gu@(CT$QJjYgspSWS57 zQG8o!xp!FqhVBoWQ*Mu!ho?Ax1}Z?xZELyjlC~VJMqLM_#MYdb*7dk;T6^VTvYxjG z!ln(}khS-F^3-fd-9UnqYYS;t2!WSKTZ^inMSo3PiCFgZ%Z8Z~VV#s^>$S3E%E$|w z9gd&hKE!*@?K1MJ-J>o4I@07F8NG;QzY*8Z^)B`7RzK&#y#c!$$(ImrA zmiselp|h!%XuxwRrV%V1pR};t=dC|7AL2S0ZZt+^-$e4X>BxJgh?V<_{UA&U!i~+LOys`Mka&4Z zBcF_eYY;1UhvlA2S{u|6Mc%AXrhPB9_Ud^vlfvdyhue!h(!Td6R_-C5iGh1an~Wqp zP3-Px>{%P%OTQ3qCR{BKvp9Y(+JuyQnC0GhF5^P<7#fe#+Oj_q5@vlHs~@71StsY% z`yA2Oc|o3Rczn>-`X{YbeCF=O0Sq-{rs zH0HVpjm$D8iwSnQ?o4av*)8q6JhN8tRM>pra8Kv>D7q9Wmtqj(_9U$z8ir(iE%xeq z(rn9Bdvm66KhNQgAR5Cfw<7dh0W?4vEiO z%l+-Ec}}AU?sIVUI`&rb4ne~lZe!YBLSPbU1xP~ZIo9T~?z|CFTP3cH51PX+p3OQH z#}5No^SXe%?>pQUF_H-sleP_2yfD@LOYH8S-qP~L53+tX_l2;z^q#oAA@UrH8X)!W z@s`_xv>Q=2nqDVq=Q@>w2z|EYYPrpQk@+*Y+RqOn&q%ZYDfb5JhZCD|9g3Qwh1vA$ zutr*5o@1}{6M1vOrv1Hfdk2%}9+Z!i+sblRllDE@jHG=u?c?K}H2xO0^|4Tue9PCRn4cL3C|BAWsTW7^+3}Y9$W`8ZF#P>+P0E@0A?xL^IpMxtx%J7f zTqzIbIK90SiR77R*m^g`V04&zS%x*G2BPt9%#K- zXt`Q1GG1jJ(6|FXZ_9lC&4HUbephaJ&)XUww*c3{c$J?`uIVabm z9?p3?Cf0(Qz(b@xjov}8p;B0BS9twI9UDtKDeH1`=Y`G7aJ8TRnB(8=!QOSm+D_K6 z+#gB%4M|}7(lmi3&%Z8-#K#ZP&mV&_=Z8(wgt#B3E~dXAZ=gk-dqj+60u4yJ0JV~M znTb6QsQWjywDxNI5PF^UMUTX}y3Xo)%Vo%Ege&d3hv)fc#y7jHWAkw%aJM?#qbTp) zVP;#d_M5_Odq;}7gwId@JZYDDG114(fm`>{xV-}(Og8;t-kE^AgRyuz^>HkpEo7MH z*0-5HZV}we;5M>9aw2&yp)VdxC#>g9`eU&-pU<9065gjTm{1VE&nsgG33YA1nfV6m z*x*KDM|01Pd^*SD=f1&b55tqNxBj>g?yUa@d!q}&=Ij3ldkf%Jdo1pU_xP}({#&-F@!H$M=w7jAF3+OGeLEtM~3&L8>h zt-&?w^^9}R^DfUJIre_e z`7W%_^EnCZeTcLYKHrA??al_Dy;*Soa<~<1GoMEOnF+YBkajwszfUad4_!ZO_i;<$ zR+|_Rf{Aj(Dl^6&&{FQQlF^H<8&i(bC+ zU_J<&^Bk_$<0T2Wd#cAXecUX#9pGxaBmK}PFjptwYCp7=&!oR_+nxEAtL;uP+&+%I z2dn%>m#}Ze{{uH4?sE=z2JOxUe&>z^emJ5P>x`b}SubM$d0XQ1Z}h{kDTJ&2+tQ&a zyKQ%5U+nx&GMd=^e$cwFOg`K%9eXdpmR6`U@|Uxrq&5q;e@kt>YyURbXKxP=ha^A--_Xmg&UEB2@RJ`$r+%Qc9Bj5<8`0qkwb^9xx!==Vc&j_G$Q#1C%!tL1j8?e}GW%(@D=(UMXtU%92?YP((t zw-sFNS4%s2CO+tr!Vi5(lXmiMVt+e1&*z6kVQq7n!U z!%b&gy{mqoj=RNWyX*HwKdEgdQ~@^!?kf&g?iWwugPAG(p!bV;9P`^-^WxI&dJ)`Z zaGTirP+9dXv6Ojx$KJ~FZz0@Tlalr9Eq>#!+Fu!OX0diaf{Zt%UoG!p=rtj+wr8&XCdVeed_mszy#(6&aVP)AzU*#>4$4>F)78HxPa@J?8w|BVzwVrAJ zHwW&?4%dIZ$^5U^lP=%&Rt$Hz!~L)J>h%`;ytY~Ga4V~x#o?a$c(U9oi<<*?io>n6 z>v%8p%>f{)CfX?=@REPlDusx#VxAhUU|2Ug9U^!Xp&JxzFL~I@xUw z=e0fHn3c6zi@;4#B`fV`BA3(E^ z+71jQCPQA^H1|U*{9<=bR_| z@IEfF+NIwg$T>a3OeI}{eBaOA6I|<{&L<>_XrJK9cueMYo*~~GXqCe)u)nwQIjpZl zUD3G`v(eoa`MpurL3T|yuW;>ZKRIV@ZS$1#du6|>0pz(INl#m@m-pb-arRsDe?PP{ zOtn|ylC^c;)HaK)y#pn@_H}JpTg6ytA1cF zJKvgs+XSxG^Rl@9aw@By=fLd%H`^L=H`j;G4@>QL{7_>Q$Ht*%m+t&tNr z2A;M{vY+9uuJb+F&rs`o9Bz*D`{P{8ySmP2pOayF{^8wECS$LzKi4`caT~i%rU34Q zDzG>6PwIaa*qea+K^53r0C#N_*c;u#dbcXDHvxCw>B;`si>Fm9HGk{W+rSglfp0l3 zVK#qnnWFwqu-91;+{5AObtd0^+f_YtzrQW}kCfGqj&0?+23!quu;X>K5J~Ex$$miE z;awO5A?fF}!&V82f7$<;{CZu<^OTDgg;Er~F z?-c&sdFVByTwXJg5Limuw@5-UvGkX9p9a0QC8PDWzuWe?*jh39v`hCvNypVTy zklf|O-lM%^fy+osAPKh-k3=o@sb;eI?aGx{p26+-zEZWI`PA`;?0=9)zNeAe&G1&j zj(u$sPi2(sLGIpHyV-w3{bACAW{YF@i||&XUy#~;t>w1Ai1$O$1T+GTLNa#T@s5^d z>$5}2R+teqmp_yA%WU#2M_Z8cpR)Yn7t`NIb-Lnf;@{Aw^+}&Earp9XiiFr+LGzfy zKaIS-(LG4{zgm9a65dfqeNY$F4T=5wt(o4JdH#3pkM0{Zufo^sqZ<`+6#2#><+HV@ zgn+cecXNCO$K-v{X~eGYCt3b-JJ%tZa^R=U*qQ&L!*3ubrr^Kr!Ow$#sbjzLGcHZ~ z-;Rv}etvDvas9tK1>fu+G>@m?*Kznf0+X;4zlo2(F$F&ke-Zp>34-r+lP4Q>arnGq zCn4}MX}=)}+llwRjJBa#@*Q4n8{GPt8w{F%9sZHzISZYGw0@pgLS&yD(h87-4~bWz zRNwS<`6d!HEuT%=FZ^P(2`PUs%RjYS4RbwG{y_e|JAR^0(A)-J!)Wr1MdOg9O1o*- z$*0XA?GxnArzPqJ%~~tFzadupSf(x^uz|F#NP?_aF_)LFAL`#7ZKIrX zV9>nb*ta)%!l*7%`*_kLA?-NQMxbrfgAD4rgu;43v)1w76pqhCuOPLLro3c4B>M#~ zB7HfMbuS+iyJO>i2I;bJ?`{&PNSYJ(gTO|HDmDu&qpcMRE_!Cp`v-g01m5)C@1>YPN zGz(Mkd+h=LHXnap3Vs6q@9_2h(|Seec@MchwEjr@r{52f_SJ3sv~Ej(rDXj%+-9>X zpPLm8n(L~7n+x|jxH_-2_JnFi_b}7`kNANQn83W!jpHSiIaS~HOVkhg95JhY&@6?k z;iJbg%$=0WDq=~M$1k@1NncOe??~4A#p^N$hVS#pzrp4o#QEDeemD8|nw-pkfCsOB z0BQA+%ttnPIn8us5=88g?{dT%1Wm^5q#aE;?_M~^I~-1zkk*m3?nvyIJJw4qB!ATA z=d&qhG1+8c8^rxYi@;Y^&L>PKG(2M z^_r1vvBp7@@9+;KPZM+$QvN-b-;=Zi%0XxTm1YJKyZp{6`1wtO<}HW+AbG_8JYwZf zu>6tP`Mp!{3yut$We#7S7ms2B{d@AN-=|u>7kPimK8r3}%2mP+ z-!u)HKOF8)@V24tNbR0(xkp~fcn5VrtDj3Zrx3gBQ7P=sK8pL?bIJPBl|0v?>yh%G zxBR?e%zKkQ4as*}Clb5-nJM_W&4T7AhyNmZO6m=<`lZ0~e4}{?f~+LpGOg^pSM`cGu{^-fXBTQoGNy{QjhkMq`mY2X)tf zc698P`*2Q+pjqH>Unb8|v>d73ms{?3(lUE;?V!U@b2Ja$vU}_|h#d9|J3kpeA!t5x z{L+a$($01zR=aPo{I*>)OfS+U?5>?PCkD+AaHAz>8`Fn;BhbAL_ZG{2mb67^HCm3A zVdpw)>n0n^m_yb##ajl=zPv}N_2YZa{|g;_P14?bEVmPBSD*yC7P)@T;8~5-O~Zr$i&x!Ue!pByx&JKXu?`2;OPT7GX? z?$Mnx%)g``a4qlaqDyHoL z&M*PHj&(krl~i`?ST7guqYhW*8`rS@zS!ZmwOp}7gFMG5YrZiL?%WjIO%AtR1-SWe z3mxtjc;|f2@4YVRhfbC&-zzwfbO|!^;v~i;FHW_!yM8+9jkajtH7woGN-q>8u%kC63_rce25qaY1 zcckMknjQ%m({3c~X6`FUo}p~AWoP2)rr@HW$#Z^xjTNQ$Et2t&<&O1YH2$mP{uecSc)l0*#i;n2 zpgE4UvmHI#_y#OvS~Lx*-N#vOA!(~nMt`0o5dVUf!PatZY1x;;z0um8+bd}9fUkZz zio7SFvyk$Oy?;9}gtQ0I6f}y?f! zp8=lV!^8(8*Ed>k#5aAd{m~m3m&1=)|1>1eN$6Ch{IKQUMA|SUVHEMhXjk=SfaMqU z4w`N7qb0d`{>q*NG8WZ+P2@CjKljQ&dG@i0-^jRpZu0)?fB(njmS-P;0=SLgR<^yd zo4Eg0fxUTf&vUp_DU(@fF4F5p{oD1<4D&ka3y@r^?tNyYt$REA3pdlBcDR-0-yFDO ztAJYs_xUQ|#u7pEUKMcj;I6I$uIUpr#Z|zK!>##Z@_I|uscsfik3LIL&tx8aBFCp8 zd0*6BzcAic&rIK-ITUVXUvD{Zk9O>>tomC7_cVw5J->ew+MdD>;ahl~RGe-OCzgE^ z-Ro_-&kuS1g63?8n?;^ePPNHgz|??WW1 z$Kg-0n~?SyX&X4M&lDuFnEWq0`M>6zqOUT{1}FbHaw7R_4PyTo zm?Jp8&zN-6fmr{2``o6+6{KBrOkLuOw4^DC;a(cdg^xn}ErCC#%RWW zCHzM0vej-a<9xU$JKU|DFYD7 zb2@5|)b53HB6fG@ef&#F?~QsQcYp0J)+f4Nxd8564!7uf_UtCltw_0rmMi_4QKUbD zgzG*t?&0Ic?g*M^;AVMw%?pg@<^6<74woU6guqPFUPltLc^1;9Jr*TkaL@s+IUS{{wHoeC2BSW#7s3VTbz<`3}34 zcZQJGyZyWiDey6AKcSOuV~=w=PAu~YIo1bbZLDlDCpIEz0`rpfZUlKIpt(r-$6Eeo z(y9$%&t|kY3L$sCqQ^Bmw=X&O1Wi|me>!=(pv#f++gg4BX-m;|^d%kPrId^TE+obv&`!T^*YUfqA68k5(bMUY8QPekr(q zXTQYrf@UcE%o2n#Ka;26!3?wi@Fagf%fFJe+tCa(8a;xfT#Mm~Uovj+`1-DlAmdL2 z%{0gURpj{@ZAEH-W6L))GEAepDHqhcSDI-~?D}S`<-6@dd|J?aAO*khN!C?3`~vcPjlM<7*ZJ+nBbdWMebKq-VkFnqCb%X3 z>Akc6^QY5~el=O|A0f|F^c2#1bBVS8iN7<<3eqKv=tsSW?Vod0-xSUWnka_EB_(OKZmsLs1MrjGh=!YyM7;=f}b-hXl``) zi&=X#oO~0J`i0k}Bm@?dwg&x-zD3$UlY7(x%f8CKcMzW)G`S8}=Kq`T!+N*o-hSlL ze`#8REj~*glzrDF| zw>aFI*cm}l$KD>6`~ENK<}}jJM6!Rc^wo8(@;YDHWj_}*hrO0;Pfl!P%v3m6INa;i zUY@xoNSE*v9W&Yg-(R1lEs-_Wg>XB-)qdwd@}2u=x*6ec6P7!Zv=7lYXa$uwtdR-KdPq`0Ut`~WKO8qUXo)y6D;&2zh`w$g6Tpcg0Ang|tg81Y{qf2BaT_WFH~%Z-0J&UVX!R4W--U>=%RP3CF)D zkf%Mm5-C^b&7UUiGxQt!7PY!6&E#5Mp3lF9FLR%A>{b8Pzdy-kYNW(oFY^A}oqvnq zZg#lGcS$onE@xciaOt{82pmmXJ0#(O|9Sm+|1$)wXSws}FY(PHtq+~ZcMk3`)Vo4R9pb5m*mX1)?MXTa6|#yIjkjebVTU1qtDj-n5VHly_@6IRsn zvTUsNH~KpF3&&pdZ~j{uJGdJx*NePAcjwRP%uv z<`3d(#P#T$)5O1x1D_I zheIsabBFimZp#nuQiq#9hW_CdJYObOZhgzGOWHB0C2HHh^nEU7?bWi&T)=(q&1AW$ ze@}O~$M1oEvwhrLxM#vu|6UC5TJ(^^)$j6TJNBx7 zhmlYHAZdi1`X^A&_oK7eo%Y& zeK2Y7b>*;E>X|%4i^FZ>aO2s0r->gOa=3jg_Yl%F$hsYOzDDo&$}NDKfUE7L+MDHY zZz+epTF(mMKIYil0$y8mzQeuMatDz%20eiuMeX{qM*2o?OkC`%4`y-DEKXtXtK`%A zp!>9_4HC(;kLJzU#6}3j{hY6N@KWQ(ZchT!e{JX5VXJ_1UwLQ!I zh;>|!y;>iN$*0_@mRlbG=E42OxgTwU_YiaF|2SNxL?i^NKg|6HNjPLk+5M@)kAvo& z6!soYezlh^VkPXHgDQ7^1-Qj<_kBBAZjG_C1v=fax4?3*ByAA7 z58a8}{ZsOMwx3EO!=ZZ=gST zUM6D%w?9?jtG_v)@ZO-q)q3`>!~J|0_Lfy{xp3b}!F}K1uBiYw5AF|e^?Lgd-b(bX z!(D5+fw6pt0%f7b$St=*U%BNi4Vuh%b}qNJgXNZ0 zZpFTGi+#%bh7R`vcvqpJ4tJa7E+Or6v=%k_HLYZQoavKpat@^*L+rMbnadf!z*YYq z_y~DWC!~Hzv-2hollCh55WS1s_N=$%YI~OTdC)9z?A3bq7x|RS5_1VVwGUdkG0%J%@8sR=a2euCC{@pXmL9j{7X{6caJ4?De@|m@sNC);?A@Jz3*esPa3^8MrSzkw5i9p< z%grb4Ewl*v*H`qm_Nss5UkA-NxJ^o2$h*Dd*>3`KBS^=ygDrQTN7=U>bwTaXIcNyH zQE0{9>?>f|C-B`*U7r^JK4`W&cB?;zl2`36s(?Qda2vdrEI;iB-|2AIS#DYV;CB5= zmtWp`)+xjFm*3M4cYOuy&4=61;p)81vkrHo<-Sgue_m!hn>XsU;kNJbALv&)T=j3E z!`)s1dlPWqN#WmR4mX`KkX(0V`M1B{zZ-()rxf=7@BN5l?V48xZ1uS2QP*?Io!i6_eRo&qtVFU@0siO@5Z2+ox@BOk%!j+w z;cCBUn!{~uxn=cxmihb}`zdG+T$C&~^>4nzJ#iQImgV1UxTmGy&ULt_RDc_Y+Y_#q zoAy`dIo#7Nx2*o^I$ycPe-4__DePV8aNF*}-m=Oq0rv%mtM`pH4!48lmUZ9A=IGNvpx}bAV^z3S; zA^)hfJ1uRj?M~(vp6h&&wD)Sx|B*HFy@}P{F_t@sv@vKBdTRu8JnZ+{%kl>KxY4aa z)70T=eR#s*K5n^X)rXNjZUNi@4p*<^XB}?dF8o{8bzBJdu@v0r94@c*l+=fkKkXm8 zyI&N+eFv^y$I|}Jf%%5RoocyjNc#f?9_PE{#O}Cry!C^Qi;DgVnvIUV>feLNtL2uz z2mYPs^KZ`Ij58J|>x25Yfx~@%7k((qzqxRGrQjana9`L3x2$$25AK6-)xS;Qoru~v z+&Pwe6={Rf{pc>_`gf7fzxmsO=5@zjy)Gt`PyPFb<(73_toQl1;2-AEQgCND+{Jsq z-QwdG{>yrfCCPHrcJd{M`=#ZU)lSyDrF8q7y`ASoaMiyb!CQm&$xHg-8_Ufh?KQL# z6{5PZnpj>-8}Dc*(?h1aW3Se;`csnJpDedL*INSaNQY~9xosoQ>l-=TUoH24q;*8+ zAzAn1_Rm)M{E)~9nJ*k}SMtmlZOqlgS|3jK3=P~)+C(H_8gW_U&g|+T^B3H%US2bc z^JPE2mxz^nmUk>rNZR*kEBXzs$4330@fK_ELe}G^%U;AaLZ;b=$@*ZXdfW)Hj<=Xb zmJm3Sw3Cs9w#1#0Tywixb1CQL2SVm-hkrhK#O^DJm9Og;ZX<0JnuugR_z_~4UvpsT zIw$<1njtd|zOI{niaal(c}V%X56DW=zC{wY5N}6yVKzbY>Lt&pklQF8peob!7>nxQTDB1XK5wO<)98=&X` zA#*ZZ4YE#i-M+@WK|V=6j-Q+kw+_ox+pxCj!gZxCpN%FZaY zC#Kq~?+wQe44J1Ld;5^@PV@-U`qt8N)2A~(fv!iFp{r33es_Pgh}Y?JiG{CyS^4*K z4+)u{9R7pkc@#Z{)b1{p{{?BAQO##qGl8U?E`k|tz}iV4JLj;FIi)b^=Md*NK*uBH z>OLaISx0+;SPm2A1!pa<1BX@X@@+^dI^+;3R$?b z&f2=k#_EU6#v$_oT)mH+&G{Fh%aPjqvgP(6?Jksy?nUlBs>Q8d`AxU&aaNO%`8@@9 z9Ql;{-X3t<`MB9fhRk8Cmy25GJqzzO^bOMM<5SE1Wo8X?(=6^UXd-$7b%EC#Nu8K( z*_-U1cY-WBHe_-geq=V|S=1OQpWBdxz}cjAMG~$f?vEDT#vCjXzE>-}d(^%3IV2=n zgv_h(#ox6!=Qi@(kDf!yKhW|!JjXp1%|%b5S!g}%EvRDy_Ldq#drF;l@7o0@bAN@e z;V1H}pk8kwR{lX8mU{j9 z&h&7RqC9PX{~?nPrAZo+csllCcEi5iXYo`-1PalVh6dwR&Mbhy8eXDh1qeA2(e zEcXJ^MxkfW6x5IhsoUTc)A-aITDt8|vS(bYtX>rsS-GGL}DwN4ej^|pg^o@?8 zP8Y+y+_85s=iiGaA+5(OUyu;UoWpu6bOCCIIwSXhs-aQKZMKc4D#NGUPsE`+m5q( zzEs2Hqi@i1^d-u?Bi%GadECddiH~*eU1EPumypR^?incmFW=EPkUmrMm%VHGI3ha_ zoTk^boR>$wI@B-ix5#%Mq!4YnOiaRr1NY>eDzU)m(%2Ipw@!_$OjlRQ`w1 zjy#v3s~kQ{xg`Wfk@f_71HFJ=LD3w(EsCU0#E8YO(#O~RuJSJmnM>iT{ZkH0H=lN) zeqNY-uIDxXCa@6RQY2v&aarrcvb%=NP=|XJKGE+!XgyZ$r@`uGAjc)hI*_usMQ|T? zxa+WEBYHkJ`JRAse^*n43Z-}6D@0}VU&CA~Cc7C2o0cN3-jm0JR|f5V3H?ne%H$^!0n)SbVPpL=O`x;fNxgURLike$4uS%3@Z{Fo0Guq)+mVdLZ2$@&lYQNL}og%Fd-1kfNx!Tk36y?DE(&0|K zE2GqRC0uT*?*i+)f9hjxBa7jh&nw^FSoe@=1Xsts(k_am&m+OHw?=<9*7UElKc040 zLL5#f$3E%Di=?0KmcRJ3B!m59cm4PT-2RndUoM>gs{;G-;J#J~_7%YSx(e(oguC~O z|6abuaGJr<>!q^F*Th5SJh)A4eQ>#ww7dG(-qycNIJZ`TeNnhiIrh~l=k=lX#o#Qi z0{gPz{toxQUcU)AhkQ}_<(mWdEV%#GzC1XIDzGmf?u1IPuMp1LRbXEc+@CAKK67Qr zgjQC5`DVgB1+G4CDC_!&(?9j!KQ6S_Zx);@tH8b(-1{oQzBrtjRbXEN?k8~fr2Q-I zytDuMSpVg~*;)nm<-%>aDrsL?U^Ag|0t{9F^#!dcRye4 zZ|Oe7g>c7KfxSg==U0Kf#c;o_0(;F>A+y)&|K5H_;bg(7?DEfodub)umknoV71$St z`vlyW?cbDj{q#=JKHjd^H=GZuz`k6#n<~M+d^mN!to-sVfO{(3sP*4}y}lp8pYoit z5bo7gU~duJQB`1XG2GczV6VA4WIlzf_itIJE|PWV65RgxpcM5pPw(Gw{;mT1VsMXG z^WW`Dz&Q&}Ww$>$aQnb*>A9<9>@3&#K`F-1!&CTgp7mcIoC#H6Uq0Lgm0({Xob^>; zUlH8>zpDKEcQM=+a4WmKO^=Z2Rt5HE!W~)#_D11Ofg82;^S`#AAKLaa3+}=yur~&` z819~2Pq`_srxo^kio>Z}RQctffZG=Cf3+_c&b3uwUmn~C{)2r#SpOBkd7%pID}?)n z!#$pP;263P`TOe$((XX_q1*eFet&clWiNepoga<&44Ho`;dkf2IrQtwuQ$1HTUP-$ z4{i^*`g~_s*Eg4cK)&n!!CqcNAoH$eJ=e&Gdmr42v>U0Od1<>*0QdPS@IxWoRaIbb z5!`>Pz}{lG4S8T%+5R=xgv>c`EBn5e3HP=tur~^KN)_0f1@{BE6>X=r9n6OFYZcfR zhkNih$#SY_J2>Ch4i>|03-`bN?#ydL<{HPoU9~IaeV!AAJE{t}S#V!~TiNYk4DPB* z@Mj!OHD2tj?CUZCx2eOeXgyl(t4F36&t>5L*LoC%)6cQ5vg%P5-0@Ywjlq2#Ze`b_ zY`EX1!Mtkh=DLtM32t4_UFLE6)UTp9 zkUYWf$hwgQ-myUZ$Li*USJ>+mwMLzh`_4(tJH5WQd|ye|85P{X`ZM@if37Fb2=ovV zekb^+TYlYFYncC`3(zU3Epq#!O)Ou&=dzk_>q&^;%>CTq-$b5a=qaRp-4FhR*Z9UI znu&7IeQ0<*xfe!9hd+q-7E1X2c#i7uKPJx_^ea;Sb0ue*z$x>2Zxh{(u0;vt@<*oN z=L`s$`rjw#(Z`c#4*Ccw|6R+!{&m*hqPNiu^a2vTuDzLV`8D`X(*8p|`_15xxzORy z{-nD3l6(t^Wn3lx4|vx~pxV;vrWQIBMUdl^=6XK76K9ir;>I) z((epi!r$F@?)qE4_(k_|$R8Rqjn^mreieE8p#DhxZrhZ=6w+Qo65b?!54pY(+a(A; z!@iG_c}K{c3t#K~$K+Xu{zS^R-#rLq6|mkO-GsWL?#M0IvDSX6_Yv!#%sWG7pkx1? zDuN6)-Lxub9r~OF5BVP zJfym*@iuG9kn(S}{O>rn8Pz?MazT5e;q}=gmicHYuT3fVh4+TcHu!pGdA7*ZW-3-bZWEN;DVV z0yMG#a{$D3scQv&y|y;?V92b4tD*J)W44mVyz9N^A@zaRzf0D`AI%#5x7h5fC9&2E z@prA^oshw?x&ZDG z4)-v4El_KR`=sT{{?FHv-WTNz@b--@WPjeebjq9gxH%8;{s`Qtb;Ld7nTbMPm@Fgw5T_>p5dCY2Tw_q~CIp@@fY&b7IKU+nD6k zUc??|s6LWZ;hg0CBk9daI|&J6{v*6Q)PVX){;O>MJkD#w@pIAnNb}qGTdQ{`ErH}d zv4DSj5&6ZA81K8qCWXul$Bw3xGt6Ml9pZ3K@$5+J$g%E7e~Tm+l7Ewve+>C1pvRE< zqm7q8V>W3=z0dpJNNg#@mLhCfE&h0d`I?`S^;gz`%i7@6Ialg~_`}*!^1YZ29G9@C z>%imiPluo7Wiw~NmG9?VLM-(`_^rKTfjdacMN`p4v=RHZh_E$dgjXNr{ZZ-L6if@5 z!Em*nJ;V8z!J0>`-197V1!+H^P3VgUNt|R%7+zNf`BBT&cV~*8C~Oqr%t-n>kAaY{n+8^GrCp|_b$uzBJa;OIjku!gKM5I!P zqnjP>J(inK+WTk&YTc2#&2R65G7sl^v3`(plfFyNGpuX)IXMp4e=)z0b^C`BYq@E= z)}FM>k%S*U^5)6su|ZHrxN;py(0Ow6EaP#w+F$8KzJVwQDR;iLcM@q&qu0<}WLURd z3(5O3b%}+$j&FgBy;(Cu<}tWUyu4=S;k<)Mxh*1}axqOpU>?UF-;aZYLXK}cDfz8P zVMM(0B1V(77-uJeR)T@&0+ioSHlgDXPBkr`4Y*$EcX6PEcV{dv0V0Zol5N9 zm*XQ#-gEBRLg-9Mt;MdQ)EC3~+t43q9;`*E2tTYQ{)4`D1DMC7 z*u0SW(eZ=4uP5zr`p3z3xEWmW!|vYK+h}d}YTWki+xY)n_y-jy+shE##^?d0cGG2$ z5ExR(`()^0^kKcy<0x})>HBhYKJR_OmFr^>&tTF%;XZ>NMaqp^Zj(>xN26EJ^C%bA zbX2#YG24h+;)h3g2eU2v)kWV6nQXXPekUwrPZIVIJA+ucY$;Y^?}enrk%Vu%^X;+w zDLdb{o*UWg&MXX>L5?4;BcHs>G05RAv0Uk&47c2`d6!b&6Y+Dkeb0xRmx4Rm;XYCU zZhTS5EV6!({_q5N&!AaI@6Y-^^*+ma*BW&|N2BA=k_RXo{E>r?TN0mwk9YV&9JZME z$9_#-e_HRZC$I8{WA~oayRPuH&PgowE*pNE6#QEqK0|^%;`d6y&x3yxd~KiagF6@*7&dyf1kz=@Jrh9;!Er`)eys z;6L?wd#)Ru_lYhIna%KHCAo~bojk9jUm56k4{vZxvs`^Eihq z{jWF4^Bz)e!g6aKSluimeHE(3y8`a>+1$~d%{rbkUr?TKyIOy&CC`uOXQbT0mRoBj z@4TX;(Ge&QRz4D6&$rz3@x@K3U?uYf4!0%epN+DS`gw%qCP=#zO-2u(acBv=)t0&5 z#}-o)t3&21__@~ZC&?r4IL;+j{#eWZh_tVeg!RO~pe-YGy z1NX6RUonwTwJ5%($dHB!5IwYr4A z^lSROXs@-*aiHP!19DN#Mhr2Cg)RMt`n=1Wzm@mr;KoX_8gmope}cY3%6-am6W{P{ zRI~xDMU&XSW;%+&okuL(ZP*;TUCJa*OtWo9*L9)57L7hkHM~3C~nBk2>5RE%znT z7NVu-tyqSM!|HAA9prGOpPro_Hdm(Le&KL8?*VtDkDHSbHltE-|8Tg~#39tTvg{r2 z&#})ZC!ln?e*5CG=e+T+M zq}&56H{(0zH&7?k7EQ;-xk&0mfwfoa@0^>dXM2auUvPE2eGBK`jq;FkTUhSVoifa~ zq;Etww9Y6sF3uk7)idokMfVAt+J7XudwtLTKtT;EpF2dv&faCmc3UIQA~&{55DhQf^<%?fxVCbfb}ID01)9D=b&<)A0ks=2h$8 zTGYd5IDY~91Sxlz<^E0D0UO!d1~o#t3dEZrCh`t3k$@ zr;?{5l4jv<@{AxZYn<5vruaaEj5D(i44c2RC>`uxYwES#GmA|9y18&q=O6w|kzn*U@`O>shn$-uSg8vDmu^ zrnHmM!@{ODT)i$LztE>ew;{FnJ!@|oj@%FZ4;_it!`gymPpO&{Jg$r-#NNUNVRNCw z?alemqFTQux%#~8PtwwVt9A_0bcvy!p6zHU}y8tcjkzdc8%PhRyAcz4AODaej5vk-W;)?-dtc#y8<8a6L`bWOhhYMQqOeXu8x}+52NwuUi2WE4|^Hvg)iz( z@@zhU`~1-*_j=|Wvcl#WYj<6K*IVTI4E>6f-^2PN_6PM1U4t$|SE9^&)662cO%7qd z58@2!o7yfW7atoo1@JWtBhN!J? z`k%?`Lb-v>Nqc1+ObC>Rn|XZLgyH)Au)o8-w*r2M!#%>`)`8a)o#Aj_wA=>gW|;d( ze-QP(uC#w!P*&pO9sWHbY)*FkFq=GIqPAO-e)!OGFWFYZ+=!k+lTi;?Lr?*AcY); za$8z%jp_k&_zjXuedO;l|I~{VdSqxzci{k@hK)&@^1ltl{q)=k5H>*ym|; z|l4mAIkp4f^dabt)tW_2D*B#w})E_!t{)4nw zAYl5T^U-@>6-X!1Q`KgR!bp9^v;}%^*I|Ntzm%Yf-2Mt2X zeaLbrk@gDu5G_F48q*frdHZ&jtIrLiy~1X#!(GPtKcIh+a>rTj3AJb+P&SG(80!M7 z2Z}Xjp5NihTxs_8%yayeyxz{I-Fp2P_PQdka%WlYZP~^QCSAhHylN&!J=56poO#w><;HIao15WAy}agG^2|YR zAhoxt<^Dw4-uvPM6hZRbTkTzBxl(_RK#Rw!pT%_QQXuB~tFio{fP5(k|Q| zKcGQq3#`m1z2}_Wh)=|?`kXWG7VaC{yaraX%lPwY^1OhwUwu94WsN^K!t`pH_os|M zqXWa{oD|#whsz~ZCb!m8J9G2k4u%^gZ%YjP2;LgB7O5ZZ;20s$Av0hmqgT-Ls2RLg zNZQ|Q;_1wt=-#TCw}nlfW3N1)p3jE0OUWnRk@|2KvG`$6_IJ*KFCiQ5Qn*rXGH>u1 zydTkKr1p*}Inx9h)DDY&JXgYPluIr{%`9U77wZ zfax!{%-h4J(Lc%i#qIF!MkA5hJJs4dpR}*guV_6=T$QZ9MV77ee~CN7rafHgKV;yC zEu0?+2F!j)xjJuf7HNagL+CzK49h(2`Jo=Mte?~8GI@7~%}}@+wA`kUPg14aULY=S zxfQ{k4p-WpdbABs!h01hL~8G=-ai`nUjD66z=Y90NUq~n*eUg_Bk^&}_h`G5H7so2 zckI=2t4}^Hw>Pc5_wQm|K`)s8a?6MNhqYJC`X9Uw=yIg?ekcdHF6NVVU6^u3L(xch z<54d4EZ?$s*gGn0BL61a-zPZ#MKlj7_iM}jfV5Re!g}J&>FK5$izHlIb^qn;(P48E zTn)c+{)Kc@|0ULPy9&P(()No4%pu5KXI4c1c#8Z@I8XE6T}J-I17UM7`K3NesIj8- zewtEmyzC|*`)OWGA74VJDP_OMX~u-j47jn9vuUHSCx$v9EnneMA8TAg+AuT<)x%da zM|r+#!r#SbC(GPQZrHpBPw!J-C90WmoIe$*|1B@@I%zA>H|Pu!M=}?r%$Am^?S2v5 zZ{gB)C<#B4rvr`~L_RsR4T zx!d#WQ^Z5)xA?hQ4-;^+;Hn?Y0ReL)|FaLV-(J}l_UXBd_2|#bdO&wxw~NmY1#r)E zxc+@9)n3Z0T>DaHJ`^_n;A;Ikb8q&@u1!DfiqihY1%YN?rJM6OE;s$gaM;YLM6T`wn>jXYK7-q`Tj!uiBKC@bxEYa62Lrp+T^%AI?G9nH-ww`JI z&7aM96t32Xz##$C0JTQS?J5^C<+hFIzk^B7L93sG$91gNMb0x`+o1h!lOHw<9qvT( z+98fK3?--1`mh1C$@+w!q zn?CQ)bkm7+2}3!@wO9SC+{_o4=Z70DIolZBzy5rOJIUJHm$aeiKGd{fH8U0)r&&Aa z+F15p&S7m<-kh+x7Ou7r50YoVVF9y$eQ*9l>cecy{ktLaKaB$B;Ufa(7IZsW0B;Lg zfiKoEM=y43TPdbyub}-&OWOTy33H78NXMGno zkHYP0x$QXr64VVTSJp2Q0(X%%0ZEuf9ER1<@`Np+KW+OfynmLtK5Q1l)$8tA&VLcD zN6P)Xgk%E!kD?BvhtR!f(Q!Q2hg-})6|;PK4%VBoUiJo_S2^6poWB%(iIl6~E4ljE z4D+|7H)EdZYo4V!*GGZFmHCg%AH$}8y4-oau*TLXzDB4yk~^2=KhDda(U!C;&<#jJPhw?>4-2s^Yh&14@9_F^&YdV1 zDeqLvdycfFXbqC^1+nntIgiW@7r~4D6gDrx(|Z3C=lq4LAD#4DTU+lBBJGimd}oAM z_QQ5j&-;^s*w;lo3vg?LLcIFJ(A-9`P~xq`Y-r7 zY|=84*U=!(e;DN>E$8MXBop|Zv~cr)X@QPLnRCd8e6Z;m6PhivG?phS!zrbDrhO{IxtkEdC>Gu7Rumy?{L3(A7w} z_gZd0((Xd{qntV3y70Ply|QXZEcU8@b2l@O4_B|Fhsg6ddI~8w*K${qRy`|Vf=K2G zHnL8wh2^!gvEFC0wuH_7PJO6Po-A}6()u;ga@&%25t1PF;d1`&UQ1%H1hrYtD}ev0 z0Sjqe;s{&!W?oc;DAhfAsMABWG*aRI8r!hs@XZ7|(iYhda}9 z<++^9*GiE2T6dnuvv~V<^+zGx6CCa$c%PsZ4wtT?guu_FRsUbW)Ipi3-N%f-u``!? zG0E|B$y&p|neT$D^+Ni&*JJOY&NT)pnDAm0G=Ia2OQ%e~};fZ2}PoyhYe)Z`_eZ=g&X;C3&2 z{9)X`q}?uxL@1GDeVE7j3(-=f+`+b8+tf0{6qEipGCk8wtEjhMwLxNkVzcPhX&hf!`dceZzt!{rr5 z34!w1n+vyj3hq*e`%wkB(P+e6nS#68;V!EHHy`fU6x{C|?y3rKWA!8Ey%gMHhx<(h zxP@^4Nx}Wg;jXU$H{O79+iU0gka2Rd{{CD6ZZX^*DY*MN+}|s}%{e?`9!bHi>u|SL zfScKn>n#Phfy4c`0^B^fTT*bFIb4}mC&2_k^ zRDfFu_mEmUb02lMu?leGM@3BM6x?YJw|xb;#c*>{aA!N*P8HzhG>e$$QgG)vTz!A1 zJoPN|=!p3y1@~=-dr<}K&4U|ctP(3}Vw3%|B@VY+1-MzwBc^={?q?2H*Ef~N4+U`h zr{ESj+-oafZ}u?}^K=UC28Y|b0^B0FpQhk$a=3jfz)fUDOa@~}f4TkZa0ga^YyKB8 zC#T@nJSExR8Cn5uF5CerxIu?|R|UAyV)`EXY{+#}#+p|%c}S3o5M zo*=CNeTkN%L5y2QB6)tAM=WEPS$5o#e|*FouzzxVypi)ix-#ATO|0XgnU;H4E9Q-n zgyV=?T*ka3(y@@l@_c$V?~xRp5HaV#)$#nvoG;_!w#3RUuv{4*-)y<9n0s&bGVci= zUab^Y$H!SMBW9e#9Ynr6(Qt>m%yOraHVa9(qFuEzx!EVtp25}mqXjFgo0rJ@y2Jh2 zaz7+(HTo9GekKdru!l@fZyZ}>{j2jO=H!SuI&)|4Mu)p`54goXZa&=paCJU$U`PCR zaW(T~AMbgX%%ghUU*1=`C*9o6aS1YyR@Qg$vQLSaX%2TAcGet|Ub2^mmYZ^`pUPMt zNjQvnQca#G9^&m;q;*1{v*ovnm=7Ip6VCtYMBXc$>U|f{wKt1nr&#X%-eo_(D>yY` zs?|=mJO1aRF1I~Q_xY%Kb?5QCUKfRMPlBuUp)Bs6>`ScA>5Jgr?AUuYHeG}+N3MV6 z`RFyI4M0PXfBvBswu_H<%s-qKF%wd7hn16C&&M^VN6exW+)?G^HuG_F;r^L|`$##t zt$f^QEMgi3ll4LUJGq?P&OUBF+^%rsp0cbkt}4EMei+}h>j)_SdUyPng5>o^7XpmK8S z`M8-KBj(!_+{4SsZRX?V!Oe{9Tpya1liSM2%{nu}y04wN$Cs1a*~cw_dqWEDY31a0 z^KrA!;yFVKZijMmd;7RWaNkYA%`PW*h>x4-6fv7pa4#t*ca)E7I!8={1Cry5viec} z{#pMIs_pc=Mc2P(!o3J?tmH1so{qE&(vP~Toc2!g*_#LVt`yuG%E_JS<7S;5F>_LI z`#GIRg`))b8oqgOwxVOXA@$vVpId;E4?~V(LIrcY_@B-uJ{7cfz@D-`Y zvBeie%(D*nBkauN#ej>DJAMNd_?%;Fk%R_p4$zGWnq7^Li@QY38i#xJWcG|Xao6MH zUo2O~$7ONNMG;f`z~ns4Hu6seXBz2nM_H~Hd4IOaDSQ9SLbwCr>iUug;5~+> zBdJm1-?83=NnkT+jbp5FMJJ;+Xb65CWqmuz#`2!1?i-(VS;UNo-_ja&F?lYdj`ko{ zKl2Ktgutz&J%}VsBAyS=zb;qS`^x%?>~4%R;A&|55_3o7nT;e>?B3vUGu|R??PT_T z5GIShL{cXf!Ow%U1dh)0t>Ti4;|E@fUHF>hP$G_ssXzF}yb!@bjTuWKJLAE5LO0rMyE7AcQ6u#NRZ zU5Jn6TPDga>Ju?F4o;T0?!$T%c?Boe5!1?h{JzvQ_!6RhBj#|2JL54N$2!|%9PTFm z0p?-`s; z^Eay5F=<~t&qaZeq|HK$(BjkhZh_c_qDS$L*_$3y>wUpMo~Jp#Tg&MihkLi>>i+HW zyJa7kGS_epqFy=NAK{rZ1LiQK{(RJOhmn?t=A-9PH*D;UGC6UGwO9Qazcpe$Q$J81 z-*A4>R~csSvy$9}mYYplcXS8pk2b>EhDPFt%z|`t7Hz)x;S$yY<_?LNKj3P3fb%Dy z=}1zgoECY9GZv8cIVwW3?oHd$D9q^4h&hOY(0cR>=VWwZttZm^-ezmxWuy&4L%7Q25ufJVvi{242Sq}dx^1Olyk@EKy2UAbeItNS$9fJ-!*4^L%TX_+V^6vdFE4OnZ-7iHRQdyCrBu`FJg)uyB{LYEVK+MpJl!h0`<=aj$;1tkYqi)fjs@uFr%HyyTHiCs8yhjB9PViH%tc=zzvQ{bfYx!%zuXf(Z=@_mkeMrxP7r*zN->?wmfpp%i?uCKOs zX&Y2HAz}`MtA4DpqV)T$A=*i*q=a(4&l-P}cC8Ay#cIbox{z72% z4UC&eABo-}&21~U`TUTW7%{yauK#_`koALbdv#~;uMS>W`ri|k>sEsLw*c<_aHIVD z5~^{Z9fLiSk>6hL3}as6*z?GJKcUt;UOoN9u4gclBIYT_UilXMyX09`2KRf8$==a! zeQ0L6YHt?Y1&+Nke%wsHYF&11Zzji1Ii&Qyn4Nw0X2bo`u~)bUlkbQ!xW{u$#;&ft zLwxoo;BNKV8zWzbGPp0Enz56;Gkx~v!rlL{U)GW;-tWB&TP#OL1_+<}h0Qh&#hZ+aQr*E!~|zuSENO~4)N*gJgy zdwr1aixk{+){Cqs{TFm4_cr%>Yqp^D^;QUXhGXx9K)U&heAO@9`MMYjD@^*qXg)+0nyW@JB%>1ZhuUr>LknfljT(2hZ{Thz>ueaVld$ZxLaqJatJMx`f2KN$<`LDN8 zK6?{zw>kDoeYlEzHRtaow}iP0t6s z`%rIUxBlvNtmDEWxT78J?(Xwz>^$-P_^qsUREfNZS?F*Nu4jy_s~mv*?M~zz-uF7w zvv*vJ)ayld*bDbZxH^CH9)4Yp)*sk1x$ceO<2VKQpR_GQIuSW~uMc+fP7ce*# zU$5c5{0E9HikNP2b-XBTaN=6tb420~;hsmDa7+HQfB5ekT7Em~1>C`Kb$)a(ys_v_ zhkJ|V9^Z?(S9Be^67?udH~mrFquKYESlBW@dJ*H~q7RsdfUACfl=GiK3y|77#&WA) z$2bMmL3zAO>DITppLksLaq;4anF%*)e_spo^h2K^w;1?FELFiX%%v<$i2j+Xnf zeZMd9am2juaL>4bcNx*$NV%;o_iNHNp&Gpzdk`;sBh9RUmlvcjXt^>^D*FILKViKO zT)pmoVsPR@H!$1=Mua2YPo4WjxLR`K~s`DjBi@F>la<_rfYeZ*mAq? zhFbvl2#4E?^9Q04NUo28m`BqrAy8``-=`scAsTg0HS-4XNai_;PWPVuOk3)eosNMd zQ_-ia1B0)jA??uT{Lg3P<;B=SzAg#4APcXaq~ zljjq(9x4C5k~2-%=n6xv0mwF`pzi3k=gia7_9i?tE!)%hqHdvg(ZfpjhG?uwO#z1JPrB;%<=zE+nK;wJ^lax%+lOJYEbvi z9m!Z)B$<-5YDz0%5GB!+q9RR%v}h!4qKVR;X~C2*DoY82ENu*;qH>Y6(UhnN|L6OD z&f7g**R=e9neLnDRTE~ffIM# zuV!mS^96iu7k)p{>%++ywZ>iBh3N6r(%OYgxclMi{v3!eBT*i5xzgX1^X7EQ=O8(6 zy4RE2qV{JY+_S4hj@t#;EJAM~DILb{v;HQ2LfIiHzvuA#UCC>y58Eo5E>$C(r+C=C z0^0?U9RI@U6y5NiM%n>~Hfv^Ic0>FVr9H zc%C+p@7I0aoxi0{$vX0~PYSnJGz;Ns+y-G&p_uic$(1|Oa-X7X7LxSE<6hkQ!^`44 zC`?Iu9F**+Xf`_B7qOFi`kup`ZMntQB$&@FcO$vGKRjxL8`{bIl4_Cq{{!3qjxOpS z@mJU5oJZNaXg&G_Eo&WTa`9KzHqWzhkh(ATq4IxXJ^@^SkpbLb!K0Tv=yW`lf+dRkhFIKv5&vsg{-W&(rZ(l0rp<~o zjrlv4|9VX$+hy*pXqv*;_%z36czfojIeZ=$k>q=hvV};}8|2H;k^C?ErK0H#KRs+^ z%o=Q3k54c^lWY9-J#nw!#QH#7P~3o8qIM|r3)V(JvR^yeT*m9eYjD8K__d;0?D*dU z8@WH&pIqCK$<}|lKllXYlBSWD>ichub2)y`W&5S*gaHvQ%ZN$x{Xv=U0mkQ1Dw6pv z1FWy3Y%bTm%Q)UMerLXu!yUr*h3Kq-k$C)Jxz`M0U!zyhY&0Jge98JANaFF4&E0rp z8^5{qyhyz3b3ri_l^+t}>+^^QhtgNd#ovdBGirlAT1T6WdeXM0Zt%Xx4tZZk%6g$8s6UeTtLgcm=hq%vkJCKA-+TZ!GaOR-dThTI-8wwt zcSp-zGm15HN8|e#o_9hYq5<#LHX%8cRNkYiylYBypFd$7o7jzo}Fs!kxtSa{N5&a4T7EF=gK(Nk5az zyo}86JzqU)gqwG<-?VYKzq0*Sj+?~CBk`zbxg9C%g&syto{cjD$%UO|+1WN%pXK}W zFY%j49sX2og#QM)9+$l=|CDiDi=oCy__fJXxbLF(Uh-n_3mf>&68KtA(n6ersn;E_ z6)d~fjJ166N7Frg9_zT&{%CeXzggpO2eADDv=6D@^DOtn@vOa$(w^YiH}XBG7+*uy z-x8Y(Th@k=l+oO8PCwskZ-?V=H*D`mBargfc+UDd^F=RGz6!mGmZR(~+&4n$XHtjB z8?(mnKj%*DN-p!8+VC}f!#s%PKO~y3u;sKAj>{+HTrVEgJc$W>hop=aese8ct=~_> z+zj(ur1AbOyruE2c{kBK-PQZO(c_x`s)ukNbhz8$?Lqq-Zk%neWZlg}luJ6&{ge>g z=N)dslRi@xl}GBYuJ?96W%ZDxX5?}&elowiW39;fUh8&oOTYQl;mY;YIqxKzHV(I{ z^*0Q(|2xvSO$hD*xSHC*y9sqeQY!Vik;hFOM%j~SCUWN?6yS4lE5E5&(`%oLv3o|g zL93AdZf^5R@*SWoVFGLZp|1TC!|S8I4kM#7b%uOCbt^#oCfCy?t^KAUTuqA>^Zp#{ zsw1seS9#p{Pxyh zm)p3Ke63k8>Ewy@FHrRR+3H65n|rz6ybo8e$Iry3A?k&cEA4`CU!`mV`VH+uEnu}r zg=aJ0(Q@V37k@La^qZv@c>5-cDysb4WD&E?tae0{!8q2f1Ho4?2o$S`um=+zppuE zS0YJA+8>!$`%P2(`(*o5@aG0>&vN`~ARqAR=vtIDK;qXj<{?YG3bFsq{;qsBI^Ou? zWckfK7ao6n%r$oF?dpV858 zK6m(EV6y|2pAzBkwtf$z>}m8qdKJBe*2COp`3GX~%}vxBhrbt_lc)O3xk%#@FFTI7 z^rdVpnvdq7jz4mpi^TT< zS?+--ZhjZP$#l4HV6z;>O^+aHf4lw`clDcR9qt!w zzXkbbM7ZZ!?gKT-m@bs}MLm(UvpV*-Jc^rtE9X;(JDKgDLmwlJLv72gHIsQes4Z%a zT<*Es5BE2>hu{1KHzT}jjJc2PA3+O{a&;Y@z|*v?s580_4Tm)W$vdFuTJ9y(XL&D8 zsHfkg*NN=6C)s`;+KZIS@_^y`Fejhm2W>`QqV7Amzk=kx!dP-QzL|aerZHSSFI+N< zwj14m^ty1cj;$lY&mHVHw_OxDPh<=? z;p^Is*oxc3*nKDRF;y(SMIg~!?95jd`(o_JW3TlggxyZ`Gt#)$@bJE*XPHBQB=wvb zA6|b$`%Y5FBxzj;4e^^7;A%Tx6}v{L6H;z{%Uw*_Dzpi$MQ%Ol_)}Cp80t5x;7UB# zi~Vyx<44Vqa<8!5rIdY*{ziMzWLO1gJ+WL({)ijP;ePW|j5uZ#MB;ce-2aMW7WQd% zBXO*YT`P1AQonAse%(RYa5NFUUXS^>CvmT8oYx*!`q}%v8pqs6{H8u!`Mr|zv6&}! zNV)e|?oX5*LS^Ssw@^)3YhUxOx$0Z4)}7)Je$&bEw{4pQa|Sl)NV!8Tw+3a6kR-Y8 zlyz7BYrkiY^qT?J-*(uy!0twriq294$+vS)Sp6*- z<2RGxYSMas6Lwn9C-U)s?Vrp?{pP(Gzqbqa>en>u*RlNGVz}SH)%!iY;PpfO9qwGq z9Y)z>NYVuIVt%7sJ9wtuto-xD5c!eY zMsMUh4m&O%^P4l^>Ty}0?VF(%NV&@`_ZG_fAV~wr>(+@gWf@a){gr2? zi%xvWXF}+TLi%&4Hku1>HJVJFs_@Irl!*#s-kAeI?%^$8y#FUfmY6+(mw~ z1-_=mQ<)!w-91Q3<-A4H7#=^W#4}B|-j-lK80fthSf7Kd58w5_4gWTa{iX^hmMm<$ zCmZu1yoqQEQonQgjN}`*n0^3y4=qA(pms32TfYaBKh5zt8@-Jr6)p3d&i2G5|5m?~ zUWxckbuQKK1#qMN&V18vhQUo2DCtyqXQ6YE*2A;Bk9^lt)*B5(_n-rrJj-YAc`vhU zc^~yTQV-wqn`v+fML5Yg(r9ctlPg!^O!9W1_xHc%jjF#oK9vLaEhi3RVNOC*k?y}P z9xL%x%05INBfTdpyw&)c^0wccWZcR(_b*F43nt`4` z@|=l|zi+hrX*p}Qh1-jF{iacaNIO)(_7cz6$d&uC<=$~^f>}X%F_Lw~Tz_|2ZZi8` z&LieMzq!xhuEVC%Yn<;%fwjYFsBIVv{xvx;R1^tG0BbU1?n!DC-`Z?UVWt9_Xr05=`^5VxtNJGI)dL+ft?%6=T_#bFC&rTH6zd%MGJhpoi7gTvMJ`Flv&3UAQiNb$`H`ORR5 zt8p0Ma5r0jON&G2s5pea^_z(fw|58bM~^OJo^ZI^E%!M(I6Lejoze5bqU%G}cib;? zxHI9sfC?S%9?M-x*&dYeHs@_}cfZ{kuvM6re4!^lD26vRht#%aL)luA%o!noF!JX-Fbv^dd_S?oNZq`p+ z|Ht4icDTAeL}}bzQQX3x{pRi%+?5Wu`BB8-P!u<%#BWABT)qAeIox)Z8?J5ke{vsr z!Hx9GqsAw+T~CKQ8?N>%w!r%vl`D!||8=z7`jlOUZa{5+k2hD5>%BZ_AIk3c&dH0p zUJYNf;zQmZuK(c6c!Iq5p%*q|&=jQCmrQMw_f5&;$w!^Xy1Z~@{z7Bn zGk00%=!jAAFMjhCd`)tHOx}|mz*gLr{^w`pj3*t_{DqW#ep9AN~L}z`)!Hk_U4}c zc*>_Exxepn%O3FRocf#cJN;yb`y4i}q7_KFZ(8mjT@%btlpjKO_u}2a%#*8Rc{QWB znSW4^;bwT}9#eif&lR9%NNS(>yUF7w^`&eedKk5Xqho{FmbsiUh?GNqv)$oMU|X5T zGJ{;}?aAIyMbf&NWy~{CEIl6!OHwwxKNhh4BD4&te`(%flC+w#b!aonbNrib z{rdrC2wp9CI-Yi3Th=1MF@63@eyPiJiY)40j0J%&>(q)!Du!YKyd;Y2tn6^L@bkwb0F|0cwU; z7si{_mU+nLr}4Z&Q|7ct3Y7`4)=-2$2Af&v8KnG?mf!3{>N1ivocsxt`weyLpjTIQ z-w8h{*W>4<1kAN9Bm7sec^|Dn%GdeaXMDuGHzcVI`3*?;9ZTUCR}7ewT1Vo3CpM$e zV@Ub$g^9*@@e1A>i6q@cejgeOe^eB|C9!F5<5PG>z^vrngYMU=HE5@?Yf7&BwTxF` zd~&~cIC=^_h9<+-W2DG_hp;=K+%p5F0XHDpc)po2FsGuKNd3OZa#vFJ6-rvkd4#+K zt%Y4;nW?{f@$Uq;kM%qMoPe2jb;R!rux*U4M#?YozS}pEvKP?`^a?6M6+-c*jpcT< zx%hr!u2?h9SS4VtyC%Zlh|Ny48!5l4k4O(shw~ z(+Qg#)E_Cog5^I$+1p6cO7hQ;)SCg;Z{tLb3(0UX?(#~X9Zl=xMb|$Myz-+i7!ms)X z$2w|;lt0q@Zr}Tq?M0H}irFtn_Gh-`y8BbxnZgzU)1*U$Uk97!s1;JawliZXdk#q| zB!3GXiJ#pjV4j7q@n4J09`q|xzP2+HKc%0KB&{U>3`ska6XpM5?aY+{Q?X-&f4uEX zuKkXG+L@~ZW(!?xXBc zBxwTqG$iee^0nT$?M%uI0n-nDX4s1RW!Nl5Zz1JtJF}az#I+v3Jb3^~y@}qhZaY)V z-9`{2y?$qqym}(e8Hs z|MxdPiksOpV7`T`*NZ)f+r%v9x}fOz_TjSuHogy&m$nW-MlY^gZjSU%$Flu-bXF&c z9WmGIQ2KY_e%N#L(`qpBFnYds$oi}Iy>j86?{Kfc_k6hdF}Sks#%=43d5zDPaqe)( z2TP*3A-HWFZuELTuD{2!-cLsFfa&RQrT;$`M@s{@)E#ULV`AqIRF5++3?<~h}9mh$zGhli+{2AC5pf_UhH&Q0!|NF^h{C_98 z%g>3y55XS^Ki$Tq>^jaHs49x~zXN5rp$Ac4Gyuu7Tzc<3&+^^p#7g=E%seOV&!v_z z6S13%qWNnmOPIslR&t5YiTv&QUlbL4aXIg3JgHE;hofo6%IAl_GHR_1uxZlz}GG1i<@{W0pLkZm8j=$1Q zb;0g76wS4vVr^t^jcV856w6hAQ*r|4F^78(ya&-}6kRVqV?yG$gA>h6J`;Z@le_Hn zD7N^K3;$&&9`mqSjNU`h{2i1XL`fUGdS}R8eum|{&&#Iw3z&6||FY)S>DX08(Q#=& znWRi|c}Ci0XGi&-1NU!-yKRawS76sM1~)la#`LB9J`_EVAt#EPayQpY*^%SCwEBEB z?}3tIT-vB~xR=A#dRH3vXzH`py9~Jf{)gN{c5FNo?qs+}b6g)y9Q3%(g8R-T!-0PaBxn62IJY3a`tS`5mdk@j=P~BW_zZJqwWE@u8q3Ct%T&}w= zK=k!pbUS43379Hyt9x#k&qgGK#~KI3xITE8db^9yB~9ZY>U{2(MEk4Hr{u!D+~Llv zob;dE$KhVjx%OzdrhmZP?Qs8R{=%L3f50{O2F%j`18y$dZ~hOs=DvW5?-r>KQ`k4| zdP#0Qo6To0AW0j`(=RBcKIFr#4p-Zq|J68F#{B_vjl+#zuTA~MMc=Wk*H#2~n#28H z`I|K$V0OdR_G~fndlRiiavoxMUqAE7dOT&n;`$C{wM`7qN6zCsVK}Exx95uju9xqm zZO?olV19S}t%J>McumQbTZey>!t1hLOSzrwcl1775!^&3@~gi$Vb>kq;c#CG zlZ@|to+G~M^h9$npLKoZ@OAPxT7UKaQ|7>cIR$RIXKMyy^BvD+KjLt?oR{Rgfxcq_ z<&qlx>fP6he!lc&;vn;~GY19Cd2qEodkH&v&+JIS^iyMyb zuzJY<~b{pqNd*kLdJmV`;hr|att<+J|sIq}tXFLv4btK6ay z9LEm#3ATR@%@;e%)%!SGDBF$xLTgrd z`6S;EjWpg!Qtw0Eboghwp@8%bS$pav)078GAe-pm( z{5|XW*zKhFD{HNV#sx`Mg_Vrl{ zVivjjtH<#hlzo7{M4zC>OC!%WeB>O*(msSH2TVHLbjy|F_zjMWAFxxddmR5sxunGJ z4v&L-9E-m>Qv#+A+vcj6wyA?! zBJoS?HwlRL{cTE%)s2 zxi7gm&dh@=<52E19jTV9V+}de1Li#^j@rL&0z;BqE^m@QBq*d@w%-tA`)1DeUrXHV z_IYgobByhWOvN#h@I%h_`D|Z?XNmN8wuI}>PjU9EPseS9BjYxu-Oovx5im93YMQm2 z_e#OO4oRt8R(YorlbB7}P&5L$v8&FHDu#0hoMdd;qs%4TXUFg{ww0eOoOE)Muj50B z=2j%>pX?5Jy<0k7l{GV9#yh`To}avfKIUYHtIvzM{c!0om-f5!;l6GC6+dRd zt3M;oEO59%`2c?3SwI+n`q6efB1rH*15iieFxhftyh+|slQ$<|F6tTK7PGy?cLUNm^tIfbl%4v67vD3<3)mt$ zzB-PT`3%Q5-0GgKsmk^{xh}nsT)6`*_Y%t5AxRy`UuTQuNc`3PrtiJYdNyEgg{$qx zEo^@m8i$lS#Bz5~cFtDXbJQ4x*kT_ls=_#RoEKkhAG78M%oA|aJzLY2?bl67Fulo@ z%jrOpZ!l$ZkfcKLv9PA2T*qI%cagGy!v_;h_nWyFiJgoeOTC{PCK;dHw_atr zkL`*#Yxz6Yu_=9Ey&qKse>;3lUtv>%d_P9`+yar5m`Pb5G#p79OunUn-(X|0nmqF* z<{|WAorCZe-WZ`A7n7`w_`A;gEU9d~w-%7@Bgs2+Ju4{>P6IgU{4ML%&B1;VT8lKE z;qwjgylNZsvCvwy8l}Rmi6#@zEb{vw;JU>=vl?1N{|2t6xb4h0M&*%|ihujO4->0U zRv$G*+MbAyB`~uV2h170Bkf8nw#hpCG6n$p!1M&b^XrkD7z1hKtqwNtvME+tm`_NT-Ik&ZvN}^Z{ceCj&+bH zVKW=)?@s6Yxciy>8f7cdr^x-?A6Z|;Ur7h}clwfmnGaWw(~a1Ck9HvSw-#KI?@!9g z?&KX~s3MyDY~-HZA98m1ugib&T@2QleKM)ZY-? zmmIFfp@YNCJPv;|-w2rXF}PhFZj0mK=EIHS+1~W<-Y`bvaEHTfa};r?85IY!EMP8h zxEhE19d5hh@HZQ72Zwv=);P11bN@pQH_LLzP|wCuF6q|I@rT`W_Kt|Z|JHW9816$3 zSN)yraIZfOe>2_;nCIcvxAC0~?|HP);ofAq%PIRD{fIWB#>BJ@l8#S%8{Yx6w{pCh zx0rtgmnJEkO4wfFaFAS&x2~2OKR)rF=ftM+Qp#BGnIFJBPwCg?!2LT0H(^(V+v7O6 zA-FaA{M+A?9d57V;AXuYFzp>~0G`Al-Qo7J+&R}JnIA6Y-E4do9f$rJUmJ%axI-PT z#`hwJ+wVC1%_w4CgTqySn>gHikHX*KQU2z`{nFv8zil1v1IOWS$~&|VcSZJFT6SD` zJpVd}tLr3=ty9KyrCd^P^8WM>b&iJ~Z&J^~&;P=$>2THGehzooarkTArG0>_=eI%d z#-Q;?ufIlF?mWs~M{Ci0=wp=lEc3VRF*m`+SkH0tyNcnz1V3H=LDF{O2eIYfay_EY z7az-cF5|s``8o!7x5L$S6_16R2iMp4-~JwSxKG)591FJuZXJiK=Z%D)B5{~%xuu;y zm)jWY`7>*Iz}(_+HNNE??#$!xw-D}VhpYYu9q#O-@ON#LzbWqr%xex;{jK6~_4(~% ziEj?v?;Wn5=Pq=(^R2(fa-IvpEuZu6`q0GT>T}`8;&0{$0n-Ss_E%fOy9Nz+xHZB@ zjPY%vEahkB;h{!o3o$)p<9cox?|LeabDW%y@>X#_+~MBG_Sf@{!J*`Oys_M#B;Vtd z%|nt-uEM%DY_VW$q)#brkoH%LR?|;&xQns-wMU|P$Kj@hNyhgvWg9G4`f2WSecG;_ zz`djJeY7@)7gwj+-oZ^-c--jB&$7cfN*_wPmV=6dXI zak$N_-~B0*bqGer;O0efQ`YnRMZbu@G7j`*IeE@B;%{rqwLdAG9ckWYI^6XR_bGU@ zP=UkkX1Pl#`vk2=kJpY1_q+6dT49vG#c*rf9oc`6G6?VucHbe5Z*R*jq0G0}t8a4u zI#xgCpYetb0n-_-oR{R8#1!n#L{*V;@3GwalwFCsqE4s?AB#~Ib>aZ|qg(^(_(;)L zj7!7S)RXPS-yCx7C*I44(oY;n*?4p#I$++namdAf zDt3=CJ~EG7{T<|esV}#0qFF+@q<6`OXS22*i%rV9yuy@zt;V4Q?yoWYU4fnYI|NQ? z{#J_NZ_dVm$+*XBf23dWIlS-CPe}cJSRACCi2H^4(5M!whHAoVj3mC@$sZ@a+D?>g z3Yac%HEDbsVW<8+!iS~#J3N-Zn*(Nw^>-uwwuILnbwTPcT}?^8L6pr#OVJ`U0p46R z3V)ZA|Hw6!`kNc#xxN_wzK@;yOOsftziVUoYrf^Vwf^3DV;BB@0&g?gj?~}rVRyNI zy^m)+P#e??ZGpGX`di@yZ+u7lUFqKkOkKE|G``nir~W>91b@$ksdZO!slWMf`@q$H z*Uj)`p2ThB>hC1$Z!Tq%(DP_EstZrshfK?sewUn&^0x%cB)D$B>ve42K+1jEa*w6o zmGT4kYhrNUcerzogPRL?cMR?)4)?j^;FiEmyEhVtx_uJO2ACm-`@H2IqU^L^dDb3P zM$#|P_~vMQwcoWhU|Km`=@&?R>tLtxefc>2&G?adp$=F2UBYebaCQDrY5m0fD1Yi*^Le{czJg+i*YbD(1JGgPn3WSnjc02dD33 zK0^%d1rB%9ad30tu8G0D#NmE>9NZAx{SNnoN8?R1m~9;H50=}VvO#DB>h*lWVejKf zInir_wI7$ii|1zU|95s0okb3Jzvb?~kp2hdl8!W9nej8vuQ*)wccsIXAv%^h14sOP7#{Xh)w>jM8N<$0?PtCRx)|j$c;~*SD$CY0z5dNCVIH8v)%Z5YR@Ih0FUPG`n_c1*APB);KsMY!D@uEzHPhkMR(_#1*d4z7+X>iO+q zhg;2ZOFO^i+4$=Dt!OXv^5Le3f1Nj;C~=tSa4)pnV>yn~e+if$V{i)`uFm^97H%%w z3IqS`??Q*ms|h6?Q@ay_o9S@%JhaT=+V>;*N;?k~MYZes`{)NaTx}=UJKSc+;jj6X z{+q+q^U!w=SLT#S97;P6l|=cQ4fi95tN#A%aN8b-zeR9=b+~#SI^b~iy-~+>9{P>* z{Gfl=hol3M_Uzi@@HY?c)o}GZlmah+sybX5Ba--DPFWY!6E*uT{;=^K!%O+3jnMWt zdw;;>!`1OK9gn)-;p%;}FrEL!dY(7Ma`k?F4%|;1f0g@?!|iSTmFL+s{nt2`K6jQ2 z_fN-Pd5&@<%rOqPujM{LnWR|HQKm=vn-BN=!QORs5%yECEkN%$-2RrkpR&panOlJ_ zKpC(yk*qPEC0x74o4f-r?_j`mgsVyBEp)&p8)<+3KDaVo@?Y~7@~p4gw#&SQl-~p9 zGv+O5eb6}E3s=vZgN`B&MV77c&48O{<4}UrL*R`;lN@fY<-SJQTC^2yLhZN2nLByM ziNv88?q2#9Iu4WdN5H%rBM!e}r*V+`TcyRpls$Z0L*h^j_wN|~p7?tt4kM4k-wfEU zza@tPrq+;u@3$Io)!)%a@Hab#zd3)h4gy@+Z$+pnymshD$KS`SzYkEBhi0QGNan|A zeDkco`kZI>UjZ{ChQBXkr~ZyRg1<#E{0+g~Wc|fm^8vgyXbaMMHo^Lv_6Ku~&^4$H za-UBqv21O3Qs}{!f6zPL+1>Z@%35o4lLk)isP?67Q^#PU!z=-%rAB4ASt&SZG-f?)8kW3 zF8*3u^A>h{&>@Gb^HysgVvPpW2K`*gd)~ah%sHkFEVMrB^I>_3speU@>0vL7xdxj> zJHYGyiqwZX0f>h1W|(}Vj8D0>a9K<}ayo>OYWSJ{ST7w#9@gh?k{h@CzHpTYpHR}J&FC38;Rp7Y=1Udi*z1= zjQb0B8nvSYWyK|%Ow-k-7JhQOxhkY9hI03sLYJ}9kZQf_TwUq5d%@UGL9n=t|pTapDCG#-mdUA>F zc*eL3P&l2PYBs^wakn1W3`Rqd#x1lbQjPzi z$hh&U^O*~Z%`%6p&yB35>>Kne+JV}fn)na5J%5YOFW~PX>RbA`)O)z;VK4aK6UH3E z=5M6_>O8iSrzMzE57U5~QSgKQ_~FCEt$ZvEBzRS5SLxO$vkLYveJyBwt43YI&RvOILh>1E7U`G?=X zoNKvyJ(F2A)ogYAm3lSy`Z8vk!`1fneC|`9YMl>~mwG(FJ!M$L-`VgMpv4Zivi0{* z%372m4yYr_V1m$M>*w+)e^Y9tnznE?$$G%z?}RVo|2YmC@S$8MMZYi8+f#@Ce=U4T zS#TeMtM#`he%z1dB8_kJ@Rr6`LfOel$)+l*jMl^0hO#&|l27yMnLY=UTQk)hfSc~w znhtD#8|sDhxVzkP@26}Sk~D1{?|?|HaBqUEX(cwFqY#o(x&E;CKN917$)*yjhTP{m3Sj2cN;M-K zj`%0fv(#l9+9GIa=yawtddH$C2T zzZJqg;Ba-n-EfTl4v6wM<>FMHF^klP%Io7z7nrxj;Ocuh`tjLB`WJ3J8x_UPg?laB zT-%=PrtxCgcry@NNzKS?s~ul}t+a)b3bA`E%5F33@ji3}yAXCCMA`i^Danj-?4-*= zI_&#W>ZO`Ejvv?0ao9ZJ*v0ZQ6T3!Hc31zDV5S_wE(g1NvD0=apY2~kuOm6GB`&9h z-88;WDBFw6##_f_QtCq-72zhFK>LNxLdreca@$bW7mY-@D7j*y zNks#=E~w=9+BxN>H%v7h;cA-B_RpgENY0DmFI@pi@n2Auej@(f#CoN0B;_*aH{;bf)A0y)CNtGs6=m1uDE!R8ZZvj! z-tLCYohS!s-1WTOpR)H)_Wa*iF4+_lqwc&zSC4hc^}L;NbE^3iuBPwUekVGyymwtA z@wD8;W|ZB6?m$}#I0v4`GhOV<#pLN-Qq3h}A{=@DygWxRf^B9038%C7B{APWpNIVz zYd@FmCSZ5QwFzdHV}G+}U*;vsijeI8<+N2FQQ_n_$vnBN>{RoO<428|iQ(r-S2&zo zJWhNYKI?+?8cm8r*w=eB@;f$RcN622TOIp~)_xyleFa^a67hx z(Kw|1H@xrml{qchR75RNb(Dchu81=&YIywiHrFuQ3h#zJ7qYgMNc!-y6IBXnpd8b73IaT!fT=qva0^(kDtwHlxvv=vK51CLQ4L{vBX* zJr>0*V|*%WkVNj2et9}=GWr!MU*`ecUWtA(nt?{5Cy?}+dtTu2``i4j+%jeZl2r60 z`d^=6GkZjm`IcPyUx&9ezDv)bKaTpMTTl<=@+VmSX4tzeKQuAbG;#RTvDrF4 z!8}i{e3rJ6|dR?(U-D; zXe@ddxz`bEqu6#<;~e(QU6D_)ggx>7DFx*sF$f+VezC2(JZtL=f@ zH!J2krl-Tb$oox)_2=eBUB7$O$a~Pu^i=bu!|em_Df}JaaA#YttmiPw`a7Pyw0>eP z+}|DURJK3&#U!)9;m)_*pDFtrNh+I8UMumR_v@&?dhDdkOf{7rk6f1o*}fL4gLMC` zwcHi&B$-0tk=`JGPyUXac%Hb9k7+#A=lt2JX1L?;?br=N zBap_UisdGr&3FZpbi!%zraFJe8iQ1yWxLQbsb-eLZ;Z{&s4G(bb(a4OW$&VI&>FNJ z)qKsEZMS;o?Xtut?0;_Lc*!V8HQzh@-V14$Uu4Z}Y&9-9mS5+bWYZS4M?+yq8&b(K ztJ_@1_j2daevgYBhkdbm@P|Y*kX*TgHQu*#9_Rcf>2W^SaTtxYBR(SQTzj~i8{dvy!aI?Z*81ol4RnJW}HIT+x z@27o0*&nEOm1I*6rK2|RvMn>m=1C9nP7)-k@TFAqfa7;tY_id4#OmyO$hut%%0IA=bEO#qq`_YM2InS`3SR%Q!)f$sr>$kRf z^8G0bQ_W(BUlAK=M{1BOU*E^rpRz~L95eyVKvGAlpWwwjF9tt<5$&JDUx>}rf+X`H zxyI!rxgg>^_A6zn)x5ZzMK0{<<5GRkdnMKU1h;zFl(qZWz9G64DYuH{ennZu>a<~~ zDk^!FwK=V?g*LCje(XUzmA@p_l;b`^y5-)?_V=Lsk;a3m1d@E6&gXsr>ROX~9;gZm z!8>G`HJL{#`%>qkic!gmRP!W!?N4sOrVPLHpyYfm=Uu;dsQ7waz&RJafu^AXv^@Z?;R&a{4IR#v&;AAZRPsI;rGHu+UddM%0FoND_=@5zjpO1;YR+R z%Qo(sZm#bd*U*pLKZfu9TCT~t8F@SY&&O8d!ei5td0blFm7ubyIX3PbbMEK8G{yxf*>eIhOsi-P)_iK9XNWGDJ zn3D2;VLTgt_3*!pxf&Ze@7zMJ`!z_vo8-%(>>(s+jBE!ly1vWve6qf4-o8}x1Kf=8 z*1TJT?RVU2%(LXmt!=qWDO-UgeMWv~46d&0Q21-AIrYg1cLUr1j^Y|b;?dM{&!g;8 z)Dc~Qu0;c2>$@z6+juBjzQ1UHs%Z#6Q~p8ff{h$UJ;~MYYb<{hWmAx(XJtEhTM7<8 z{x73#lJy}|4pL9xYI=$72WBRj*U7bA8tQQqR#LVTNo@0B%J^UU@60#BUXPRC_`FQR zWOD*izaF)Ib)l>`l5{_Ltn;9bHKZR(HPapLgKYmYT8fmr$Z`)*c5x%-2cXMQA-)ya z7#7?7AMW3@M{srj-^lh-ZyzJq<6@oV#x+hhXCg`U$y=ckc!_oF^{8z$WIuHxo|1|Z zg63QJdR*Lq%@{NZDgPX=3G(%Al5CzvE6_r;45h-ZZu#|X?zX4JCj?F6gh;#bGd5Cx z|0Gxb!6ATZxi6BxhGO~M8@3$Nl5)!i z&2qb*jFXRecxsIBAQ@1k%%Gx1G*OPZf2QnjTd@8$&ZHr{PLimrx;P=2*`AHt~xcJ%SgXRT?KM1b0 zqoW*tdCOl&*_%kx2jpwek^Ij}37U_cxPOVw4`>_GxSwhHGLPllOz$5TO3nnA)Lw_z zmyg(=%Q#0Co)R?M9Bw_fm+R}M8vu_4v1;QgOlDrgd{%JvT0yjnV_*}~Na{R0y z*LZjHP`>??#W(Z*F_uZ6C-8TydZ_ot*3EPv4Cz}NG{BiKwrvyt-0TmDCsZ9voj{FrjyHOy6fO)R#K?_|Th)8W1jZztM~)Ng(N`qeFxO(!I& zEBRgMzt}bHb$xE-pc&`z2Vzs9NurrTu700L3`oB7S;+B2%0EWqx%uU?x7e7+!Ik4P zH=TCYiMQ61O%9i#qA<6#dUEbXhu4!5xH}zx_rQy5$+ZsBcvQFC9h9BbisJ?~M9tCS z*NHvMR0ff=EL+ET#F?BbL37%q$bQVn=4G_HbtE2*E&u7u=_j<~m`6iV3A_q*nMVn` z{l%W&%Fb*UG}k!Xj_mly&|IW`XNm*FIr(a?t5AJZ1=T?^m%Kd>HcQ=GOTCg@*Tig5DXyIf`7^`Ywol)^BCY_h&REF7VUkAEd3={E7}B<*%^(N?F{WKv$v0 zs3nqdUF9b>^x`7pJU`j%th~&ix!du-7dCI8w~_Lh5-G`-bS?c^v<0n38&Cz98J64G z=C1#RR|L)T@b$P)T5k?}5Ary|?744zvfl4zBuVC7x$j%>q8{0&neBq+BggM&TXRi! z9b+&^_or|J_}z-K0UKDKhg{ki_qbdZ<#Q3-A02M=`z_U9;U3HTEmN-KI%P_v{#E98 zXXDT9G5o!f_pxv|#eC1_>L`D+;Z}jG*FQP%2B8s1_n*e$;^~QI2IY&8wA*vZ-B@h2 zY@NGFs7&TnLDSsfzlF^Tv=&A4Kb)Fic2fQq`i-5im)zy=iorKm2Td0zF7n*k3GI_j z3X=U;KpbQ~E6G=dGI{S}b8@-9a@mKX;!+HE4BYgvDg7R7Wc>1a$te?VmiL+O1s}gd_ZwX6OUk-7Xy(Ar2>*+5QEX1Xo-t{pe7;VSuUZH0tDR@4vW z&_~rVW4HgEX^dz_bp|AqBC#gcti`} zEw{|IHXi{yfnz?@C20DwpY(X#%E5gRHVu(-bHmuke9-&&Y|6a2!>)TOH1>Sf`xYr( zgJvY$bkEid#b%<|A&tjNmV09-eg_(lhN96ZZv*{V%gnU-K4+e9VUM6$3BSJOzmClc z^chlqqK!xKP3+6g+!sNoq0>}u*{KT7? z1AuNr&C%s3ALi?p`;pCGhW`PQRCrg=lxI$^SIf8_qMqN4-MvWTuFs*BR?pX4wzjdk zeS_vaxIL}kkHMRd79#aqpBFoD3+MYT%x^&rP)oE8p5b~%>UfIHSJ}EE$ddblW`M(= zh|Mxogp_}R3@lL(>t%CJMGvFi=mC@mbFSqscKAQqxMU3sn)yy#=410dDn`mbFN`<7 zf?2FT)iv2%i84?V zW3(NRYfl~b%@`6io8U|P+k$a}SFu@*ijnfUG?C6m%}H1G zU=A6|Ly~gI&t)Cr>F~4p-OKIw2tQ>k*OxOQ?Z~HWyA2&e%B^dU!_=P4fk6{`C7Vs; zdr|wQiKZtKp9kA~7j;eE^&=^JM$p^{U*l4}H{N#=TT<*%~*4=MWrCEk&2ekR|K zq(1at>)qFyp84`A13m4E(Me_mr=40ndZ{jOe| z>2z&^ISt>m{kX?+&!nsll9bKj0^;-Jy@!v>C^u(T&@6Je>Td&wJI8Xp%=`b5{LO{C z8m?ZKG=+B)8ih2@&slEWJGsY#MxwjXKqSw=EU@uiX7l~*$8+p{G|vQ0C1R@kaVa({ z(Z@*n+bq9qAMS4j8|SzI3Erl9*&!wvNr@EeM)H4!0UM z^-vR}+_simd`*J6j`Gf^-vx(1KbRfG&3%FK9w#1J4{vw4*H~`YYx}<=)x$ivb7FAs zaJZe0gPRYx2(H%ezVIZz108M;%k9m$;JrxFWIm5I*GBFM$i1?h7df9e@two=3(=cM z>)k_^tM4V=#Aote;&tTi`6@S7y?cr4${6w3hOO?uQU4K-1x$35u`j6?nzYWP!#(5a z$nlcJ`v1FN?svFjEmzj3k@o|fl*94Dsm(oB@}hjsh1&$K##!E9?Z@s6r18kJ+%E_7 z>@KR!XEL64KDo;-v~0J3Qv&}+$8WhVtB+k~ zxZ~MAA3cxMZ(ZkD-fJRrV?O6I8E;ra?y^HsY^g^%F9*$d_}c#I@v<3P_4@@I7ujBu z951Eq$6UCtIDX51{0`<%4)*@8A2eB+BOy+%0f*Kc0fkY@Di0uJO?EmoEM? zrZbqdF+@U^YZ zT*P@MKT@wBXM1@+%?xtouCZL%kBcamv^0vVJ_}c_9ZTR|0yld9z2|Vhw%jn#{_jZp z&nym_&W^uYFFtg*-~0!+m_e85<6Gm90(UT6-G9nm<#4}02CnYAbhwja`1^^&{qaAz zvFfq^xe$#d?6YdvI9M-`Lp&uRYKFgJL6R!QLjM>9y^4{&i z3<&6Rc^S5z>Am10xF^ku#P z&1lEp+u+Idb6r_Fyw@3zfSVrPnsr@%^`2{a+~HbL83%H?!Pt(~`_0$|V(%uRvq*dAi+a$`+sh z>0d1knv39PhOKz7AvW95pGf(wEq~TM$>s&L8-0L2Mhjpsv;5UIj~^E452qIe&DHSh zTYf@+uI15bNRJbi5r7PK-CZV1}r72Q0gly%(GQPSD)p#N|r1e}Z{2 zH;^lLyyf;WWc7hlD0<<79&1r1oo14)wl zEdI)V%y9Oj`Wu2<==iJkZo0#rX}QN#@7@cV4RH0iUI1@4{=DLFpR?R=MI#RvMdOv8+oa6Z- zcJgfOI`R|l^*9A&uXy};y?-m)6=HV*cA4@IQh@Du%t$g-$f&AHOQ5JzU61qo;0LfQm@fG>&V~kxkG%Hq-}h7!(Dw^_(jF{8fxY zIQ%(qB|fh^d`<(BeC1!^*+R-CefwFw`GmjSbG8?q!{@_htqz)>ocMo%&DHGR9S*;X z<)3&zW6?-bRq_jv#7FM~C|}~Q;~b$iTo=rZjPEwYM&f@NxwaoeE&mG2Za|W{ke^F^ zjGi}Hle*ak6@SdU7PuY5TN`s5+lSAG&w(ow*h9OB6A4)WJ;YOcluY@W07jixc znr3iwEO#_^Q_*~+_0c}A>1#89Ig_XmJ&YbjnXt3%an#@DcfcNl!f74-HTXI%Q-sa8 z$UG3?zhUDsnX>26J4ogczC!Na%N=g{I<^t!e-$)6;ir4wWCfB&^vHa5p z@;n==g{mR$kAQ@4`*YJ8`%lz?1gt3x~_2#$m2JuXK>|_(9Ag zXvO;}pN-5@UmMNc95ivyM9wp(U?cS}ja>ab%W`W`)&NP8>oK`6yaisH80VR+Z-OQb zuEseNJBjnv{7HTv3G-uSK_k1`)jp9>3xnD^-Tt=Fe>u~omB z<{-%zy`GKu{W>>Zb7J_N^KH;{aQuE9-XxCm56RVU!W-s(L)jrDDOAyzGJ|8!y%oRZ z9k!B+zGK`DetP&{jJ;qZ*C7?i)$f*;U!AfMoIfSWb%^*~LcAwCe(UvQ*7rd()$#ix zY$e{!$<^=6Ew>|O_aaHTyCar(mmocd&fzzX)HhM`FcW{m%X& zXufy+)_A`FSN-m6xyKXl!mZr5dG_D+`+di6rmafy9aH`OF=%SR)%v{wUIKHCwmE*^ zWx3^sa1RtoYD|6^I#Rr|wg=7ij^A3pv#=GcTt{&VkaSG-I|O%-<9By>Qos8++!2=h zFlG5j()(Qh#+p~Ib2Kw{2F-JD)5BXw>h*ID_esk=mU>+T_hZN3H{eN}SCVV}m~6Qv zl%4iqB+ixj`$%yv`YCAsaQxPKeLl8=l{m9}q$J<5)a%TjgQnVZk@}%=Zt8Gfw%lWh zbKY*wyKvLPE-{Y+UJmMyG#)E0cNt}$BS~AxccVkJA7xt{e!oSIMV*I~zL)u=4nKaV zH=ceHxyEC!<;!^b8I)g$s-ngWv}-@QlKl=j@5=kdO5l!#>v_ZbK6tOGT>mw6xW8Mj zjNe^Fc?ZO0S@=Fk+38+irl#fUI8gpCK{LvhiZ!xB?!wm<9{r4zkGto2Xj)h6# z>x4wcgXH|u&hb~yx4HY6*95n|jq|x5a}LI?9l6F?--q@QW$VyE6hhmOdp+OTvRm>z zgU%}{+8;D^3L^XppD?Eders~&(>0LfTSeJcRH2ytME(nM`GXz4-meZF44O_3{}OCB z!@q%C`7c@ibjn^rtI!12t9+H*gU#Yn+)xuKenj zznrp95U(C zAuo-ao0w)Ua=6j!0?PR(mcKIpy)A5?6<^v53x=V znvJ#;Fh8l2*RQEW-z@9IG!t?-O|FVJ+c^+kWm_5U63%Jfm&7ljY$cLD|KbT=VfsmF z=AdK$IiGJtA*A;9K63nDlwB~)d(KeTP0B2nW=?%R@;ln``Ss{Vr1pL7_Yb9PJaWIk zFeS~L@7Pb{^SP)1seLnR{{m%|A3oeZ!=GkaV6Vq(bv|!_`XH%K^84kze%05S% z(ZIXQ95#kr>ta(JeGh$#rZ} zn3Y<4Y<;#wfFbzzI(}b`O>Z;>soy#e=r_vBJi_=m`i5sqrHz;IWL}$UYFf7XospJi z#yZ@~u(=kEM#`mYEXlV=%0?uc@~9r2-Q~^W%r1Bm_ybYg(CKMrF; zOtRchDcg!9?IAyiO1t)#?J_H;nbq(!8&$Gzs z&yKU>OT}lVneFhhJR4J!?Hi${NO|@gmDG*0K4>nyWk~j!rUjOles-EkS`g_6j$!*L zXgbokp5lF%@0I~c=6%XHpF`0mj*K&q*`Q;A&jAu>BvX@~B8$8(QuQ zlr2GjqR-G*NS>+PXqmfgu6-&oE3BSoMmhYtqv=1QR!IG3ijXAVw5|!}7Rn{b`FKlr zp0Dk}u}#1<9?C8{FU{mT+}p7mf{KvV2ZkFY`6iCxni*|CMd$-0es|`6;(GR7e{$g~ zTZ}@r(#&TLzwV>7E2t|{zcM~d%%uJgrySR3m`3tUlT>ptp z;@F7a48?@GM>?)^EZaS<3+tqr;0uTI1F$PQe9mo0#m|kw&$}qi)N}Z?;r1RFXWEf# zTy|J~H_G}TNmWKLM$|FRYl9`f!$MRDpIbtcWWps_n5~$ zi+nE3#i+zN4&}aTTa;Tr&E&w<`h6bT*Fz1Eaxe0})7O!*K1kAiYTD)PEl@=Q5Otw+C^T>Srm*yP=sX5NRJ9o~}l&DeGkdJSp3xos%P_bX-9pYoWE z$dg$Br4kaBrhj5`N1E9Qw~ggq#`d?MZb;kd+8#IQamwbQy0F?r@wA=J@0(^4=xgcz zd!6kMmWwkVlB=I>t)Jge_A`?7D|vUA{iC?*XHma2Qw^@xHwL}TDX1n=ZYRr~P1*P8 z#L4^yGz#Vdl$pUAcb2c*>;Y+}`ND|5=dpbqbTLwHf6KjsvQ9{n_|fj_M3ap)rjjc+ zYhaq`4L2vewJ|-gdkEzr0 z+5Ras3n}+m%Uwm;kLWif^U-T&C7KpUc5F{_*Wdi%Y33D&8#k5sp;M4@msxH#${M39 zQA;!m)?_pQe-}h?i$|oHZ{ceFYR~q)P=BP{H!XK2W%E!Ws=g=QEQ7V$@DxH9BEhw&|IY4^4@p)UZHF?k|g6EZok>vYmsZM5ZtdF?&sKr z(Dz8Wr(13bWxjlmTlNUt-2622tHUjaop4VlSMIr%Tb;6|N6Af}m1a)i{=UYy6?WI5 z8<27@u-scIJEy=q*~xvR(&CU0_k6hjkGAuHvtoMx_-S|B+p4ctlI-2Rdn5D@OQlj+ ziHg)xQWT3&2^*o3EJ6`2N`FKvrGIEuDhiv@AEJ#)h*pIntO}*@dp~#1(>*)gHubCX zdVMUgAAt=zrsRhL`+rG>iSU6qOL3 zO?KZkrLDN1v2jV+lTysZ@RL1;xfa_#=y|04H@#(n_Am2%A<9Sn(L<ZmVVD$M05AXfEzxl1&56_4DI^3`|3c>7(u16Y=6TM}Db(H;t;wDxw+sSt$ zcV8xSu<;<)@{STo*##+PgA?y0Y^$S|NaHcc@?WNG26_iYuCJZz;Ht{D?NPxSDW<~g zX#LxUP52d_|3&KeD9bIF#53aP*vY(eiae2g0=)UCLL;tmEL&qDW*Kj%n3EiS9yanF zs~5=C?|&?R8f9&Nl2UKJpc@naek_E0p2L;z1B97C{Jz6Y^bVE4a>~9&k`DCUf$+Q( z)79a=%Dnw1+;rLGa4TEx4$A)X@d)=mxV0i)aBqAHZ3nspX`J;txqnf1)KvQ5s0ONy zOh?{PfV#7twa6tNZ*a}M_x{Oy)NA;9JodxpF*FQmoIkLBucz!+lst{!LGJM~*|POm z3@=PEli_;Nw4NAC8;7Ys`=$Gt*m+~t2%aQt< z%`#G;CuL8fm(Um__jVh@td+)?D*06IGpN7eWhtg#41eFnPW`CF_RiPZWZ61@Ipf0=vji?-HL1j*8tb2l znj_`DZMhFoHWPh<7NZ@o5;}2iVSZ{V`B&^W?RVrYPcc8lh{Jm9G!9GQmKBFKF#Y>2 z`D4b7=SGjeU*YXS6<&|}tM5&@ma@@kHhLY&Gljh@bCAvT_{(3BVrs&bI7nK;`YTZ} z(m3dMn$MojwKvK~qtGl^i!5)I%{30$pK_fBSL&#wH(7rT`X1?V&G3h$#JUBvMd%77 zsRen}&RnB>=-n$0^S8u9`s4YlQ%pyPdjsnZLnD!LnXVuyvEmy%FNK;RN%hDxVRb-} zYbu9Z{AG%H#Nl4bx>uvFi0TnJ-s~-a#JeaPh+H3af9Z8~-nta?g2Q`+_4CmLq<)Tz zcx4h7QMLkojU=rhciDqoKfmER$Kh^b-CgK!q};bG_oNy0ztQxG1kjwIKfBuFPv)SS0vi|dEJW@Y5THgDVeT>#2No&Ym_GHJ; z*N2AbV=qa=mR;`uZH?7uMuFP3auMya8oA5OcDNinl+V?XgZlY`tsyWBw9z&i3YcP^= z!F-2Xuq(w3ak%waw-ve+X+2$T{p~?nf8@s0zn}7Vr1c+v7616WtfVsi%cvMMXTS+Z zR%Ko&_Fth5Nd0@#;{+?8?uh?~asvhULorozp09jJ|!cG&kS+to;f; zTx*s%{*GlFcL(phZ|QLLKHcjqyNPGHBpvAbDI0Ea3~pP8d!hCBV7P^F_rMK%wx%Pz zThToZx3%S7$#-`0D1SlLVP4zP`thccJ*O1eIAl>TWL{hTF+p=Y6Z4fj8JoH2Po(wY zD$5-?pX&qk16qMTN5$|;P^2+pVy^7JzKo}8y~wT>G!5Wuy{Pj}1#=PVhIIc8v;4)B zeT_=c1;gS@HoP3m%(c1Ji^A$b(;03p&(<9GF2@3DkJNA5&j|b`%iiNXP3S^&87hKT zY?&oCKR36$X=%qBGD1N!558ARz3aZ$u{)Ieiuql=xVYDS$>~9}7QWW&^|KPpL~c0u zyVjeJBkhLQ44Z(w*YQn$TT-F;@S+^!(J@fX3r+ar5Awc?7t{a4$as+>9DQbNdnC=E8mI2ylzwzUpw7QGeWdYHod4%d(BO zp6Ph7UgJm|lcd+vIVT3qa=2Q58+M2@DaE`OfJ&>!wbozv`THN?mo-lu;p%GPR_NIOS*~N9Sc#ezQZb9J7{`1++M7o zgZd!lwzOO?^ZpI8Lt}B(-@z<@O&~GKX&E#f-i`9l#zy#8 zkt=_;tO)-}%EqE8Ncb<4yZqu9{K8g2v&!MWi%tJ631&69@|RkE`48z&q8faLzHt37ZXGmn??vnH+1Q+e&O^H2POyA0^Zw0PUYf1-OzT5#`=B`$uG9xf4Ossg z^b}IRmwAf$(*CLf05TEXzq97QiM(A6&1{hNcqQEem}~FqS2`O^~^sf zcjNx5<^Rlm2j%Bn8#FIE{MWIWfo3C(JHw5VO0^sB6qRQC>u4Fs| zso&39ZqBFNOGMLA9(obEabNDl{c7exN-F9RG~3~8>XH#>?z%4C{D7?-kEd}w+4ecE zgtBs>sY^&4cZVy?7=5b1OhnLM~-5p~*-Y67PD~(Km%N z3yz+rX0lH5Dvm!SkrK|GLSg?^T}}N)`KSlF1Ian18JvtpjGdDUSLYIoQD&bYZGE&| z(eIT0jIGoU;nQ7{6gYkj<6TISd?&)K+rpKk=hy7JgXUJadfYUg7BG#ly#y)ujR?sE z22%DUdI3F$GI@q&55D%r=Stb0&ob^Ad5-0tpecc?@hD*ZkI)XJ@d#UPyU!U9LH8h; zU)!79^|_v9@4cqNE~{_Qq`V)kH{-C8=b~RH*Lq{0lZpF~veiiUnfz>Kzo2R1*x$gl z;yTvZh=kfST5l8XVwt32vrE4N^;P`Jhf@GY<0s#(+X`bh601x&x7+hvleIigjvhwR z-m5>dKjzzQ)a#Ct{y~$xFv|U?Zouqj!=_@ZTz&8J+mvlVCFlzK+uebn-MWJM*TelTjkcU z+zTkH__CB5GqGoBuEau8Z`$=-Y1{7)nl(-w{>v*IE}I}Ja4ltbpnH(K|I78a znJ*4GaL-s2_4j^k9z{sxos?0-}jL`FlZi!t4Z#A%RTM4 zu$6QZ_2E`;VWP|Nw))?HCvq=IQW(x$IN`|ujClw9(^e#yFUVyL;XLgv3$*-_`9Vn1 z5b~#yd>^fs^-bCCe80Shf@Y(`pN7o>^Z`=7&If(uE7~d~X(stRGywL{7<@gSWjq!% zl|P8qvrn*jgYSiGBv*bddt8)XM>~lmrIXh}GFRqRCg7{@l51U)^>POXO;h;VpJ<4U zToW`Sm;ER4;gevJ0+&$M8A-|}cjr|r|6%Hyd> zyJ@^jo(`H%;J30)4Zvpj>O?b?T=}ys|3k{YKnd$P*OG5TJ76Z<;I$Q1Z9WCx<(&?a zvWIh?hwnv^`AJ!&ulFV15*E4Mf9a-p)0yRx+G0@F^-=-cnu|*xFM7;~y~B-pykyK@-9~~Jq7dqTGuTL~9uwCPD+gk2llvOOQV5*_&!xKy| zwrEqa*G9Ck{wg2Pni+=Gcj zA>3abuEybfhuhzB%ZfucUmS|Y1Wog$(fWQ9JQ@4Dlbk9XsSkraZeoARh9SLP)_o

    %3>k9X8s63$f?r{1Z9EBOMpH9(lhRJ>PeY}_U9uN$lO-&i^zr+0~ zrRUJRAi`^C;O4)-@X_FXVM`Ur4@>af1G-N4mmmBK@c9S(KJu?8@0qTggFw9lhJU(p zN${-iG$8*` zg#&c{n18vH_7^!Tv(x_Hb`P(A@c#z+Y`otZ??-i}>GYM1YhXV+8FY-V2S~e$_aoR% zU+HH+r{k%C%areiX3unE`6d|h@%avGeuI>JF*)afas&Qflg|=qfrsyW<=y`ILA>AQ zJWumfbSMMs?{=%&mEXJ!<4^eML-}E3bf%0yv0n@2ig9ehXm2r&1>G#KLXodP@YxOf z_U8I$iJv$0?|YDZP7%1EvTPkLAN>2lKC8qI(Emy{3g?JHhrR7LSL&C?sUqH;CLDMOJ9kNC3dYPtSt9f{YH zjSsF)XEdS^kJpPR zE|-2YbcpFNe}|Fb6zUJXbu`jLAp!5#W|@%;+=&4A0a z&rdhp^CGvO%VNR)VbXGXes#85L=6V*jwnS^JyY?p3sp`f&9RD;G~zFi~Zx5 zDtUiUE2zyJkge8_(Q?Q343}@c(Y~b4l^f&hW|!%762cek2=kw457FM^dm`2y!F@|7 zi2s&El^zG7T{Yzc{fmCiY`=U(qxAgC=L^Z+&uOTZE!TY6?Zf3;HeIKT^1B0eC4RP$ zuj$V(M{X>`yv#y9Zvpx4MmkSxIr1d_F8?wNlwL#XA^u4p_ zUdsKoy_$3ZwF%eK`Gd|B-q0S|s6zQwAo%AmdwBl0D?~o@@4Y^y2;@Hy@~OSU%Mbn! z%OyR`2gBZktS&eF0!8G;bg^5+w}f8)sMa^=D3@P;4$^Ij4}@|C?sDh@ef{=XAp6Us z-&6Zp&@d%mvX=6_C;r0KJ3;?Cw}~9;3~diN!jOykh9)xKC-edE&sU`DAM7??${{A} zD;5M347q@li+=yZKfeq4_8vq1(H85~Yj-)O6fE?i8mLH&3zVdKHB`{DY>-??&O5dLsYOX;+b3Nk0zxGRkK=$yX1->Ak=|_%Ut-LGck51&s z6?%8^^M-cV5;_pd5BT0SkGd>h{xHoK{BP~_9`)}xruWw+4$$R?aTzf0uk(-3GVQN} zeCP)tUuyrE_zwfW*msBdPwcxx82j!JhI|F`1LfyF*{0H8eva7Z32mwNjHsu+y->^T z9vE()-yW(HESGdol=mHsGm$Ue6O{PZ&XF5yW&8rVCG=y(KO@pXd(lDoLHlA$d?1t? z%KO0!Z(GOmMZ|wyQslGVrzdvv`9Gus&D>sKUJ#h~pYa9xGWkEuk#mHqzOHA;KV^r8 z|HICPo-8jHr4BRbC?~m{@?(PV{@?xbihq2D`Q7`Uq4%S4>Gm@w=Zqm2@LZm_rwj6# z?H=;U7yY3;P=4tDK!@G7yjj}~=+MV4RYAIi3Uu9`2%mo-7h$M{0uRq7%5AC&%2YlY_3L~g`Ki#STqGFuJD!OY`^zsP=T|OVO%Z>|R{P8Mt5uh9`Sz#pSMvq=u>OF3 zSl&(ghkBVfA^08?MZJ`E$C3xG>!syJyCZ5;n3sXwqP&n#j{E@b^XjWB!sZ9_d+M@F zlDm1KZ?%sHJQZy3LEkgq)WL&2Mo{_F{n+0fJotbZbm_jL`wU-D znD1B8eFpv%g|{!B?iCXJzyiHV`{pTqhHg~hZ3^4;o1q8guh!9e9K~h81-XEiT`{0A zOuhrUYWbXaX89b-&)Lwy18=Ik75O9hrGp17UxMxz{!IK5uzWGPUqincSU$e*(r*UH zXVdcxo_zlye_ND3gC`$_qx74B<+Hw{`B#d|fD3W~uY3KIrD5_Fbl39P7yN^Klwa&q zDjx!tFG2h#)^zZ|laKjH5Wu&~FCFXVLQvo_udn`BK^po_rLJ z&~FBo&;Fj~V<;{IF31I3Z^C2K!sL76Flk%H{DXXyUwj>TE|;pd6)Ph@aiAkPtb1$Pd>UIr{4?_ zE`O?z5qg%vlaJ@~DQyN%J_;-P&A{?GG)W($xD2>v$q(Rf`?U1F|6D2WnZxD%=+Ike zesE&Fl>biqu<-U1{yWPh-Aw*#-$8#S`%=X^)D#(yBrAjawo>0A7eBb@PfnBh0r%nH zI4F~RB}bh8nm0a^`2)zebOG7Mn6!UVD}M{+GyL0bt$c~cbpLM3mw2pp@{RmvZabDQ z&yepY@&RazCG#))UQPY>v(vWX;6FLJ!{&nFW*zLZB@;#@^1NDAu z<+I=Z@9N)&Uyt;@U!mmv9rk&|QPjfCO#2UZjtG}8qkYy=zLb5g48A9zTr=6HyRmlV zSO3K+S9ATd4Eb^&$x(@$)AGfR43{rc`{MkM$an7^?Y!?V=ZSo%e?_ZEzFX4vX&<#^ z@~K+NhjPkP|7vZYANu@4_p!#2=jM3XnC@0l)ap2H^oR?_m2?_hJi2sr-{N@xVWpkM z4ljFQ zbt){SOiRXWljIM!I`%)L%ef+kMGjx(%Eb@CUt0a&Vf(C-{pFaSSg?U2yypAGmhTz9Z_W zBiSFWP2;w6a+E{i0!$1@{9!%nM0x*2b&2lhAm8d`^jLn5>iWC%e;MTKO6NTN@*)zy@bAuhMJfYWc=K?U^pu2T7rjs)$dO( zKM5-AKV$!<&O>Scm9b+ME*&cC&RgTw4dfYu_<4ogvyTq@+IkaH9?+a2svBjRKLvS zmyq&9`|<|aXTm3+)u(pynQ}lrQx3>y>I3qXVI5lLIZgQ@WQ(-nE+wDMw&}A^q<_@= zZ{HGDer43YI4#oUr;e?id?vq;&y*Yan{q?Ge=9#Vl>GGi%Fm*3gurZHmhWo671n+} zM)v8nOv{(7rF^Cwkk6C@@|pU8eE-&dT2$ARul^O%?WzdAm_-zKl%L=+2Vh&d^RjdM~ok@%Mbfcf!oP< zX3-BzvTC2pW#6dLKIE2ZI^sj$rSjcd$YV=F=NaGOEfo6M_|9*>evd8^dQ33FZ++gY z8Oyg!_H|Xlf7X#f`3g@6moNX6pd6CC8YpsuU(~Bh4Z0-{%r)q!N4*R^*%JS4$SwMV z+_(?iq2=(4{pD99<#%NVl#os^dSbYI|K=YI{t}@r_&+n{hJP^7EuF1`e=zJPfZW}r zp9MW%;^RKB)BT%Ge)-C!{HmS~$`|Rob@G|}u^=DzZ$*SJ$d{CTTBvW35B}XCH{^rA zG}t-h1b(eq=MH}PTq(c&XSIAdzfzMyKAdZ}>jn2KZ7ct~El^HFbv=U|yMi9qbd(q5 z0{-g4LoN)Hukl3kKR7piKBxMm@bZIv?sk^X*j(B84m7pfE9MDe;0jszwTD4_gSooqX&07nSOP*E-W53Vu;La z#QDQkC1Zvb4=%ALP3~@u=^UDxml56V5_%VTS(E@xhtPaQ$aIBRe;T130A;^T$L-AH zH}m^ei=UH>+f~+6aGnbJjNqkR-*pu|70CM2OOMie-x(MM5U;0b`RmDZ zzw!L)yevM*|6VdjQ#fo5+CPhtiKwo$}<}w z+s!b_A9(3udkzm>?@X;LSWAcl47@f@_ zSU;QYH_28O{bo3kzR$$rIQ?c|zfS5CTED0LRSa2i9j>9@3`5DlI6aHfX1IzD!f;s8 zvka#>Ivk|FrP(hyOg3eKTx-g2X79h z`KLd#RplS8J=k*?rDfB83X0G0TyF{wruw7Wcu<|E!^t{r6vJghDE&qB4akkHJ$RMk zCp%@U=%&^lOd)$`KW>GT7Q=y@KBcGVSr69w`ngnpmg=*-{;eZ@y0LT!eSh&F{%m6> zFH~|`S#ep(0TzA1aa76RvQB3fj~Yk8&0?M$FB`k1yeTR zM&2O#m#6)^x<$I4gFj&I-&q&7BzWgZT7H!sT>rch^h-4z@=R??57Kw_&=z>#1@ZZF zJ%zplgL{nMJucV|#5x7<&!+VJ?S!zELQ(l;2|oI}yS@2E`$Nrlk@&B$Z>MxV^ZEZd zOUsXP2WI*Ca=rgbP0KL8xzV6Q{tiNiKP!|^mt!?Q3FCaoy+%5gGx*g3A2d|(F6g=8#5Yd!&u`hXKRQx}{LifR$=|rj} z`TJA5S4jE8|J->Ss7`*_{*Q{o<%j+;B_qDaewb_?}C z<#$xt1?Z(v<{J#dg8Cf)Jyp>lFlBwf3bug6G88w ze>-{2xitQ*Z_aN;?xOPVnxojiPGjG^MlQWaCO)9bmDN;L4sN2_(#9G4OWL2q;XzH* z>zB~|cjh zZ;<$rdQDY?;*a2c(=IR?4M{Br+39?a@0k=^mx`S374P0E6$he{a0!@*3G4V z7P1O>Wc+L2O?K7-T#|f4!{uMSTqop8dYSrv(;p`I`+AI)AM#j|&gD{{(T||LDil7^ zFXl`9DL057rG24l5qcF06?kC%(#HespRCVxdx7NNIVk}mwK*z!F? zFtJhihM#4Wo04@)XO12(Tk^n(;x7U5A^(AQYB|-5I=(IOkE{?qO1=d`H&KxgApb+_ zR-WUR-;wcOmwGfGyQ{DKhlk4#|0J%Y8wcMrg8ko}Ql3~BM*X`?deJT!?c1eyZ5Be5Vk4G5w>!{vTf=@%Iecg{UWmmdP*RVGoS%=P&=^BLA!v zB)(t%k^i0i&n?ybS?}og;)w8J%I^x@lz+a^P5CQ@ZpvRJbQ2-ID>pt)wtdDgza!^2 zvRFYS^;9MHqn;Nof92jfA*6S(*g4uW$wpn>Q_GL>X^z}za(R$$3B8Z(pL1W+^$6u$ zPv-X%H)wjH#IF`U?Os~H!-a05s1Wi5AHUa}KUn^P;hK+XssGWhD8i_Es!x{A#~l?e zf1l@r{a^l5Ivw}X;P`LyE1K@yuk91^_m=peM}#l4oY7t!(?j%ij^@jf_)i$;o{UQw;LodXKey;2hxxjD#FqPUVpY&945d01@(R7(&sDO((Nn1ebxVs{8=+1Pln0=`Rg?Pztva% z@$DDx*EAARe5Cl(JX88z1O?NyN@GwpeS zuiH88M|ly>Y2UuP)pJZqaoLE{(Yoni9x{0CpyC-+bDAUqf1p9kT&5dS;~&xQEs zL3l32KM%rlA^v#~o(u8MgYaBPU>=0#KK%0_JQw1h2jRI8|2zomKubfPS(6{YJ%5?I zDNO!Kk>8o6`|(&su>9}fsTE)O?c5?5{+;H5=fL-!e;BKv23x%8U> z&5(5%J)LV`={7u)4~J@=tITrB87G2+E(rHCIPGAb0bD z@_14BQN)i2bek{84gAhU_m2&e|AFZ`esZ~Pm(QZ|ZA^ct{}YKHmY>U*ubUT8_B4;D zLz_13PA{hZ`!Ranq4py3d&GnNX@bK3Jzd_cALsq_^WOdqU;5Aw(uaN!hJFx+eh}8u zY%c$8FMTyDO#ao&^b?Mp+v9V3{&~>mR|VUbb`(|}Xg|y9mL51X(a3qLPiexE;6S?X zY@+WYtZC^%-x3N_`GUW4iC?&?CHbRhschO`gnNw7GUET+IlkmAlK)4PKZ9I(2L5#P zODlQ*1HRvc^}m|;h`(mO{r?kn|IcQ{7cln!mus@xR_7ZsolkjI-V0;jX}h!}U!1FQ z=$u%b0OtZK>30PIE?a(3^W$CTA9P^CKmMta@xS{j)weM|`7heB@|*q&G5&}DNX#Rl zJX7-18J3vuTuUYWt{}jbFFzpvoo(uS->ra_`$pw z!E_Fi0OemzzbgrFS@I)C@F5Fdo9f@cjq`PRr#A3n^eETwzZDm2`88GV z>E#IUmyPvHNmez>u&x(tr_;lGD%SP(-9Jd*LlSD#Ge~bG^ql_$--EHPFD%2sibUt>6r7(p(PzCXRw*Zx39d=mYrOs^35M z*Z+jfe_i|~^}q23>NDBT;a;N4zrH*V%>EsDf3qv}O#U6=N5J&=P>6YsnR=WBJ5Tx1 z8K&v5bNF3V5+C*WHaQRNWa;>}@B=@Q5&AZ>^GkCDxpBYyrfHr0@>h%eQTl$ZD$Q2Y zchmOgUK%d{bm}K~2FR8Cie&xYod3fi@!t>5e=WxR zy7+m^mvp+ag6#CT!jyl^YlrO{CVxBfix~6E@BF_ZKlBUSdirin{QDmZW&LZ;YoxY; zC?zW2%e4Gh5dq%NyN+t0(%%msag{C~>q*@|OEIXoPt$BEPX4P!FUdEx-6Cbk zpZKkvatR>6`n{d1rf^Dr3P%YbzxxNtLIC-rq^k%4}kAiPYQ&7&_$Y#aTNHy>VY8r6p4TMtRVeVp~q$4JJLB#=$TMdZUBEf^7gO& z^~aL^(}Nx+{j5pvpG;mAt{Dv*k61F=_mG3`un-6 zymtD*ILaNZ`2im(z1Nkx z>>I2QJ}#4e)}YT4dZDBPx-0bSjrjA0{`^Ct2T8wD=(ig2tAq}|Ol<1!!@_+I+)WiEA+NA~&Y&^nrIiwbHPkiY7FE@#!aaUG4O zD9nGj*N5u|`@gFsy<4#VL*^fl{Uf3W%#%Praj8eK&vZL%$pfuqom+jN^;{tIvGRWD z{G|0TTk2yYu{a`);{u=T`o{q@(N}Vs- znW#aBp5?L45cCZ^?feUV_1jNE^keb*(RcOLJV`%!L%4qM{Z5pNISvE^^TFp6x_^fr zMvDH`lbQ~Bmkp45A^YKMNvQ8!u@k9Zg+l*T?9CQ>kuQbtZzV}5bkX5T`pwWGro$2X%>aJ_HS|2gh14(cyhWV0p)+)*`20Oii{dhnt8eeV-Hhft z2r^x^+{hO^r&~o!fBmYG{_F4hG(Id&E8D&)+G6Csi?$%>TyX&`Y*^0zD$hz3jFrY)7ty> zR270^y zE-hE$Slxd?4^J3$=-~)?@3SRe=;7goIvur-PR9mA88GyM=O<6>=$&sxbVttj#U3Pk z9GMyk`Gy?iYpL;9m%SpkNmn z)T2!Oz29y5MAlDS$_4$`g|nzVJOs1A^!t`@{k%ecnb zZyy+R=xwx&2i!}vo-N5BH>UN5e4z)+pxa<51IBZ}y;a2|M)fQDFL5< zz~n5gAFLYzWBuHf{I>V{Ir?$bFH7<@*VSP^SXYjdZ@oeStgE{8+aXXlW_3)>rW$^& zQ}qA0{cDJOsjjtgFSXhJo2P$R@?_ZllY1V~1!I4t?S|(GX&8}Ox5z(;0yg-+Ww`i2YvF4TMA z7hmZ$AxuA=FVRm}%k=vmzlZwuL))ml{9~tENt*fxZ;Y{DG1}Ks3_q1vSzlJ6q ze9t}EQVen02;ha!pfEuz@Y9d@VUP=Y0e=1H_GgCa=Z0ze0cTfjKbiDXG1O8Fmp!WU zw+4`W1keZghkWr%h*yH6N&kGW@M@BW;10@dmVN73rKRJZr6W|&yKMDmmSQGih-@n`P zemZF*jmv%h%bYvH`>!?PzpP5qGuuz(yQTiiYI^Ga$dYryq#p0W_w+FTYzrOh;W$52 zAoOx$pGi#Uct24q8>_^KMnc_u|J$!4kD3!^KfM0Smo4kQyw2OicMiDGnRJuZT`ShN z^8o9Z)wIUQfOSk>$7Pt@huVi6+EY&P83s}Ly5p(s`H9vw37)M-?GNpLjLJi=O?skty|n*7SKANjB{0@^swIO)wk~&N_y;*&#(~y_!Fi$7cT*&OMAC6( zJZ#H(*Ic1vy+#@99nZ`BB?6XMjBi_e5b)LlfnJ@Z@ z%ll~!wfE}#^!#e_&f4i`z32z_FWIS-zrSX>y@!6U!+g8E&q6=#3uL?}bPIe7Jt6W! zu9W`}p`-lwI!UJker!qSlu1Gtzfc82$8!=?A1=Jjd%vg={b2n3DEZfM-bk-ssJm*X zpFL!JYs>or@@Z?(p`Z2!9r~Fd?GMs{{fsr}mSoUtfygWQqWn)0I@Tqj&xUV`{w02A zNhdBiCb;>{vr5>0CiK_wb7lVdl*!Z{99K`Ry+FSwT6c%*2mV*8CB0QxuQBE~mdZRZ z#=X#k>6gWlbY3^&L#`s>6Y|;;e=g*e@ASeR1}+gj2tTMlF(aMfk`A6jx*z>8%Ja|S zNciVqdND6>!R4>f$CZuWgoD_V1SAY4E29|8SjYM=4Gfcg>sArQK-sSc0LROCG zCwddT59FrpM?Dm-pPmbY?azA^S}x4DBi-9B({y()oldUY$dhuh&(iJraG_iEg6%_G z=nGDjbk5Q3yd(6<-6g(^XP}3b(DNppKJ;+7_#?HuYyG4C;yI){^`v!U{QXx{)-P7P zLpJknj_SWs^J6Ut*H8bMn!#$})517k_CX6-9V7h<+F|IYK>Q|vZpi}?IcJm1)A{BJ zz2}RXA7@}tpH1!(y6iuPJ`cE2=%P1A(mCMRpgu1Xx^3Y8Z|?cCUq3lwKW$gi`}@os z^|t88emGn|ZyWmAN9v0`IM}}z$-WD>SeJW_@UcqPx!}(xBJ^3%+eyLkK((x|S%Wm) zlK8z^YI$9uL!ZswmGT{|<3}a_Euv>7eC7+iMsQN_KJk;X{rZWE{j7hABGhY;^4}4A zBwRo6-%%~;O%we%Yl8d7+R1xa>`eWB3jN$D@zn#G4*lG0&}~WoOYu_^6TcpDq5mm* z#`v&Y=%#;=3Za|+KIRL3g5a3o9911yKbw`{ZxPGuc2>lEf|0A~e zACYWS_1z@lo#zgudRWFNH$?3v}Z>;@r!F^=r7qUm^J- z{kYI0f`N`X_`$3F`~T6uvw!p0E;(xT4LW^S{G6l324=tK-qffhI8W@vk@slibB96C zksJT5pY(0*7u^=VP=0+rIOkFDU`@Eg{>sWdh=tlE!Us9N8t9R02^%c#V5iKFlxq{C;`U3C$LV~JD)=zUL zP`Za_si!W{?OyWn@cPAm`I{{kcbMQ0i5QS`72dIP?(^TDmc^jC6~JYA^k1+O#v^;gxB?(a+A z_`alt2S1#q`Atxm;WB!jWwEcK`vf;onB|S#)xv|Ked&49Z{_3`9z077L3YOddIiHd z?IpcSDLsOiJdbB)b33#uOF0*}@Ss?pk2)3n-=D9feXF~Q%4^rO z{*sISH}q%jbFf4nTiP*aoo;WSziXgxp+_Y?^cNdK`XYe-D(H8dAk#(F#Jhm6n{?aK zu=>mA5Baj?+##>OHTC)5!1`O^&ved@0PAmjj*tQCZ+woB0qbv3ipzlYH)|uUj}c(~ zEkSE>45{@udbW}P>u-GSkOAv&6_ggktY@fwyo%QIHc;1fc3aI z{bs;=9G_EU$aD>t8%2Vb?H+mCKR#O}^|$6wnx9&iKEE7$CcJ;e`DOI4+xz^oIlp6x z9Ok)Z*jd3a-M?b|Q6TZn^Uj4rH_tl@IfZQbl`HtVgZJ9muRn}$e}9$Qzi|yx<6C!$ z)*nVJz&yUqraxEG`(GX3s=zTE%i^n@8=|+)%wHp!1#X7T1j;2Ei(R+aV7HF-#FK(TL+~&^$o_y zdzmuM5z_W!?>fYYj~U7%3_5kU-c{d72j$+=h>!j-c}9>Qv~!Z&X8WHat-AFJYyVDq zRzG1k)$Q>h3O4ikU+POQHvb=c?*T7Gk^PGo`2q?92wYJvP0}kWj1kO@ie8L^qGE0` zC}AWhsA!8}K}E-af^m$CYZ?`IF}I3}iaP4*Vn7FXQPfqh8AarMPuKa*oo?pts(*a% z_kYj6pYN?Yr>d)}&#A7daH?ANb*H~>6(Z+?+7N_{-5-pVUkmC|5@yrn3uTq^{2DfH8leE zr&CupH3Igh-TRsv0sGUbc?bu7X@5F7x2X~Q*8X(jj;2Py{&YIi)ChPjP)}Cf(?9E# zj8yKVh1diL~%k@FL> z+W-6edkFlVtrX_6pDr&yt}jx4!*v}oJ2g80*#D#GeDRVncVnhZQhpcPPVjephp%+L z^;yebt?|EkH_9KPMJya*`HpYrF&8O+KV5eWl+W*$ILmE(bCI3LS*`KkzeM?0s{U0@ zntky*nAOS{w8ODOOY0xcAMV-+{g*X$`|q4*%FB=Y?ebw6^66cCq|Q z=FfA7Znu0#`Q7_z{Fpt=6g|I){SjB=XSM#3U!(k2)c%2d_EX~f^@eEt_j4)Y`3W$dwS zWqp_Dzj6N8!S^q+M>jTmPO|Ms_PO%%$~h%d%B(-Uk~r6&*`Z9=!2~a z^8U{9tep7$yooO6O&2ydUf%KxOUlbn&efEQ^4n9_M}nknw`?f(kLkL9yq;a4`Z0P= zC+pcHU4P;EosK5-y{2Qd9t>|5z{Q=yQ=zd!CfafqdHY@Hx`z zNvYfGQDC@;T<&bA3rev8$<%eNjH^{q!fJe3$8~n^Lz}{!yv6BEMBCKknasa3K0G zCErgey!6ZDH<$TqKbF})aJ|*Ht9qrJPJS)QXFZ!6<2#yAlfOpeQ%+mQ_>|M27@u3(e=fDXnSUw+20k)Z`5U~@9s7}<#+AV%GdXra+;*SABE3t`^Vo2p34*5V*AgO z-zl2DJIt2f)pA}m)28orv+0ac{!KSqzPq0-Pg?nOSU#4&*~eRi^H-kkPvrSRL*`-p zj{S+t*JwWZ^732$h)tRDoBy1RZ~8>#S9OKuv%O*dV|D$P{5D$96JzVGZI%CGY<-q9 z#Y;}GdS*K8cU*UVlrPIRa*ft~pp1{{hwxgZ>&xWJvQz0*p#uQ+i|x%q=Nf3gv| zt}5%atuZL)bH6nT^Sw*3el(~m#7fZSd8{KJRuy7XJb(w<99|WoDb|sNP7SUKvC9$o zeeaEV!y~Ffw8c%~V(8&|4LQEeJoe#0n!1vA6L-$_?uY0ic z{q=SHd)|D!zo#`fy>$Mp@LKu$*Gs1+R%yDkb-kJAb1~oexfm515Vs@e`!Ph7>;|`Bl9?{nAqT z8EyZ*x)KquENTD#US59E{>dNZw|cmJPYWjc{ZZO;`ug24%CE7mkMTP*tl#l=j&d?1 zw0-Dp$6b_Dd_JY0K4*gc;R|iQvqt%uDVmP%6Q}%mzAMLpp2mM*5b7t^Uz1o^cJGb9 z)fx#7pNsA_Js%%b?)?_~Ik^gIS15LJ^6Y&6?GRo%ADF}bL|O06U(+dsxypun=X5e5 z7FarWbtfZO`kbYMd7X@4{CP^x2MwgqVUzUJyL2*wGc?@ayOR;jRys4hlM(bBZsTVs zb~1w5n>PsW4^BaPKw9(nrlCB*?khF^d58~e$NOi22KG=obvnudG};I9orU(`hE5?w zHsvnLmG0&r-nUmd`5vLaD_#$)_fK~g*|sRkcd6LbVE=4zTKf>3&oeC7L0a=H3lCixCi zqGWv(N9`LQ`;K!>nuj<_Ccj;rD+^liuO~rngw>Cx=;H%lU4wUFHqNna);z?t&M5DD znBPa3;4u7NI4v8SRP*K`h9Wo48+%_RZzS;Sp`-28VzAo1*4?yV%6Nr2zeinHNHn@DBD>?UIz=TuBPMSDj z{78JzCp=ts?1a(9kMoSI3k=UIA24m?@TpUV4jZ@LiRB}UAz{S+lSWUKBqy(*=1>NO z5s$*5?Z|Q8v6JG5s>^ZiHe}@RDHA7652FtrIcfaZ2}8#@!zNA~S1jff<%Us?m^?B} z%YLh9;J%Ws^&bIZEFO~|Ihs0lM0m&kG5+X~U-FHjI6W0v;Lehx*`>M_?Er(2GG@it zo1QK0AI#GEjT15O@b_zO_Sf-_`>yRDaHlg}uCJnt5MH#ibOzi0jAmmzj+^$j;}Q0w zI4^4swf%`|y@B~UEp5K8^4radjuUdqe=D}Gd!O>FV)3~T=f&yKbRN+7Z^ZZumETX- zhq*s|k@DltY8{BU+5qJDI4kUbrFDO5VVFJt`L=uUejQVHK5KS)dHKq^VtA>1FLZ6W z^BBlunJxG;dn5we2431`kb#Se|F#Kc=I*oZ>H&R ze6URUXXyHlN!s_LR{6Wf(qFCo_;}?9<@aX#@9A@?95uM;WYjlH-I;fe2=|8sx(<_7 z`3`;s@_h-v?|ONK^77^SBjr2%tLXFd{#!n^^^NkS`bTCpzRp*%o=)U?rShvap>D0B z>GV_n=-Md1M)?C(-=?n(AENxmbF`jn`kwNS(D*E8TKSvY6OHdHKkiVz(==e>wA~}$ zhghZZz3zRq4{Phz*Mb%0<;(R+%9rPZnl84TW&ZK?K*~419_Z)|&2(MN{AlGuITqV% z-T&lj{8d^%c>XBm=pAY0LO$gc|BlKmO=n`t#t&5Pvz32pj1TjlvKPx)siC*@IrRl; zANuJyu||L2`s2m$H?CVecK%sjzFdE!d~12Gqn3|_ct+QEf`hHR5*o0Y@wFXbxeUjx z%9r7vTvK%2g6&Bs%QiD&{LPeK5laWhxP;gCT<6mE+EM_L&e0Qr`KPjv%FJG>ou>Kb18>_$ZeXgv(uC9A{uiJTTM++R^ z=ej`48()XXDL=k$L;H_Mb)CdKX5X7Y<9Gbl>Xr4Bb|LZgoPx%mA6ti^{Is}5C#}9Q z>WljKf-lKw~6iF@XhF^ z_0)ggK0oXAH=H+XYTI!~v$;h1+^56(_yy0;ywaxcYWyEG{rGyx0Wp3`VpY?jJ%FCT$<<53s#6C8Du%nfuqZ$0H>2Thda&OG}*e*7HlJTimeb3kq z{H*0Sz3lr`qwxpwxh}NpJCwTy7oAz^^VEIxnv?G=m2XDtZ|ZH#2b|W}Y^~pyF`tx| z@7DOfOn9lY2g}zcx<0cX%XgsVQ;x;?)P|PtXt|QQ?$6(S%EdcKf7!9LF``Es-8TTsyxV)(mtiqJNlr@D9*$Vy&vtyy%+h8vXj6480yHL`N zSP%lzO4nZ1)Civ6&4vfLrbZCA&;2)UmGm-yZfXRtOMJ*DxCilpT3Ipx?cd!r#Bn;m zn7j%0wm{t8HojkN=2Dx#dH4leZfEIq9`^&^Un=bx z?uTD6YNDl`S25oSB(^~Pl=)8h1(#yIA&c}2@C!JfpMDML0dHU;$VGao>ybauK4WP! zAGHjq?qTz{+Q5A8vWC4zPwYK;%+U16-o@FvsT0PYGIeC{3G#LFJ)9Ei*!AP$>yLea zvFYApCm*?UI61hRQ^!1g;)Ic4BWao3oN@eaOm4);p(C8h(HI3;{ClUuWd$)|Fs)c zq^~pw4afeaiq-o41={~My1*D`3Fd#R8kn~D<1gg9E$#0N+a0Gx^mjZ}9SvtY$@oiQ z@It@1{B8nyzqTK652pBduejS``7}GMt{>BWK$H%8M(GwiqaE#7x38P+Fw>lZ=kxHp zLHdK(^RJ50{9U8_#Sh&NEcg4i<|M0vU}M{V7zVPfX;PH4Y+3PTzx5}rLJUOzLg-*s zs}NcAUz~mLdxmfUx(LPxor7O+j&wx##(FmPCJ8QnCn~3_Yb>4k7&bkCyOCW_PkxB~ zPrwk+(jQ5E)G7qF{Dk>a4ma!lneVWl3bH+EuFS=acsMHsyzVlnhUt`A&oIhbH+`FRV2^O#aMH>Ix=zQF*`$zfGt&(dx)7SV; z$TjBt7{6NiyK%i@R&?B#d{4`x{IpJyU#96evu*sG7WAbvZG4^^TgwN~eBzF%sq`9r zZ|!C>|CWmFkLc`zzM~oBJKOOw z<5T`=l@Ixpf4WsPKIQ+a%AfIFO@HX=(ehLNZB@UF|KH@#{8_%IcK-WTrSl*2bbfy) zjAw%IPo8qkCLhgpc%7)}WV_mVKw74aVmbGVuBRJaZ;8)ipTv1REf3{)gszX9pKUoY z4e%c?J~!RR8h-Rvx!>Q`X`75Y(#l=-L9{j4JF2N4)f)Qw4BsZ0j-Nq5>{SX2VV^Py zHVS}zy32jAu}O|KA*A2p&&2o+3qpbd#*=0>?1{!B9`LRd2=+t{;tT$c1$~Ln-@kp^ z+TX|2EMo*iJxk{hS1{o+OZz9|K43A%uX3+{0cc=`hBLjDntpaF`a3{nSDT-E9?ApA zc{UQab~J|3z;k$BDNhbzg7KO^(gRhkq-`{vK8f!~Fprc0j-C z4aCxYAZIp~{!iWf6vyv{aX1fV$F}B9(bpFZjW@on$@gw+MnT@ec^Gel_WHFo&0q*2 z<8yaHTa($Qtyzx!YeHv12V1o@Ut&E?XlEh>-K(uxy28>v=+xG2&Gnw83!sx*v^9&6 zUzlDR=gU;LHH+namGnTnTedY1LEb`}Q;=UzlxHI3jPbe$+S|FUsYL(9IUoI>NqDMc z+v51%2kmdy)|`%hrHkh&fOhaa=ivE;&Q5M?vfH*b?Oi;t_B)*&ke)mro|pPSXxYnC zF6F;@=S}vI_Gj5J+ip<)yY)baW(6|U%U@T%{o(oy+n@hi_h$?|Ir@8%Qn}0<6y?W% zUnxJjlsnz6{_^JY<=UTHceEW!r=gwS5;>QSv+f&;He@dB4ZrLb;$dlDP~Qq4bqg`P z6Yl>S@58EYA&z|z@6#oC9}r)#a53uB9N4oXTrdvda)09UZXs&%4h!vr7QA`6rBh!Z zKj7nYES*P~;Lg`jo=Z`mKkF9a?S1fmZ3g?ge|HP968F0q%vT{?Fa!BzLFeHYc(*}9 zm*Lwo@C!cekMe@fBQHUVNt%Bx?g!e~GlgO=J5WG}rs-id}jmQ)l1L@ADP9N9{*ibG@vG<>T!LuV>ZHKC67R*x}Vd z>t@ES>SQj&1F)?ZcUBL)FZz3s??S5!&8)NC%wokPRu`d%UypYo`T@hSg(r>cI{-o@4Q58}F_mWS_!2CwJvIq3F#YxCN2 z?f+qe?XAJ>R_?Mtpl!+ifaIOFKjEAWdwig2U$lqMqrJYQeF#~9lm3P?1L44HsKC-b z=1`FY)7w}&aZ-CDIARp)&l8A$KH>vsA^!lh?;|~6sD|ffV!r^u`j|bgy%B`-OGw{L zYab$y3L@oU9i8=vt*_qc?Tz4*Q!SksiTr`_NMGV6JkY@R8qWJ$aIA=@;`^`H*I9rD7_5# zx%e(vCDN7qUdMdB4|)ms{tJ!Fxu65IJ8O}jgzqcs4WJh^we*uegZ(1&!ePi?HSDG9o&R-3@sH)#y2auDDy*^b<=5lQ7v+|=!&O}DV(BA`yIkR3 zpINug8-|S%ipD3tZ7FRsAp+A8VT#qQHCx=N10p)k8;;v4iCeBT`7OV zQg^Hragm#^>RIuQ-lz3?edZrRFK1s6mD76l9HaSq7Q&-9{vq{WWz`WC-uhBUvtD{t zC_#7PiQAQ(KfYxb8X62a&$qUqE>Uvj5bE*#Af3d8PdR)Yc&? zYBc|8$RGHd$Vcq0&c*Wyu8sCD=bnym*rO$px=PJ;TL#0#6!63 z8x=GVc_6(E{DL#~1Rvp9_ys@r!Tea0#wG{9pji^}(NFQJkQT7z9MFiLhF`F=&CFGxe)<^zo9;1?v2o(npFUoc^RxF}B^e!=;B+Vl$W3&MU4`en873uYXL zd~m<%f^>mP_e6TgF9E-R7v)a3_SE@h$4@eUFIRT09Y4wZeY?;?&+<#>?`00ZbpBrE z@Jr|KWe&e|{$A$rOXu%p4!?B%Ugq#i=kH|>|9VfKAAXs`FP*=4F=xNHWd2^}@Jr|K zWez_we-FBJ{$A$rIUWw@??IQ&-^(0+Wd0s=_(glYzHN;G+PjcTi5*FO^ZArJ-DB6Z z>`<=$%lDz=3iP{K$IgwmKPUYSx*3D{*w3-wA9%O5eSecbwl@N2fu$2Wb})hmalgFT zZu<^K5P#p#dk*yl`~9J`1lWFL0`%t# zpSBNi0NOK2EBG4s14%ruls~mYhY+7mwsi7agaKyF2I*w>D*oII9X7W2;OXg+|8u*V zzqzcxLx&T}v{y#mw7SbLJ?81s`GaXXe>t@y&S#t1v}nKMcCzDF8Q#f7m-ahJ%%{r5 zbE>iv?7Xbyq76ODj>~D!&G(P{nf=)O-$y#{=qf*@360b7x-9lz-j?TORH&qC8S+A4EQvV(-=Y56(Amo?woqL%y%+7qmR&&r*H{?Re=mZ1!>Q zi~UHxV9P`Mz#f&I0zY}cs%jBO|yBo@ldEFSZ%b@&IM@Q#N5_-cOvG|qB9~-kb zag?8k+0j%he`?G=D5?BqYR}@Ue)}o^W92)S+j(wR`R~N+i9Go|$K}NG9i#lD@|jLr z`9XLWe)H8$zJFDCKB1B(q5G50dk>r&xJrVytaEw!bN@K&e|(=5(~W;OnR1Sw2kqz$ z{2mbN59P-5ul<|t`U&O6{bhmjQ<}~dwN}4I&%b8FMcKTA~p{ocn72RAYOXW8-uRpsT+ z{m+y?_dmN;(e~QKV(x32ru_K+>WuQ^ z=M+=^ExwG({|=4M{nh>&TTlL?d{5mW>Nco8`8kn)%}|@ps^jeb$MYrP9nFg8o4QVU z`SW~J%Kr&%w*y`0(QHhGwyWeInnY^-t#n^?%#fF zm@2LR)w+JW82zW9OT*&#NrSHCnX6;_tgeXevr6Lr z(tTEW(53sVGMVT;D-Yq^KOlRoT+pTatlaCO`>f2o=sv3?(ktC(mAX8-&nkDr`unIH z6$tC!s6Go0FRlM6mA{z=i84xX^@DHB*VTIH|p zFjFo)7cRIqdM;cN=f2&JjKX;d_|pK#sd6S<7AQRz&Rico7cLF@DD0yQ$3-{;E(w&L z3zr66dM;c6^zVHxoUa0*`{SS6pHV9Rq{@Hpe%R}`NlE`_i}LNyj&IqHKii+DA5uAw zwev=l|L{LqzCYRWDgXQ5R=&1Bj^5B-e@DD4ZTzJ2`Q2x8LbQLltM>D=Tif@&M&sXn zvQ6L9_-vPcm=@&^(fFr6Z~1}7_mscPT>j+8n?B{`U(on*`I8@)zdQVY zPyIjt+z%u6BW(ZwjrQN$tWN&!Hos2(W@35y`=@T8`ahz){GDWZ`Fk2aE`Rdl@((or z?_K|Q`1ZDLhTM|Gniue{R#w%gKM;&6ub=picg7pA92_|LhGT|3KyAs)CFCpL*o) zoKjx?@)r@{e-zUvV4u_LRs!NNyPUyZ(lee?jFFm%r&(zW%$D%FCbp zxcsvk|M!;vz%CU>my`c_kiTCde|P&0BY$(whLOLST)zGB>XE;v@#F0e`EmIN8vpl} zfA8M+v@R$AK-&Kj`3E~}82JYqNdC^0^70Srk-x9;F|BS z?>i~maQef!PJtN#bA4u5l5 zH~dm?gLS{au(r6${)h4BuRrG~D!lb9;*K}aK=~7SqIdoRL&V=)um0bD2W%5n_CLo( zbYFa6i}TCb2YmwjGP&Fn?L4!rL&C(pXdicZ!rI5=HtA{vhr@oY)L!v%$-ssE+8QUs zm&dC;Pp7UX12}S!FT!cBQw>`D1#C1I@Ou@R9~~q39O+4TrakTlk{Vxla_zI14X@p( zs}X#o@onh3b$29fcy6s@1Z%ZCsh=Dp_!04a*bfCLuK-i-k@EG^{Bo`EyukgMUZQPR zBX~sVY(-Zin6L5)H_qdEvPuUXy5id`U6FYCOT;D@-EFJ>wp}^>1W(#{{^fREZUyWS zH^CpW2`}0&X4bYe0@^QT;TO<;F$ceZ_KSJ=1+-r*z%QWvVlDgv+Ao@)v5^a){bB-s z0qqw9_yt>vy&~)v^Y9C3zgU1@K>Nj7_yx3IOsqqC0$rzY;1?tyZ?R`|;TO=JF$KSX z_KY6<0@^dC;TO=J(T86^d&Ug>g8DA%h3=WVj(nz^ezFBk;fnvPAJ$Lmhcxv=n))G4 z{g9@9NK-$gsUOnR4{7R$H1$K8`XNpIkfwf$wCaa6^+THaAx-^|rhZ6MKcs)De)@m1 z%~j>}vz2dC@aI`OF0ubD_x^Z2VSfuyKWX>{)Q=CpfcnY8FQ9&M@C&G)0Db}WlZRhG z{S@FAP(PV1V9yIsKUw$%)K3n60reBWFQ9%3@C&G)TKENge-c~54^Tf2`~vDH3BQ2) zap4zGKPmVH)Q<CIzw)m3;t*yk4(cM6f}Zt2=* zI~l>v`u#cP@lYe1UiK9{FVNtkM*n?(;2-^I?8RGe*WHF6Q=+fPtA-wR-yhQIeVN~? zRXbDKw{~AD{gVbo`{L|=c76qB<>5tl#I}}3_d2|K(GFM7tFl~UzEitk+Sky`_NN%X ziQcfCro;G6mETqEdC704{C><=?atUfXVuQv=(%8cO~Q-k81nn$mC8>pw{`^NJIdex zj3~ca`9Hl7qwd80XNT)g701~7#;E;w`g%lorq2G@ zt@&m8>BsL!#m-M_!gCH|=cn;|VYCaR{90>#U(c_i{Cqv%%%~nP>O5JZ0m1%0E)=AZZ^@J!o)o zTvMTposu_?DEIqv{{uEcu!H@5k^WhG{84@!-xNCHcLLz=znoJp;O~EUt~i9t-+u>w z!AbI>VE+<6hZ=(Yfh=eN`vW=n1?&$5@C(=<$ipvSf568+Fai4m8TbY44`ksNusV#Q*If7o?60NZ7x1E9=zg~P z?set#GkAr)!`=Qr>&Nc~c>vT;27UqclZ9VE{RHp}sGmIi0_w-b@2G(Kk>6DT_2a=W zpnlTu3#cEb2jl}#KS}rn)Q{{#5>P)W_yyEYTKoX@fFC{q_2VKf0ri7V=ovv#Ke#ss6!n9+0YLpY@C&G)B%WQsYm9p6F7n>I zTlT*s-?6_xv-JG1&(NQAJ2m8OCOD-0@6SF9ZO4H9gCB0P=>$7PzfYai?^ctKB8Jy= zp1-B>*?vBKPBa}fVd3>Czmui$9px{IrBki^j`v5?;qS}`nJB-X#_#h~l-1#pmzOQ?YUm(fAA1UY+T9%BPc6&n$Hh8NQdCZ?b7t?Ppi1efr1?5aF~6bN{w> ze}3uTndGe+#<~@9J~hq32$a zPx*aEzS^Nveh=NIdeD9b<+rQucj5j3Pty-(N8^uC{{0%i(8RVgY2{B=J7wC9&Qt#Q zQ*Aot5c|6^U-@(>7rMI~e)Rz8XT9@h@{(Y`hQ;qInZvApw$y~^^86X|1MXdr`3w%pM<9y zZ4u&TrSqT#UqHU*C7h>#dj&~6Z}|Nq+#3Lk-?ntJ@fJqV=Np?Ibvg^>llY`>f&9Fx zy8408@T!QpgNI&zYdQUheY{+r+QrwWAEy@b1w=nt2j^9N1$h9}kNLVM&Ur<+>L&re zfci-wu7LVUe+m5p)K37vfckOZ7f?Sr+$*4dvS0Kx0_rCPzkvG5qpSkzCyy`z_2Waf z0_vv#zaZ4l%g`V06;MAp+$*4d+$LKX!7tHI0ri>sQnjqtz8%tI%F1&35&L<$3f2Gl z{W0%C{y_Ntbi?;F-s>5H`YC`GP(QWs3#gyk<)8uTCk4NN`pLpCpneSe0_rD&v;@?T z{|@RmK>Z})7f?SrlvP0ez3gri=pIZ0@)Q|ZX@&%|L zgD?U0<9&qp51@W>@C&G)1pET(CyRRp)K6w5ehkTfr~UPXYD$zr8=xUP$#QrysGum#eV#e|~>zUxoaE z@crqD^QixhvIEpl9)1D!Q-EJU{S;mY4NyNW`~vDH1HXX!seKLk0o0F=v;@>o8f6hs zKMwo?>L-hP1=LR#VFKzWhq^DIei9X17(u8X{Jy!kS3v#vxK}{^q!Cx}OZ4OQDACWg zjmmt1Y~+OD6Gz~CY<*6eJaIzr2}8$^)DN`n=ByvI_w*?vCp*U;KNZUk{mMl+Wa5MY zlZXF@6cAc7_~3);i7{p9X#HwjG;bVoH*y;CMYi!=r%X>flSYmjhcCi~ho!{B@jbaI z1IDMP*srmb3q5A!q>1Hoog4;@nmS>4HM2N!=(wpPw<;U`l&KS^j2uxmD14fclVTE8 z?tVxgpNK17L)4d2_r`nA>?q^YB|1LM>iD$7GW_08X;vJcniK7N#B)pN-jDHVL;TTx zbD#6<_^Y7fM`m2u*YY`jWIyGT{>tCj&Ns0Cp40QMIlimZgvMw&$=_7@XY06+{7%YG zT&d~n_;fSnAEe`DH?|Lc*+`AA{A!KAU)u6rO(&`RZ#mA@d2s3G$u&ji4>%sLv261O z&b0~}qMaGu4(EHeGd-Fjpb`4L@Vfw?pYF^HXN!I9dgIfNFOmBiniaY~GpqZ2jV0+u&eGKuX9~{olz24A#d!(iBM}Je|%eAMv5y@ct9v_**wJGBp)|zbW{VpUk&Ox@n|u zux`uwwWD!=0r8ukj{ClAWL`n}T!eG|wc{?hALoo+i}HxedAFhRJfLv|K$zc|NLTVZ zU;44zV4N$@vn|e7MR`5A9g%(jcNx-`bz{!Yaldj+XT-;R{(R_9&Lykw8lwT8x~~je znJAr~^K^YEbv^R?SKa!ZH_X0Y`0Pn|(H*g^r9IVOPd(Rx=kaKCa}D>)_K2PfpN;WZ zuXvt>(Q}6Qe!a+bu~_|I7UQ%2*KoZ`LKo&yH2&6E+5HY_jlV+mi;l(Ov$`8K0HvZ<^}w+x}?BJGU_Vd}Hffc653DaeagO<9p^bkFIaTznfB_rF%fn zdCD4_KJ^;^o(kW;M^uj4JEQC9@$ab=H2wJZS5_&1uh*>{P1ef2R{7iAul&0#f3@=C z-(N8*$EUPBp058?DBnHI%8l(rTKP|EeRXcJ>+VyOU#;suUQhd6vy`vd7ag9%&iof_ zdG4O2`YUMva^q9+JNr`eV*k<`TV8+Czm$vmtMC2$@rvksKs{Y~pz{B1*8`j|HGFz> zKg)L;+xDbd`JMKUrju0u9fw=KdDyFDSg7Qz*er<4URNv3A->K~Z<^5`mPkk?s@e}pvZ zdQ@<*jo(i*SQ1OeReonZ$0U22jbEeumoA8=pHlumVtnfRoh3Ft)A2O^7MecGGe-H# z7DeNymEUARls`@RnSV$5zVhQvg)->Aa)0kkx%rWeHG$xHTW@9kz9ar9ca9VC7)S}Y zeqVrJ!1eoD_yt_QPhfy0pgn~HzkuU}B>V!d*SqiwxL%)vU%>TxBOMsQt>`afoRG(~ zj$kvCU+7x+1usvubOCH027Uq8_p|T|xW1o*U%-pHB-{7@Q|psyRAjeLWAok-cz(F??`PDvUimTNV?o3u?}EE?BQpc( z_*jShpSq68_nYpGEg$VGzkdbom%BQCn0ycFQG>ekVZF4~pDYi{MVI5hY1&?U+Hdst zw*6)s8%t&SdlvM!zuT-oYjwOud&x?@p{b6yf>^)*5*;UzU#; zIqmv%Uc^=YfsfdBjNezSQT`5UzsY=4%D+FaYHqx|7I zer5b)m474c4m7@}{Q4ZeR}A-e8rZK{Rm@LHQNRryQ8hM#}$0ip!~I*J(NFB^L5wR{ub+DFXpTKtu#LEh5ZX`f2)`BU!*)WeVq=| z(DfZpS*(8#9o6OJ(*A2&-(O$!drn2s{@R)H%k*2{`OXzOkK$cp-(TvB-xH)gHG5nM zjnDcF6SeTFjPYA4f0niblt1-8O#8d!Q||{T-_`yl_3LQ*~r&JyJW>gJy8|46BR zr|J2*{a-=d{HCOnd}?|9wp?uEuzg%|j^2fyTMfWMZo_k93RXNO4{#T!CzRF*q{2MuMrTj(8ug{@e>E1tQ?WyJZzyJDF zQz+TrT4^fR>;EQjQoDftUk82x`@c!}1?>N(;1|$-)q_7o4*ehWNAsWsoIg*EYheWJ z9~TfN;C#B7fHxc9yn61`7Dh1TZuCnrzn-1gA_V)>wYXQn{%kFShKLO@bD%f9%39VE;G;zkvN?4}Jmr!)f>h z^X$V2OPcy6P5qMQc!xCgOPcy6P5qLl zeo0fmq^V!h)Gul3mo)WDn))S8{gS4BNmIW?TJ=ks`Xx>MlBRx1Q@^BtseVtYZF6ur z{SNrtrr@u%zY{V~TUoMyV@x-U^Df5sHm>d#;-bsZo@4x%%61De6Z`MNb7^nE_nv_? z;>-6!)8Yqi#Qr~72l5eL@KS$Er{Ndicpc+^g>b|b+=qtMM}F?N-9ns=@BrT*$|6kg z58N;5yEh>mxKQp#`X15}T!iuzq`Wtvyg&x)f^L6&pXjP?A(9EiNBJ{XA`Dmtd%wcj zSVz39TZp+x&+UY9(v6^jE0LbWPvU+7zqgvdyqghRf)_}_b60c=F&7<2AOF(V;`xB< z^?q+I$_G4;4>^eLGG8Hop!z{eC%-}ZzzUU5Fu$7-)OYpMfTX(Lf86^}`Tcdq+TZb< zo}atsPk5foDvI{E{tWy3E6am&(UtM7oF6^QvdwG#Z93Wa?C+zp&6_bk+m9`EUdV51 z`;8EDcx|rhW}JuT?{aU(*WaURjsMmtjBA%b|AVTGJEXH&3EDi5@7W$!Wt>Agn@!Pi z_CTA%tBjZGY?`8p6FN1x$|Mf$Y<9so*T?rNvqw~!4C1%N14?+}$SRW?)Y-gxqD{{` z3iQF9O%54{_YbK;nw`xeDG2O$vqvKw_a6d#-7x%^D&*1GypJDRp|i(Unc5>en|+a= z(6z@^A-eKe0?rvDJ z{?bq9@8_*yPu9jyoo)3?`O}^Iq>krQ-pp|PYf(Pq``xsE@wFX4IeNoOyK4VM*D;1D zf5$17Z@#hdJ>`EkT+>m0TKRirEZ;f6wmTW+|5MX9kJ^6BYUN+?pysQ5&bu}nq3J8X zTIKeT#%H~Al|N>X#@GH=O8I__KS=rSGaZe8nDVpSa_#fDL-m#yt(@dL2b-E^#s1Y%nBWLL!~7lW3k0%%yD+m6>K^99fN5BubkBud z#Nn7<16npjeZ354YS$nh&=~ENw+Y^tgYez~h3%0Z=)}R8y93^p0=|d-7UBw~dp188 zX$v-oLZv-3GQR|DrL^$mO5O^7O`UzyP(ND#ha$Z&-at%G0pC4f>C}OkzXT?r!z<-= z4?upvQ@t95@%>?V&w-thpFF=m2sE&d(&jMa3*7XoP0!m8=>QWo|KJeZ2aH)^!}G`E z`G7N(_RvlUPWa4*7f?>YWTk@4guAe@3qiJ?bv4y}G;DFJ%5{>j&pI&c^ea zjiD61oO8>+zk5P2a%HqWT{6g~W0KMKd2WoKu(z4)i8g+Gym_6*C%;wFRAKV8dXbX-40)7e_r1zAq&W#e1UMxwaSg@%u{|v%!F`UA2bC3_XV zmkF%hAN66^MkWKl;BE9@g!bVVJTCMP=r3H2?_~maj72-M2J}48z*Z2vv^9y3@O@8U zN6_+}YO@MI1i%=SN9gP=$PZWvyD*9GKHS;}PC>ZP$sds(@cu5A_C9TG1bb=vwQKM# zPvCTopS}a%Ck4(`+Q2XPSnsdB7x95FH9vDV!U2BIv~VZBFADH`rnR_NuvX(I{)*=T z4$%Db_u%`dz?+bt><7urg}i`K7eXGppuhDv?gyHq!pZaIK5iZ2YnEp*!h!Y(m*-8r zfbX9I15QGEZ(%*_CgcaycU5Qr-30@Vo?lM?Nsga-)Qz7yp$1U@W-$_KfZwk+-9yyg zit=BCGyU6j4{=+6(3Oo%exvRo2L6cn7d0~ZhM<9U7=JsP;tcdg-9ro-isuFGbin<< zy|~}Q_a@zDNFSK=8p1IiDs=1~LdHKH(yOiN9>VPg8u^*V-9z-=x2zEl(?y2axfV+@ERRJ;d=S zf0%w#qz{~k=Pj&5dh0O019sWHf$=X#|HL3apohp0`4uWb11DT=pT~!61nV}1{TSqt zgkLZY<&oztKsJK0k{`x73Dt|FYq^%U*69G$|9hhXMkrB?1lTK{4T--d*FTef)7%Ky{`q)b!KEml(-+Tk5uOLQ2DFF#&Bc%h!1ghHL31Pc1oKnQPblAoC?D_) z$`>F%X#?b1Eb>5lwJ3|=Hhuo&<%kb_^O$WfZ0x%J9G)U_v0l)fG4`_u%hiu2=)cP4 zZ)fX=*avKmKei9F56E;u-wxpXSr&c)=g)HR3pjt4hhMeQo!!Ka{&cH9=d}t1S0qv6mltsY#vjAZN+AHS~CJ?)2DSrWe!AGtw ze*t9|aK0^%dj&I5KLTk#;TO=}pcZ}s=if{>2u4uPg`b`9a@BpWW?{sBGNJv$eA5QT z8Q;u|nX2RAOKtxU&1iVh9kWw|kPfV4GTKjLzeS^)J>IbWAM!Q2dFbXSA7Tlw*Po8^ z@n(hBf^pGtGJY|_tFl>?4{?RpL9u-CvlCwJzt{A&AItY8|4}sGN{xTLK3CA!_TL=k zR~{bCw_5otV&&gT`MqN0?4|r?VshA8`OnR?fQ_7D!oTs2&*~(9rRF{q)0$m@y<7L#xrgioW?q#-qw9^FX(!ODtDxB-M z@%8VbeZzkCIa#i=xbFC^9Y0V{U+VYtve!n(8=qZk>4Q<>nVMm|t*9<`?`c z%GV#xFR=a`s`i+Hj^CIa?LB!O7Tbj)NB1MJ_X;TN!f>%%W#|F#x> z0sFU!H1Y@7zxCl46#KWQbTkeyQ2V!O_yz3WCMMy2fc;wsegXTpN%#fq-@5P%*uPD| zFZg5-ejiHuw~aT3zLwSXci-6?bpicd_Gfv%c7DGOMlc=vl>R@%H$Bhxf8Bu{jNtsA z%J+v^Z|I)VWzo&$>d)ia@Hsg}{{Db2A->e~5_lHD=zUOL%y;CsMSS2bJYN9X9E{FCa1#2o zQr_B{E+LLU2cfinR2&|qKM;A8)Su2MPbuB-p(x!Bw4~4a@-^y*jBgWrqkO=cW(`8x z?2GaMn{12md`bQ56Qhw@*^Bjx?%dnko?Nbe4!iAx6HHQl;{01dWXJN-^m4)MsS7ZU%0K(2)@_+dH;84{KfD5 zrP2tl$MebjO3-Li3&=~tvtJ{B0iWj!JP&Xz%l{$D53GB{#?O6QX#{hBwshtjgadh` zC+QaoC=YPArk8jh@)JCY@}qvapH+r9=T4*tG=<{j`FM3j{!*XwpP;M&FV-u%*KE^lZMpjOuZ8xG zLRZ^o0yL0*!YR}u!kC$!2BC-VjQ3+!(T=?u**=5-vFmd1Djz!RMJj0 z+QbMxf7;T)+b9oksOIm!iLwB*pa5wnLkS0g8Tr^=jK}Cc>&fJ z-jC1a7Sj@50{Rfw!@Yw3nttY+cBsGY%%A#0Unk@JxE19CFa;IH_aA6y1cz$;^j{%A zV63L^JPLgP$7^`@#dbz8U?|F4^80IR&-(up%Az}L_SrYf_^&X_?x%Creq-EQh={qo zznx{rmF|tUook@?(-r%TuK2_25MI0d+4ftVmNve!4fic1hF6(jSe5w_?Slh*i9Bcz z=s3&%9{M9-uK)x{Q1s)BtTK7fJrOSNYXCY8?4Yza3icO3f2GZ6*gt??f%ZV+XF;cc z&q4c5F`qaF_7kAjXt)`R_~0!=er^TkgF&YNp3mlyZ|}_aQ{Q*WRw>; z7vb{0C&yKp0_e4PKFL21+6VT<9FVj}>G7~90Twj1;fV=&R?x+B+dz9j9_0zH!TR__ zqz`0z+WS*!*oz460u6f+a|-M~Kzn_Wp8S4;P62bIJP6NDLR_E$Eb zJ5!K9=y3iC{gVK68aM#WMDRsJ<4uKp0iOS6PKCTc57zQ$L8pMOO)%f}BIfH(gSS>x5e}CCOPc*=p^FXn` z4SyPV1oN*V4}arCh}R(>=k&&=woxJk`_DdT0oThi4HHJNs6FoAvabKy5#=dhJuSI! zBE)7F+V|P?#G3{<2$%LCok0G;@uyolw?zWqXGoY{8o$shVFUrvm-x=!xEI(;?@t_v z=K?gtLm^7)-m9$-42SMn-!Kw7|&8t(0wFoHI? zU&@!=0r>%!BK>qye^1V@FaplMd+-b7e2?HRtk1$P;Cy`InhGP}e0&Oi0nhpH;1|gJeDD+W z3BRB?KYuOa1Du~v!!O|cd=`EI=jYScAspcRynB6x5o`>3OZhzb1t;Kfox9O~z%STx z4#HQUJ-h+W2XKBq4ZlF<L~&mH&$ zoWIY&FW~%r@>V<_!1G9Q@C%yXkLn3|Nu86cb#Gh$EVXXkrpYKhe^11Jqb@${=PdnU zo~G^?=ZhCh=XWcH+Wo(Wq5qzJw!(a>`;(nN+j`2LD&0?awkf9|AGzKesPj@W`;ZB- z{m*=3;^!n(+hojjx_^Xr9j@{pS9=W8#@h3xlwUhq^G!tU{8q*IX^lVdb{pTl*v`ND z%76N=n$E$NKTr8Af%FcIs%3rSWIbY~2pY5g=+f2QD?AgsL zDmvt~|4I9_+UsqM!o#*+j@Z^1sXGb1@tdX5_u+Dk-vYdkd|!qh1G=Pt|HMV8@304u zaBl{F=O0HxHFdw=JB$O3-vy&K5t+y{kHCYA2f#8k@<_| zxZi)<#xI=FIQ(86(@J00$ZUOPU4F^W8kjTRt)nGg;)ZDci;zCcFX4+eY7n9Gpr!vQ zVR8kCZ+-TE>fR{b@QElrv?M(FQA6|Z*z>O`p%Y)?TYr7(o?mi!8uBTXXN!xY`q-o- zzuMXcrqfGx&znWRYg5Fh{LP3)X5Poq@>L_e^m(>+P@z;`PTvM*6`sE|+$oV?;-3vn z2J&Ti=3foWpF7sY&mw$Vl!xKs-dYkr^#$_UxGuhgqqJo&)^EC#E*_ZdgYgyXcj6e^ z{!0JA8G%8cURmuY=xbu=vfm(eU#`Wv?!)hSSgtYbPdMl+2-u%+;TNz!;rt2V0Q(aK zgbCQ6aM4!~us;zXu7LfC#7z9&0qjpC&{q(!KjFbIV1L4gU%>uE0Kb6!2?u=zL9st^ z0qzG*z=O%}aT<9E*q=zCuOMK5A_c#I{fXqc_hiUu|I*hX@LES;AZ3xus>mL!TkXH z6WJN)p8)Jnq!A`yeB5WdxjXmWtX%(hbxT`= zoyE5O9)`QNDmkCxwvEv~qP&%iIh@F8sP z-4U=a1d95D-vc=Q3*Z;b!+6A-4*Ru{twTJu4VsU&$PcuD>oa-y1ur5zi*RQY;sZ}e zhCd@d{DK#xe~t9=@C&ZM_##00lcQnZ2>f)nrStF$D)D7-r|?*29>X+)~!2Btw({SxF+N-vT0kUztxVf}P zL!{4p#q|(hi4r9 zZ2fkh`_J_|dn9xTuzrUNOITcD{m#NKVEuN6K)(R%cOHHL>vt{u0@m-;(Wox~>vs-* z0qeIp2K5VIeNMqIV13TQFJOH($09z!`s~3kV0|{nAsk?R&cZKXeNG;a`VX)^`|t}` zpHn9we}MHlbs}hh^*IN>fb}`y;r$0#pEK|axE|>ZMfrd~>i2J}-^VO(b7Q&sy&2w5 zxt#vCUoY)>_l4?>vwt?;sb2Iou6944zpFUz9;|D$_QBB^Y9B;-<^gi55W5F zv;YmTzNg_Au)YWI3s~RH{&*h%*7rhNw7&rBdjiiUV0}*_Ou+i?t!-rltnY=NTj6`h zt%~(M*$D9g*7t%z`apg4-G^)izqCEi902_RY|rxtLLb0}YR?mIwK4*>=jkfQ6JUGp zZi3%$fbDr6egWHauRY#xfbF^06g2Ql+jFh1MThM=-D3tFadf%*f8Kn1i~pJ(m-oW& zQ7_Y@SpUC)0aEsYy5B==@elV0^Y`ZkWI(^Tx9u0D-@|-;Y53iHM(O*eMd>S0p3?aH zC8P8kqoefZvHWHIq4fTj(Df*#55kLGO5YnRZ_QTG@c8#scgOE*>3BOM>jx#{Z@%Bm zBZ>Y2{o=~^Rs9p{^B_E(UW{xkjJZha*5 zbzWV6;-i@S2V*E!8h=^OD7`c8FAcAa-M{#9Y5suxgN}9d4Y;4$Csl`NrNIHXVBxbfWfb{~m}g=r2Oe@K+?DBrwi`A+BPxi;-J9oh}zbqcSnrbGVr%3u1kO^5s) zmA~CJ%2zwOe#&>4eiJ(n=qi5?##cV7ZFmig@l(pb_Dq{T?ex%%53dDUPV$da{t-+^ z?G-)cZ>{Aitg>>D-*dT&=M$Z4%Q@V#&27wA(;1=s_b7+&to%nR{{mO%0X6<8UY-+#W-z?&WqG!=`TEKqv$@UJYiQePd9CEyS)Z5lB=aoW zuzt~9wxIhX<=X#t*qu|0Y}LW&{U3h`K!o z>#qwy1J}U*K*nGBx4Kz;fW$8W{T^uGrE_d};*D-ba0lXNaUMkOah&e}9E@wr(LFLwN(-?=9&T;vMAYT#82Y9|#Bj z34044wEG(ND*<<+0!n$ESCJp^oRt5n#>RiTTZo0o-^KIg@T`JyC|@{!MOjloEz*=;C>*D{3X8o2;>R)ptF!){uw+! z(C7*qorx57y^PlVdu^vf@(a!+JlHqNKbju5ia&1f>L`Bu?gv~;bIRW zD76R4#_U1FCZyCJL~KHqAwSxKh)oE;+vinv#&^3qN9;qyMx@j}L~KM}LPILw^-Fc_ z9HP`-L~KS%?M1|9gy(10Zh_|oO6^C)hNRSfL~KYFG_}t!_9FtGr&elO64Ur=g)l1F-__9tS4Qfhx9HYog_U}5vlMsUsu)Zd5jybhih zD78-!8MH-7S@!oY*vtMNE8Co>`!os*qx~n2!}FK}5pW#tU=CHlad-f~fWK1?=1>J3 zha1e13fNCi!7t!AJPp5qKk{nU;azS-Hgw1H|Y&E?q+%(+KK<2^Qe3;=(as@^sI94M>u~vsqX#A>O3mn z3%c?5W6(VNez@+hdp|tP!3y|(lN5J?Az7w~;> zF$XK)`;dWO!1p16IadMS2M>M$--iHx0pAA)bFc!=OC`|u2>y6K&@U@l=ZLQ}&~Bop zfo<8B-E!J~rS>_V+UJaV0sV)&>g;cW7i_zaX_N4xEB&sP_;d7y88ujcKfbZ!B#myy z$M}3dd+0cf`x@DQn~}2VIC^edr6!cr_+s!akAQA(c)hIlKW-PxAENvzny>l5md8{6 z&P>O%H{3Ua3e5SKV`Gd4PCuRcS5HfwmpWEB`8%NBITiA8~=k*YRq?ip3Zer6tY24FwaKO1(&K(U|cBY)8BH+ttFJ@D9X3}(V^7(CWXy2ihL zUb*o{_GT+6|1v9|6k zmq?&&f;H2TKfb@_KhZJ-&lAlCEsbEx-RNI`3;W6^TZZ6w*%Dq0tdF%QexEIYXA_(N z@yK`D@=xP=flg>2pF(_q z-*w9%Ou+BE1&dHVfZusD!!Yp-@OLwK6yX5vD^e(%fc6!+#Vw71_7zE_Eueix@)^)T z7nDbyFMwab@52>Fv@nA6Aust(T;gcR2Y7Ne1hOs0@5i(VF>@^B3ECWs@&WvQTmZj- z_8R#|@Vr1c{(wAO)E5EmGjfoXfc6*O5iN{>_7~}+S{Omx{^G*~$^-jN@41#Cj{1%E zp7t%M`_K1=Zm{1Qe<}C=ES+laasOf4k+%<(_or*|{rUDRj2ByBe&mrhAx55P>HK4D zjG%9S+>i5rQjfO@k;Q8eG(dd=EqDr3Po^Q}GoEM@qVLYAUpQ|j5wrV;)C|!7cABATKEOc7TWOi(`}4kInL{o_<8sRU;bdj z{l!QhSh~W}1^5NmdzN;eL3x2iX-j9}7c7Q+!ty+e@&FHAW@!(8!Is-;_;UycK7az; z2Ql9Uzu@~zQ6Epk{t@^Eqb6F~U4r}o*>7xW8{!O75{(|=b^)m;*U=Fr%N&Li%kT>wg{YVe_CoTXDw9i;Nbq?+a`s|DM0rJlx zuHad$he&#frHBtaeK^vCzB#TKctMnYITr3h-y$!@ukI10e|Qr#+7pHkM10AQ^xTnA z`mk8|2lzc?TyZ~)(O2U6BjHltArJCEmA&}h&|TVZ`&Y`nKVMyGZx3F#^TTpZN*|2m z<+YYe_MeNsGdE%XH}GCt$Q$cZ&coPm4Fugm?}_=*$FV;f*b55^5}te-`>%oFsNeqg zSns+K`^$l)NKeAeqa8ym(fhMONBll?G=ud1#53664NQSOj>Pv6Ur^n_=9hR9;lRbP zf06Js;tC!ZWc8CwVs9jH7RHSdUO-s|E2aD>ZvkZ$ER*~Zo z9k@Z`*P<)}c|T-6v~Uyd2Yyuf2Pm7Mpz$}0uG;MB>OKfVF=;}$$Ga6RJtpwl-) zAHV|92ju78hWvrMhy5@1-UR%rsqG)%Q8axyQYoaZNrrSnp3J)e5jrGF;WSaGPLndE zZH`AAb3BG)EQAwM#%GJjd<+jE977c1gj9z7Kli>rcb&Zqz3>0M{_p?#UDt14*XOK# zf7V*}y4Std-fQo**WL&9L44+J@@|EEFJyuE1N|jv*DS{Q&|g4&2wCtn^vQf_ z<`JX?T3(wxK1QQ!$+3}t5cU8sB7I@-`r}=mw@d!gqwo)~EAwY|YUT-Svpoy9AG+rr z@_i8h1HEo7AE(b3W&DZo(&PJA@OqZx5X^`-3uRo|1z&y$$X~?gg28M(?nrwBIM0?n zL9c)9IIJGWQs-^qRgYuQl;k*8JPqf*s&TA5JUNb~Mj-v3a0AD&66ES}EH@xIj+G%- zk7JeNljB(GgycAug7O^#z}mG) z&yfGf;j`pFb@&|lFC0E3|CPh%$^XRnb*#Px^1nEIk-XQP=P~*xB45YhOXTZ2e3|^_ z4qqYP*x}MIc$=r%&Ed05{||@Hk>A(hL-Ji6 zK2QE2hcA%tyf5SV#xZi0Ph8PEped&%sLF?E#y4*1#=;L zXJdVV-z0{t56eO>LKd7m4f-Gl+c$}^QWk*V{n~O9=m+*oqkO#QR6@L9hsn6UfShgB zB!;XXE6aOOkOiF)ADn~d`>mVA=nlC6IhSq{W94hmKLz%7g1rEy9lb2%OvffMy5K(_ zBglEg2`(Io@@Oid{c&;YSSdf{wb7yF60i7fm+9-e8>gt3l2oQ zcOLBB8TJA-h|fX}cY(cttY3>Dmv%yZf#!(!&qsZcR#1Y!L&)h}o5Yw8|CS*~kOgz$ z-{1n22YUp;ZHUKvNyX0aHz3!OvVN@G0`>z}p?=gS}FIt{&PuKi^1)0{uKVNMgBF8}yH_o5$$6C%zvn>6art(0Cr&1M$T#pda|x zuc|+@4CMoN9fkP2V9$$?fwoBR-7WX)&11a1E!qci@k8VX`VK++!+!6j<}vm}`Yhrr zkOh;(z6&uQ@Imt!%aLE=3yYx-_z?ArAZK1ddB7?E(el0bp%1ti_4O{s`kF^jA7Cr^ zNBT?dw&pQxexm~43j*9fdHDWsFbDgrTy~XK?X)NfsFZxsDSi9AJ`|~cPPLfK^C(7A5b3q0-H}M{D631B z08gMkB4-A|J^-%`$8zO#_y_ReKZ&>P4aSF~QGY=TjnBOf{{kQ4I#AMjccDFiV<=mG z{1uVL&qO?M2JOi{4%>mR(Y}&4a}?|WY_t0|3zyCBGw#ps-@0NxFnY3{cRSw)&o0s9 z5XHuug|}lKsgt*}*N^-ndw<+{KGliuQ`>h9?fBo*-m~tITnCD&NzXqW_s?I~c;z8A z-tV2zKQG1j0NEd2<8|Ev?T7g6H#MGjSdC}*fn~_)ku~1NQ_x*E$M~?k#tS}gxbD8N z0@<5XvHuBISkllt{G0Xhh5c*1!H{MCUE=+2 zHC_|gC;PH_6KlNHRr<0=qt4vw^8V1m8#?bcuKM|M*`6ODl;gL4}Kb!Uhv@;}c>*5RB>3aF;ILcFcd&FqKupMb5; zP3?pAy@0LHE$!XH6WIFP3ibt`OoXukDvPuN`(9gwIDxItEn{C`>vQw4T~NJ_LDn+Z z_uI-lBR%lefjHmQ#dw3Xg6ee+vev==-@bSd{+kc5|G6(8jQoJD-%TU0z}D}kurH`y zCn0MkZ2fNPABYER{chMEJPG#x3)d&`rNGwv zrm^NiP`wUA)?)OAzF-Z;TkH#}*I~$7jOuk50oGmEdSCAl_#3eGzCP+A$YTHqas80R zzMy*DhOFHVv)_u=T!v2j~aZt@lOx9AN8xOPyg0 z5I=9n^^K3dAh7km1=u36^}ZSG3v9h_r5pMaFrWj*W3m7I?PA#a-yG5kZ2fNu@d8`_ zn>`fv1Bbx>(jRri{r&f|<$e%yt_$)59S+j*IKL}=1&qM^ch%{Cl=j$k{r&YMxx_~P z^uB0o;07l>V&ly{zQd(=-STJ0cjh)tUqDBdQ-{ny?Sm`rl+vEfKSlfD{vS9cf$?^HITpm>&UbKB|O$fz3x{55jyAVDnKG>(q zAC*1?^Cdv@uOjvZHvbhI1zP}{|FYvbKMnf+ z3-e!=-sZndw)roUZT`z-oBuM|=D$p~`7e`s*sdGb?L4rc`(Z1HJ^r(K zOjmj7b;o}{AN}Jp+!WotS&YYP^n9Kkhxg%uA&Bzv{!`|G&0=IFJ^EK=?q)HDL-z6h zR^}eW13Ad@J(l1!ynhd@mHRuy2lqh+uE70J8Rey)hJK(z0 z{_7O@16Ygp6np(5$^&fOcrXoR0oNma_!F)VZh~#VBJtlU*mEn&2EK$GLay8ne*yLI zoL~H(gD!!rEBCI1eK*2BV4V05^($P1@_}<9i~lp%!(JftVSgj^hgXpwSlAK%fPHp+ zO>L_776+j|Kp(`5{rR!*2XI@k{{C9>`|6B*<2kZ6ShxC%);%j9!J{$~NfS;s( zRq?kyoXp=?>RT0m<7ka9Bd_4Ewqh-fvGC;;57)20zt3lNeZ_@C(Ecyh^QK&>_dVVk zy}#dqiY=7?MUZVC@9$@=;eFwKx{iX$z1%Y1haHrhhr9FLD&m!`}4^}<4UcOBJ z)T@;*yrOn4C4U+H6CJGc86Nw=wGLmGe3LtAC)20M|8_@`Z$`eJlinx)Fx%J4ZBKqj z+G+RYY4V}<6V4ytvNYZ@!?avWzZ>~UY)9jFC;uO|m+^a$e~SIn_|D`%q#wKowcmCj zpErB>-A%cSmF+dt(@pR1Gvu4K<2(WREcsm=K1cpR_LIU)ZQqdmRMywl=}#qJpgp!u z-{uugcl=pk`cBqA`)IvplGj@N@wYB13vaKxM>K?$z_{GUtAR_=)rFGUr}B-!60R)${E#=UzSEE_3d+0+i4BcA0axbyYIoE~uVw z4=~4GJ>M>K?$z_{!K&nZyUe*)&$r8*d-Z&~%(++3x67QnT;I#{2bpgdw1R(azFp?r ziKq=bFZFnmpS+9`F5Feubyw0Irj#r|GN2h$hJPYkVE}}O>lyi^~#kA zXiLDJuT>^N2CC=hWsW{EKfg9PKQD9i)${W*M_)ZZFLU(O^Yb#MS1_d!EynYZUT908 zdcI!btLN)QuAZ+Kxq7}{E z%QhPQx%&E~v&2{FM{K;=dBMWy%BRl$v-3k?hNh2R)B6iq-@Ko<_qy{#hdrQwC7!3O z!unTW-TLOQvHlm>6Y<_pc%Jet*4hHL-Z`}d>yH6j@9h78^nk5z&MwD#WuT|!uOL6L zZoTuDC=amp&e@en4}6d3`|^Js`Jb?U6~G}KufL6;OK=?ZrB`5mF0gJr^itRZ*m~#) zx&+sDLw?vFqHY3P4;`Xzf>LX(U-~=f1C}&G`u#D#h`I?DAzs%1hNzn$f=@EPh0*!t-*Y!{rz`laDp!4TFjk2t})_0*_a z9M{u#& zi~8h|R&bB>543k0eNkZRy*>0Dfvxv0{D|@ZTkoCw2=xKht@mCG8L;)#=^{a4QpzyJOe^2_@K{vsT2 zzyh?7#Felwux$~qFDx9>zt3LP_ZQLedVjHM74)xK|NJmpN3XZrQ;~)C{ICSmW&7_w zKitZm3w@>6Y0XrP*N%MnPrXj|$#*uM--$On+~;y#nBILZmm%*yf9pryeg2js?>>K< zL_R$&dEFb5-}M1rhx0ySD)~9i^E3>D@pd7f7uj|1bn?$IeZc2_1@iX%DkMLXygk1P z_&lmezAm3@MdTNf-^a1DOx}IYwv@d4yvt*Ma-Y{VBmY;=4?lb=={LLYc*x`RIqxra zq@Hb@=Y)9uE8eC$&;52Lzc-(M+H+mIe_1pj*)Cm}{yqBH{2!3t$7$cL+?Q-4CjwuFyDAH-ungSuE6+r z53cuL!v6^YGG8gJ-^D(96cpd~?h5QlhNqvj_z{lM+ zKL0k}a|Ragj`CoC5w;7KNxanOb<_v2=VwuE{NEyQIi4Sdu%~n@^aI6vV9$27z3^$+ z3RK{a2>A=I;Js*I{`ENj&&7Nm>L%z4`@LUb-z0j&)o@Kz$@^-e=q#|BI1EscmZDQE6qe&;He8$&fNw7 z0cGTu?~UbWp{{^EuS=n9!4KjO+)v~;!T((XFC%}1_6pZRKVZ-ADjVVdB7vT*wLYoW zkRSLb+FRO1HI?nHZw9DNFXKn3*^Iamx|0^YqU7r#Q=0bingiBB)X^H|{AJ}PIH zKtGUT`sg?40~*1fl0Lr%{sMZTzlj|D1pUAso5Ozezsxtt4~&0Dx6 zPkq_eEj__X)L-l^!WKc@##b{=ZZ}|K!oO0^97o zV&R;lI+p(I{8Do|bBxgQ%R|dC{qMm)q-DKti1$5nwekOXz>E<6y9wr>abYBo=V|^< zb-cos`2Re?_UNBTpKXKx>jOq?3`GItrjUVtGGPkYd^mN_q(858+pE%JOHa@W@sd8>eoIf#74;YW<^7N! zsCAOcl18@La{k2ivr51JUbhv@$MtHqKI$XDdO(Sb8sPs2fg_+#9n_JRGt)jc$Q*b@I&2(&}Ia60{ z*(%{<>`%o_@&BH{3rH{hp>i<#3n0%MrN0Kvw~X-u)93cU@c``3{+4fn{t4{6NcE@C z*97u^ZBkCS3ECI<5AzEr+XB`%vm^Q|P(t}~|6Mp5{Rj9A>BSyzUpN|gkM${SjGTh5sfbN~v1MSgY&{u{zi9be)%QO|uAkg`84?{(XWjR4vyJrrXV*Bld`m&Mp&c~L z*4A*&C3=14-N1Q#raS*E<%3pweMZ{5^ggEN|1sHl@$e&*kFH4G|Li_0nZ64Z9nJK% zo-jlH6SIfC`i*)PlJ_0`CGt5(Ke~OqJ;(R`On;etJ4eq_^3$xnSZ;;CbWa_T=X|dhGrua(KJ{S?KTq_1xyz z-;?~E>?a}nPlo(Pm(qUr+u`JE$VW^clHY~?_pZ}^V)s9nu-$DvaFOYonSQ2^$hRgR zl3zrAjH9PQe!>&9lj%L44-RBIdi;)4Gx9I8z3hIhIr(d;KRZ&N-}vNrr9H-{$sa-e z(P4Uiz$rZ5?EBf?6y7(I*Vy&Hm4E2|q|O>X@bmS{s?T5Thw1!H^W$)Rw6ONN^OwKX zf9?ErDc_@wSbrrS0KA zsn4IAk>Azq*;e(Z$$R}ZeYix^cOhTb_@>GSdv-p;0#z}65&0C`B^a;vG{gOzY-8x3fc|MuzVDu#2iim1F-?Ao`SSv`rwjQ* ze`mX_(s~8t*95A^^!Fq`km-Z=nm$ARO0N44K2-brk$;H(jGC!EnYL@e?Gh)bkd;p?rB8J%8b{HQp>-c%_GVr;WU+hAFW~;UTK~t6zQu^I&fn{ir2g>Eq+G%J zrt168S7E>0f0~Z>Altr#1EH^49tpYn{_|b5qudWznmJ)I{TGP0I0?UT?0?ot|Ar&y zVSjc0f+L^f*taB`Ouxn{Z-o>8u~XhJ@K1Gln~X`yzd89=I`zB4v1hrXzxGv0eFZ1| zmQH!Iop|4g@7p!0FX!~94oF|!KAU8`M1MNZNx#DBZ_8^ZzfXUnQ{FXB{$HH>?v3*0 z{?mMVH_}(zbFfpNqSL-x!e7<>f0J*M`A5K>YJKw@{gI=u-k_wv=EJ|$`BB=RZgzcS zVS}EZpYdn&UnzNC1Y5L|p0DKno?c$-b@N~LeviK|=7RxyzbER5`AERt=Sg?K{3T%T z?*#QR9|_p|JNZp8KL^ zE#7X31MK~lJZu-(`z`)2cz*@3_giu+@%{*4^W}w2G2ai^`z;abDzN$S6v`IZ`z_JV zhzI&LM%%xO`SG9eei1OB17ys{mQgo>z3);$UV**ulDQD|2kd>9!mfx1_MN2uv*YLV zC$;}((H8{vK1}*ov=6XT!({)?HPPcY-4gu?*t>qMxIIkYO?_2=dN0HS_C8JiH~0&% z_i4)C;N2YHU9?a2@pugE6J22~v_G)T4d@?L^P9(?tnuC_Xm6m>9`Q0ijk*i|aggfE z!M6e*^PkoF?fsn+>L!=~eUiU|w1OG1U!GSL+e07F75YTZw?SV4W}`pIdNix=xwI#h zLi+(nzohmBP0-(fhoDc=X0}Fq06U>RB6|(dpMZ<$|ELk#8#t2w%$$e!oq*gAN&9Dh zsdDNf^ao%X%NL!p?M3}6{r>xM_}BI&d=mL342I(UK41v@LvAX{0*15v_(KHv7=gXd zRICes08g<#+3nC@fL`#A=qrAX_vrw8->HOSQ}ERY_TM$I7qD$9x{Yjhe_nguYZq1D zzfR}+=4-|y|H}32o6BwWJSdkBn-|qq{;#h8Zt1GmZ4s|$Q<~hn-Qn%}?{0_p znf_jfM>mYO2OK_4{vn6&LjF;Q56D06@IA>t?eH@E$~NEO`zh@`@9uzm*^HlPSo9O+A`7=*`3D+OnJmhrpXHt*dXB5eAd9{{XX1VjoudsE@ zm+JjQiTrD3e^0#+TSWeRM}L{TyRLdEd3RlPg}l3ddNp}>{d9bDi?}h)I_A3U-+`@% zZm0LDDe~K~zUBv?yu03dd-6lrE|$I(d3XJHd-B_Jop-?bw>0^McK`E}-skirzs2pm zpCOOG5sJ4-hmq&~Plo(=k0kjl`CKpMy=zo|j{I5lkM)zOiK6O`753NQzrk(c-3R))lbN8eo>PDlzemY(N5am zJ}2K~9@F!%)p_Nl^!1TvEo(MPeV)}6Mzj53NCi8qwzBZ3jd#`B{`K4?Z``?g|{4{5N(au|Id4BNd&pgu~ z$@&Jgr$GJ;s~6APGs$1<@b{2+|1V<}c{^`eIDhI+`~TVfcRc?He}tTOlzGNuyhiKp zzw4cg^)6T8eZ`55W6Vh*F+QS`&f)!SATb|^`M;MipAf%)@gSb3153AujP)w1bMSpU zU`FW0>sMsHP|yh%xMjqrXJI`E@YW-q7hH{#^nF{#IJ*(n)1kcFl*TbUTw+I%%jaUg z5wQPb2uI=lZ$SJm@pxkvl_?P(0u0(NH6yf>C50R;F&D)2kY;z{{No;oR0NH zVxMij;Q#9Ro&WB9Xm_?}9&IW3pU#iE@2k#1|1n!7{J-<1Nq_v``O;+nb>~ZW!|^Ed zO@-5NJOlry%%AR3YwRX}cK(+61KC2(8^}CCf2<%(Dea|vJs+1Z!TL+!SEQHkJ^B}8 z?IQ5qe~=L8qe7pSF^vECJ^H$mmhQ7!R(#g^Va*Q;E-yQL?Xv;yZ>tj{gq z2mOGoZw`LM`Ed-=3-J688ayh?Ax19hc*l;<6d7tes!uutR+_65g7 zpU6J;1!;-Ld|3&)1qbv|IW-yUKY{ibP(#$$zZ~g-{ix5I2K~Ug@d&y?pdag>>4)+F zd9EqtWw9@KjB*b9g5VxhcP741Fcba(p00!P@I8UTDUgBrk{D6 z7xS4Sm&c<$fGo-vIUEOjfDz(9JYOi@3tNB*lzp_F;84^@;sfjp?(eR0h_r&$ZJ-Y8 z&%F%l3sjb1{KoebeE3>$_=Vcvyju|u93<_5`j&2iKY@+jQTt1GLIw^+f0F(f6|lY> z=r1zrS3sQLTxlO1ubI)PD{v^h~IFZD%8E4T~!r9Ktx3uaUH(Kdo<=k)bvcFlp%zw-LvX5g!FckF{do6xA+Ee0FN1#4H6STj`1?&sz{ifqr_5$bz1};Q< zT?G5@fc?N2=o4M(2JjCsQO-X&{220%YhXBhIs-|0cH z7qIzZv&UQAV5f28$4(eB-apGfq=%3F5u;A_Tb(j)^r*cDwi+>XV5?U9_(u#HIn0gf z5XT%ca?r_flxjF?*h$024jVP(52?pmM4YR~uyI4ij>wH4Jyx`8)*d5H9yV^gTguRw zjWhKbapo|8#HjIm?y=6iaiHS3!-owWG3e+sa(^gyq(vZ^KY3loq3aAt@*|`=vBtv& z4IXydIDh1z+yM2-@s4Xwixb3Yj~X^^^n|fPhK*Zao9>yueZ<&xB@W3=7#Al#eAvj* zW6wBbRJSw6BSW%2Bdg<*mW{PCVkMc=28};y^w^Q>3+y^}$nX*4hYcA&VeB8AFsLdn z&fdF^>*vv8T$O`zEFeyP$fyzHGh;`if>kv={s&%Rd>{5LAz#O2-R&lfrrJx4u5jYS9#HuC!h$F zRh?qJYhxo0A3Z@UKVKq|C@<>!w z<6Oe*Siup)#!I8I&9x5XT%DsdX`HQhZv2SRqpG^3RBP0qoT{W|!Y2(Gt=W?#_3NQ} z6xw3M$YDLv4yS3~sP1QD6S1*HM~xmgZ2b5^$xb#_$v6S}m>f*W1n3n)#tDuYF?Rff zL8py4bCA?6nGVNWRh$+$Y|zl&qfR>`nQ$!GI7y#AJ(IEH#tlb=KN$nh`pxF;@)%xZ zyZMpJmsHPhcNw7b+lTkZc+zeC`h2gO&Tn_sY@UTf@!VXt_M2$-6wqS@HW5Qub=9Px~d*u)#KWg{PsF;)}FkrV-0#}`ZW2Kv?u7V>jArvzliH+ z&7R@puXOkv`I{Vm68WxYt39SCB>yYRjX0k+mHd(?G`+`li+S=hsNdr}|25>haQ$pZ zemeP|r>Y)Xms%kIklD%fGs(YkgQgE_>-=hwyt_VeHu>M#E;fJr5cz{&rXJSoVe+L9 zlRTz#;_V04*YwOG|DoAKJ&%%K=J0dLU$-`?e;)Z`%pSfEg3H)=t7Yq0sUNQo##=A8 zm)Rq)@yNE47+tcD%%s;)omP@N)Sp+s0h?YUxwtYu!jY=}&v^vpIukKEd5o=_avV)|FHjL$ddLOHf?2Rf<})&% zqJ4lT5ijKzu`iJC3Cs7FQlG&d;1;x3@ILB?eL>SJkRJLnpCdo;2J(ylBkT)ypnsz! zkOBLiSn3Pt1ML5~bFwcS{U2dpFahoBohIL>fxiTz59JlHFPI|nU&6kn$P4sGeZ~F= z`vUntZ}E@63~dj@|L2YLdF%`9|GSG{Lmy!O*PZ$X`hW|?pZNdn9QFmzT!QjCV18#g z`a59%zn%RS{ROc9-%fuATYPuL|}B_(Xf$zPTS@KQKX#AIwjb zurIh;(tnKp_#^BU$nmil{=vTBT%-?>zJh(h2pmr$XI7%UfiBcv#J=FEQOJ+_rGA3{ zfN97dLSGU4f_u<^;`N@Z5D)Yc|A_tA7aR>ap1;I?8CZn=ltq6JR>L0xlowut`8@0k zMo4?heA*hcFK|5ai+>B)7n~%ryafL<`~|eZ^|Aave29I)(c=G)P(SPoZh*bgUgcj< zKF}8ZJAnPsuV^1&wAlBb_48XVp}y7f&G4tq^+q4T#bo~=) zuZ^wO;dKVw5pS0>eR-i?_nTeS<7fGk`ib!~_i6pa_*wX@eq#JAepx>;ewLTkPmG^A z#8;1>m2H#bXC+LIpV1D<@iV(qa{SEi?2Mn#Up;;XLzClYx_NT^ERIQzpT%vGmK;AThdblv5y|m0b4+sl z%p8>*KZ8EW@iTpNa{MeGT0b#y-_NX2|^ZkU-7WX94G%>hUv^Yv5InpZ;i!`F}Hh27BZ9`TubIEX(=) zzcGGhdN%O>Zv6DWsP9#epMI|fUiJ7{$TaY($Il$v_wUBfBHGioy!Z*5ggg}k3-a&P2F-nVj|(8kZD&U^V? zn4x0diQ|2GK>l>na`|5MB=SX$=Y{)OaQnt%AcffD)857+ee9fC#VAF*1LK|^JDl7 zSG-MSyBLqxv*NAQee?sbvzn6s-1Kw)a4Yg_%x_HJjQo|3e)~VTr>wqAzctgZVtbiA z+mN3@`)yuG{>E0e7acu5`Hq~QF+KJk#CNpc<`r8peI1*xo~He+J^9(@H|zi8A7_8C zcCmS|*)Orbao+ndrvDG^40cle8S)YJco*rsQ$O-I(r-4;pCxbe;Wl47oct5C(?4D3 zyKFw~4(hS_^N{H~vVFY^^|+f#zK(t8hxMH*_XF5c4u2W>ZH%9!<=Xn&Pn>osF#VSF zb1*>X180(NM?C@O70cxJrJX*%v%i}B0@gQT|FIj1i2jdge_h^Syts$XA9}0R|0(i+ z_>Ktq*Qww9-^^}QIG-5|RQrAMoy>lI7i2j3eH}hW{yplqcEKm&<83+pR#>Lr!wAW* z=6TrW8;$pl)&6EYmgdIW8tSp*B~Si!r+;2UetWh{f$cb*{AaY&<9Bs^xnIUMhv)5J z3;KclEcQ3wXZw;rn0^S^E{pgats~2|_9~Mj}<354<>Sd7BtPYurEMPX_X} z+s4S&!TOaSFn=?#O^jY+ksjZ(%rUcSU=8$3eE!4MF>XbDMD{zkiSZ^L^ks2!C^bNRfcp_IvbQPx2b9IX zkSmSbDCnQUHn11C9QK)Q5`K>QOISi%2pVAk6xp_&9eMZyn2Ys-<*!@EI1{p@&3^`a zfmPI({iHR%N7&lCjPdDaZ9Ty)l*{Pbf@jg6WWFzb5ZV*COZ*4f%72ow-vjjrdcdCQ z_|M>vYPm%>wa@Zrq`j-!qv2;Nmv@J+fG5PiRpqr9tn~>uMtcB7sW19V@p<%JU<%q# zbVr|~zX2_=K3C*IxwR+op>Fncel#I$(Ev=8II!>c#HK5+n_w)McAV$^>;q~ z6@A>=6WsF)j*khLk9`y0Q~=&Kf4+_S06)SXk~7!7ttVIn|B76G4ebRi*3&m zr#(fS4+LMq9_i1SHn0y^F2_6MLR%a!f<_vjYTd>YZ1kPRd)uS`0mq|#B)x~Uf@Aho zIlVL57ie^-%Hd9JJV6QP4@sZe5&D2{tTQ>{pDq-FR&HMmpaP! zF8n9@(m2)yb?^XOWR1nTL)5og-jVHX@#AQ($yczv;&`+_@HOrAurHWLfA~505@?F@ zq`!r)pnkv(lrwL`pFkJNS)5M=o9v?X%Y24-AkXp(pQ8T29c?t;`w-;;U!c8X{kuUw zQ2#BQzox98U)}}&koZCw`GGyy-;2AUeSxQ_FWVX81F)L@E$)GMU?%IE>WJ|H2;i>> z=ackE_!H;~{o_NBS2iPO&Q}faPfE!>>{5@~%hd>VcWc_diTLpI`KHCQ8zgN-!fEI5- zAI^svoJ$0Upna?7(>tMjiMRgLljnz2UHBJx2L6_~3dUMN8u}vGW9dWjKgJuASHR!$ zeQWPioLhj0#edta@85aWKi>q`2fz>Tzxcc2K|fGHyx8Zj#JLLC2lmD9PwWqW0jM$%=OL|NBP{5V{3)aroQnMM^};?lUjWy?D zuNnGN*c8wI>Y+T~0?`RZSH5W-qiGLqpY->wJ;8s(Uc~1c!G2&m^Ou^V ze*yKMS9`3yko74ahW-L{MEPapxABR#L{dKL7u8@NXmP&Ao4&UZUqJrSPDl@IAq$`a^nZ+Pg7?w?dX)nlOEA$7Tg8Wjq;LFyYU^T8Er9PzrC=2jrXneU&TTd_o z{w(15DC3WB1RY^-e7*ZlYdlwN?Y)ZniN5llunkBtzt;u203Whkf9K#E!Krfo#`!1R z0mmxPmHrSNvfYpKx9;ihQutr?Qa@q52L5UbdE+pN;ZMI_`;E-c6^H2kR=**-ez4ZB zsP49CKW@P(IzKm+vW35K;Ydl|AHkOSlJhH^M^V=E_IftSrx>x>l}X+w|K&qTK283> z^OAf(e*U3JUYbj`=8pbs%z9p@amn;K^3&-Do39GVKYn;JeV+W=PPqm0hu@w|UnIZi zBYw|-{)x!<}8C)GyE5WSi;K*C*e`>9=X}z1{v#e&e^2`ZMIG zI)2EK&pO9xj(pDHL-O}_Ox8C~{@)H?Ab+^i--_fzM}I_qpp(8t{xHX%W%36MOWIQ* zf2yO$+gSbF(ebCvlU?33={KM0)0rfnCV!1{-U!IQ@0E|N($qpZp|7~_MeTn?4XOeuG{Eu%Y`3m_q&iT-*qyB&C?4+Ml zRwm00$S-s3%#eS_u`^4)bX3xw9Qor9O7bE3w$8YdC*Q@XZ-M;V&UvXwzJoLFMC7MC z{iH;`x6>cW=Gf_z&pP_k}xdr@{hnI(T?kK}QbBmcBx zPe{Jx@OkoM96uDuKkBq&k^BOOkI28_oCiweM>y?RCO^d~w?h7HN53r?&)aimUU#K< z|M8iV-Y0*#bDl|)U+Ww%0r|2!{*rGrKI!Ky`E49NM;=Q*;tfl-;;rtu@6M@SzYy~N zsNqu23!1UhA!T-=-XGa}Di&UQhF%zkTd2O%xt`DZgR=NW_awE`z7LmT#G&NvIZ}J_ zuOF@HjZc%0h9~(hPP} zlK;@*Bl4d+e2M(m4qqn!y~9_?uW@*f*YjTAq@5}9n>xHtelv$plb`4G+kkxJ@EP(8 z9X?CG9d%T|a z9X@5({|@hyPdj{?d>4lg$OjIeA>Y&Cv*a@lpCjMT;Y0FShtHEA?(hZjIfpNjpXBfn z`Ox7@iE99p;yvOVLg2SiC&vba7e9__4{A!1f$a`FWZ|Ch2`MM5YCZBTn3i)OZ@9}!xclZ?f_73lp zPdj{?d>4lg$OjIeA>Y&Cv*a@lpCjMT;Y0FShtHEA?(hZjBb{-iNPd#TN90F2<4cKr z&e2~cKha5FAs;%t$4jeA96m+9iF2O!$zSE9Pm}+b!w2M7UX(n4X2|z<#`i4wI~_ea z^1nNJLh|)4PU_E-Ki~0Zf&3)rI-y8@OGi&czJeMSoezIdvNPY*$KY8+<9KJw) zABQiJzr@iWk-ygAOXP2J_%iuB9sg9w@9z4a_aoao{;~U}z)5fSO%FQy?Y`-7C%xS_ zb#(M+SnhF7db@8r(D9GmH{I{lH>94E9X)ySk2&cJZ zEvY{w-^y;vZ zjHAaV|I6HD`ZW2j3zK|6ewouB@ajyw^>+GsmVC{%s>klTbL3Y#dM1&tbq~wsdfutz zccmU%$9)O;VNSjB)@e}8C_FOlEL(NiYh$7%Np`TmZ7 zJkFQ=+c`g{$d7mGg;(n0?Z5+)_N2+z>y_m3ideku=h%r?RpM>y2Fdhz1u5RbZnZqQ z#Y{0Qc2_yWFoks&67Ms zD>jScix)MF!@$a+J!ys|@)d?&rf!@*!!U*K(u>^@<@~Sa!EL@?okAW|~ z)xJ{097BJm%Bcry$MLy)RIUuH6U#y4P2w;=TFWn8rtyX2H9k!_c#wLA(Z2&Xit}ae zRz5RM`SKkqr&(^{B9)^+^%XBwxp)Z6pQdvDMAesiK<%s?L%UcHZ;y@R^0L=x`qWh# zW*GY9Gb}fAkLnAVKXt99j~HM2hnAnZUCT-BrgDa1xwFbS)<3f!>rFkW>s4RCFvqaK zFk)C{=uOx3KEr@vmSLWHL&^n)5yLV=?*`RVxRLc?SY{aB#CV30)thpep?5RwVHhyX zG7K3O7*-gjZqa-d>J2Do8HNlC3?qhRhTg3#mtnv#Yy5Q@A5tzbj2NbHAt(Jj%`n3- z$1u;Z$gspPL%kKs!ELH1&#=reeLKr%STLFSiww&QQ~zXo_LItU+V2W$v>!(YYZ&yT zY++ZGOZ_#>?!x}aurP-GcWdQC9w*TSEDtYCh#$%mG=K3n?Z?@@SbkQ+>=!I&s^%-a zulfQW2VO(=e;&8_%QanQ3d>!k`O_aLUt;+w9@ph-G+l=Iay-7%TW%5CS30>#9ENt@ z3G_Jf2KpM$&}*aT-C{dEZ$^(ch~xc-H7q}=VPUq0#rrkPKfw5>H4N|5F!!K_sYf)- z%+oMi?1laU&R4D&ry&hD+D&oFL;Smm$_`C~N9Fiagtp5>I! zq`aGk`5U*3^`v^Xjl(=cpJDD`{=NhKE ztG}}QHH-7*_SZ0Cm?EDZ-c;=zsbOKXhUIA*2CG$HX^hI@6b*C3G|V>KD$ZY~T=|AP z!~DA{m)_CPdyDaJY8WloF#Vl|WeZoRoU3S<{g~}xw)TIF0Eqx8V&P5Ygoh| z=1F_zK4tj1hTaz%=D*a?U#4N@7Y&PFX_)zq@>>2hl{tZb}&%G0pWfa#hs z+?xFNn!d0^!|bOTMzq88HC=u?4YQQfPq&Qi4jATdQ#qWe=dFlgKC9=K%peW(yuK+h z%s!&$o79aOdJk%txktnNtr~{cYgn4Y@No@;CpAppOnHWenJXz%UvZ`$M>&S2-E>^= zHrh6>N2ZpB#e2116z%y%;$qhKLk%+@Y3P5fVTEDl6_pEbG5%G? zGmKtSIsdwb*^-9oH#GF#)Ud=b-&fB+`EDAPD3|)H?5DL}xmjv|$S}{)zQbqtoxzp8 zwH+B&X6iU>^WYX*J`0Vv(4IG2Xz%^n|D##xKcw%$dQtzl+>3^{i$hKydh`3M%;{XO zbkh!Td|RADWP9UmmA6;X`{@ytcceV$6qQ?2wxDqBv9TVjcm6t+t^TfD+(3NEi7z{{ zt8YW{yFaPj|DeHRma4ov<+*REyes7+Ust&U<+Be`c^k^-IPqJI(|Dip&(2dn^Y+$j zIA3KhzxG!Dta2l!Z#hTvo1gm*Qh7VZk8|XS_1nk(#^;gZt@wnd--+@Pr#^Sr(e(Q< zzH>{J52GCYQ~PPuRp0yl-tp?LyMt9W|6jMg%1xR6vdvU(Ou5xg zDsM%3){`ome?ECE**-mrDs$Szd+sz%Z~gq6&sE-y`tCeVWqeK~-iF+zay!bM2PETH zysP>*WBjT^G~Vjd=+LCx!I3{0sqtpd7bTUge@+>yvh|nuUQ&4%me*r}$~#j&{AZPI z-ARjXDsRpBo)@aUoc8w4YOU>aB;$`hRO9XO_Q+2)e<#L2;@IEn-x_cJf5NeM((9_P zhWWp_US&@EdcD3@ImP%@PX1ZXX}ld@Ph6qpwPyNxcWOMRF}-kAcIbHL&p*+B`xAAY9-j4U*W^4NPO#k!-dyR>|3|07qb z%;jF*O6Pbu`BROz_PzWGmF;}qXP%aC=j%Byt8B;HSF2RE@uu}jD%r|-{W(I@piUj|L*5%dK>pwJN<9eB^uv~ z`QLWro1WKrJHO2RPUX%_AH1Qmov(gy?A?B~#+$!>a`fNfj1L=aul@T7>TlUbLUvT_+j+1} z#Ym^U=Q{O$u8o#&=dWL#@~&~tPaD-%{rj@MSKqDqZM^;6Ip1C9^yj^6X?{B&&UNAk zUaI=6e@AUKeP5Qhzf=BWPWgwp{l(E&aO7!@zvnpeQ?IB!c0Rf9U6t+lzQq}Dzj2PY z_nh>Hexdp8`em`xehn6D{JQ?xSnJ<|_3t!E<9*8Wo%-y1rN-NMn;xyQU9a?Zr>jPeaA5UBBwq7b&~3{^X<3>n%=IL&ve>z%34joH}$=} ztEL}KIehG>_*)!63yIv|f z@&02PZ{yEnj{VzLG~Uj?k2>|8*Hr6w5X(Qr(RZTLo@1T(kDdO%i1&YX|C+y3{bO>O z@peC3WW34Eo2fkq)1LSCRr~Gw=VNC)zSBAXU3k8xxAE&=C#Y=K=es&D%$Ira{B{B_F6yl5_ml z{#fH}eCqLx%GRI1*-vF_-^`XO+x7Pez0_X2zsNfBU`HP6$O9euBu5_Z$fr2+X^wpU zc50tp|L%67%GTc&I{iC8gZ=*+y)Jd-;s)YNPJG#sU40vpZ~sc|wfl$j_E*{bU&Hf} zT`!LAsPWdn-fyMHXNJc^`8m#O4btoF|83cwZ^|y<^*`M)zPrlGca^5M`@3(P^Up5* zG{0Sc-1eHvcD?ngBlmRD4|U`jBQ(FA&xhWmvYr2raq9QRSsL%NgG_b$!;334-p22> zj_f_9*CQ52Ba{8jJ3zmyX#Fqxh36yY3!moo48!0zjW>S!?OMLw&vblCWxIc?zeN3O z_s653R@v^4*E;=ofzzJDo%TA@$$w}=EzkP@#ZRbg<8|8)RkrKZY-_Ys5qu$c`*ztC)b9^pss`>4Bd#<<2 zcD;1I9x?mndcK{9?s%JeoxiH?2kvs_g5BQ;q{Jt-DC05sm}S%A{d4zY#@FE`SUZ?e)qb@ ziYaa&KAipc`Tct|-n~vS{lNy}%hdl@`J)ZgKgaRh9oMb=Ka3|9!O;E}!`jdPE!lq2 z16n`#xHmQB4a7$e{e6DZ)1x!*nDAgg&NX3*)SV)cW+vE{iXT^UbzM=r2E_`j7i?i(4gswr2B0|F!3|-pM)+yVr+S zj(3fo4-0SZeud~M |=wxAssYy8r_H_wy!u!ieY8SmN=)>Au7f4Elj4{yKab&|hw zelp(sUE}Ard2)rsr!H{f8><~RjX5TsDk#09e)L#=mi8~}-S0@rA3m(>oYs~9tmbd` z*4>ZC`WNdug>~`QYWzkwH#j`b-$~a|S-i*p<@;shgO*Et`Rt^9VJ*%7@W4|Ki}SO5 zv(JA{+o|POuaA=W+<4|^KM7vY_(r`>o+|O#(T@JJRsS(ptX&Ytf3Nmsd4Bw>^Q74y zeX0K4c&lYkO8&|SZC{J`mumc3Ev}y^@ulI6H~UWS8~2A>zu3FK#AmP3_P6|APkr9s zeDQ>*B;Ne*)u`QJMe7$Xz3Uc<_Xg@Z4U6|a()g~YA9s^P7Y}6omYTodY5b1&zVo8Q zmshpY%q{dXtrUj_Q#o2$pM`}`-x@#nAN%|72({VlWmuNC|9O_Tl4pRV!Q&MoIi zeEC3K7ijrI#vky}@efFR(1hy;o6&zaX#Qs|d-@)UFI}qr-($RYqsG6oq+xt1nsMT@ zjGuhrMITH4>?O(k5##snUFY&xKjY25;Cl7%w!gf3pTq~BCF>VnuXdhv!Zz`xeZ+N) z>+-*%`42g|$r#C>8>#16uaV}<9;Wg4jc6E8t(Jab|FrXP3r#n#SI<2pf8p+Ad@xb_ z_uFUQGfv{I|62LszchcB=T3T8;)_Q$O7uVPCXN61{KfJ4F>UcXEAKt1{yqDG*QQnL z_jb{Ezo_vCv>N=X#Fw_9e&)|I|CwiPc}{iyknth)ET6aM^y+xiA2I)q9X@(b;&Yo( zKl^w2DjjDQetS}UE1J8laa_NkQzjAmKWVz?D7AZ?f8J65ZTp4%Qx@JcxHx(ImY>q& zchSt&Pe^>B!sBmy)#Jt&EuQv8tyF)F*D{p+fh(;dU}58%KSTMKCiuoy*7J168+()x~?>AP5rlN{;%79euTv5KHN&%pYi_v>X&W3 z){Eo(+vs{SJO5|5Qv1C}4$wy*`y|gVW$J%m_v{OjKl@tKME?qI*Ybbw(cw^u&mWzP zFEIY`bKc5IeAMd*O$lROL2|1pS5q6@mplypCtM#KWlt} z*MEO`oyqG*TYqKivP4I`@%rkot|Nmk?0*cizo?%J->JQ3Uv#(1`^;?~KkCSL*Y%BI zN48&D!)O07d%l#r?)bL&2Q|Lwv75*3SK7IS`k(RsB0ayH*=^jTl0VZn8Sfpd@qHgy zJuue4lM_$<*W7nyd@EKQtNqJk{|$O-`Q0yUh~MkY#dJ=2A^$_=%3jK zHGbnZ+g>gCOP^|dR9|_!j<-G%JtNFdM_k+aymuq~~P4jtYX?V{e55(6mg{C?_ds}N5 z1sY%YM)llu$XovuJ%vxz&I-ezyQT}T*6`D(H;s?C%*%Q`n|X!zHIf-y!2jX+!+A-g zH~70QKmEDE3{C>eAMpRQo#+jUmfz;vH<-amVEHX{qBkgp^q|1axr z`NRKVe$VRR*ta2ZUHSjR{Pw>!e^uVPe%(a-b^eih`$^iur`n&>pC$XX=_zr3tl&Hc z_g?1lXbJx!T*~~B^PD{E~h7bJw>H|zaGD-**uOd9j~Wbp55^TNteDy z<0}kJUr2q!f)$G-UFBh>d&JS#Qp>%dUXv{(U2d+%ryggzLp1)ct|NV34+aNmy0Ddo zuUtN%m*^`zpx1jDhQi5~nx*5HjaxR}Y3zUDm(NFnQg1ykU#6j(Gobx`QOBu6p4;Ji zNt3H=5$7xXs$tYs?f%R0kn=JD&%1w>&gPMVL+OuM8V>zzulUiF|GJKEsaG^~?KL^5 zqy5an!r?mp_$R48Kc`{Tiy^PGF6g(-DA5tk)^Vcn5XTFq%f6@M@kOgI?Jep2BF7u1 zk7ze;)MEckZhpk`l5X8~AFr=0UC4AtOnWizXMdH>o2~lpx&DnC{#GB;&3?V!#ebL1 zdr0+-S%DWM{?0z8o8NlHlD|vmJ*@gxO=U%0!L`>%g}5zlj!p40fulgV`6 z9-406n_oX9`ihqB2~B6^dM{|YgU`D!K2F1DHQrIeIei5OZCv} z!~(~rj&)W2G~@FV_xks*(ua4e zT@l}}d0^G!Geuo#mqu|v4?1XAWN7KL535}-e6@JCr1y8#ba{qeN0q&MkBaqV=jeIn z_tx@H?>O&P^m@1QorYP;=C9~@P5;POugCKv`L_E0RMbYp0%c1d&e3x2?r~Clzv<7= z^GJ?ig<<%pri+HC{{A;!7cb?B?$mZJF%0fvyNj{a+qrr^E$qSZ?i!w78QOe!c(UrR z&MN!Cd73`jjpwoRRSp>1{CYT^dL0EJ|F^Te``?%Eo%HABN3`GDK>67M^*iN9EI-&l z{iDAq-(&r=8z|rVi}C}OA8w%j!LUECe`xL3>F@pTalCe_??qFzUHlD{9}fNV@&lG1 zY@qz$ES=w4SN?qMx8X&~w;eYqz8)&vy?K0m?|5q(zB+1rEI!T5z5=OR!k&%&+B-u!kWF$$FE$M`0BuSDj9Y)d_ zNhc(mlO)N=NGBuvWF$!jNs|1oJ=b;3^UV9$-ysUUOZ_}>|$SPywQJc{mq`(1@(2G zbbZ~Iu1ea)y?=XaKSODX3B$nV4ewKgzSr?e-)`gfgQDNR=yRKXjvqZ*vBJ>XN8YOK z&bJsJJx1FnZrH!F&MnHT<8rj;e5&$^hRY3Cex~hFvoA6nZS5uC-rm;aIgK(Z;}0?n zH&$M3IH-y862mV0D32OWIYH~;I5A84rsEXzIx8+VY!Cf{K*wSEUW(au6yw&u&Dt{{ zA7nh-^Zd&Eqwgp_)AfhLer=w_FVK4PdRh^ zWLwDYI|YaLs_ch<-%m_sA6We0k7jTA`*RhJsqACDv~J<|6dT;S@105Aioff=BeYa8 zFibZLo80YVC2BwRu1hNK52nAWb`^#p!>D1w65H2U{J`u#Z+%|&V8f944F-^DO&m}8h{*vBwpSYSBFFqQuzlNTE< zGK?E8H!Lw+Yq-fUVVKJQjH?<|)@QciT*C#1iw&0=t~4w&EHzB!Kl3g99hokMVZ$85 zJi|VQ5yJw*L58XPXRK8Jtqj{5b~MZ~%r@+9m~WVCn96_0yR|-9hS`SQ4Ra0i4f`1m zF&to+%Kx^P)c-ESdM_()Vwhpr%CN0rmSIQ3RQ{Kme5GNjVVPmM;TFSfhV>R(UdB`T zA1(jzVRC&KXE@Ptis1~y*@kls7aJ}xOyz&kzIy*WZn)gA#Bi-)!f=z}4#Nt=RQ{(m zQ~xo;BEw?CMTT+1<%VkwOAJ%_?{i>KS)YjEAj1N~k%m#j35L@Q3k_5GZ*`FRmyfZP zaXK1i8D<-HH_SEcXP9r8%Ku1t5H>l!QNsy_g@)4%V}?bBiwuhmQ~6&jck7b=6NZ}% zD-3rS2J+NJQZLQ0g<-m3D*s*N!RMr1*f7U1&#;eS#Bh+|NW%idRQ}t`w{c1TnTA~q z!-hGAd4_!q2N^~TQ~6IjPW`7FwlEACwl~Z)>|&T>7&c7hf5P$VztC`+Va%||u-I^s z;c~;cVJiPaCh2|u;fA9P#~DsEoMJe`aIWEO!&Lqk+^7B*8!k0mX;^AlW>{{x&2Woh zD*t)Y)PEnth~Xf^0>hDpQNu#R35Kcsmp!lk%MG^}ZZq6vSZ{&qH8E^um|>X8e?OBC zFdSky+;FtvIKzpCGYqE~rt;tZL;d{G#W2UPkKrK0k%kitrx_L*rt+V*LH)NdY;V}b zFvqZu;UL42h7$~ft9AbzeO&K%jQp<0`N^2+`|0;D1%}Z>lvnJp7&RlCJwlf$rW=-6dtf}%Fj$~|!g=cFx}iVInI!w{3jKUmGHiccSH4zW zVZ7Mn5o@pVbH4hSblDRFl71=@=I46#lla8AVZ!7U#@$c!0`+s!2Yn7r`U!uob|H%& z{#1FM=V$Wt&$QkBguYfkf9b!W@_EGck5nEXsrkhJp}fL)VDb`ccR%q9)z7pSkB=qu zDc)dq)~~{UDvuh*Odd1teqsyMPyewO46O9CL+vte(0n34C@(M`GkJlvyPxny>gVA> z$DLZ~XQ$f5+|Q57OWcpi3#{G!#Cxir<;R_ON77Ghy~Qukd`heyG2?|M50|N)`-yy| zem=kTz{>kDg(WJ_^!hAU9x)zzM|t{N@H1citdCq>d7rD|E0srWoMT@oFE*Yqd1!NW zKe6Z3&&1w8Hm$7Bhbk|zex#S0zU31$d7-!4c@gwgKR=Bb_I=V%!Tws80-G--O_j%t zM@*i#ueN)AqFdC@J)^r+J~tG3P2)$dQ@z3^$_tH0jpw~;d0IZvKI&)1`?tMa*{>#Q zpEp7=VwirD@{nPsVO2ios-OPl|9mv*C-Z%c6SaCIZ2XFSyi6W>uX;YgdFm%)_^O|i zenJg3Zu~|=;|b#>&J8`ExcOPWQTUVcbn9Qty&tba``4prtq#gKfOwL4Ny zPXDnweJcGsMmOsBvBdbt=U3|0g!CV&tNtAm=ARfXQ~xy~{fFwQf5-6Wnm;jQ`PYQ> zpD_Q9G4oGMe5Co;g!CV)Z}m3}HfjFEu=%eETMTYrIZhtu+&lIC#=Wg!+O#7o<^Dc1 z_1(^K6Mm0u?0M?1o+*4~zu$DO@tXX(-zx0ft1=&dZ_qKYcK=-#$11y8{t-S&{rhtT zj^6I?T~}c({kmG*{o8wU{{Eb|`+L}qZdY3ze!u?CXxV*=&K-+Po-@(Qp*C-ZP`)I?2 zVfNK3pJ?d*W8<{lF=2d%Vf*na&vmr+>^rqRY8W$|X6XJ0J*s++g)!yZW-1mKcXWA^ zSt{T1gksiT6f2%obpH#EQ{J(&;%vhf$15*1EH*4LOzWcZOv5fGC@(N{|1tkP3Bw|L z9x<@@u8N&Mr0b6V{%X4MkYQwtt*iF?x9&gB-aihRzXIdY7tEjWm|?MD+|m4|dcQel z?+?cfD=goH#oOWe+k3qJ`zh(hLylkBy6VrbSO=mekJ$HUG2_8v)sGu5F-#a%7)H%+ zs`rc2?fs3o`OozCIm~~a@rYr8Vbm~T{!_gl9P;1uFif*?4%_#N>Bgfb_uuy@G#+#N ztv0^)J0sDCx{nJg6u;|oZ#-GD%%1w*MM1t|#f6H6=P1TZo_>Myz~l*&TiL6i*xnzG zS-vI4qpxZ{6~=?VDo-~I83te5IDLAqUPtVA2|U2^EZu*W8SXGl@2u^P8OJGaZx}ap zd8zSDhPweorH=iw#F{kgPAf88JWb7_$)lskI6=j~WNN7vt7h8fQ&?`YWF zaOqracg#!C?(zvHj~RMAVr+%>BUYgpT&MG)>Ul5c{`{76e;&+u;Ll;D;tXs&^tRRU z8;d{0=A}PxWxVS7trT*9jw~=ad5Z8s%;Lu^e)L+6@6UTV_vg2qQ|`}^RmuIiF7uZv zerToj|69fAV2$t3dpY;#x13X6^&FYodwk=m;>Rq0%;E=E+xYwQUdF4Q-%26(=g8ci zJTgW7#xBu*u6}A!lggZaZd-X?7iQ?cI}tfpG5s*b=nX0_`J?j828uyF#gbtvkC|R< zp4D%z-e(;)@vO?{Awv)8{p+}4`efyisfwY$8ZT5V@cZ(1|2uZCwrAS+0sfrHj<0nc zBo3<3_6);J!(2m`M~%-gTm&pNUSZhe8}*x5r~QmvZ1i6*)btAesXSyDGkMH-)X?K5@-^-$W9o;K@R6{?t|dbjLc%3-(fs8-@&vO&o zZ~P*SyZg*8xyiT{JJde-(a?D02j#_v>4q_r7k;nuuwi_=^0@Jsp~nsN(YQU^4zGN! zJ+W2wD;&R4o@W>{3=9iRFZ!kGWf~T5QC@7k(6F+m|J(mUcAX3F((~4l?f$vTuZMoU z^Y=ZRyPmf@cZ^-C*G*5M;_rIh&RD8A$Z(wDG{cpKg>R^yV*u{$j%^{&Gd|p~)qxq6 z>r?(g|1*Z6S86=eqPks<@o8w^Vtk6l$uz7uOW)Jo)kAU7*^0w+71tWhK1X@{yy{rc zvpT1|zdUP?_B+2azTcmyLbj8?sP`pO>HGYy2@@A>{|SGJSaq+i?kfvrb=Kgp5p_x&8%PVRb+l-D+X{2Sfpg&))B-G3O|bw<**u#SFjP|`#(eILcBwP)6~cH_k+ zFKnvqaceIy4DGA!5yL`5j~{V zJ;O}vM}c9?aKQ7bKiqJF;S9s91uE}u*vD{)VbpMnVUgit!xF=C!ySfAUQoXw!z{yO z-~adjT9oK@a>wf0VK{~UaBI(hPyG}cE;SsK!v8q5FEZ{q7ENkVdHq^y7{5<>qEIoo zU$MPmo?&#dwii91STaR%$AgNYhZJ+BDRzHEae`r);jWnJ&rr;MRIw_*UHW{@BE#i| zYYjIU?l4UI*`CKSY;V}bFvqZu;UL42h7$~@85S8XGF)!B)^L-d=SytA+nzr%%rWd^ zILL6M;RM5JhDC;p43`_OHQZ#l!!Yd^>%U=p!!Cw7hJ6eN88YuG-dWFUe~&LP9zR;& zC#!mI&)P$o+U|Oklc&=2c#gF5_NqKn{1ML5{QW&Z=h34yPrq;E?FnmlPC0ohJ&)%| zJ8w^sc2#reIL$w>_XwTGI$53Vy+LmeY+R~1<=`pxES|>=U{}>%mFchl5&4tmAGP~` z&LbTy|2DdB@bv`4q#1VaGpfd&DsD zZ{ifQYhv$XMrw(J?0wGK;^NzNALv**UU^MeF}Awi@;j>Y^gESLGfXv}1NJ*i??2QM zW6e~*wz$~z9j6?i_Kx*3s&j8&Yj$b-t31ol^%t03iD9b#ExuWQH=?wbm^aFPXQGyv zFg?fcXtl2ivu{zoR))@(8!tBu%wMYhO01aJEpf*`L?!- zEsQTVY#-A0#fK^8v{8(jez{?){uS+`_cvG85-Uuvw%Dqv`gaT)ckH*X%83I^kL}K5 zCSPfos(;y6G_O4W@@k0#Os}>$()1@9mJiT)j!U6%MEuKW|*J$hN=3ORdzsS z|GFFYsU^luueR9bV~yiDV7+q3F5p8zcoZRhF^)K@veZQ`#mbjp$>em)G9jy9} zb6Y8QEI&l~7Q>}~P(G-&qVp-C>b!~ZiH0s`KU<{Pd0hkU*!$np%QnA`qm3^x++sMp zq55~s1o!qlYcDV?gdY2sc8a}UTT2{gdbPz}rtg>;)_9J?jc++s+iQz$O+OoU>|ZEH z{kAvEH0)v+Hq0^1Gwfp+F&t!AU^vn+YBXccidq|1uv| z|GBlqwCSo}TP!zy$1abky<^OH{tRu;c~r6dvFe=i7N#FIbUFK1wtWA}^|QQ|*!?Zl zuPrVxeaD1x$IuG(mzx49ckb97cI@AfkMw=AXqjSREpdnG)fNjrR{s+WXBaLrjDM=~ zv@fdTN|P`DMB4{!P;~tvpDQ12==R>vj=lAM>j2>Li?y9tWP0VU-$(Vf8PB{>`EX#d z@hyh*OWxl64yYy4KG9e6$g+NPH}rlxEC$`AF(X-Bzp z*Yp18^w)lGx?FK$ayWJ8IB(yB3ze^Hdl$J@0?s zQ94gjVP;2_=Nr1-NN{hTVeRo0a@R|RE~H~p_5gwz}ibrH#^HKW_Edo6}?Q~c*z4A zFVffStUl3@-rsASQ+{*u+zI8XUi=ir%##(vEfou!E9Ny*jASSl9H1CZH~IdGCFU>l zYmJ*Q9zE6U45NE153WZ zx$(RQjdxXS*h8P2Oa2DM@A+R0|4!ZS6|2Gjq5k~g9Iad36dn2WVwKlVAs^gJ<@Hj? zht?q9K3MG=q_7`WgZ-u&@_TH&`uF$J80M=Q>|4%P`$jZ09y?FhtKc=oC*K@-Qc{$D zgU-tm!}KgYPol%Mz2Yc4uWwWyH;jx>9^9lDGmMP1_L~(Wozy-&N_pNf$_sB%o;g~v zqO-P_7%#Y0+hfOSd#1@NjyHdXC1XtQHpRTCVxpt!VD7JK7$UDHeRB zn7+!mVY>N?zN_uA62FmL!RGi(=#4lt~?l~c5(Zi ztvvHrT&nU+)6e`sdE78D-14|uF*H~)xW@b$mb|TYVXI5AFb@1tFBPyMEJVa)39a)003^~kIAY43jV9=ZET3C9;*AAnm*@d z-evnC`#c#p{_lS7Exud*`RCq>dz2UV)_q*!LPdTKPE1t2bbKBz>}mVJa}^`@c|3EH z>X#Ts?^7NwR18vme!gGj@yUvjJ^VbK>T|Sze)f4k1N(V?UW{H-{qqRr`~JE5=LyQ| zO;>s4KW-;MDPM@sGnDUDga7NFRR0aFL$rT96A;c%Ii_hb~HQ#jn-U)e4{%gvI^2W$NjQ%!)d@peS z_XFbg?+8S`(ECvF?e@HxwWpE?Z<(IGx1QKruLJ%bUtrIzxqVIXGW|KX$ocwtWxk?6 z=jQ0|--P|Wjcd=X)DPFvF2H*??$_UEarAb7pRmgRcFl`G<^!KCu-)DDB)gC=e>*$zD&)bQ756j~@y1x5&^ma%0<8nuryFW*7 zcRS~fuIE_Qj{ef#<2qt^elv~#Y~yPfo&P^`>ihdY@m#yV(oLWLOx5oFa7?A=?L@w3 zlq#${)+o+iTOIRLv{R3~AcftO z6z#NMV0vXW=KGgnZ8&clS+DE65Q=dFmgI(O@TTfuGh!fC#I0Q-k##38vK=~kf&ojv%#51$$9$R<$!Y)o$o0| zYiS>=rJl!MTuc46rnk+oNuKtny`lTd0r&PnDcW7Wr#J!rW*c9McK2Iu?e%Otyqy@T zK~DW_(;t+=E{e}%{Ji!rpU0rj&u{zS^IMl|+6T$c*8cf=Lci)f{nF~3pFjC|u?0TA z^7As|(I5Lm`M+@FPyhANU*UpA6$rOIqVgPWzK8YruidW~ti!)q&sRF? zI2`!vZd11Y-(q)PE&JExjq3M{zucyLKdZn~Yn502BM8zqrlr>H0Fy`YyV1MlKi8dH%Y6N+zqiKU-~4UG`j&WC_4hIPd+`4Z^4W;>@Ryg= z-tWKfvq8D{rxo~-;Myvt`nLt&=X;IsffKY`Uvu_=>KWpIpB+IU*Ol*m%#a)-D1d>fXBgK2VV-l z4178G3hz z;AzG^UMA{Q4*iYbo51-T>3qmHgD(K*eBpdxzP8K+(^lxei$0+I*D-CSwucQ{yz}dN zS*x_Y$-C9%<=~4;RKDY%zYn%pt$ss>Mei%m{6I0|EyYy*{Xf;dXw7fS!|PYue9J$q zUA)C>txo??9Bt@v#({VL=-2)3u=Yh|)#aXdi}lsp-G3jO7Yhu%o#=kp9^IgRR~ou} z_NUtJ^WHJmL%$D<|ES+<6g;8G_ON|l71;NWiKFd#64Jc=kZ(p{Z{)_{r$cCR@KwS znd9bh!yWP}_vPVS{T{Na9o+MGJs(fj*VmDM7enXT`s2SZY|j_`OS^v$>(4(Nqjt5` zWDNUSar+r;z8Nzcu-D{hIQt@?-rVPnjR{_BwdI{-Ntn z*f2Iw*B|Hno;R3rZsmNd`W;Yv9;CMV{M}Cf{@Ky}IAPt$R)4?M z-s?a=_4^(R-d4Fk=Qj%eR~@hV zEiB$d$WPj-_I_WX6!{*Bd}hKv_it+NpYwC!?-KAh@@@K>+WUQ$$rmd3_t2(-cYIvs z{#@pyE0z0mh!23TzD?zR-)I`-y^;T;kgtXPEXX6Ue+u&H$bT;6Ga-Kt@`d0pgRe(^ z<=_`h(f<2;b3Z(*-0%BrhJFS3EabNx^1T-e_5D6Lt%d-_`9%Aga2&!I|%c+JLFAap9^_g*q0*yKfu?6e+s?{JRkA;foCAU zuVCL2^3kZ*9pImr>UjA2^$XU=ZIJKtiR%0M8A7~v;CCb5{ovEU9|PY!xcYo~`lIUc zmt9+3z7X%(_L!h@KfjK>M7gg=8E+}~^*Ospxu1VC9#QV=+3M$&`+B+(@y|oNcIT_U zua~F8e;?={kNhr$d^Ymw0RID_e=Yc`a?Qu@lQ&tS+}HQH@V^@UI}rM9a9@4_?0es- z{=NQbeU*FtU&MF~N4|^UuV<0k`}iz{{1)27e<#$d4CC1b{o4rn-#*g#KL0BqAB*^F zQNQ)z$0DE3;49I;orrfL^c$S5`T2eLY|N*-kY6XfXK*U?yTX4d@|h0%GRV8Z{#A@e zIrLwL{6dWP8OX2R0`0G#kL9TE8}PRU@yd9_pUuc;CiMRT zJ{P*@Q|qo6+q{YiuVw->9uuYY}E-y8W{3i(*@ zaYgFS*TZj7pSPx{+}GdlA@7Xw%|pIDz*l2^S&04POW?b(KN*GoeT{s&VE<5p{6}Ly zR5-7C|GUC|4aQ?N_+A66kH-?^-yQxMK)*5gEYxQ<_>bU5%v87 zd<*zHJ+&VG98n4Q``~N9{{dbG{t5U7@Xx?Efqx0U75p3UZQwtE?*#uDJUF*{J?ert z0B;E11bkocX5a^aw*WsFyfye?;BCQ=0Pg^P6nG~1pTIkVp8%c>ehPRu@YBI_z|RKn z34R`UKKO;;eZemQkAPnRJ`lVI){8vw-r)VfF9#n4J`{X7_$crw_;~P%;FH0pfzJe= z4L%3F70lpD@&`bLJ(*J4f^3<>UZC~{3?W3(d z^J$eA8UCm9a(~-A&YWM*$MybQ?Dx#?<2O}4#fVpL?(Z8vzXtzl&;EM+xhdLH^{ck+ ziQma@ZR1lfYu>N-pL+i;pYS{TPnB2pU#s_PB6uph+O{X)uVZobc5fL#{3j{rD)H6K83!m=WA<_k6Z9R+jn{4*X6-NZO=1I)vwt#$Wz(% z`CIk4xr?gvRCfPww`aV#XL&B)L;c^Ye=}BU-v4RrxAfQjPD|0g+}d{;j(p?S?f+AG z&Ncsu-ziSUvfnp<)}cG%4F{+GZ{?*m_)mND*ZZHHqW!n#GvIgf`|sv8<#*0!>F?}6 zRlj#2ZujNCKF+D^Yib`3e`~?rzR6qvUfk?Gv>UL8`kvpOVtI-<87qFhpWzhk9=D(d z`Rp3xYg5RZysh~RH}rVK*)_rL#pSO*r@p*Yx$qpPPxCwm));Q-|2Xhc=syMiHhA_qT91RRf1NP?Tb5~l{yfAE@Kxx4DR{j%tJ|l8 zpMiL-AYTW6?IG`m@yZ9cZdE}R?6BOVV?{6uIXBjwpPJY-%;Mt_+jgGeEs={5g5|qvu~TJ=lc!D2?H^{_jXtNmZmro z@=q6Qef)Wv4mkhshCbJeH&Krq)GrwQtdW!PtDfHW*|6gPMSlUqY_4nH8W(V{y#PxO{_Fuy=zlR>7 z`Smf!FU{BS^zXN>#CR;+u5y1qocS!pcof4Q^^e4SqP!;lBi29aKZW&^@`+flD4&Y? zMtMifXUc2h$D;pBQLk0tOW)M``+jM!raAZ&rX=X zXQDsZ@V_4G`O)h%U%$TZi~LK_-xlwwzCSdj#BWv z-m2fqX<3JStm)BTk|FIe4m5cH3hxMhV{l{RePuzd(zDU;#-|zHA z{56ns|FHz~sTBMYtOwui*7f25`E0{{&CmBUxtK5c;Ai7{bTW89BG&sU#6hhx5Ff(P(-IO1KjPW}0Q=colbKJ9IMf=`wE z{m`#){%ywj6YHe<{(EH$Fu(qc`c3{`^*dX{Jyy^6%75fi+MdIH=4bTp6s(ua(Z2xWa~Aer<+y%xy%>c1Jxj3P-P8TY zbEr4>A7gO-UW4_lrv1ld*l%$EaoW*Z-|MX2bMQMxkLBw8^XIKUeM!gXkEVYM^5MTL zQil3hfN#cnw;lCQZ=~`3^K88g<$k|t7OuCqVLsi1{MKN+ZaSxW|H#t`}BD#KcdQG z^*{Rksrvc34EF~PIYZ_1%`E45<+mF@?0n^6+kds2rKr$6#sTu;v6 z^#=w&JX?Ldn`3@##rXsCU>xQ*_aEog5TE{zM}6C(J`)kICC=9yalTA}euK{1U;ljr z#wX|gqcz5-Bi5%q-G9tLevR=yEO|ESkpn&u}WPr#Dc3vhfjzDDPoBzoqgVi_?ZzxAe$|B=@5 zNB*q)7ytg{UhEgS|H#IAbqDk(fS&>V1(;uXkaIjn;CjXTAAiU9FQc(OY{T~h^#2gP zA8p-U&sYC`;*=cauhY=$caF*%+Wuqwsmf=i(7zY;z8L4n_t-DcO)uzEeiqi>FxKDs zwqGA+hW)U9O+kM5;{GP%eTen**c!%jF2Z$!egoFWrLcdwhV_#1XJLE?U_Q0Rer8YiA1jgHAF=;<4E>9s|M#N5 z&qAO5xgYYDh_@5_lhbhhqd)SGa6S&i=lvp_A8}lN^IPkBa5f#M;4`q_C$FA*U;U&iGjS{^jBn@&Bdy2tA+t`8vvP+QWL%p8Q(O$0+6lzkex1y|2Q0 zHUj=u;qz2Y_dl2)?|)GKU;aN=U^(swa{sXl>&G_mTQR;h-T(L-*1IzJTLL+=pMd?x zo7mr1VE;P^*V~?0PwD@8JRiCyL(kXlrugLv%I~G2@we=L$XMemx~cvXDfFL4e@CN# zZ`W`=nT-7%!wkWCemSnUSKIeT*O=h|tY5{*uX7FctH9@%=~yqA-%~ZnsZU;t`9t|F zxPMG}7hInxzwIf#{`>bCluxKZPJQzGVPB5^jK=)!hyCOh=ug1;$av&$V0@<|pO&rl zdgITpa{nsukl=V8pZzhgi0D83J&fASHyKl2Q(?+@Vq?=bXl8$Ms=+WilI{-ed=x<2JI za0*@@^MPs?EYNyZeV;{zJ>*;QeZWYpXWW0RN4;lY{_ViOZ`K_9ssHXj_HclHqk0kM z_t#jDYWn`=edyP;|7eBv>2b`DNm$ReWB%;~=lzeFxZiOW?gwUGsON`2Kh~+fo_~J- z^Z28bUtx7!W%ob&8o#lt${#j9@J(Z{3F(<*|>hZh3nyyn4eQHKbIi>PssNUd_Mjs`a2Q%Zi0Lq z*4skx>By%e>hlrChxxsU{EOg!5$dxW^L0D&<@2Y{pni?F>iqTRLHGTr`u<}9=F6+# z|3JQVR;#@~kNP3T?=$cj=wFkUbv^L!-#@|ieK_{(=Z#YRke$!_fgc0@H|$5=NYnMf zp9gKYS^fF*8y&t;?%#)hi{~@`w4d6aYVqecR(^`{k(f_|vA%uKMfLA7{mr-^lhIS- z`}<*SP<93**K8$01n1Vm0hP<{-z#+ zpL^hX#QPuHXpjDI|8Wxb9~Yorf5iA*0r}5}*BSapLjPdITY>$|#YH+_{rQHr3FZF2 zYXtS%7wgCUm|sVuUfpp1euMo&HufLu@OdyF`5g6&=I77LPr>@V0rfexp{_T+--+1$ zTi<_h{(OM_(vW!?&!3kYi2I)>px)oXekJy=AE5pZ!2e#?Ydrt`06u?uCgLUFpZkwi zm>-Le^VFrWj*=)=^faAP@lZs1l_Or^AME(-_8$NrQ_|_i;uCs zjz_(?|5ye6nx6kyi}kHB>ia(YvAzw?ufCtW3g_dMIRE#%Q~P(AIr;|c1^vIBrRVDy z6AZ!q$=lCV`4So$pWRdCjqLu%TW2Z%B!zzNBif%dldnbpD^M@GX@>eyem&OD{jSz} zv^K@O!!*C1#+Tsy%twCHYPkMghxK&-qcxttAHe)p*3dudliz{;73E{FUQ#|3`!ULw zq8^k_t|314$+uzsJR9rXX;?q=z%PdWE7%9rB%Aj9QyN+h+UiE-{yygikk{*9 zUH^6L2Rgxi4dh|S=RrO-SN;3_sU?uFxw?9OGtX1*_qWctOS$hC=fi$0`cvm=)%W#x z8vcE*dHDBAHeRCoUav2~)6u_c%T(Xr_ge&i|Ac*GG#}sZ zbht~o*K0213&20Y`MDVKcF5;w@aORF72Q=ecvb_3z(5wL-qj5x*4tHN?N*Gxg`cM|kND<^KKb0LX6u zPr&~p$bU9?ImUZ8`k#N7#`pE)S=hJ1{8|Wkd&p13_`C}JGa=6hZ^!z=e%bk&uU|h_ zfUg42gukXAsJ*Wr@4^2%@P@Cdeq&pove;kv--3E?13wY=7vELA{+}ZL7Vy>RUk38q z4gE$v)xTe#FGsvHkk8(8RNt?!xsW&PuX4Yhc1QmYMLsVf-%}8ODeBYUef96-6Geai zQl@ghK7SAS;-M<{{ZOmxs`EDB?ZG>NXMvvx9tJ-HJQutdcpvco-~+%1gEt2+03QK9 z8hkAH1n^1VQ^2Q#$H1Qip9?-8d=dB(@TK4@z)Qf_fR}-90N(_@6?_}`PVk_h`h05u z-UPfEcnk2>;BCP>fM-LG2H;J=n}N3gZw=lSyaRY9cxUiz@NVEa;61_f!TW+ozz2d4 z0UriF5_}B!IPkl{3&E#?&j6nVUIac5d;$1N;BoL};48sbgRcc&4_*$w8N32~JNPc} zI>W2a*EH~^;2Gd8!9(Efz&nB;3*H61D|mPC9^iT4y}|o|Uk*M9d?@&E@KNAV@bTai z!6$=H1D^>#8+;CUG5A98#o(`lF9%-*UJAYrJOREDd<*!u;5)!~gV)3Th(_SOz}KIz z^V{ziU5)z>1>k*PzXA3e!Eb_nf7lNI-wgY~kRO8kEAQfdM*;NPKz|JKxfA>d==Xd< z>*M!tJ3>AY_FIvE#-nQQ-%lKe`#;CP-?y;u4EYH3?7y$D)6KMgNB&pM{Vg34iCJ9wT6X{b*Q;`ety4# z`1|1g=aIO-c@g~e2fqS*Df|zDd=m0~8~P29ZzJ$2ux|?a?fAYRhVKWuW@`QX`Ju_s ze*!!U^YLS>H`k(n&5+M(^e+qborw7r#dx2D`EfS*6r7)5BEKwrzcd>2`)SxOK>z=W z`uzz1WqWBo{r4xgg5Qn)-15H8N56ml2I5VDeh%^v>Qs-n1o<_Cyr7Bd`|opJjQZUH zc{av-0`i@S{Dxut|AFytj``3MJOTaB!KdG-_451mtzmx?;(zU%;h z2j^!x#=A4>{a5&Z8u6PWzZU5K67>H>^lvHTT_InL`126I4E=c?@E8{+sB}O7Qo2=)o^lMsI^{C@`h&EVUh-wpnHBcHzD zU(+A>kKnB^{%0Xx9{6t955fGXd#R4Ue;yY>k-Ir!gw8ke3qfVN1(q)BK{v>-yZcpV~*zI>p^GuD?z-=F&_@a{2Yt? zuf%*h2Kh|Ie(!X|KLz?vLq8w-X_((vK>iHsy$|#UqJKk>e;f37F!YClXQAHfP|sn| zFNeGt@;eaxaOBep@*9xc9Ya`G{v`a( z0bhpoV&1FO>;C}8Zyc_7XO~tVpYM@R+CJ6qXZ?iveK6!NBK{3?)W6UF$C1xRsK;L+ zzYgnXC&XKe{zswz3jEy<`G6IgpP#>*k*M{2TDrIA7)?zlGpGqCRP#Yrg*ZrE!IF|Gwf%)Tb@tO;}OA{zK5; z>%n&*|5Gs^h9TZ&%#Q<+?=+kbQ;^RH#J>gnCDi8^NXe^{E}^!#c?CME^R#|J{%ujQ+F%zYqEkVSI9s?;l~`6Y@2vPbT!&L4G{s z`S2G*KA)i;x0P!B{CYkM>uF#3%UW1{ydscKK|Q8Cs`~zUsRHqzN4&W!RNvR{?=imz zBHmB%Hv{n&!QXM19|vQ7dl>o8hQA?*KNI?0F&42fZyfk$_+JcvuYqrc{)xDLE`$Et z;3eQ6fUg7Zi~ih={J%v$+rdA9zjE*|z_)^5hWLZPcOu?*u9VgEDabs{=H z{Qm59h(7}SWQ<3h3)J49FDOL)rh+$s{tU>&@ZSjfw<4dpIKOAXUlI5`@CD#a5w98e zIKQ$<9(P@+-1loMkxvff^N`;Q;H?oa3;7%Yc{%cLhk9*>d@aj9(6T zCyd`l^!F?94ES#e9s+L%eh%Vyg#1|WF5q3kyMy-t&jarb-V6EkgZy&vLEuBdhl7s- z--dcdAs-Ju5qvWEg~)#zvo< zz)Qi`fhWK>g8zj2Z-KndMD4HNU$_kUeGC18kne!}8pwA;J`nXRfPO>db0g&SMpj=B z8iA+7{y^|!asIc4{5s@!IOH9{{{)_ne42x|0zVPhl2X!;trezqasq2J|n1{xsw}0P_9N{{oEHqp!+5N`tHa}e)kjAtDD zIp{9}e*^j}z$YPoKI%6G@>k*i42eR~V>E6~3mz}KU{pMq}!-wpevsK-~(Ujcau z_!{tusMojfw;KH`gZ&TCuYa%37vH}&0pA~d7wk8{e@p21$NbpqGL7f=N6*6fz6t&= zhkY*e4@10x&~Fd8T^%@NOq2Ncu-&W+i4ZIxwJHx&K>TxpU-NA<;pT@A?iTLS| z9{_$f{0BGd`1t*Tme8Mq`PTsYz2I*K^qWBch`7e{{bbv>mHYMfBKV7dH-o>~i1!uh z-vaur!4E}$+d|$J@(~!1QQ&`sekbrhfpOw{8^+)p}dz1GXu`!R@r73wt>DA&qpvLmHYP8}uV%R?k`#IqA zz~_TU;D0~#XCd^jg#Iw(I}&^_^v6Jc9puBo$3g#Y@cyXB&9E1$h|$XQ97mLf#Yn zCCsOmm~VdoFGBna;P1lq)vs?+?Dr?5KmB0;5ad@tJ{bIZ@R8uRfnU~B^Yh<3ornG` zK|N+5p9Ro=9s0|_$0Pm##J?Bvm*9U2J-%`8@-9F?a>^i;>?8(0>VhJM2r5-!91i z2LE+N>HPKm{@|X~=kpTir$PT!9JLIn*;p}=(hsD6!8Xv??nG@!1(Tld=UCS6#QEF9}fAxsP_oO8wLIG zsNZn-k3#fj-V`d<~`w+hY^bdmmc;qt?d@}en@R{JZ<9r!~=Y#sA zKZ`N{?}Po@kk3ZE*67b&s9#&muR_Ql0&j$Rb%gyN5U)M>O!%9Fe5YZ2iXs0C?3*H= zh0vc1{iBdiGuR&s`C|Bc9sGFcFNgej#D59=W}GkC@V5&7O2J=)zvbZXf@fj8)mnQ|7`F)@b2)}9OLyd^1mAA&v5WL$hRE!UxK$pye;U@qc|U1 zL%$99x3F(VIpY5a9u(^O=KHH1@V7VQO~G?f&kIoRzTgMIz7_bT&>xNYJOJ`P!2UMq zKacU*jsD$+@w}%(>*4SBW#j&P2gExDyxuKp@1Li-K;8l4(+K+csAoFl{UBeA{#}jw z3PF!s?Y!XVc!e>`+)a=|Nf9) zjq#ca|Brz8guemsHyqtX*Q^e3V}OCWy+*Xw60s-Hh!pne;FRJs5D)veKB4SApTtBKOOSN!Hd8b zv%Zio1fP$1uRy*C@}=;<6#Dm|zi&hSchq+|_!7kHk9sYId^P;P1AnW*{{j6K@K*wU zIpTi^e+l>-2>mtiHyH9V_$!0{2Jn@r|0c+X!v9vtw}F?!-#?Mh=jh)?$iD>N3ID-p zJs*6(Gzs&g0p!Dwe-p^dkZ%Rze-FMD`R|0h9R5Zi{x8t~9{%cGq5bpwZMz_^d%wzk z|NRE`a}8nN4E-I2e40Xk75p_qycY1cKkUcA|9-RwKNP$L{B1!!$HM=3@IzqV4*pvs z|NAk2HZ9cp`t|v4_&*B%wjsYP$lD;F4^iK?$Y&S)odkc~z&pVHEXeD{v_F3TunG7S z^gn_8jzIpIi1!feC!t;)Vc!|{lc9eM^dH22GavhzJoGmL`4{NVx8ND5M>g`i5dJ$O zzi!a)5B-y%{}bZZdsfHCpBLE&JPi9Q;XeoQhd_Qh?5CpMH$Zw1rywR|~9XucY4#oVN2mj+?KMVP8M*MHUpM?Gb_ih3!yo_jPGIRqmgU-iH21;DyNV zc|0E*M}L=r&qIHIK|P*9e^c% zAO225f4ac`o3MW!{p$;VU15J22+LEanke&E9~UZcS;hyI(W$F0c!0@N>odtCelhsp!Rrpt{`vikiSYj=uFoU!d0{g2*P(xD@V^4__knyI=JQ1GX^1xydBA-m?FMxb8_)_qd;HBWRF+b*jmqGt0gnS|7<;cG^^cO?_aL6}eypO|pbcFt&z&FGGMA)AQ{jJbH z74lA~=j+IS3dSP`_A_vPJPQ4Dp}!pddqcho@>1}1;FrMuNyHxj`6;MZckpjfuWMjG z4E!wEZ^8WN3Hi;iPoO`4MgDPo9(xD8IX)kD!FYav{m4(azC@AF`N($>^4W&|ZAAXN zAb$<^ec=BR@GbE7XXN)S&Ke@F$?(3gbTs`n!?e z6v*pO(fas)sR?*fOO-Uji%gMBaP?|{4=?0<&5EzY+(SL*rWpXc`m?*M;IAm0!CY0S?u z)*t#CAU_!LO^|m&KF5M@h5lURvkmeP;_ZaIGyE?(TkBQF{=M+vHs!uQIvoBQKz<_p z#o@0B^qYZqfd3Ydw+3$u-WBn?f&UftIvVjhz+V>RnUJ3W|D7Sv20sD*x`Lku-VOHi zk$(>KbD-Y?`SpZ6AN(Bn>k0c_;C*5L0`iMMJ`lVY;thd(5&ZQ={9(`^2|flq9rJM< z`U9aq75*=WewTCf{Pg$pXFz`z_%-lf1o=St9}GSZ z`U}8^LVpcrw*tRXfqr#@#O<=1=_|)@IZm$=gyo1nR40h%3O`%$d}+H? zj@#t#B#seG9=+smkwwpwqo*9_%8@7S=ZM{9a$GK4FnpmL`O7gzLE_?iL9}DTATD~5_427tFfQ`M zFJdn`(Y+c5;eLV*MMwMvB8xYXHqnc&llC6^lD`E*gZB<1&C-I{HG2mM`8(cN?1t$%^#9s=LAZ0C$UK$$4fnWNDcn6 zSCE+4AP65Rxi6Qt1Ee3##qL1Sks~TcJc*ao55gx&eQ#|T#Nu*y>z@)!bOX_iC-pZ- zj27~@v_&G4PmVm{D1V1V7MAv?9D%fl6MF@L9MN|qukQtu$M(H~__n=*u>2h)|CS>x zN08({h`f{7$`MZ<4@g}K_71}GcQix(K0xYlw2ZH`MW#qiCrg{?L}h*iTP3GsCB7W- zV}ze4{5$dgt@zw5e}5_Yh;962k#&{YPnY^WEMqlI?4@>5sYzUpV4L*kJ2|A5K@x?> z%k~OlgCyqO5e?Zxgb$ye$hJwn}C$+;msEVe;1p7;!;JuLo$&qXd6O&%hT zCiNQ0xtBbzjuM_cr5~V$! zY(KYt5F0P^c7xPH>KT8BjA zD<$^8dO>1MS`a=|Y%Y*-5RA$ZPadKlgk*dMh>jeA=!TPgQiC8Ywoz$|3XjVXJR@t0 z^fj2$FbGMk_#x7sy@X)o=?+xNp+Ja=RPs>fViw9=cvj8<8Nb+2v6CZ`krpI| zOT5>lzY9cmoAfn#US!t~A~|9&M_i8RJ92&xliaTp-LoXN96?t(PfwO3xdz-W@;^$x z9pswOQSd0iqh*erE;)TG>%(_@%XzzZ5c*!)x69vWNdM&spD8FuI7jqkJ&q^WF`da=qj%e@B~1`~HFlNX~y1`GNBHTsbnuR{jnP zCJLlx!^Q4dX_vpFEu{S*(QPR{Zh?a^@U725L@|4bnBI_+<_>}mRwx}Fo;c>yB zp3K!JrCl&8M_i7ezR2Z>?UI=HHVneM1&^27oFKK5_MoHa%K04{ApCL3=Ss<|t=RrS zWQCH`{W6CHBlpQTA1?l{mR#yfpOSN3cp$prq`n-1^e-g!h+HQ*ZxKDgc=C{IO!O-8 zD;OkkQ2ijBCpvN+3bx7|lD~s@Wvt&4JX7ZQO0h|<14{+>lDMK5|3I)@uGMFW&Wd_L zc(d5ml^nj1IV(r_GtqxreCCMnZ$y8Kv?qQ2UG#g3{(ItI+M^ppmbB?6GO>@oFFrPj zz2p&nL*jide$Nr?EBlBZf}e`tr0-M3??%x%MeIZ`Dmf%_MgEnvC3VC{&|PFn-_jnH zT*LLm_d3ZtsZ(E2`Vd_vxqK-(NdCc_qIZYrjFtAk$hal1%aTVtnajB{CUOK4FD(8e zSIhV;6YA z@sOOS^`-rMS##z52xRXWozNf%70DPjlyQ)AG-yyK2)!a)_6Kp<7ep4wS|IChJbAv2 z5q}TJ-^1kZnzCfkO}Av)pYkP+F zVQCBBB-a8t0*MpPmR!Dlsq34U$;uG!oxBz!&9Y?e-Is+BXQYlgk^0GcNBd&Lejse9D&TmxO@hP zP7(RTg7=EP>|Nr=ir!Y?f{`0#?315YN<{Z3$z_-Lkt5nm7 zuv^xbi)9UweO@3(SlYwV7TzIt;v*^;md{8*k|*&T88h)0Px2pyi%vMHw^RBrNBDe+ zCHB#zf02iiI!S*b3z9n09uu9ow8zC?ysq3CtyfoSC;cjyzT8|_&O6~R)|K6!lD9pV!?K=y7mqzq5_irzh`$A5}Nn-Jg@)r zyk5_XNj~4tclw-}IdkUBnR6ECE8iGmyG>J?6^6A`F3~>koiy+tJEonnR3_*u}?uy zqfF#wn+Yc3J{|ii(gTiZq{lHiQt=}#%PjnXbv7V>2e98k7}BwmhAy9Ql)-!rI%PCp zfIWw>9EX*(Y*&zOI-o3O+#S#3PB_~RFb_}`Gi_j%$4njSWE|445XXU=qZ7zFCQr*V z=#;~PE-nNdk2wpb{I&v^a$3-Jb1B<-@SWHRXCsWoMqJ8jC4U`hI0$2ICR{%K)~abvzNn}^dDdc;!-dP`(o@5fMV<=*kNlEVQ<5&8E`(?<@v~Ys=ESQOPVXeHH0Hw z9qEd7gr9+Z66e@z!neWF|9tdC@B$cJpo^J=Ex@f1H^SRn(bwb7xo+j!W9J^pd;@wt zx^#!dWb9lYt?l>`$1KZ4o&tZf%)1gh>51j&=e!FEe&4>DU*-4}y85aUDz@SyvF|G8hP{UjoXA1FSMV(iYUU)k6Fd7?>rB(dXhv zTGkr;$X`%L_B-GyxB-y^1Ht`;h5T$1E72*t4&4DetmwFz=YUyYHpn9$^=O|DN(r-y zI9C$)3c{ib>d7w4Q$$!`&w$Ou0d^p0e`_|ntWQ~<2Dl10>Rv~?*?@(*v)_&%^(Uwo zb0Ls@O12^GXO`_K+ZA2NwnewfcE#T+>w`Fg@|meGJFrSn*OseEA2@)Se67HKFJW!y zl)*03ybIih{Z8B|gBe(XWhML&eiz_Qx$O_a*md-AaUm!rtc*)MJ89Xd3kP*#fkhi` zvaPFO^0ZN3VkveRk8~`u?r<~9I=K&!mg6c|<_F9*IKhO~7Yr=XF<|o`=$L$U9CfI}hPxv7I zKf|5G+cq!pnG{1CHDN7Vfe?d_@{km-%xH zLYC!w+&C^P`3YGk^dCEAGJgP*mRTMv$1Y_0u=!oWzJm^|(oS6SZ-DsLUto?=NKj{1 z(l<+{Tvo~}D616+dCam-saresAV^D)u34r@8ST`8;25m9*(smdhcMKYp#R!|S)K>D z*`>Q5Oj}rgAnb>Pku2Lw+V zfxi_y5LeQtF2R2__N(v*wySZ+%}%)f8h57={*Uq&~h%}-JOnoh!dMAoBaGNjJi^%a z!4?^w@($#KV`)2XoUab* z*i8Kk>fa8mSD@3M96G`R^IhakJ6UKGyKEQENyl)?c!2mB_-&)?oPXAh*oWXx93jt3 zflmK1Gk?{2q2p%5%`E!^^Ew@EWm`p>oapz}r+p0Nt0JBp$0|ufj)SzTHHz}kA03R>*2Cm+ zJ!Om|{08)gNQ?QiVC*$B{)^{GAJ~CdOM3w^9Q;mPp!+8{hW%n6)@4}7xCH)Ldq=b`xV?nh(DJ2?Zi1sdAUB= z-m40r$ne@MepCx_zhM77y%kh)Cwn|-&>F8$a+=_1JJTl9+qyDY9 z*(tN_7Se+4T*Gyx_|xAkhsduQonx^~A`f6O;Ff?6n|~*ckv!3LunoJ-#4(|pVetok zi7>E8V0R=D7FdBDyP34?Bk`k83E<#7vUASrI3@=$Q!XLLZN?GZPuS%+u%Gw`(2tQH z5MB7uKP-KylOfbCZDAcr9a#y(*d^q+1gufmITy^hTV%f(PaYMxr^2zg(GRV#mAVz>w)PTRCOWI-2!tscU;TGz5 z8BBk*GOsezzEQX-~zT28I(4H+wJK#scD*`@u0_F#fPP5++S^f5OQ;b?5^@ zDDE;H>~_M~Ot|&Nu16z8!I39n>Zl|2K;n)*lprc$m!s}!{q+=(nP3B8@ zT>=cu9KY@&Kb|AfH-L2m&jA8ir@nx-aK^) zkT(9-P~wI73-fb?`zLAc@DrAQ`LQ1CCv0}~Lfi-|t|9&>@SX4)nHJ$+B#ryY;{jjR zk^O~*{_8Ojk1rIgtco`*M8a{KEPn-yCWTNSTX z`Pr1cQ>D9J<=1e~osM1kI}|T@(d};jr<*N`t%_}m?TQ_W#nY->ip`2Gimi%miv3@5 zhc_r*q}Zz1uEIGKi)U2&ip`2Gimi%mitUPTQ|;nVJnB<-It_}SRxBKD_o<54EB-*S z?lZUl62)5;|Do9Yx!ZrW;!ed8U%1^ZiZ>}fpg8SIx4%`fc-C#-r0PMZ>}JIl#a6|O zeszcMR6O;N+iq8!_M6-8uiD$D;@K5D6pMeUbUgVgyZJ4*yII*Simi%mitUOW9{=au z@m}^E-`j4xU9ot_ZMUg#cEt|G;(52fPO)9}XS1?f6fcT#pO3adZeBfFouA6z=83P^ zp;&Blr=Rwwn;R5wQtVJ1vB&M7r+CRu75)`B+Z2a?<+fW?x>m*ORrseB+myRqu|sjE zN@umoM{IYe=TPx<$}V1YyWh6Y&1U6pQ9N~*+r2@tJ#~WfxD;t~J0s>3R8Ujj-8Y}DLONyEkYReic>I0S;;|Ub7#5gW3Ikus4 zO2J%X^UUJ8jWbHJmd`b&wI$_G&rK|vYMfu(UTI2NFn6JG{`9m7uB5t^cXmTrU0zvP zR#{nILThP-E8}=$94Q-&>4rq3$(Wp&o|qPwR9uu^W-Kcsw-* zGg}vw8L}G7OzD;Lisz)wZ(LZquzdOK%BJa=jk)uavroyhxV}B1qCT#9Nn?F;b4{7d zlfO7}OfjUJOors7l*E*{^3sx|vZCVDBtwZ&=4dQ$jh&mBTvKfr;Rr$24!nUfyqNz*MTeI?)7@B8QHZNb)v?RBo zct-WonX_}3B~48%tv@C6@}lO-B?%?48ubV$Jy(*`nFh90_Nrz}ic)M{#*Qdu`^US>i5 zsma#Il{GfjH#Q}>NtQO*UE0Fs*)!+Om^-O(%S2mw$ElxsL=bPP7zdSK^(!#9eOY0j`)3Qo( zt8*t$TV7Yata3_aY-8i>%vsfy>67xOoLZ}ubYMlN$ylLjjgHk z3R;t@mbN6%n%7uhOlnUnj5Xx9Ei%nZZmTHI&222NuUR-Zv3=$#1?@S|6g8DpR#r3? zH7x1Yq0qlZNG~gs2b5Y^nJ{}!O-}L5_N1BfO$&^%4UMxB zDwY{1rzFkFYFkj8Fta$fZl0mAJo7KIuBb0*sg$`Us&T`VWJofm8PW`iiHUJ(C8ddp z>8A9OWMiVtx4>AuJh^gOb7NE1+aj@y(e^vtCBrh|h_YMCLeIN6nHV&d|7t+@;H6Ut5VGwa)@7BuIk zwJ)92nq8N@pkQXK$y8fEqrNh;x^>y914~UyNl{aATv=OLqdc=*gI0Nq>+CYAGoh}o zA!l~ulD5LamRW7(Eyg)j(<}3*O`emQ6q`6@*5p|!>6uk2(^KoJ3r?xa+M?#>y5s2< z6}!iNV|<#ds}f_ylDyKk?5v{3$*G3&<~l=LY-U1sS!`^2dwW_<)zlngu`#hM*U)t8 zRqS}el}%*9DJCn*=(;#AZ)t0qyJSjMds}NocJ0jalv)VcznloaDJ>t%>bbQ(6m}vMNo*4W+4x zX{OU0PDM*|dqPvQ>oTO8Gih4;!g;0B+S8Zj%~?33e0rgwF}Gxap{gW5tD$vSUQ+IY z!laxq~xUZxMD-GF~yi%oSIhVs<)-4 zvP45_WzN*R()l?Jh9&i_)2o_|QQh>{^wcMo&RH-$aa!`CQ!nI=mCNcATIwpB z%3M>GqOHX~}7(*rfE?CCM|FrX(#m zHN~c)TBZRBHLeL&qPl|2D=&&oFr*~SFRf3Sx2&dq$(;N-?UR;N%qwe5U&h5DXW8^Q z(-IcVSeSY0z}!^Sw4^A`)v~2!MWr?MCDpQG7#(H%H7#A1TAnp)-ja%{lA_k?*@oO% zC9^YY8q+4F$CfNe&TdPXJt@^#R$h3Tp{S{{v8AD@td7D~G`2L!3rTvsYg8?5Da)Ue zYn*IanqHrsI3;!Yvf6n$nMDhl=hx;}w$CkVNhzCAB;)HPtmJ z%&94Do7R#rBPFpuuc2+(oZ6`sjM*jC4aS1yT-v7R&R)7Gb*d?;w!$+g)YlZ%Rm9gf zRwT40l(lv{txSoWR4K+Jax%uHl3965syxM9M^)9FTU(T3YA#+nqp~Ri0oTiSddp=EVG=?EQi9?cAlr^caaA~e-Zgp)<%AA>V znhM*NH`i6w)#WUk+Fq10X?}UZl!XQ9)m7OGJ+09_FRzXPpHhUnb|lyEpzg8W6Hdlg^5)~o@+?Y)LNTmYKe*NvQ0{?tID6! zwzPR_R{pf)s+o1hf@zJ(lMK_cP5FkUCDn$c#+1^e>3Ny0o_Txs)LK0gxZ{n-I3=(4 zNnHQplFLfc)63Hmi^|JgeVx0e;^_%l36rK2E-+0?E15Q@)HrK;HZz?1<@4s}7|XNf zmsBQATRNqLyj-_m0dX$kMyYHr0v@7{-<~wly>}H)(3FuWc-I!*0y_UurhR({8W_eMplW|*<4e6ZgrsR~S>dMjy235An zIkOjM&&r%MBRgw?v76iEDKj#2=6Q}(hMJt0cdFZ>MW?vU$m-#gGdpwcV;cB6#!d&W7)FGrpo%d38u2*vc$Bc zw9=H+RFk1RCCOM~EH{;xn~GA)%M3-S#U(}M=}9J2x46xfwPh0+NG7 z<1&LQe8a8oU!eAIUjOr4?*18WcMp5qR}6Ni*iClO6FUrqxx!)41 z{MGkcWSOP$u&&%4Zx)|9m&U`EYu)b8xSfTEmGys_Y|{%}c`sBcc=*3f&{OXJHvE~w z`DrwIJ^vS6aKXq6hMbo$CSm{f=S5uHL?XyMoXSXDf-j)EgvUOjrg{8`istbbv=|I^ zEj2ag>Eq%=P(QtlM#z#J#Krrc|NRqq#L&c~@or9caZzo9hh+qa>RL%p2gck6k=g zvTi_<%ij5*^Fe91_P?vY3;amug9 zV^+B8SOi53OU%d>et~{{`~#v~KAwd?)je@@wS;P)6YV6nu00UxisAW1ayNTyCYK+d zsXU3@skz%&dU^62s>1bG{8#Q)70z~*`-qy$TAPa+%Zh}5Z{29axM|Yc=?oX)Bi#Yd zl)fjN0VUlXl-l7lV#=)VSf>*Ru!3Ls)gV}-a^rSx#9Mo4(lJ<4x;If2J6vNU4Kly3IO8Ic;17kL@d zWtM0}TGa`Ed*nfU{)}{b{0Bu2(ul!>VvsJ=cLjZOYs8@lw|y(_+kq!Po0o>qU7oOS z4bzC%fX9D*f=2uTJa*x&5wpQ@JNX8H<96~H502Xn8j+vW&F-TSBZ0@?L0-Rg%g?}> zkqbQjnTA_P;cmmdNSEn|>(GdVjs&DMTVpsn;0bT#Snld}JbAq|Vj1xGI|ggSAHZWb z`=9Tx5f}Migp|fyrxAAmkH0lQBklzryM@}U0Umqjml|;xc5pLf94E!i!*ymC3 zM*Ms8r$}iuq2oAv%%SHarCI;EM*IV~Z8+Gjdr%|RKe!9&GUT1pE&toK&uDdGTg*24 zj5L2`cLj0@*L4Vu^ObSucz!1WxZJ{z_C4+=!!$hU-@|@j`iU{cl?K06qPhT^3Lyl+}^#YtmU!vpOTuEo;hi9R`wL>C*v79`Wz20 z?FTxC_OLhH*wf!SU)RHb>u>#f+WQUaVb9w;@VH%GgXAnx)~7Twzr1a7ymTAM4KMYy zhllsf@4%Nm^D`9oEU($pv%WeDdi6-(9B`t3T=|XcY2UiKr(I|2nSbXOJKo5UIZA1^dz5Rr}dwpe6H}d*a1mtx~`bp>%Ag(-eCg6tj3jsO> z$d!-n<(}oYAMI(kh4nmMF~4W|%?o?l*I(7suG<;e<9N(#dfM}Rde)DlPfvSZ|DN`( z1AE%T2luqwhV-7I7$ z9=E-@sA8O4(3i_pV@(EwX`JkFC(QR=KX8@yF(w%K9U|j)WKU!3bEpqjvOdR<4O_Nv zIobbn?S8JJ*0BefksluGbj{1Vr(o@PgDYNV$A`#IIzClbziuI-Qn><+kD7*@88zE; zH98)^vH3TyIQA_+k@JBqhfm30gx?#^FE({_k+Nm;3Uzfl9-Z&{)^J6u8_w_0^%~ zWlpZoTYuDuN97=-jL~NSv%mtMYmnFbtV8xWI^bxxqYToBWFTGA;S8mF;&)bQ#7{u_ zAAk=j-Q#Z{#S$R>>tTs*sq=f78j+;tEh%u0(mnCT=9JCMGd9me=4~!OUa)yF(qjw` zji?3EWgRSW!WYMYyZ~mt0VT-tfE7r`Ca0QHxzY$>-UnnH1DvjOmmk8+d@LVG|Ap{k zrF;A>)JLPLlU8`eN%dpKp0C^%!HZAwx6*rG05bhIV2SSK|FRz2wHgt{O`rzedtFa| z>wu5x(~be(ArA~VEcJm-HD_~`vA0I_0y51$aHi5d<==|^d*yZjK75kDjv7k`GJXau z(Y<{3K#lksNVgy0-<0l2U;a+zOF;VXhTl{AaewB&S!y1i2Nx*a<8SrXhBs#CZsBOR4txdKIq)OoCj&q2e*Aqk;(Q?EUkDc|-4p*a>bK!h`b{Q34+I~5%pKO_ zFBsj1s{4dEI6>(ie;f7}mD|hk-jn>dGDm+$&C@@Ck1E|0--`WiQM$+9N_*^9ZPE#UcvAaVsn5Gr zo!$#eoG2Y>GNv6?_Z@P4lj!bm;~w}Ibsy}6CA#~|a>(&@>t6T$f$cvh?h~Zn04Xq@ z^_0ui`kC96p8{2idzF=Q^iOvHkH2J@erKC|zU8>&#JtNBM*3U6bI*s@?>{jwmi}_6 z=2v({FgSVMh|}@)lT7sP^HAw0jc0vD`pcV(B2W&x8<~IjEAIJb=ldt-oifbG)z5~R ztM+BM!ym|KYgw!Lu=;0Zce~2?x*+#_!xDC49^&?OAAjC+ZuhM_diq;GbYK4*ifzBS z?Vh-jWqZjyDvdm*V*LHk*wj2**557U5xK1I)_dpKG%JTY}nA~TH{+RGIWj@ zvu?hwuSo1l;+Gd^cFjg+I5V6w-G7OJx{G3>b>no=LL2WB?$+3@ zqzk2`tQwt{POJ0Q`RIIgemZ|$040~@c6A3=JvLOk@5dTeDZbgw-TRB|Pm2|bV0nL| z2Xd)XP9x3Wd|&|=1G!%JSMdqr%73diTFB$G^mDUeh?}>F2wiPVq%Mk@j?ty-1_`ft zZ(1cFKA2XCikH7mdyR6fCZE)5XHMcfjhGH(+4A55rC$UuR{EJEKf1+9;ft)aDmd#8sAqVQn(7qa+=|MrCZ<%rJpT+19uSX zfQ)}5yiw^L@KZ`ZTYOu9M*I`V_|L(6l>RpCRQlQC3+5BKK*pa9U#;|Y@V!buTYNLu z$BWc8(gIg1y$-Hd`q|>!7&d^`M$(vQGSrJprE z^V=KL9QStkE~R(Ck0||Y@x=!kaqUO${O^SCRr-DKBT7G8d@Jjb9YB_U3+!3r--`aI zaz9)A0Isq+{;uTD<{C}qcpAu)snLv}aujimqH>r!tqE1Gp8L2n@o6LDI7E5GD0V+B z;xeP`p652odJ6SZF1;0pDVFmGX}aC|xgAa;

    -8uzNi${1G>IDqbIPVjb)>QMpzs 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 jPk5hjdyj1-Rc!m1bO?s7XInR>-OLh=B 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 z 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 URxF904bdk9h=4IW>nR3 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⪙m zy1T~eH{=Xhnyt26FwDAnQ8qxB`g{rR< zcXynzea$)=r>jC!PZP~oc996@l!y*(#fq2JR7lLc;+oRb-@%1nX?aOSs;qo*LRHay(*y|eZ&o^ETe}PsItIP1!N3^$L<)AfZFn6%@|be!1}(+9#+8aJQ$|A+ut-I3jH!3$_RH9pxa4 zg=>xk`|13Gf_#SXMQp0^X$M0!onU`8)xot*g)*u+^lR9=4$J;?_Aao2JjCq8kMZz> z@w3ix2W%f-Ao-fIrC-g zR|vRsUPWb1-f0y}OBYs^uE_hx(j`lZtMV3CCVQFn?NnUkTN#0-7 z>F!v&!qVcJ65)}NOnz&Jyfb21D~gv$*kS^^D;8I?i0HnuQaO}$f=JcaA^wao?^yGR zW#whHVA&BwXkEIbtXx_SQ<()&0cBbB)_ihMSA`c3z-5O)wDC1`jq9oprXU8BGN}oc zwI~(FF;_{z{JCsj6D(_$pdq2+@g|C^mKNlrOW9!;#`v@-H7dfn0=)>!MArZqm0M9+ zTAnJ)3=^*MO|W0Y@YMs>5zfQ*0S2Q-kll>1;HaV^5u-qulF<#%QakO0%n0Wb;B`2& zLz*5?5%KWLB+9L0>2T$0$HqtWWLUUznT?Eo>9nD;5#4qyYgK7gMWUpla-|8Dj5>OI zpJZA3ppi3rqn{LR^pnj-e~4uvKC|FkgTTa z)r2uSIDJj9x7O*s|0F65g0|4KA$I8u4?Dfsu)-!`LO=H3C_;P%YSU36TVRBgVwgA} z_@NHk;^f1EXiL+ea}v|s?naSN-_P>O0kcyHjVKD-h=bX zPH3l&*dNUZ>|!4cEd(OEB!g%w0&|UmIiO&!Q7{oEYFNu>s#2e;QfI1COrJ~3kv3{V z%h1`OWfzKe=t5MRqe8!Ejc+n-P?H%TOrfSw%mRmZ^_|8zhJRi}kn~O?6ui&?oy2q= zjP{20_)S�#*3UurOT^Nl~N+7Qr`X_IOmlnC3O6fA`4wb#%NK!Ql2rp}`wfOWVVi zm~KS3D7%MN#G?qFTJLcfOlJK-1e1Z0KoCfVe(o`SO`Vbb0**TQbVs8Q!~@c_OLt(* z^Z**g+1dUsEgoD;4oor&5END-&4?2(Cq`u+{y$OPiej>oPCnGT&PhsPEJJ$$@aYZ% z@K}lrP+3}4WS|h{%0UF0?!UqaK6OV=gXpW*Jtk%CN0cbkeR{?0! z4D);UQ1<1`CTt#QPW0saV$sJVxGh(tx`gF&Pm8Xe=_6ONE#2ZT*_*rRi3Kg4X-X$ z;R2dR1-H>lqrJ_H=WQXq%-A+FnSKQ2>`6@dDK2zo(vL7}1ta6y%%qcHk`j%gWGv>) zq<@r-d|#80T)FJ%5MtWsSFhb?nRX?@CPmtKTV_a`wd_aT!(cTMV?Qd`+N46-$VH6p z6HP=LJvF)K7?6m&4ma@JFQntoD`KD$I4fe`?VHUBCm$2zJNau{Ne(+I?4bSz}cflS><^OXikgc&=;^_V7H%J5N|yJng3@EX_0nX z6YSjcRZ+*L?~0KeLrL7F!gK=*JJ<&+m4|gmQzQj$4kobDlRXmw&Ez_ZO|%OWDbL91 zhiUfdZ~GZm#eM<(ZH)fY!+jVpO;&j1#>7Nv6?|wH!Rb2&rtBZxR)E4pV=3cl2@Eow zX-uaN(oGZ41fnrMf{=MkldwtC6udd_W1l9&UFW~6E3q}f?zq4V@I!eL(<1hGT~SV~ z<<0ah0E5*FtcVMlX2w{a0L+ael@|jQ=p1j>{AdyOiR>HKE)-9tr&Q120?@P8PK9gYrR_;@EIMkDIp z-^%_?A`<`s&?>kKqse#|BGwNsHG26f{%fH-k7+qfx`7dtp3Q!Gwg*XuI~%NL1x$=- zB0RuSBi?I>^RPWs?$I}6v)HHq<=Nj=e6#lwgT4ELMGvbF&?(H*kbtBlii|z%18HbT z&;WxGWQg2Eu)4~N>nbgU^NM8A>_TjEFxeU}u)3RjnQ8PD-6)777!JK-#hhvM5^Pw6 z4mL$%@TTI>P$NP=JS}*~eA=w$7f2`q{loeVHZWpIf;T>})yidBG>GF&l<5(Ha7zUK z0_17N!&V#nw78QI+d9Ei3hp3gtyJtWJ!hqcb>+@TEXKYIL6Hxu{35U-MiA^4CV56G z#Ok)eI0D@Q@>-%%gqF?jadHv80;ri={*}ST?Xq=sE#!?@bofJHF<$Q+rb7GU zNy|Uu?FtOY!IK|uh$Bb@(`|Me(htGeze{%@N~jzk`*c8angHyIv0*OI6)gh(9Hy>D z6oIGFUYKk-4s|tlIyUu2Qf&V-LW{X1R#)~+DjN*A+MKIQpC86+6X$#Mcta-wO4&@C zL(fpnK{Rg5a*G$ln#J(+WKDd@zrrW04IPJkET z4~0N;t?bXk61R`o@0G|+#@!VyNK&I$BCm(Au2#m2U?HcAyK9O!MGNPn#Cowf&yq6= zScZKp-thn}K5cFE=pGQ+Mr!itbZ=w6ggFmbQS)!~Bu%Do$WB!#eMen9-WI$~X>%r1 zr3YIrL&tF0-mT5A18pp8c` zRaP;kI4MNBq#cL_NL`HQ-gy*?;0%DU*ocV&Gj=>W zwN)SvWwG8JmH(*0D=sW7l;6=PE%S(Cg&7%35i2q?qtv6rhGoq6=*VFiKlSKu!VLO} zN8gJT7Sdc#;v=ZeU>k%Pp8CU z2Y(~Kk4gidaGpCmMJJmewB7gWSs((7`~P|tXf7rpT1cmio&*dOgUb9DzsLFu$^qH< zj(_oo{NP{w#vi^1e@Kt@hwmfvkvH;hWSL=UnSg)xXm(0<0qPu|VSk=k3?PGa@EiXg z=uee}>o6fwf0rx~YV?wYh43DSw(y5?!N2$&{3*C)E%jsla1X{O`tkL_+ z!7CYzQm0DA9n34OEvq@LqT=*%Z3ux4NdQFKc#NfV0BjMUV`m7|2)5EMS0@Vc7pi!6 zHuMe47D`FmvJ}9Ck+Iuq``GJ600-O0Nz-y#cHvRLY)(*43Wu8ca#X^qPfe=65;M;!23;;+Th4h((In&o5#ePu!g@oo=oWy|YZ8 zW>0g7_D5oljdlX_&AnlPLKG;5v;Du01)ukYpTDo&KcIWN({e}IVPVdbf0;QClu}kn z#nQ^+s#1;LYQZT~*8gV7Px|X=(P$LgZjta6^&irbQ7GRess1xR^^ZdQ8~g?1ocUu7 z{7@AZ;FYNuSt9q(q2`*>>YB3h#p9t}XsyOmzNDfYfk($vWt@u4aT-;b#W&uHC?BlU zac~U1#>Z2|bWzuZ!ul)KAE#|iRq3K7r6uE=tD4fPuhg|*XiJML$2GR`TQ7{y7{TCv z{91caqmBz16?u!sHF&Kx8&4Zw!H#XbmU91B+Ls0NHEtu#pkhr`amlz=ZDsNQL*Bo@ zS5;m6;`rKYtUa<4P(p%lt=OtZS`~C9d+mhP9!^isJ?%Mdf3(M*d)f``>|_T>4N1(4 z1W1BzUVtowp+ei#c0~XIyovP zMUO_)fbL9FdlRk-1mAu!yJf)w{Dl6h)D1u7YX(S>VJxVxtHw|wX&T1t z`o?+6u|X%2jkBv9$0_qm)JRdwFdFC2YiX`-Lw0nigJo5{a>vZgW~Dl#bRNtuq5vi9 zo98Nr$%rw;&8NPuN{U9|qcX2KRf&4GVfZ9D(@)mbh;vPTZm9ypsF|Ho)eFK#3(!CV z>J=D9Lv72P8u4DS!xA=JD3u2Qpg>>0s60)bsuHT^lo(?eSa$(rtYNgKYFh-!F&cDE zfiXF*rHAMOhu~rC`WC_C5WhrHL?wV8qC1$JooZ@!q?^MsmG925%%)~R>JZJ+mV|WZ zmQ*;@ElDLqx1_>@x+RUrV9Jv2I~gVQZfd;1go2Rt839yNpohC9soVqIl2pESOM**` z-x`nuyc`64Po*%&|32JP2~a{$r7)#ohFLW-_Jz5gN`=EcmBvX1+5$~w0E-l{{k*zr znZBUM5KpCX*p23RD*0(Op>;xIHEtwNrE!{Bqi|Jjn%mr1Q$0^j9lZBmTU{+(Fpa>C zY4`)}zOV+a#ko$=6EMO2N97O0Z#CJ*g|n*IF!W@=9IRIk(T5-CCv|w}Cv}AOlR9#k z>l56fQjL|VIYPIihB$H;8-{2a!18Frm^VjUziq>q*U(r$8@Z4Nsb&!{$6&Y=2@dt= z7)oGtYEv?Gk2MTv2FN|mFsj>xM8_FM9ptI7jY{}}=?f^+T-_MRpoUbPdMh8j4kXV} zsyl#*o;2zQ^^eba!GEHUkB}Qwt!W571;-iT^ZpY;G9PXjN_hn6!wn;)>=!2(#{5)G z^PE6HMU{{J?3OyAjmTnI_EGJNIWA}845PZP6}di-`9GVh=QV&q{bahnDyhU5IHpdy z`s3S|z_yJwb#nxv6aA5?3D$Uu)7)DK9y1EU^Z?Z1cT+=Ew z{=pZy($4XQQCr>ItmNSFaIu?L-&&ojtxf9rQeD@oL5?5R#7TzH)Kb}0)mT$0u#X0W zD)HF|az`7+?An?+bDJB7W>yBytVbVcEjq<88ta52$0@tflplQwGFf>k{5FDs2mRI; z=-zw}XLz@_I&9-WGG%>%{xB@B()t43Gc2#l`T}hjmY24^Kz9$zqX=^E8lGz+_s-$D zgxouZ=UT|UeRysZxwj3^<+Oxhk*-i4irg~1h>hHvhv(*}nF1QXmi7g@ad?q2s5me@ zcPw&m7?x}ASFRu1eY53{k2Va`=%fP;JqJA&OQ#xZ>QApqHBX*b-8iRyTI(67PdWX} z(I|hT-)8?kjR&K&YaF1-j@IZf${n$pg%cnV zhI_C3Ybx~f_689l6pCmoN56#6x?chswOWV5Upci}!%-qsI$6uq zWTK-@KGfPxAz|g*oIY1 z1&E5&CoXJBgnJZYw`=7wU0RH2IK@n_)%L2KU*o}3P9pD>T1NuHqNGj#n5JhB@vLHc zOnuc^fwAx5xX}Ym`a_rGAD{xeT5M8THF9id%Vf zPcd9?=>2>|N{J(+*Q(adKH>ye=17j(VAkWOXp>*JbJwdj!uI9CG#9B zk6tYT&R5It=j8Wg^Ae@(y9?78g!U0w^juL7-QMn4#q?g2LlZqKkE)Pb2T!p_I}>!2 zM^ij{%J3K-rGM#6&_s`taIDFrXVEUuxMp6$%A@De64O=E?6XMF@8%_JJSlJG(ai-O z{iO-8k43U7VHMN5h)2hy@h+y{2-^6tQ#m%-6;>Yn8c2=6?;FL>?RYmpU=T?*y1!(3t@5Fr6o^LU85+ zdxHdd2u<#(j$P4(TGx;F*zHCKHq`-*KBPIxC2^~mHrFLkr5AY>x(w5r@#?K_>G(#e zw`M%}X;WQ7U9H=~bfU*J6ExW>=S@EDPlNaXx}^XV{Tl;7yIL}6_xD}EO;tfZifK)Y zgEtoQn6?$bzr`x1Yg^D73gOkmVp`n-GQq`mfI1xAh*Lm1wuh+| zNZvD=q5CI{+}%<`Mvm!$7Kb{JdtX4$d!+Ao>Av66;>a`Ds+%|F^3O*YFvcL>s0UH< zsu-^F!s%w|ZgzPlEkcLj>kJZoJ;6h}gIH`G3HrJSDyENvjxXs-Fx?Ajc4t?jj9v4G zWbTC{6(r3T&f;~?F5xT;`TZCJnLoD)c^^cYlUzCr*oPljO5(Pu2;p0#@O|UG_$;fK zZb!XbbEAY)!$Rg+q+XCJrYj=@46kc- zGov39VHSPZDXyrGLuja58tBbrUp9OX@1JuY9D=!u)?)zh`CM@fE@oQVnc*ZZTOjZz zZ=pp}9(=TgRXbSmu%9r?cGBhuygKLiG9vMdV;-jc0+FBZDLl3#I(NVz0~lkp_xM=2 zb_&66Xv$zCkVp591^=#ZlG=}s_19^sk}B2BVyv=O9&Hr&<#NogRuKU)jsfzE`8{B2 zdUmW=P9Mxo#4Ve?0FgY~v22JgY5#|gWiy?O{Di|XT7HDkhyGBL;S~V$Xg-ix*XmUI zDYVqz>ToI2+wyzp*|F)*(ZKyRnH4i|CD~;=PUmdK(wUFxYG*miHeI8<%=?h&Qgkh{JG6Z+LLz9{~6Gvvf8V*+7zakCO;;Jy7E zBj>`C^xpTX{?a1=~J9dosNz7{Wn356_!HSbbJ?=SCUcyM_(#CK=v) zWq5JzN^~r>%HFE$a^mH5WQbgEU4p)c zsgW)6@JPa^*DSH}XlW4;y96tO-$4Z^I=i-eUUB!O`@qk<*=B z4wm#DE030ZRzS}LfUXcgF8~m@^E@@t|28Hg0ifHUTs&a(h(LDf#;!r8M+^^Jxf{C@ z_=z@tHb#~;`fIbp;ED5P;#tM?zR1;8O7i^~GmoCfY!Q{=D&d(IkY>c8&DnO`Qv(^W z1p#-lq_|A$x-#?xl$?J9cb;F=<13DPg*(8lqQz*Q&CPd3>DW8ZS2}i%q;$MuAYyPH z(~=^X8kHurUx1&dSdT;Cx%mqC{s8y~BLRN{!08{bLO=wgPv|oA4Y|pSw?ACAlkCz% z=p$|gQ>$ZN&s2v?OGkN_>qU5CfWC+sPkBQ3-{V#*2O>m?i#;MPx4Bq%@!El|%Dz@o2 z&As^e@))^97pONcH1$@nYscdI;*e|pU0MwP4V*QrcUyV%b5RXLD+PAcupd0qnV_Qs zBL(aS?_;mdbW5>n-YTZ`wT?MWUBa5SRa;{oGbdn^W(LntgkN^xZcx8k67D!`KYcLQ z`CBR^(@TeYv~#ZLOOHo{;r`SSY(yV`io$VRTtZB5EUt{(N-=ij)`#p}5iK|m>R+MK zL$}sD&_n5(LQ#dDug6@zs?eKZ71N9LPDy162zgZ@9xW@*Ese>IHSGC%=lb%J6(!iT zBSyQ+W?EgGqUK)Hj~2Q8IZcq|c*`4#HPd4qAn#44S8C6}v4`~S zNYnlL`>m3GP^WK}^us!RBMg3ML9C3rUzTl%B>u&?_4 zSVeY|X>$|S%RHtl$MysRHq;s>MlTe79D6Pr7z^GrnI4tojYvY(woH1kDZ#kOCU+GH zvJ`-q94d0!GU@$ufZq9sdZ_*`#s*s5_yL9E+Oaagw4@U+klM67ACCarbl-eQ;|l8A z&H8>)!%KSLr^>)%wxGE`AJH?q*=W+$q9G@-hFEzt))U*1Nf(Nl4LDZ#%HL~8KrR0) z`^9jwo4AgudYBjRG%p#r za3B^>c%W<=hQa}LNS{?(>TF?yKO&Y%>LmorVtUquwH}v6uaP^nu+qaylCms%T7T=6 zZ)NP3&nQK$r%aeW@E+P)e8FWI_vsRB&4c0J{;C>&i=;8RJ_6Wo86G(F-|e0DCtc`E z6AH3apNSI|52kvDW1O<0bTXdfAgb?OiZ|(|asv5W&PnRb2$*TYPWI&RGJsJNGu+^WsgY%H}W8o zZXSV$KKs3$z|CWFWvZzP zogk?q!5vgH*NKXh?~kC1QV1+1m>_|p)8_gVezKBoJA7GE09p2rJ=lEOCu6BxIv3NvtB&n1$PI zgrE#;(>$EzP*<-CqGD65hw0l1*oj>m@f^TFVmu%l`YL$XWl`S|JPhChlrXaPa>UcX zCyboE5=Zre)ZsWxEe;+cvnypOrEfblWdK1-#;2(zL0!F6=+Qig9B|c5srgtAtEqYU|Cl>i2x)h0DvR?(FU*^+jKKDf2KzbFCHt? z|Bo}Rg&7Xx33L5>i!y}x7IFDUw z*i3Q`Ffv|rjBr5(B5BYU1&27}{08<&Y5J~3nG(yS`$;uCA6^640lTW<0crS7zhOKO zw+MIa5nyfG%(BwujAxn4*exydD}fr%fde+v0t^|#KP&`mQ9JgWZBDS0Hg+nKi#p#Y z7g~*cb6QR=RKLgM_M|^ytOz}gcXrq{vE?l%tfPmFu#W!kP@g8xpFF?4tSp(TYpOB+ zw?G`tD)_&qkWK7As6v*jj0MV4@Gn-d+&|>2w9>ssP@+cCyDCKI`fNAEq1-7AEx09) zd!qQCj_v?g#No{Vv(NtL%2Mj+Tjl@%OM^2!`bC%0LjTx`*%Qw{&<*o*XrVuDs;?Uj zdpG_aZ)X0zoht*?d^GfcraY?6|Nq%L#Z8|xVsj7&0QE=Hecz}s$|_a$b*-bR(o$Db zRiFO5xUs6O!)TBj<#PkLVK}+6rg>CtjMD8lVC2uS$Mi`J_un&OqalMbD2=8DC^4Gy zA(J+bnuBud;#$RMuRZGenD43DQHcm$H`mE`#I0_+8f=cuYK{*yA}{%OGAPFf+K;?} z!g$#sCHHH>UpciJ~YRJP2Xt*)8m1$%niFq*1Tb#*E`Vi*ne^>R%pAD8pg^~rpddrnKWx@VXl-c>A+ z8#C1@9lHuW783w&`YGzsO7Zrmmn`3a-vsNxF!O&2buC9}7I~a=8oB&i9sJdFe zC;^K@Xj~nOYcFtqN5}JW?i(GF>;8SHVYD>QmIpA#8AemRy4QtEfcTxNYoFbsE*ar< z3l-!8@W$$^UATg$%^Zc{<*%Y#+lbt=JX>E_0#gJxK`o5GzCd*-F4)bfkq#ePX+nt$Kw2*a4|TWgM#@x)X` z)uVg{mBgW72o?4uyvU?34^^V@k+?KaFE*be5A>`*Mwx;7^>)P~db2E0ELXGen)5vGe;HU~zTX}i^)$vTXlLPSxh#kPK^ zb5-!wr0w{MFns*97(`vp#;4LwY)b9rrCZ}FR;?}jV>MGZu3d{R( z`wkcPKqqb?%%v5D|Dm`}%SQEw4vaJ>d)N-YbhyVQOnc_yt+~7MaiaN%9HT~=79SzO ze{OBWj`@*R2YG9{GX6Q%KAbiotAC6)RZa@&5u8zSjC-uZ5K|hqk21tswW4(X5uSAz z)4OvWco4?pmPy4PToJRf&qYz3$P&}F`2!ZyCPBhvcw-aYGXb6}Cf#+mgP}cv?wPRH zGU@iSGeLmO)t>}(V7enRA$%LIUwqm;3Q557T_u z2muWSG&x}huBhmg0Ldd2k{d`P`5KVqEKNu=)jCux$jQ6H!hi72 z~r z251iKjV@2MqO=Oa703NX8kbb8DD7LM++0lDmXKM4{@ZjO;^5MwEd5^B;8;;QFW-x^ zOAm0`GLeOn^k_h+8yn!Q5M_ECISAd$v>x@$ z3F{+ruNdde01?4CZ#5t;FW5^6l0@F?4Gx>%pf~U&w)6@-Z_}^L9>_yl*jr(-Jl>r| z#UIHUbCObx8b5pydo!$QUL zk(Q+EOof=Ct_+Pyhb7^-2Cn*v6x`V&wYm$$0+t+{GpH{CezjD_~ZS;p{OO$uQG#7KB=# zaIzJphkygHy5$_7FCIaT;=&t&)i>x@!}#KjfGuB!Kans(+SD&4DYipa!+>fq4^csMg{ zAP?lCyKp#l4|#Ogq6FPTX+@)MrXM&=UrBQej|-q=H@hM~T`pUS%Z`)NOlS3qT0r78 zYsanQ={Z@#F`41Wb+zamqB=pm0!#&GZ8~ZIipCKhliZWEafXXol!TPFVobL!=;fq; z!D%WT2iFyoeiI#Fx_A*JG8#zYMDK0t!7Y68roil_LXTQASo4v>bahqBNwz0|<>fl< zvaSs6G1BCC^aM1A4-N47ZRiF@^^c7{pWlES3@X!OjShV|O+Rpe-W3a=^Y@|b^Ok4D z=&FSY_CibttO5GO=wUiH7h4)M2WUx0!vEJ{`iSIs+htmTGqaDdlDZ*I>Yy{rw7=6q zjC49xzEL(JDjJmYK}*<`mMlzIM1xiuI4xV4z@;wS;*vop3riVZZ^1$V!l;vOI8Gn8 zpJ`4n7JgZGgt90BI>7-~d{xcqv~3|Kk&NCt3pWINL08o2W|D9Wz0eSmad0574FfVS z7s$9YQ$w#(`G5f!POdp&)lTB{7lBGiUGcP&3|b@@p1-=qGFYYhX;Tv_X3O7SGC{{Ofq@YLSS)Hx9w7Xfj>f zi2F~^3ExSfs~a8jxLueRn0auAp6k$IY3g)RkXq9I)m$$P{~#}NSY^MCvW3Y9O&khT<>OXq@gbyf%hWRI)}{p7I+bo7sjbV=)`i2` zdJAnaMX==qv&fy$es-6lt-EpQvI1j$uXOh=Y0KqOWDV5ek|C{#ra5b#NFOa2l;6~| z5NlfnW(J5#AEE^;LzulTyV$z{_)P#N9eG$fatqRaM;;D3a?MB`S;qsMT?y{2$uJ!Q zR|&FvprO0C)u=?GdK}A*a}13Qv}3nmGHqgr@$>R9H0NU*!y-*^btB5O6gWtSmo#HI zKN0_uBsxq>n(<)2O?$_r+3g0brBdeOunf~c9Tr}C%qPkX3kKykJ>su<%KT;1&Cvm? zlwRmaKmtKZQs-vz*T5@NCesz-4GIE6C$THybe|6a402}_!-cPQp_<H-}JZ-GC=C?04zxHp6=$)1>z2YC=>sD$#`cBXm~+$VupFt?j?57 zjPepe7B>@OOfR;LusrX@$U)X(r-g1q1&%Vk3E+bM#R6N>!_eREqyO6lgYuhh8ixJ@ z8hvK^=>kXTN5M@CW`AdsfY3FWE@7;ATd>E1h5j2w_wMFE^wIVC9t&xWC+&dLV>W=p98R14=|nethm8vtH%}$ z%5Qo#m#u92S#-ePIw<1PPk^id{i^_#v>I3q^mZTUeG3NVH$9&Vlx?~^I>1TrFl%1uXSj=(lks_U+EY z6}>3^q&=`qUEYqTLX=U12pB*!N9$r7x)qb3aaGA;dI%C9^XGDq1`#m0-!kc9QDtrc zLcs4K!S6OC6@H)=7@K~|SVF!@AG8n3Z|e4`h5PM$WL867U_*zhu0r7+g~DCUKw)Em z!UY1FKmo-XpOM^6Zy z2STv)cyog7ek)41VPnV@%613}rWBjs+P2w>!V1rB9GLx4Fk2sj0C8j~xzNY#t@c6r zO^b6dJ6Dthj0#oCJi|AP#8yR|8=4%Z_YG{PpZ8(ACDPy;;LP+C%F$I2x;8yOX4?$Q zq-&aedxsT8Ela+$_)-G&CIAA?YX#@0kW|#9HGqQx5Khgai%g+=M`E~N`V9A^TyHg* z`URN4R=_j?cKUN^`GP_DO{>w#90g;m3=fE47m{pf@Vh@wm-z)ny|Zb1bU;MDKaU>* z;xdnK7PKEhdRW{0{I<_sFetz2S3XEtGDXI$I~;2<_8;^Cf=4idM;!F<2CGjHJOZzS z)nfwKbhzj+uXaMCvgs`&jRvR!7W1Syx#IOk7-Omurl;)W)BjoPs7r0UlpyK@!yE`X z0kt8{Njzjn9rDUqYi3EogPS!}Jn+w7NY( zFEI#!lM&i#K-Qs1lCFU@S#s$5E=&$=|6KS@V`Bgev4wNtj%$`7?n^h+c6KEjJG&)< zDc<(tBt#oVv4l|>84Gj|R{yK+!K>&&4@wQHm27FAhxcfAwHdHD5yZ~*eBx`KG^ErPuZ#9v?NY@&=M`lOEZ1khJK0}Bb(R5 zNrI7=DStpP?(`XCfm6y!>e7#J^nWYBpJ`eC1l0`iSpss2?GYyYq>u;d7zhbm@Gn;B zsq6-at`+|lz@jVj!5-N-+dvjOZI?ktmudWd6(0m#13=HQYn{UM?tHl3BC|rNAggT8 zI)y&O<83OV$M&YuLdQ!eqitue*i^x?rDdgfgmSD$5MpvuX)E@K@e0HzSm>x%1l?_* z4mdS2)sg9K$FVcO`|FQ%ELbM-j{pD#HjD0gn(c8cUK*gdoTfQUUjuPa z{k1l*mXFxQd1;Oz_ie!~3nFY{kN(l4oBa;@9Zg9FLIGr{8WWP{01f<63CsdC4*vyr zo_+IApn#(PviJ{ z4JWbUOyzy(%vM-XsVlM6gnzn`Z*Kg7Zgw^9&zoZvO}2;mH{y&JjvO!;R9MAyZ>JNF zTSe;KX#_iDS45PJVZlveCA9lW17I8fQ#bM;fHD4$St#cyuN=0&TwMbG^o2RRrCUU6 zg#1yaEr+G8BBpD9?5O)7=0s{A3@%{o_@BDnhx~TI%pio2H@$?q5&@D8|D_8*rwRl9 zU`ImEFN&yNbT05?xg55~AafvCajL{+@YP_#!=b45v}h_I(siP_Y#HMTn&QdfG7&Tq zYR?42FztuB@i$fDDTckzJZ|Sw(|-QJ~h7N4JZPzNIKSCgb5nSsiI=3SO49}&s<{Gr}-$h#$ zlrN$lcp`8%^@%{Ww=NBsaavNtbQDbRB8>qWP>Pn){7k@${bAY9igH7R2LG8*Hd221 zq99I$^l@20f@$IR-_nGFK3KMiZQ7cLUqwvUv<-5fbP^**i@^|>e)|^=_LOi|^b1tj zg#8sNtQlHiFCm_XIgyqw8eGm$aA<^z= zWfxAYikN;&+aOe7`2v$5z(}&3=A)ZiF)so85AbY2;k)Dn)GSer6 zRYNaR+M(zB2v4d7^0zf7NK2O+Wuw))*_~5^C5-a zmGgHMjG~Bo=F9QON655_XvKU7>MPzE$0kve;ep{~SU(~eM8(?56qRoF1!QEHlwD_= ztcI7?1DER# zyx8DScs;Ffo<{X2a?+2ndrFPn^}*OZII6L`PR8zG43i$ael>PaBGW3OwexY7=&Jtp zp{GG7uMIl6WrR+iA9V8lpp*BjPTrb?%g`Z_I@qfBUezbZ&ek%U!5=UP41*J(PTwi% zd;RoedV3!9J9O&l+)fSVbn4!5x>Gkb=uRze(VeH*?aa zZJ4Vzf_5_fQUwF+vx?}6c1?!uZJG?*LNYvZD7LEDHQjVhuN9@ol-m%~42S+W50mRx zmZxs>UT`R8=d_f z{>DNlK*}mYj3g_H0x*H2(Rbifb<|FUiZXu}G4)x{{bdcX$6Lkpgy0Clgiw<8Ksd^D zpX#esL_5xr)%%Hspanfxln%hZ2k>X?q81Pb7SkBh4GS|Y9ye&|E>WOkY|{fB3CnlD zDPp=>FrbB*AP&H^4n1r;tqF3s-$O4z3K(GG?DmLt4yq7bu<>s{ybfGe%Q20I#h>4kLOr?W*NsgJ`<)JIlx|lZ4(@UT~=;BQnwWYu$End;eqP3WA@@Mjo>;z zR!@}rVSRhQ3BCWU%E{wxP)>fQgcx>gRuOH6U}IW~Osj~VY*We!lv+Cu;5Z~$ABwU^ z+H_cl?Ta;9w+3i2y(><{MNGeFM0J}k$L7kW7fn%E-aiE654~(vqZ12;V8gi@)PqrM z;j=6FDOPq-gyq1tT7>MZ3h2KuP=Ml!!dV##il(PhqeJ67YIbbwQK6|v8ID9iXOD7h zdEUkpyBdxya_+vu_iQO*`b(Pwd6DF@HK-1S*|n*~NfUeJCDf8puo3g4#i0TZd|*>^ zX83nbQ!_5%+tfUmrm=a7pbw3*&Srd322 zAxUqEB(~`inDG3lvyeXM2X@eQB}^^d?7}XD%%l~iURhOOXf0ye0?mr9lPr-JPtSMo zNP*_FYs`kx+CbhUn z^U4zCh{RihJ1-l8eGcM3X+oJd(IiJA~_{X#yW=iO}%)*CPgcpn(pz3ff}I}6cK6Ml_L)psyau%X^~p+;nnLPX&7 z2Qz1BV8gDsNEbXWPZmJnOq((EpP8|KvjCIkX}AFBNpsZ#QJh{trd32&AW1JqMUTFE z0m9})akt8f(sL^FTBzD|r>M{HlqzDnR~*@G$ajnlTsh(G0fDHL>uyBsC(*>fI+q8m z^IE_UM{dB~}r=z-h~2+SrCSKVU=18?YQvw8~`mTn|=5GdR4a z)=XfC+x}~f%w56~>h-6Un2a7YMbN*WV-@RX2$nZM1fQss0pqv2?&GQ>VE69!z?y$0 z5XOeL9s7^n>`5OnsF(#&rmXCid=2132u@%qiU*cJtmrsFjWYd_{BX2tw)A1QN}I3@ zgBEKfxfw|TUBuKYSx@I?{a&)RA`3gQi)C{SS}lh>M2l!?<=C{^`r;GQhdItoe%1$) zwF-g>Exj+vpCcKRcvrH1k(>37WL=0XG`>kT!Dw70G#b8o%z#xykIU%=6%0T>pr(ZB z-=3O&xu*5q;+{Zb2XMcJT^UiEu)dg6sB@6=(>Apva25-p3v%O1XPF!w+0N9=R2ftA zTRYJN%h3Z{ z($tx-DI#7DW$doRQ~)<&heK^*-GzuKFM$A!b6PG-ZZnUi+Ce%VvG+=;)?qp<9ftx8 z%^tJ?$BB*2#;Loj?w#Tk93OxWV8)REksyLGgP@Q=4j`hsoY~28my+#6QpgCIl>{8j zBq1c+M7F{r&h#)MvVnPS?NkQ-q}r$T$LvC0h8o`k=`kcd?3$NHb}cne+C>+1WtiSE zwxNU4AaIi(IPEuoWztW(25sud*mzEI64Sl&9n5~FTk?C5ey~;a(M|bjdbKmdbQ$mv zGOXv4ayCyxtKGmR>TxM`;Kc&`*GyN^BFC8u0VR!^C+y_p%rc^FrDY}M*s0`su`0wP z%R>}AnF%(vWhzU^_LhT1aG2$8U1k?ii&I`gd3eV_f|!{{?Zlfxrw*!H-fUA6Tuoo{ za0Ksy|75GulmWA~I5gHoW8 z{tO?3GU)|I66C`lWE|ET&>N`Bky;#d$#K9J+L)7eand@T>0=x}2n&FZ&yxVteX24( z4-Wa9kRxlcF)N_7qfm*KPF?d_B zi!-|YExoFfiwoo=Lm0t44etCnx0l1hpS0@3!Vl4RDP(#dI@lt!fE zxcy!x{2wnX;c}kA<(o?xQb2l@%SE zRlfA|c%~KdahHjVEHb(~#DY%q6U6eK9dWvh<#4AYkf;^6`u(0rKcqu zSAyY16D*$F@6gSkhUN#vny?O(<)j#Zwy;ZMdenUzIDz3mkU5wQ*O!}RWbdT~PB|QY z5Df3MJ-x)+5Fb;d!3xCaqaHTPAim>VT4t{)Gt2gtQY)hS`E%BsM)L=0Od9hl&$Ek4 zV{BJI5<{S%C5Yn{OYqB_xeFXFGIZ=V2}21fh`9r-@UJO%Nw6QExoc?|vg}Vv;JwuD zloD=V+O$Xq(O-P8Ccu;l1zGDbIvpGoz)~?ut%>wqO)}#?U1P5Sno(q%jZ?;eYVgO} z&u%;>m`P{@fU97)gr7&R%Go8_MvHo}9?=gSm|n{F)4w@D8rI6w=ycine?P-6IXx&z z9=Z)6b~l}qQ8&H00y0?sgY^o_gE?_OyRr~fTnjtWd9?QbQd_lJZ@KM&{!!( zhVGS#15Yj?Hk+sHS9|`rSe_t$;k5Ip;V}(#IW|3R^w9b)2mhAPja?e|QhL}BE?KxR*G@nWw%@0Eg{|k8$n6eD@{V!h1z=q z6}aLF4S&i6*4{Y{VfM4Y6wBhXaXP~jK^`n3$v7JQw!?0Q`(mc=*;DvO4f18w#fB4D z=pJU{*bp44^ypP#=}QC0qjK=9;sbO61Be}|67MAOM6s(}!Y(fjIk6Aufm);rjZu}RBDibRQ!cs66o9EhQ4doGGlkL3Ac5N07N{?{d*annRq8F$#%FZb z_DI+MKR~wW4AnI>ie~!7qrzP>M9Qz)qU$b$HxPYY)%{vn*Cz+l?IWUdzd~nG7)Rk* z4e}QN*&T;ss^vBH33J%A$$+9OA3z#tbS{^nIrRs11awi6O6Ur62v58y%?4u<$B08? zf@Xy3(rfxzmuTI?Kf=ExC`^AgMEG4a6#QF5!NXn@f?fIckp-g;BL+K8j zigKXbAyDq=9HhH)puk7M#jY>V3;W;JP*lVlf8`XiV2qF<30f-XEGYvxc}jz)J%GL_AO7kIIg)?C*oJL-=WE#f91)zTsWn$jw1TU6y_#nC|Etq@U&V z{X>OmPK=iKHIRD(AlU9|K!R;2WSCxcwug0|2Xe}=+B zKkpi(_l$6IT+jtG6oB}qknJC6Ag|^EL0fthr~gG4dM7BP=}6B?OILLb((^ejU87s_ zw?_RRY9N0-5XeRWvZia0Hst{69}cAOBMsz}1A#m!KyK<9q=$2W+&Uac!%huk8BUKu zw6Hs0!-T)PYfu7?2WQE>>Mei(rMeHy?W2LeExd}t#v4o|ABhPQoSMM`cySN9AaGKwR>(qMu?R!E=*Xl+B}HP1q{BgH=o~cV?`k z5l*ZJeorrTI@Zx_)8(?u?}uGuCu-YO0!J2f8zwQE>R{2aX%S9Qi|H?&II%q1rj-$` zuD z#DQxgHUa>11IeRj^iC&Cx-WNRDvf@wR0wvhLK<5E0AoO$zqpNnLQMV0g!j8jUL^Rw zsql5-6lT*!g6^B*g=!v0Hz^-0p!wh;ZBCe$uhG0AMDqfv`ey;R1*b+f{ld?3U|e83 z84FgT!U7H9W(5KK10ueM*R)~a{Y5JV^8I`n)m5#^j>JhA4dAS>T#(X<$BaV#c+6#kB2I(Q<HU`FOxf=pbsL@wP~EkHk~68b+E+-Jj$0yR~5K7X`}gWy!l;5FGIM+ z>35x*MWES;1T)K_qtjIFFrDDBYc4Tq)*yW`9gD|M%chwbrV|G+#5OEa%h@dz+oEVh zrR=T~#~*Mp+soLc?{4ATyM#jJFWOuC}e*lH4J%LZ=jtDgl(xG11a%3;nB&bkY#s~~)nHFwF+ediuQrO#6 zu&1g|Z`GmBL=(63;T~aANqC=dCC)zqQ*Z7bd0RU8==C0EW`y9yY%{$S(cZ zfj3!A0#{SVdU3>pq6wI!aoEe*d^v*SkN=|CgYj7?gNSN}_i&6l9X7xHF}v`sI|MGe zAr5ly6<56~!us`tbhtMY$c^#Jq?JP?kR$?kiNN%)bM>F5DYIWFlZBv@1Hu%SB4#ZN zZGv4UUe1*?5y+Y+QU!W*Jj6r_XEI;#Y)bdaX`fxrE?#IwB}{D)fN8FF##lUAH@Qac z3HFJ6aoPMNBKBT_nz|?f8shyd*ZeA3d-2P>I3fis6j+EWr1FLn3PfS)*9D?IBKD{) z!~2Q6K)9}Ubjxo`XZv8cfvL6vcO)hu&L6whmzmB?bD1@X{@t;@OeH-soJ-jJrqUEE ztV#6GkU{Y{%9eZ9B>EQzKc|8?fq?x6bq#vv#E;`M;xUhHx$EgqjSZz5k%`JoKfoXR z)@_`t!22|APenXkkK=L@?ef#?mc=S!aV~|Ee#ySLIccXIXrNX_`5?Iin6GN-6q{6htbOTQLu-sqL<%GClCso+=~Dm>ew7o^ywE+@_AOyNi~ z@Q7gXh{B<$;(sK;h7e$|bK%HpQ3i8N7%0es@zzq7S{xa{@{1KG05=}u9>+^A)i|-T zWlTp7V9=xtqM%Leu})!nO8lt$p;Rzk$GCpH1s*0UV+ni9%3^f9hj+#P&0#f_VTdqO z=!87VM>7=slLnyg;Fup%3HZ4pOoATE%0}N!2r|w9M5Pbq1i(Tsmg0P^)hUJVERG!X zlUCdRhZ>0glPbs3$WEH+KgnInR8zW!V$+u0GgBqvZ4f9L?K}O&z8zXd2lN0@G2~)2 zxN8f$+j`@rqFC5lbM*=g8@Sz$%h8a%HB>6>ty-tZX&|zfI;8>3;@k$HNJIzXQ08O} z#mpWF`T@#AT&>vsXX)NvBcj^x?VcHxh+GRE^EHQ0L9D`889oKEP*n)db^c2?9H5k>72`3F#6R=i~ftG-6HGvcx>7LjGuQ%)lh5{rX^n=j81#IqVt{)+!xV#K_r=XKpct$O6a!y? z6wcPLp%^Sziovl5Dh4HkQ_Zg)L@($-xEwP+l3K8Ft`C3cI{MY!F^YTiE$9Eu#Z=*z zv!Y_uslw4q>L9!QuoGMttfxp^%h1cjC6dh=FrHpLHNYWDDE*rge4)|-Og1d2h&;|_ zwbcLKPHc1&K`H*st7^c(=P2?k^=7(OZ?^mS|IM^Dqgi$5zZu#STmM_4J*`clt(a$3 zM03xS_TYnM(uT-3D?)d7;wc_C@Xc79TjKr*w075u&~2UK>k=5Sw(C;7h5G`#^^^q) zx>ZcC7@ifOUw1jCtt9fa@EfiHS`nsy?qxTyTUGd<3$n1Z#|Eqj+w`r3Byi&_Lf_J{ z6gK*0L)Vq=zm zYVbb`+?UNB7>lrKooA-8MVe8LeS~ai{MIh?FMq#|19>Y#7kB93T!o8NQv&OG7Q(D*RWaW_o(U7D!E=o zJ0j^aT7%#^^kf8M(hn5bFZh(1hJ8?W=kVuHK2w4bUEAS6r?iUcDRY~&*xR9P$vZl7 zdb36K=9i{dM%`%2iqNtyN8z#)!RKRQ%d;Ys)j)UpK$mxD|IbyOIY4ih8~>H;USDZW z{J6ZN9Avp?5lk?)8+5#)OV!|UKvfT0kgI*07W+9u{4D|*b{!1SHH$E$eWvf@zr!zS z71J)mi~C&(0+#tQ0sx^&$|-A44rtc!oe!0>tItwji(p+)Luif?Syk_L=HZZ ztV6mr_!WUXT`WX^VH|`gvm&$|gg`$op|mwsBI;zV2z{fMv%#Lb@I2KtkHZeY^r!a3 zAXk%n$^kjkf}9~Wr-!+~)3;$)__=a11?JK%LD&1kFMYfv5IaUjVI}45ErEGxac(xi z*va6Nu_UL4d~$)@Y^WjVFXQ}>(SPy%svnBSLcznGHM<@-<`mf@hM z8-{%IZ65zI7EjuqX#TG}X^VIBM)RCxlf0fcni_wPmp*HPmslIsL%X##&7*qvRM$^c z){OYZWK(sjv1%^f$%};V4&o=s;b+Smguw%Z5ksW~a`1W}D%7ht3r)kQn%97u{( zOjkEnr;%lb4-;BBk5@*+ha1^2{O1`t%#0dF)BIFJgL(`yY8d+2LRQcBP48A5W?57O zdtcTX!?YVK0hdeU5o;`BW{;tyV~wS+UWJsRQ2={iIlGCe_Ih5!Wnw9{yL+fvd*w9r zXmAq+9Kz|shqWBWKzO*jF?QoODATaAF~W1VuN2l{o;8(PLRdf1uv}P~vnoKdjnh3k zCjobFK@DdN`P(YuIN9rifBqp}oar2l5z1tzvTIL}!#xObA}ZtU(Duf)09aXbCfG#E9}N|`z`gD((`fsz+|@Q=ra)>P-CC_+`*34hx8x^)<$ zhP1w1on4_uoMGSRB=9kh+8N`j7`yh?82eD+;O+Nk)h{$eSeWo|T_n905J28I<#`S* z^6!u+d(#PWGUb%U5y4=Q6Plc0C+}CIsyd0~Jv??|oIAOk#a{ErI4)678_A@hnn8WO z1QQj?@l@D&1%@hPZo}mYih6XmR;K%ZsnLg}B#X&{J#$V- zs-+dBD~P32lqiL59_V=gOa_mf$rpeq#VPVFhT;X;i^ zXq-xqbaF*qPQ0AyOSoueQ!*o#Z>q>Jsq?D@B0k!bc3>HW)?9v&11w*8p7JZ*GHg^? zOe{F=;4(L&DvHHiUZ=s#6pIx5H`?)CS)f7zaa8}%aw#eg&`6Ok`fY1 z@F`bNA)-!EOQ&(AhNwgoMS5~16v6Bq6UnXw)Nz!zH$fdvX`EN$C`u+xnfCW1aiqY{%^ll15eG|w)Yqo!=A2&NIA?O( zsQ+rcYsW7trcqWz`N^r~`gt{@ zYOlFw-l+B>cq@NY8!T)oMnizv^F~#?skyPHZqBGM3Q4T$e(voUXpyR&Gn(F2H#XKc zHjTWAQ_PiYsjF$jHVfOaVOgeOEKm@V=~UzVn!04Fah`gzA1~t1OEo0x>gP39`oVVO9Z14P5MgWsyQ;3a zb|{Di&Fu}Xlesu@&ms+m)#Hn0)HXh_YeZmL;Oo!de~b7QKidT0~K znc@R#tWKpB*2y{5&FWWUjiydhebw1j^P1-5g8UTH4k@0jZ=S36#o?&?tp*?}n`H1J zhJh*D)ZExo74$GDq6TnSJ(Y=J`;Ydf=IVL==lZ%TAv6u$p!=+VF-^{?^2;{0H?=m+ zohP{?WDP+c$e|1y#)A5~>YBRQ^?q`8edD~8pv;D!NH)%{avZ13FVQ-uy16k`m##-s zO)U)#^^MJX#1=HQH`TSw3;L7FVf@D0nt3$>853k=rhw6+y;%)bo{?iQu?<5_DIk$= z7`{+Is=z?kA@Pv{zvr-|Ii%FlCSGS>!WL>Jcrd6mgHW&CIhLNrpnnsnuqv7{z z?JLN_A^?5fMi8qA9COSGN=Mr0m$C9`3&QR}2e;#vNsleSdB2rUYoclO!oWuOrd#<; zeNn_KH<_LYa@GYoPs=-G`ApX#p{-NLC(9XHKy~6)11>i|AO!8>s4cN{$y_vRqAXL`h*=BjXqJ+Jh!Ft z^s4%Kljo#U^XeO`CpTAB*VayMJ#$*?nWwv_mrQQ1Zk$(BH@klF{K@m%V^fUD2Uku$ zJFw9#G&S`jE;7y4je!Kf&tQ6*hEXH)loV%H^d1XIV^}7^rnQ2T;yhP@D0|`+lVZ0& zF8`wrCskHfCcoox#4jMPEGJ_gf+OZ;R6A5WBx5F?_R1~s1BbpO8FZFIU-9THT&)i< zfbA~)gG(Qr0f+zL?i9Y|{^>G06F;ORJ|PkOAwB#r_%^zKU8e6k3;jPgP$>jC^x(koQbf=dB9zp7-;fae?VSjvWoA zAul)8G`2J}Ro6|ft)J7_(lo90jMK|bcSgyy3V0YzID9eVFk_(KW0oqiU$CzOK2t zZFFk%D0ds07Nf0*@}FayQd>VNHT(bkCZegiv8ukVbu{BR+MQ7Ss0O{IuBNI!T|K#_ zd3Jm>Sm}{$s2}alR>aPz+Nz&CyXn)`!cUcSqnI+)byfB0nz}iYf811GH=2r-EwgJz zwazwH&#tYm8r58@X|8S@4NiK50=Y9U)i5g7&;WehcC;H_r5}GTl!Iwvc&V1=`Z?8g z)s3m<>h#y3W~6GHlhtiXamVhmuDP)tiZ*_?4blB;>*vhT+asl@n1(U8zW!{{(<25- zG`0i@2zCI%*=5cigo15{|4nU3a`zwvg@0aisuCqE!|(|%+g-~r>T2YS6$hER6c0Ve z#O4E)hn#>m)V9p2k$ssJ?zSw$XlPX10SjA+RMpw2Xc~vCFQdAN<o(%=mNoL5J(`VVm`)=Emxj?3RvzsjIoVQHCRD;sTGV zl;j?181rV=)TM;3In(?o!w4qm(T35Qs#UY+DD5GUQ{X7WXiils1K2UTz%hm~r?I|8 zh<%J-BAKqPY>~-#jFwW#*{P;xM`YEo%vcGCJuI`SS%&2p!>DemN-4PkZw*+yDnnu9 zFBt%EY%YC{JJ`l!PCW=&(_Ejz&o4mG=bMFVf{nKorOk#!IO@i|DKTgGMvv>dGQmcD zqhH=K>F5as*{wM1N8}W7zd-al?a4NMt%7VFP2pZfBW$5vC`VeZ1a-)=*$h`IT=w=4Dp#%ZQ6hQ@G0UWW`21n`^*MZ1A;{pqA-5~c z9-Q{sc=$DmU$C_J2sfS-JlDJPsii zj~clb6{;7T1547h8#REx002%N&F%YX60!L++|SDuVa z051Z6|8FTqDsbgo6_(s0Sks=)%}mQ81Ld?62+3d^jD#JOjqJ7Z=|sdlP9Rj8y&lk| zDf?L#FOn^tPTV>k409Y_cWfH8j;CS|eYzzA#}uhRM+=k9hSNFTqkK-742&jyj( zz^++8UUzn>O*0e0{Mvr6rrmpB1Ng@X1+60ydNCfih&~jY;+cTn)9=%Dmg7n^Tw>OB z_5$OL2(N&2-$BXnAc}xnaTgV`K!jO^u!t*Rdj&v$XJRNlj-&IsatQIb0S6iNn6cEg zpM@8e&z>6}&?x>2ZYn_O3Weee5x5W|s4g+L%P{ZRI~KEPVjErIxJea=Gn^u_C1FIcu*hwyh;V%W z(x8!PkLpJ58nM9Yu)rTwfw;u@$a=aF<1r260aavJBNbtRM^u4w_~kLAXZI34@L{Px zs#0;@su7*?xNhWW^;M={RA!?PIvvm%*TU^*GlAc<@r17Vd{7hfq;RR}3)F_N#7iTW z*dCU6b>tG$|EODeLzSoyI&JZE7dC`N-cdz_EpiZOjQpyw*vAS`1>12=6JwKxavox(`HYWevlAp z<>H|QIt9}HKlD>+8$)ms5D?&oaQl?ax;_6**zCA1@(FJ)3w@-Vtq$07vXTMFESktuD5YKfh+eX(_F{;A|2rgCv1TzJ_FI?v)0L2r_?h4^~4DMPE$chSK! zbVciAHmA^c5K!I6v1Dikrhk*RN_7=B&)7{B+NpEZ^FD#|XslA9Y!#&#AsDbG%R1Mw zOIO&iO;?zpD#&O^d68pyr-M55sb<3qe)*HBY(jxje&rIay&t=tLXK51UW&k?;Nr!D zL0^`^bG1|Hnc(j}1asSiV&Y4FuIz#E0au|;rjO+szY2d6pUSSCV2^I=!YE|frTYz} z5_G@OW6s=#I$T!5Zk%OVN=liB47^F7p@)nfvt}2&gh1Bn(<6pQH+CiH5u+yvKr!IM z_5)QX@ULaFjdIq>vm}Cbk7YC6Bo3n317->;rpx6k*tNdL=oN!cY`Ucjum60H zDHBOsC(|ds!uCD-$nYwFAk)gO3@9va?nzEs)9H#XpBve;sxd_{nPLMVm~|xE^bMSQ zpUk!de6)_Ff9kbPrif<~@2Ad0RT+j59AQoyED3al9k2T=5tTQqv7w4v$KjQy<7q5Z zZSy2D_gYcvaP;B-;x}}isXp5sppZl<)0NPEw}o%&8hZ%0&j)sZ|UaW#f}bPx8OvN5sPD6 zA@4d_QEWF6iN-wkCpZ1*<2bS8_b8U z_)6@KcQvs6f?*%ikHc0cgsr}(3ogO724nH#UZ}W-^$0tn;iOEPxmbF!14|KtmK!ibnXd0L-5H&al6B1#IFq0#i0)R;a zwIg0<4oN0{s2li6fXR#ylP_vaR)+->_5T&@1&1Q0S)Y(k1#-i37F5u*eOn$N^p5t%2OEO5|vTZhVR9>%yzT za(Ae5L)F4P8qB@wGt;kR%Z0(&B!lBSf#Z_Y6|x9OpR@F$A*16*iP#=OdK8dol`L%l z^PGU`7LIe-u0T*H{6J2YURPjz@8J!5H9`{Y{s47s;-D@7!@+?C7Ka6%2OpcZ~3ph9^5NJa*aTP&Vu??KZ+OUj4Dg;WdFUT<2!!vn8iynhLi0rL5heN|ZM*MPy@+#S*<{CK&1%rccj zSc0qjg*kF2$9-Wpvyc_k85#$mGvGnPDE;0C1OXfl_C(UiiU;M+rt7k zN`a88pEW$pw}7kHg?Q2v7!IG4R$Cf}+XcdKjx?gWz}>3Afm|IHxmOh#*3k`Nfd^HA zk-3_6Q;(@)L%2Hpx)EP3lb-F!$m&hkoBQG0xV6LKe!N>BrE5*E+%oAYKOjJqkt4zg zdJ#-kNydG}ZVE4nRpbTjGi@^`Fug6o4Cq4B3r+%osWxByk$LZ0Iz-AdWPyN_Bj;R%vwqg%x_nMxSN0&?NU3$^P zYnXY65{(Rc$@JK@@@RF3gWU*DIYbSYK4J;)pqET&6Iokd$y=2l^pbXfj+Kv(+6oSCv+2bdmqIX|L>b7z za{3tEpjbBOzJp6RE zw$l0o5lCn%+y?|Oa>~vbj#I^<8qRXSp_>oZ_;)$k4Cnz_QpAC<;^ z8w4lgv{pENsO2{bi6N%&z7FsuOyQCTs}cN;wQMge)F@ws))f<6abWjDCU^=M9E=I3 zjMwlk20XgvU?g}dBtd^r$)+I4aych?jZAtx@8fTUCKma?Z8=qBiuNFasETChvbzSC z(!iUDqe7f!_4o@Do<>K$Ja#U8`xL7T;%&jN4#b|sX4D3EQxuVI@bK?++?-Q3l5kgQ zQ++RXrA+5+4)$QHCTR4&j4PAbvKUJ+Nt}5=a^dYSe?2QaOqVT1*=~f4oQj1n4m-ss zIDk584`*#^9b^xck#8Q04>mS-D2kx4N#OUr5%9~CT{Gilbpf^uaH(rhV|#>;!9U0q zQ|`9D%gTVh)%pkeP6iQ4u^i%1(m2vDdx|Qn)La}6!!ddJP?lO16rLob)D6SfQ9Jd~ zuyK?RYZASJ4IjQ&a5BxMj9sEzh6pDvOc~eWO&UaP-D(V2HeD+VdD5ChTVUC+rZD}% zR1BTO>NN{DTG=Loz@5Z&gWPll_;PCsJ#6;KoOSK)SuEFiQRcP|hdT9P#Hyn;YO)hX z-F3L0i&xfNXaW$~Wiv4xNwzDvN*SZ5Ei@b)qd{N?+Q;i;s=zWh@&;1bW*!c0GwfQE zXaHS@nHBnXA)a^NDJSDumXr8d73MegsbfaP&Xw$z#JJ2lSz<4U70H@J`wh=J*`~!^ zi69aFHcNL2cc09(uM+`P5lv_kog4AQzOt_~1NxjNNf>XCIyd66yo)M2BI1yq%wh@) z8qA=$jVx=DO3=rhj{1!T(IvdycruO=!LzDSoM@hG(;l>`5;*L%|Sb0Fg5pLN?Jt!Fknrh|8jr~+hVad|7G_K zn(qjqRmo)cs0hd~Qqlq#zfNG2urWjooYq7Q-3 z>>{z`(Y-jLMvgTJ>M};^-cE4T9T5+d2f6OaDRWmu%G@Jm?h4D?ol|CmDs#7#*$|ew zGpEcSRGB-a%pbxsx960(PnEe{%18pAtx58m*gSThD3Gw`xYnd)yc}UPN`<;Pym+fX zgsh)L4=9MY3PefZv;P4QKUUDdh}NWTc^7ns2Dlt{Oo+oym{`z+oTg(DQ!)*N0wM2; z3_!&F0i(f5YZBcl+CJBMJQL|+H%ebp0G(OLACe0Rp!-Ip#E_?i*)nN?+xx!$1_^K|h4k>~vT~%$LO%M*tGc04<+{7>_6y z{NbEl9)yPWVER^`3P-o0?p({Z%Q}+jYCr?Uo)ba?W4u5MROOUUR-Y_Frv%%;i6t7A ze?ly6!?Mg-E|;pPjt+n&%@aYQvH{2|eP<+D;(#PN;&BDa8KzHd6 zt05!~1UfM}*sBdQWuqo1d0C*qO^fLU1GliXfj+W0{B|TXA}Z)%YE4+j%JVwt0p{G$ zf6?4>35iz0?o5uCS;t5KAa|%Xg|j(m7xH5&^dN-kZgoP%3K?M$FbRejDwlkre9y0i zcee3Uh3p14X6bHD@)ocnrS<3(mg}B6=nc-3CMrgo9)9w0$aoghlhm7bYRcf$4TTLiJj&#OmlIj zf)mTL*es*Gz3f`Y;4LC7Cuc!VMxl0f_5}x|i?Kyz+qI5W0s^1^KgT*2q1egtker^e z&Z65Ra3@4;dPqI%7+Tkv2s*jg)BV3sEb)pvF{3bF>`HkjvNT}k!msM$FQT}0EInj^ zCbx8<;jem3QEB+ru1xsSQBaA*K-(wEQib(>x=82*pQ(358lgq}Aqd{7Ox<0ZX|4YT z644X$9gP)K{t9Z<-jEGn^U*q5f}nIm>x%^pyCL{!%B!s1n4{(iyR_5Klz&u}vAm;o zuz(*RufhLRfM}Upg4wYl%vmo0zOdA);ic}@ zr8b16b__4|pe}VwSZew=a$2D&LkyIh~)cKH8~ygvbxs=5~b;i|I^s}Be=8k|TliIF4<$myU=+H0@9rafor^3FBo^E=n9EU&tF&fAwQ zS<{_y(`G z@y<~S2*#&QDdRH@UTx#*ImY3f<-FR6o>B8^Be}C-g1b6bb+5T#O@01XceSsq&wuxt zRqv?3C4OIuM^NhPH6fE>nHyNg*V~_1cek0;;BGT91-v1{#Kf6~o=r|OOm1+unVjUP zyW31ohp)li=7>b+ZgWK9YUgea=l(^?+75`oItdDjy_Vx9;wch#vP^;#^rByBFCiBU`zVS^%cP->FX1WQX*(nuLZqYfa6XHmQuYIBn3#{YSKQE zO#2ofkV|ukE4Zm%llU%aV=c+fiNVt~i~p|ICV;>2Xmho*_SNncGzi{VpUFFFUtcUw zBv`Pm{xx%6QuCQdt9fqnb=)r9r``t&hmDE7unE5Nd;hJ7&=+>EI3}0#V`U4;|4+mx zsBe46$cCnTP3J!x>f+cO)c@OY0TKw0)oDB(5g1>hq#cb3=vdjkth?s)O-QQq*Q~S% zNnU;XA{KQLxy-8*dTH2_kJz>A{*2j7W>rVm@^%;MijdQt(AUvB$(T&)6Wo+WXc9

    P6AcEx2QmojjE}MC!ZxiUePJDpPfDp?ixtpR4?|H~sM7BKIKHNTeWg++imZ)h&47BzMhTUeCPGGVikUw=|L2i4zf2^auF0C1uX*N*ma3 zWe_Mr(4)oJWhMrCty_vUqlO1+1-!&-v!vcDX+ZW*!WNdYUTg^mOm-``tQ@RKJTj}2 z*2c;_gj)R;U)p*2w5XUej$Os{mG`Rjg(7iYI*W*noHpw&B+{+!`C66MvdP&IylPqz(KG7R$E>G}Fm+@W`A0?Gv)mzk@Kfx|+qkb|2iFtYgcr)EW(?ZYC&bel5 zkUHU9QrR`u>fN-e@_8ql3M3obwU1a7u)*Jd0b9KZ6!b(03@W7bMn?uDz0GWAY`f9E%$Bz-A zH&9h=4FA$NG~0TMD(gZ9XRAp>EC$-vUbunCpCAXb!~R&=)*H(DP~KG3NP5$ob!V%2zZEa@GQY`k06R%C1}YeN|uFDhJu zEt_|i_=kw|?#CDjD0N#}p?u*>jHN+<46U=EW=jzrIh`VxJtth$jO#haeTlQtnto3)#gGtB<9HbUXhi zdevB#V6Fc&D?#9_qp=Z7J6Ciqb8!>0nM`L_$?+`g^+YgfUzN%kmUlE9^}9M&EiYMY z1&eP$)>WOgQV#i(DpoIB(Y1Wp`Hh?kUq%O2t;K$6lom9yDPxcTEL&c7XLaSA+1_>G zvKqhRU^Ym!F_1}9CUeo6&Teb4sm`kejX^AlTiNNZ?jV{AK_sjqf>d$`h`o&CY}{#K z8IBvp-i%M#9=|af#01CQ?AhRG7D+B_UqpC8!A(7;jQK6XwxTdX{+nYA}bK^Sp z>5%sS-)R-!9N;h$E(bTqF|LhFA>)cjQZ_cEjIopr4Jm3V7dNCdS<3o`l)zHfHKdHS zl(h{h<1A%OL&|ZM(%q0U-cnXKq)f1sRShY}TgpWZDHAQFt085QrF1r=OtzGj4JlJB zWko~ER7+XjkTT6u-qDb9f~CB@A>~BWOd#^V&=c<_(3`s9rSpMQQ_V_w@XOF`ZX z$nX$BWNgl@nZpS;V1T?8)EBt3K-5^_-cSSi20-b(8ZA}%*MFqIOE7j2Qz`}p3@a6f zK@I_t%9&LMrh1FyXPHBA6(6C2Kz^P%z&&}~m`BEs^wIdwZJ2^K`8{x{yvS6QjOIU3 zTz;LQ8$lZuPt-Zrcpqt5ud4F~+<70VksJO=R#q|F2+6wR7TfSe;wGn+T11wAJ z`P8zS2G)BkbU)?m%xSzev_rga#TuSPq#*;VulrG_tZRH}5pQ;vp#$5By!6 zm*p%|hrt#qMT2WK8o~)K;?$#1%BawycIqC;YiWz_kTdAyn~G+fBWDe31cXOfs2_o) zm)C_Vvn|qWB-OqV+>BaUR6g8iTKQ2c`$`IMDS0W@&3aH(*ATIo-xxiWR2;_wv?%)P`^Pz(Ls5c~!yeyQKn6s|sEI4o*==W{Cp?uK+e!DATfZs6+@TOV8qd*m}Ia0jvF;{+~#mEFaK z$HI(NdMjS+M*Z^7runx!2b2%=RnlR9t2~%F)F$r%y5G=~LO!SRK8&Qj8S=Z#q5MFL zy~^*vO+LuONiU!f1&x}wGcmk zr8nd%u9Afh2p1KaAN1H=)@6zn! z)@WefM@;B;jdVY@e+jzn0<9Q{yyoma;=FtZLZq^?qLEA_M9hlR7;EmA)8>Ci^D3Y0 zt;mmwhe5cfyp025@kn#>vurFMW6g8>V;6yBaKfo=_u-*}=!m_S(2w4sosgwx>uY%>xes10wYn7=TMOdNP!a zVaRI5Rmw{)pdGp~?fW_ z>E^V_2WfIUYYAF{M?-VY8ase?!UWurytk()k9hHXEy{oVbqF3b2<$#@Aoy(xL8Ota z0fHVU0M3l{c78L3V2jT_$iRRQMl%DRI1HL)w_R@P_SDg7OAxM0;AGKdlSr4<>v&wc z(!ss_mb9IZ`6&HS|3rG9{C3lk2zI5!^6;jjj9LuxZmC-82c@j?Uz{Qfx=5 zcH?UGkhF)gfdiW?31!Bxd~j1mz9q5Dhyz)|J(R<8WjYh66``Sj61HaX;;=clP&B57 zMWH-5=I=K)RT}VK9+s-~{I$H_+*FbOVxV1oP5HT$^BT#b3ZbLCi#X{)3vghII5)x& z*c6$n%MAw0;yw_#$l)}&*BNYBIipVUs8r>$O<~T~cVHC1x57Q8zo+H**hIsyG$MbII2d%p6v)>$g$$3%ysC0;mYd*Pbr)vUf>&vz@@|_IdB{!3 z`|OS7Bfse_vIFPxa!OTJhvJuIT_`{E%kqhhVNos)Wm1fnv;5x8JCRriQGtV)o12=V zvnK>cPK21@yb-k&V76=#+0tfdY6RFptif*i5pXn&^`KvsyEcv*>rePq`RT?`KJCXU z_ga4WG<^xAcM!fe8S5TSk-;FKKl?BcbGzc{RV6Z*oXJAyhsA}4soX#XPJ=lhH*O3K zGk~cE8*2jItb4EZyt^W&*)Vi75^~eVirnSLvN8-@%3>~`nM5NjTG!!VmzK6_L0bmk zWmrXw0rAx2gfgS|<&B}{<=gb@3mZfEp&y5khL|oSLkNN3C)aO8dw4tkMZ-1*C6({` zabCW((KuJ#pO6T-%_iS=z@?#_S`B2W0pAze)2VSRi$l3{;~+hN_lvxf9%~`(v{(i= zR^$tQEGNf-9mN)g^1L#CUlg;^S+&<{p`g(vtwC|=)vX%r&`4JAmGxm!dW)QiR)h>D~*A8?cAAY9tpS(3@D+9Na@BUFo**$h|2gyIk2eK-np_hK)wH z$vf%2j4%*ecqAl(Jn6?$u{YGWkdK_^WyFsmb4(@wv-R_TL7vzE+pu*^ta6A)?N_9e zjb$ri$_^)ds1v>y$<8$;@oAza@0^4D*9z}mk)C1>|Heq_?zCM8((Zga?arjUyDrP_ z%91+`0CtRP$Hd87eKzxQjRl%y;drM%Mr-_PT?r){=jGc}AzudK@9;=>F4FM@4m0PHV5W}U0@V;|@ns)Xt%2q66 z56Iez9kT)nsxl^qUoy<>t-$Yb!RZ93l5}H}$CcWtlT6UU*&|Y!NufYG1{qm|es<|J zU;_+b2Lp&ROMzUU9hQ50Lph@?Zwckou*3Jl<{F!XSX>r{3eh@&l}Z&@;qBJ;pdf!h zMDQPddku<&6dSRGxjDJ)zW=4S0ye?7!T9gU9yT{#JdW5H0Ea+$znv`ad2y}gg0=@x zMyvbEzKU>Z7~8i@I_whP*;i4{o+g!Rhfsr=NU`qBST!sFIH2`>vm+b|c%xL>41s#} zh^y%}71}uF=h?S4#qzvZ))(de^%y}o1BnL`IEgBJd8^{;J3mLRf22M53aEs|W(H;BL-^b4j! z6^XLA5NOJZftSTzgy(B=>*Y2x2J>b@D!dseviLa3S&Dqboa>YD>w&zI)fZT>#R%Kc zC^3NYX2@-sL#&a4Ml1$ecgWqJR{a=EXNUp_FPIghXmTh|sKMEd@`Sc$?AhS8pyoxrV2gJb@i*q|w5fWM$IBX(itY zrlp~_1~dwChG0lUT3a=eG1_VEp6B!QH&3xPIW*vyt`4$7Y6)=j#CEE#>I;~@tY-1Q{>tcffYCl!w zEfu3*HiwBw;M@uZOZ0hwWy_Dui`_meoAxr*pl=|zxfPL|5oMPx=RodQAIfz$DUn7Y zLcLNwkj24tM*cLmjuH2pXE(zpNbIHTP6QG#nh41ydw`|SgqVa2p%y`xO36uiBiqoL zlwWz^v9y`13EZOamvBE>6d?>yRFDm6EY}5(r`f+ob~X_X5!MM=%ow${XavsYH3!Qi zFF0%;$QIf71DZu-wCIqS96E$D)J^29@F8xGaK~zF(j!?JQVsd&pLaILBkwe<0%RSO zKNlw0BBdgiQ9uk1%ZaJ}_>My<^!Eb&jvO5%&M7DceE^xh#YXyNM_}AxgOtd4U;_Np zff5&F_QNaZ<$CT*Fo;shjr*m^apb#WK@gVec4#5(;+2<+vNuvLY3>`>aGI0emTLLrM;k)pS|e?fAExXh->{O2R2J{$?^65w2P+uJ6&uXNQ0~dlAYjQ( zLl0Zwr^&A~I1)IM+dvj$ZY--SfDQx(>rGY_?X<}a8$$V(y|>9%9Sr1QKG^wq#>ga6 zj6K+!iS|Tz7Y4BH4d~yNrVF;~UIF6l_;hTP8lrdz#WlZgY)Tuh^BX5PI>C|<=lJ90wpH9gJWl1s$?Yb-R3@-DFkU7Q3-0B1 zlD)JL*k28#dv6Nh#1z0g9e{1>aZgRKl|USK(W!wp$P)tztHLA=v6aWK2SE_`~T#psIoq^qYDshg`pp6B>5A-ANKA@3h z5Wr-i$a+XYknn4;1vSjo;BH1y)>q&k$5(T*!M5;KDQCE6YTEUW9M5^uiFUn{4$4ET zMxR9FvI(&~vZ^TWn-D`kFAn+pz^YLigdG#AXeKpIKL2V}C_5&^Dt}%Dp|xl0U$C&X z)i}oMllQ4sqD%>u4;f>(O=W&8FArt%0hthkWiO?YNLhePKC})#LwDs{ZHI=#*p+W} z^TLSPmae-r0@pbw#_$2|J2L>TwrV8Vsx|LqYHWq|sX>IeP;JBVr>T5)^`P2;ZQuA| zf0_)g4mrKuJsx~ZwKIaG()bDl0|_0`fGyndwz3)yS7se<)+m_5;%w74rZ-@&S$EPk zB5w+X(`?QxzB6OJJ5EYx>nUQQD5mr1O18PBt3xQ7>DLgOuCWHZv1X|k)CGMajRtdq zxV0qfQai z;opdsP)sJ|bMvWbjdv$CQi_AYHjVb$6hd}oOsq?wT4GnJw=02LzSnG-s z#NJ7d(a+urTCNtYpNIB5Kdt@=svj`)NBrx(9Lf|#VU01l{PZ;IJ10-8M@!vVPrqa` zvRUJh7imGgvkvN3-IX4`&U-;x!wzy9N^<`c|BS&mqYq+5{zNg`DZF~Wn;G^es(i7pqWyl8 zd^?jKoff<>t^IN{BjGq5VT6WuACe$GJB9=Zz&K5_T`#XFihxM-EX*j7cZ68)NM{J1 z%JG;PUQ|Ry7YuglOsl+sDjBtVY9HI`AHQuM z3v#?W`rN0@a-7vG#gJ8CnAU2RLL6<`&)8a=tc#gqN~IGq4MDRwJ7F^gi2US4P6j}| zIB$au6KB#^j_Z-2aYP8>NFTf@bzVX}*{VjBW{sqrV)y3RX{Ro!S!~!9Pz=OAC)%k! zSKRP0!HiYS`0y}{f_&PpBxFqF$9C3B(m!kIb`CNrY)RIncdu=pn>K!Bt#R6AX5U98 zO!b3V!^8LXIz0SMHpRn7>cu}{26Y2$d;UauvWL(|mw0CIXW%nb{uCMN3;mPC1xAnj zCi%1RmBi(msPdiOirvc+shI2IVxy3emi&`23L#4?u}GWbi`fJIMEP!S(Qi_3nS3pK zNF$p=hGrkcIOkj>WzC>JQTFy$=!i3N^r|_bYcLZ2M7gs!{40$%sXUgoR`;SQ@SEgn zMnd-X(z&bo^3x_CsBwuAhSwY5xc%pUS5%40nsCC-ud1KcMW&6e5< z>}p9TmwVOBK>u(%gX2$8xw4O=L=!fQEd1VDqTeJBXUbagX3B*lDkoK8Nk$cT)Cz2> zCHhU4LV@!~R8Fx7o1+T+$qHZ4stC*QyNfuXBo>x_ZZMk0gO)^3UkPf4jwV^l#sH4yqcF*7k79bXd^xFh_GV&HL9o( zhbIcKSvskl=t@i?Wnu|V_NX+di&)l?AIKRov1*H4;Ss1j-|FNPsopunzjcP8-VB^3 zBje*EgxMOwP0I1ZWdg7JCt3vqW*UXh5LKC5SEPvPRJzG?F5CiP69U_&SP7A$drB<8 zyUtBVVHZZ8@W5>-R>&FTa~kEh*2GJS5-N$lI`iMtayL-Um|(|XnRpzvhC27K(;nye zZs%Gj%qmfFF!A-Z>$8<96Q8mfMbFa*_kK~_E&yl&R%wV9^H?ebCi4(Wy#M>v+BI0RDQ{u ze5h|QujVzhU=!}l(HO5rAfeV`7V26B^| zj|C>n{O0JP4rI6wH(v8eur35`92w=lOzf;cWO;hT8!9@)8`rP9&{x+)BMTOuWV)hp z{kjW&1)738`nh{K8>zH#*vUGluZF0$^-}wER}Hx*Ejp=Qm#^~9$pkCTsyw~Y!iUr( z4{b-}J2WY-$!>^B`*L|#C)Z5+^33CJad8P#g6H&atc>Sj0=ia5RJ@(@|kU z2vD}{f@R&**3=LeBp{w>8Uuw8r)iv%rc9?J6DxER&|uAWNan_I`KFzlUcgL z;5;sqSyB&FGXBU|A&j||m@w)KQ8?R|EO(!pGMQy7%N^^bf%>J`AcfN*B$j*zK1xND{0{>TQzFtG{^=M zNOm}fw$1U8X6Zpga2I(kEm?>tHL-{ZF!5kt#l~Tgy7Je6T{c4V#TILw7dINw&{hlJ?kcdWE%cdAwLr=7i!6lMo z%)Gpks|%Dsp*Gy6^=*pzhKcVRo>A~@n*?|*WZ!vQ&yTFTwd@Rr$wWnX(tM@w8QE^n zlw}RWMm|uId@p@QHoIY$EN*0eJ?M9WR02LR8;wT->9T>xt$!a>`oWi#3_x)s2sBJ z5`D0@LIgmGV<};1pObg>h0;`pGnN(TKCwqm5?`*?ij z-5}$Z0F7u<3+Tde4Mflb!nI6h9PJ{e$f^WmDCaH=8^WhEiFXF7v1qNWs9FF;3k5UIBE;c*jdXqj;t}Z}vdOJb zfcRrHke0)FoJ>^u1}W=K_4c>sEQ1l8}Udjqwy)YCXRgL(j40AWm?CI{C8H?29&ya0vBcSye=djmfg> z@P3W(89F`|FAnf)!^h!x1{IZ3UeTjRfqb%WP=1<;WoKW=|8`901?2llrmT5RCrN}6 zOi6H{ofJ0%MKD>~iZX-6+M?1Hs+`8dnvjqwX!P(m&e9@u*qO0kv&}p8srDt!8eGSL zJ`yax@z#Xd&y4kk)}({^v<>Dq4X`(0qA{Lm%jdPZU{lDt^a}FqL*^Zp`0>fx@X*T@ z7PF1GMI5xb37i-!yQhPQL8JmI4n$FHGgSDQ)oQvZ#2;;i{p}1{D1lr&g3*`H@tzSP z{PGxd0j&B7v7}|+7Rnjs-SnI|mnS|0?eSwIpha!G@DsnBw@y81*{|L4@T-_+TM;IzurJ#{sO=LQEMZ#L`s8Cakll z@~qhXE(n*--+02K)%yssMBxNId%|O>MWt%*D{JD+}xK|!VRi$Sr(qan~7_5zwVatHn@rV z7(5>G7%_j_#7tkB4%A4N$~R0@nP;9N4Tfx1MW=H5W{h<^!X4l3uryyb41zTr&cKj%dmJ zBCYBRLn*{^ZYc9&`M09VjKdCRz;_5-B<+<^IRZHi0`V*Blo1G(ccOawQcozq@nU&@ zPf>pF#qxiSs5yw)m|(vnEJ)@3R)ainjAAkAfL zGLpz8j1FAj3uBeHhbjard25JAjB_n}Zj3>Y?X-seJ+{CMCykd_6Ur*qzO&?$c?sqkHDilq%1clA1q`S{D#T_ zDa$RJ@Zn7mN#)eCd>I#oTX9XgPQc-Sb%AvR3+(PqdrcAtPSNe_q%7Yj?-xxh&U8X# zymJwcM+}binxqw4aqFhNEgH!uCHBs99X)S*(os*Imx%WFLxZo&YqTFrEkxAVkeiE& zJQsMR%>;hWsj?l)#TEL^s%1D=pkGNB6jYqnZ*HC4pr)fC=a>>#+!r22*h3=>orq-AK3;ijfBb1zK` ze!#ZeeR^-MpwT_KWUnk}$(dk7#sfJX^B_)DD(mTPAcWOpH}BWTD?Gk9mY!l;QI3lV znqan_c9Eg?{HNn37>Dt}%;gt@=}bxw3MkxfM$zSyx=RWFgluvQY#hHMVHad(%0xNK0-j%2Cgd3kOhWuyLRJzBKoK zn^9;x-0PDdK$}MS;ObV&4j8?&r2&!j&V0J<>4C&O3>v^tVgd&eL(R3A*H&%Eg!iO_ z8ePwfC)yL5i1a#zGb~t^`<=>avC|6}?k!d6su0PkFKp(&jnI~!)GMaz11a1@6554z zYgK+_yRbDFT$^)B1V}r;$%kz7m0x0I6Fg0yf@^bl>|i+R_DlKCEXQr{q(c@xPCkh$ zTmvjUY_D>clwsHbzX;#BM5BfB6=LZ8pf|LmEaOI-@;MLIJ;=*nfJ!dSR%JJ&`8Kbb zmm7LQ+Y(g1>y=f$*yEg6w4>9 zt*0U}8wvahfLRx>#VS?$D%Z4Q-6lQ7f@P0z`&Qe?b8QTWJeY~i7N}Lh3OCq8gw8Tn zwrd2Ad#jezd(~qa$$bPR{R~>L{gk_^kEq@bMS`Kb3wGjC?}{wc+58HO$p<-QHDnqW z%H4Oh9wi?O%J>9rl`7L>LxN@7Gdl}MMlbov&*^Dm%gYQy-}V{ilyI-3UW-l@6t*xq z!C}QNuRpl}Kzc*A)LP4r*mjL5=pSf#v!M|~KEQ>Qu1$rodb4ERh;txeH)t!!{$r{5 zN)NveAn@LoJ%|eomA9u*-f=9IeY9TL2OH)^oCeX4*?Dv5_U_Sqvpmofg2VDzuiPxZ zNnUoc5Ufo%r|vHuw}QJh+S1$-x-%ZTR2#lD!PEY9m8}@5`JO!C9q^~i)}D|%ex#}u zSQL3GX<)!B3+{yDz$I6^`#ZV~A#5xM$s-#1Xwt~ftdWmeBfs&ik;{8se}0em{yH`? zK$ah7hE;a;g_>_(gcC33pZ4KaK45{HZ(htjx&)!PILr|_(Z=Nlj44~ZL>Ah1O}e;m zk!j=X`~?4pYr}l2RM@4Jm~Jcr=m%RFXYeE;NiuP6!>Jb5m#m+u*;QUy?lZoh*4P}h!0;7l750SfgvCTlYz^L-7Wbrl zSLoV^f~_sG!;9f6vBc$+lb8$a8A`e?gsiTcb>C4>e<uC&kfPY~_=#N+V9xp0iwymAT&RH$bj>5=`2j6a18`wIC zofb{<;d6}k1zBu1Znifa@?l);2!|h(V31Fr7Tv7!GK(e=&4u zu@f^I(S(a;L>qnuU8<$vUPL?_Lv7ZQ?`t62F{WmEu_+OCmyO#&iz93>;7>M_1U{`A z^e4-tn8(g=yEDtcCc{WwD<}QFy}mC8dqZF4(TqvoxHGda^?%BIAszLfGq%u5Z^mP= zlAyzoMo&BI0En3-aqM!vwWB9vz_$_%;=vsF#Fi6zZ)8Wo?3wk6-?WxF!BNMMM&9W% z=1>R*aX`q`^wpU!r{EwXGF$GT;E$2-8u4fBSmm_9Gr#(I*%!Iac!pp<#_3^AxjpGC zX{B2clMZNvv!7!Ffxp70?Z}LQh|tK1y7JgXFdI=H0s!9MlNAWos|@@4rr8XyEebL z&8DzYBhy{qNLw7C2Ea}R{(;^>H?$u^a)OuaFM5l<$cMA>HjS>)D7B`ZbYogcMH&d+ z%zFA(6ZdH3KU-yh@$gSoqLcAn-Ncy4V_rGE_Iq=^Tu7A(&X+f7MfT{r<35#+a){ z)%T>G+(`>=q;h#`eyRr!4%Bb+MK)ValT|70lG~v%s z1{{Fo7rmiB!`|f9jnM1&OPr3_1NE|IqXu|T2yf=$bdcI^PTRen`fZTfl0hOf`@&?E zUz#^`tves|7_8s**kHY_$ojD(1!J|RHdZ%{8mk50OdGnDh5!cYfs7XPf-lkm^JLL$ zYNPT67Z|KWR*#Sx^6YWBS~B`fnT47u3`L0I=Fm&&I+|1a=v; z%DVc6^n2>L|6I>)dnK$WqtjEYUqXLN3j3inH?%a#yEx6cr=If@{Ie7ZJqhuG~3r)HWuaLyn2_w zH4@=84HMAzy)^GlCV{J}`D!h-Yd1oT;$S{Vv_F@>*7kT)TL)%>XC``JuD2yC{vj}| zppmyNE8Zbxi$VHEKeky(^!g6x1Now*K&1G`Gl_umxE{Pq;`+vLf`(bPVClJJMm=GG^MiT_DU1;`Slx?e~Q+ zetC_q)5UOt-mJqY9@kfDqWGD2rp0$qoTJnvjjnCG*7kRtI=4Bz0adk9oAC2~l$Lw{ z80W_i@&r%UDt@4z;R9&~8}n!2&fc`Dk0&_+HMpmShLi3}GkhY+FhEu6Z92?({mjF; z+Gw12cbau*%rrZ1Mx46x7Hg)}OQItT)wBJYUc<^b&4Bdo6)(QWMd4W*8pDEamp}VC zd&vohEufD(u)xB&6Fjty4VD8GY)j-m!OXhTjYw7A7|M%?*VCeMUU9xg16BvhGEwi_I9R7AWn`7rY7@v(Fl)#54=(J;a;IZ>yaw?FOl2P_WUc3lKU1^Y}F z4E3@YM)&G2smFmj@7}c3RcbSs=fn^5ML)J^M4W`a)JrvUUz-2AzuHO*WXW1d_P9st zrEdI3TG@Gj+RE)Nf13vTp9xfQygctfn*Ck})E1iw#ArD?C)kb>G| zjjq;y*%;OUec;DwO;1=&rUg^4{B%uHe#cMJ9GjbLz+m3N(^tBs*!9yi!zE3`PuK+} z1Q3kguuvqF*|QFta@J`2!yecRJ%4{s2ut%D&rUBN>Vb-!D!=m%`(kh2Ih-Hv)yR9r z!CYI;dN>4mV5T_NiDz1M?{uU}Oue@)OA&7%YZq!DqB8B_q*ylXRnGH~#n6eIwoHy2 zwt#gAQM{K>i8u4GtbvXKXkPIeAN<=u<%x}YJpB0Db*)-6og<(lPvSCo8AzxH} zHU@TNr=4+)#QtJTjQT$tZ_VRF_Q8v(A+OOrnB{uKGoi$g6f^hJK99#MZmQ<;{#2E3udf*CmoGOB`%~rC^(e$SObs_#3Gw1+ z23+Jdxf{rEJ2S}cN+A1m4YK=2Lw40@$c7$D>$@VU@AjUenhP0UH=zd`%3v#lzb~Q78^W!%E}i#qT4tvMfrXtz8H9Eq3U<4N z(Zza&vTVimJ|S=qJdzf^CMk@Rg$A*$KeEZ^C#2%hwA6K0YG5(6!iury?gmM`mmK80 z96^?u+f-1o=Z|UW8;|JZUh8CkLno7gIqy$tnQvK(*2%?rlq=8dWk3jwU1@_4{5dUr zXHxjcP9CMnw!fsM?y*wG)XAZPY3W}a(aG9OI*nC#!%RMwmibMs#r-CmsC5x?M#{b; zcLO&5Z0w!ZFyxi3qko=O4wv{haQ zs5S&g!Gi@)r=NCd7_4{WzRwN#|=I>oFp0I)F?Q&dY`U zxIT}`3ZouK&tSC>NN+KR3e+Nqw5az&eB;@`IykXJS4(fW7%5#>%KXgqPR6dBTa|xr zUFcUiv^JEjgv*mB))r;!*fN_Yt99nnHOlfxz1W{ACVyO8Ny`knGN*~qe2}YAl%0~c zb%;XR?_zq(R+G+0awtH*Bkx*Qk*9(r^toQGkzQS!r_Fv+#fegwHg1=Vl1w|Sfn4Mw zS)la8X26*i<~3?nK!#%1$$97_jS+wIomXq{do%n$m7pvW`Qe1T0{|WWj*>-o8PAe$WB^ z-oB!LA}_Gb=6#0CvAymmL%f!y6&r2Wsk+V8g7KX0|q2U+N}GiWx{0CgP75UV9Z zTCFm*s*z$IOjjfSWceDksC>)S`L*7PeN)Z)j@K-sQb@sp~DbH#kCE|HnE=$$HUBN}0k9Y{Om>Dh50 z<%)@Xu_89(Yar(k3db!MrgEIFv2t1#|4Q8C*p z_|xT8K$0s>_$VA(q^B_YDemG z7poMK!-<`Udj!L^n0wA{`x=c39HCq!)hT+3mSlY@OnG2(S|c%=h|})O;0TQccV>Dr z4R-k_Yvi98`6u(&bWw->lbih$wbegaoBb18^HqfI3mpO_!}Q3Mw03v2wQfb29kD~P zyp61mE7R{aA=5D~_D>YE{-3WEE!BgNO?7o8o~G~+iH7ijMx{nx^W10fz znRqNC=}OSS|Eo^A9V?f1mY1!(V9wiDcdk4Z__{mRcc&|DPFMS?)yK5nR(G3I=s(@! zu@qd^Ip_RiYiZevV`=~o$YW}ttG)ZeW9b3;=bXQ6c?S>2Qn2%wz)D=AkJ*(Ps(UO@ z9V-F*C;YC{)ymx9Jv^tgt9#Ccohv$)tm;@d=Vcwsm$$E)b3x~vvuDrC%|3h1@?}dp z)^{wOvwGFiIceDhNtZ7>w!NgW{L;>qYmcSvj#aBVR~^%&rLEQQ!@$kN?Q6O_FX&j= zv8uhhqx>&8<+gWsufhvBizo5Q?v9n+$r~R^uCqx>_r+c2%!`L~cZZddOlEESa_0%{ zWzrmeCbOd5T#D;Y4W-E0zGS&oHYUwFCX=~fRp%NjHYSs?93|UqXn#y5lWcXR^V?T< zhx3k-m}@>t;%e7FoU>OgbG_3{W@+jlUhY`FY{lq~b}a8$(Xq1oh{V-P+g<;&nM|?^ z(p*y})46h~^~JogSDJryP#=u3naqkc-5u-695g(S!v&iShY!ak9p-s_G8OCXOSaLI zd_pGmQ$L<|Q%Cm+nbE%O6Edl9`-DtpSts>Q%w$-UJZ3YQx0@?>Hj^=GZw*f(b!qqd z(H&pi-QL|XI;qA?B~>~6c*13{|Y$mg2)$*?PRY#2G%1+nhkm^ z3pRVdzmH5>$Lip6Em4w>PeZ*1k<`?iQf_O?b4{`$YmM(kxX&^a#;fIJ0ws2;eKb@j1235 zd&FB5KZWkl^kC*e;SwtH?6TbNIfx>EmIkt8W5pjMhsL@z2iYu@&#x^SsF8n`87ZRK zq21Vj16S$y`)8_j3>t_ff3^nlnDg6D;H-7!ul%}n5%F7q9DW)U3pYssCS|G)X<<}@WW&GF6 zHcTGI5H6#51w0{ z70q+^cA{j<%t|`q%ap`P4G#o2AB+5d=azrpm)nuy&Dz8M>!4s}xD87l;!k~PdMuA#80P&zo*ny5 zL^%yCC>9r_YMz;DzXx-^Lg@s51ZtZ#}4cY zWTS0}+OOBe0P>M32b_BS=PN3HlkA+rK$*V%rz=9ASf3x6GVBt5z5+whCQUM#y;LpJ zYp_O2I{A}YC+|4U>>Y->L(Tb3a+gJ*_C*G}i%uBUB;Odvu-vpJbkATEjmfvxgqXV} zp~N3}aoYbY!1Dn!{3+=^!YP#0?mR}PkUVa$Jzy7>q)EVS2`=Y4$hmv;>#2B9SgJHt zo&7eh+LIEP6svTudqNh?8}~pJ@ZNUUUr1bw?H@g7Q1R_j3zu%L zz#6Gn%|b*2w1Q`U-`JI{YyjtZ0rYS1<)8s*{oo%kX)8#pb&>C2z zKgDT@H}*bx!(KUyZprKS8d;&jK;E|3f3;lURsCu5Up=9$Locy5wG|o4rvv(H+eiBi zDwq|BBy++%@qg_Hl3s$($@32*{Z8cRdkSeq&O_D-s42_@gN_VxL0j7CTW%OroM|er z4Eof2FZ=UU{%u5t&8i3Yya*}1KTZCe ziTU;>sO2=tAMoeN|0?>^)O(c_4q5pl3u$8JKTW+?Nb4cvYN9~a4&u-zUo+2hmG`N}{8_aoxzu8Mo=wl2Gw({g$6Q;?{8M=5wUs1hgc?kgpr>ShsRw?)d z{sp~8g-G3zwW0ZQFFGzuxx}T6xDt&S)W-(+B<~ozs2zv@oZvSTF+& z3EZu9vSyGt{!U+xv6XYwMw5b?J-Rl}#dSV|EMKr)7ObfKs8DW2X=grIRd0c;ACac& zR+SqFj&d`X^EDG}+wKLEfXxqd8qj`L@{g#I9$b@+byu1~mLwJH1>zP^NEWAec---l zq<1F>x3_@abga%7d@&pQC&+iH{~3J2&`XoT&l2vmcxK_@Z0tWvZaZq>%U_lhZkAs% zt|;$lnuWq}c&~U2Rwq$WdTmcKR^Eb<+LpE86-oK&a5TGg*OD#jz0-{L@;2PK8^w$l zwc&AoF%_DDoGG+9<3zaXv#1MN0su%zFrfWvDt2=Ql9husV}#AGOq)E*QT7_J`*llo zKyw-`X>MijcTUCJlVxFS6U&mWSEc3AuJ2NU%hv9Q+=U*ov;YG7hh7 zTD%S!e`r)fS-1qqkjX2^xY|c=XSQC{`*`-?s6rjJY_8I>TtqncHU?`{^Jk0Ja(W-n zI#Ubp%)_!Q^t#=KxB2yHw?55Ga*#R=&`tF$mphFrLq!7rW64Lz{3wuL^;9g`!W!WG z;T4{!!Aa~PXP?8d#pVX3q<8Am8p+zC{3H|0$NNGVd%&uIw8AhqtIUP#*rn)By$j`B zcqc2GZ?QeC=`c%|uI^Jgs|;duTjsDvd3(ktLA)wEw!OFLHf@pdWeX6%_8OG%{0;5$ zBqA^HPS1o3x;J3MNeX&)_{@TP!(^nl_6=pEOE2ga3)QSkafzp#wu7^P$CC1zftF1! zeM+F@R)aT%j{dZ2M8}_%oYDR1bo_!NJKjBlW1YPCkagy5p^Nu%VyvZLk~@u|0xroZ z7Aa_QY}pnS{h4f0({af5XR3UrFZ8Dea&KnXz%|>=@zqof@6Ad8mK7s1B~JYQchMg& zFY7_GK#C*UFK-%@_dwX?mp!4^<*;ey;uM?SZ$<*U7!0Pv$S&TGi}TI4;lq^$gr>VF z(IS~rmWwRJpsd-8$-4^^LQCqM&02y~&^X?a`!xy{+6c((vXiH-x&2J7=n9<3Q!|VwQruaW9MQMP-$@5%_nmUEA|_`VHF&(S;VK{oP7O zzt}e--_Mlgy1r1pi<3V02SsjIj{=Jv%?;3rYQ020Ho_pU^36@aGJ$+EgLk?&S9-DhAY8!>j^BwfXo}%8TM8Brk=^lScD(jx9MoJ(K^Nm- zcpy`?E3=XMU==*eA=iQnQslZ*;GNmdBXy48>^}SewN*?0O!XGX_cyVIScgaXfiG7} znZ4C}#p6gdAX2cfGhs?@{d;AvlQQIxdG!j<|N-SX#&*!rC2m94~9ZTF>V6fYA2iXEl;dyXg30?vI z#al#HtC6+o<%L+n&g>w=Ws(Gd_?Ce+4xOhBR2L{oY9j*<)WQAMy>C?5J*|#n3QN7Lbx+4{SuNGhG9@ znj6#nbG-#}*T#|2)qIR<$o*4t2Sb|E{(;49R_rSOu-dnu@Qt24t^IWE6FxN7d*Q*w z+Ha%gonC)*sjO^S8P0(j+o3CG#?XJQ>5zUR8jV)0IU%m|h>>Q%F{k|iAAh?}s0k8I-jmn``Xxm0YL;2(_%^iFdm zBFX*W=-lrUE zT^mDxx;$n5Ng%jwGz8Zj0RbT;YZI~ay=lW=w1(yQVU>%J{Uj4f@J2t9UvDrf`++gB zCQeB^vvN_|fjh2D>-mz^({IDRRbxMrKe@71I9hI)hq}*_-)>->nc$=R{ONMJUD0iK zha_D7B{c%H^8;yXk6LR9>Txx&TW6Aoga_gs&=z?~SOBZx!*XrvU7CF?r%{`oVcRsS zw8Dt)-UyS&%KEV_at7V8!z}B_KV9XwJ&g3#9x*+OVkUGi(?IrY*lPnnU2YtMxiv^> z#jViqYlY-BMR`t47{=7bb%Sm=&GGNrHXFJ-dRg;$&Rb>jdy1YBTTj`=H+ylejg?QtFE*oo z3|^mqM21$Rb9N_+yd%unG07T{@UXlY<80|Ia%1a-3FG$h6nVa3&V@r3?82eDT|r5} zxFFVGX|uLot!8u@aE3$R0hP3I9(TA|TZ6k=W!z!u4MQ0d8%l6AivsQ-&Bki~uV9@{SQs>y(a^!;kmj?2|a9JdO+B@iF_V_xz{w8f_gw zNWrLV)5wdTvVcFtIz}9s2#|+9llJvV%v=Z9lL^-2oqg~U_9VKrFEwP{^Vu{zPLnP> za%}IcQP~rD)}GI$*{e;7D(G+2e#ht2?C-lf=;%pUGZbk~bB- zM3J%J+7#UD0T-=A#6iN*EtW%2NR$%NU973cX6{OgogvO)MDuyJD%;L*C9_3lTI$qA zKsWq{AC~e}|qq3uH;u0VCKWd6(re^L=OPtYIVp~JjM7_7Oo^`v4 zV7BYsiX0)*ATrOMa48b!Z)Qy7dMp|;s zlMRtEMb%p)XCSP8^Jro9Gm5D95}9=fp|rfY=${eD%;7w+jIAa;$i{Z{j$IHSW8=KG zOLvh&rt9Ficp%3%Z8bdETXg+Q`fi6&iOo9$`2TIR6#5y!NFMnAS5dvP6GWeZKDc^` zRlc=v5JPs*m2^bRJt4Jj=`(4x$)3+pc{me?EovdI6L*QWFQxOp%O-VL+2ZpI9TUqH z%3c*8EU#?A`XUyaE@{yMTY(Y#GbCH(0Bt~$zr{AbGbCFsXhAK0;X-Xy?}N6h<}HFx zn-a`#ej;%L`yD^aQ+omWxTGjEVrdUmo>x{`7|QeFg=~4UsG{;bTtMcj9O@n9j`ygp zB5*GH{uy#fmT?;CEy7p64T=33Dnr>}t|pr&dwWL>)NnSIb>YH5RuoY);p$|QaarHq zBkK3hknLI21~mVlAew)MJYw2`|L6<-GrSi0apn*=r@0#L@3n!a@tw%zdSC_Eqt=bc z@v-z4*$Del>(u17Ur#6E7idS}Q<;S&Ac@oEaUj`(5Yfr!Hw`M<0QQ{V-XseO#p~ql zsp$Rk8`4_)y=j`d0PL)#&yrJZ*|!olPTP#qj;mUuN z>TU;<*H$!=7BWUEKlFHjL4!x)$FmHg=d%qZ;gO}MBCiAPh`_dneB1c8GQDxW zZBH_8v*hVSTUYj*!U)z6aUwA03)VKrU-M@?5hOXX*#tN(bStDmLvlSEg4E-O&5 zHJBwouBqYgJT4~Bu0#!gw^PHp|OTM`#ly#L_*s7tM z(yqPRR{XAlj6I;Tt^)DB4;sR#aUEJ;#T3(}ykXt(!+AM1R#_54<=2`E{w$R_W&hRk z#*oJs$9O6m+R8o@O)7)E6}iVAnGSxaoj=)IQMt>KWw5uHr|1;$L=3SLCyN7abW5mF5q<(xZ>QgcTWl($pWo9P`m^MQ ztZC?P>K)DVY^8GflhZoyv)!1y?1wkIxqY2{!;orE!(HJtb0kvT2nNVS#THubvG&Kt zTF56V^RM=fW>y-D%eSn-uelA_ROYi(20T-lbJaKMsghehmpc3>W(K3y?^3sVY|6wV z>`P~S&kxg?xzUUy`&m0LRr#EU>t_4C?T9-3}M0}m8B^;p1C*a*^A`(Msu0F zlEN>R7ag_me`aI<#V#QAGYUUYD}1JW-}bm&+J=VjRFz`r&yex4mi#ll(`C{jVpXjT zv6r2I^dvG-ihq{MD{2;_jW)H@YK8-*+YZFG-{9`r@u};c1n4v6N3`poDk}#48S*3n zA2k?i_0NB2P0V-ozTSPv>^KvHBe-$RNKr zTh_b|!JV2yni^`yYL3CnM{26D%MYYL-VCAkPnD;7j~I&f8dab4<23V?&{SlYL%kJR zyd!HmRfhSOXzTQ^3)jj15iD7ZG2W#mpJ~0Uw@AqDe^d;7rhK0`kfk=b;w|cKYeL@c zOf6~$;-97f?`FFI;P*LzAIetUpl$8tdJsjz=4+aHt*w%d&n@n#$@ue+1(_y5+q@vWE!9uTgU^&Kv1s}0y zkzbp947meTUjzBTM$@-&lH9J59hQ*9w-A`1SzBRdBk%cKQS~c7R{7jU8tu=sUO3w( z5hL7nE=J$nsmeQxXd`7Pd7FkNUTH6uX7SYmUws%C!g z&*nt>l%X$xB`Shbk#&0uxD6-r&XH+{5FsEWmEP1`;ep?!qi`9^h*%>4hwy$kgj53y%iMV{0f|WQ76=+zyU?4RIWeVp z;16l_*N?7#`;pcE*;UVKV3w$Up{3RkfBn8E-&+F+SDzssXV-* z4FlVPBl%tn5PR`R4Z@v&OpE>46-x$yg|Wo+&xYA*0$Fne$+Lr5JU342+1Q)$L}>7O zEnJZikAN=e^i29o+5mwSc4>dBqs1JFi3Yi;Xn2c^&kTZEH5#06yW=(6g1iuoHEiX- zo-jAxH55$NmTlPB{Z}v7kCgn`@<_bHw|jZ7NGPNYl8KzCu%@A%3h;6HUs;>1FSb){1i6p0QVeO5@K*H zi&<+(PU5n{Lbs4gnf)3qRw;4F<8y0SIje*!Gx%&|Y%g2BKO5DI|1wjO%vQPDs}jf| zpOaH!m2#*ib2y1xuo4!2KS6K^=L6oi8JVR)ek`-R%IsL>RS9KBZ`!Q#Z;0Pe19o7!r( z{mqz`A&oAPY;`x7Le~*r*X(m#M-DK4^EC>jb3`V^tiy*`Wd7_x-Yr#J3MQ9XCD8vS zHVuG6J1VAb%{$X5)&wT*vaBd99XUQ`;!q*MX)(pDwuJiEM&Us3C`|fzmOeM^7&Bxt zDOQp#QzMoS{R9oaKDzWx&n!)f7t1?FWOb2K*2Sr@#L(Du?7rYesDr2~fOsU(uUH9)FSUPDg9*>y;B zc1d>%=gtXfosZib%ZXJLyQ|MTT~0h?mx(QgZq~$pHmxTefHp1*S%^#k9tla)wAw~j z$bm4}j>Y|X7$U9&2<0@RL?SU0>d@S6wG{OhAiGFXZO2SfFS6x#7CRC%xYZ~MGq)`v zHQoX-d&zS|54A`SsEpf5vIN_vq#eD?QzB!hd%+|CV*@cB+NQ$L=ELSVlajBW9bvrW%`mj7b!#2nf*!s z`a;ytEMZxnPFC0SS|7&AZ~bZD=@C0n=EPbKvlk)SG!g~3Jw#4r`*fZ~_^FK;7S2|= z-#?(ae9qvZNBk^0o)=5s2+{5n^vj%Ft9zV0k+wdn>J*i|m$11nblc+GQ)&gJpK!)Z z8l;kzhBOKm=NB{f3tQQWnbNC44jW8wmi%Uu;jF?=cm;XCuu6wDve0)ewFAT>r>1QT z(nfMbz_=I0Jj`82SbC#qrCldw2#A<0T6NmPz(nIo;&IhH46UrIm>?~3CjRiIX;}Ho zpPjUsOCq3%;Eg9R193CB@Lsyt=+~ObLirnPY z$=ry8Xacwj?OOZnA_ksag>8J+4ySPHs*B_}c%}M7dfsdz*a=`~PF4@fbI_e$RP=L! zOf38Jq$@OtCURzVZ-GoCPuHO387AT-;R4N=VPlwsz!qG)%m2}Kryz%1QS@`_Et9E- zTEr^jdzCq1P`}c@p)L1|>fymG!1PeScqt{8(9=*~ntMrC3Wy z#$Q*L%8wfEMBSWYFPwcyqgLq&^SPz1Fa(Y_Ku*4cB}v_XL4&BWy)TuU`#Jeprd*>C zduFBm<#dIu13W1)3zb{JIQW7&=K39pZ?|?Du;w+*=dr^YvE485DOGe`d`%0{HXf(|v|O9daLP4>o95{*w((Tu1GM+;1*ppK|3F$pM4%J_jW; z@hK-ZzrPoWrlou$i{Xy+h0<3v8k%00HFtJ0D|7yaL(`nU;?Oi{jw?LQBEN0U9`=$z zjE~em?9+WUoy3BnI9UP zTGzR%{EX@@NZKJvM?D|)fO$u7yF7Tx4ExdpibE5$!m&S zvTh(e2La3ft|);JMdge#rgwaJ`*=3`++ebAfv$vwDQOF}vGUemsUADQ>9@B(ED#{x)c48RdFJ0vW|APgnFRued z0#FjMHY>< z%amEMiz+HVrPZCZdP>#URlCWRh!O-D=FJuAHej!?`Yg(;yuGM$iu*_(9H3mvhVOG& z!|CrkSgrILWD9N>zCk~J>b}YO_LWNHWfhf=aLwe;nSvi?tfFBu|IlT&tjp~0d{F-~ zzI`MC(yg|agZ$@KRPOf-i%arRt_!%|bQ6YGk*NhrYHr2JFrQ*bdMQ{gpXsTnZ1bur z2VuD1&(m*s+68EL0NSs-s(h!HZr;;dRQXj>`FH4r%E>JFFY;km0@?|z-!EW#^8IXe zzLw-#zJA|*#SaG0FAN$>78*d_?<#~AY|%&_1fsp5=GCj>LAExzNj$Y!6lt`%X4zr@7#Fr@X6g_?yJ-)@!$*(ir zw>VT_YzPArsoVl_k*&c0l$2VRqo=u z(c9YqVHgk|<>@k>{=`$2ryV@ub}xU)R-q5B4Twmjaw%gdn}K;pQax){4l|-Z%T{GS z6h&TLR3fU|;@nTeDp#B4#;uii1KyvK^6oQ#<^9z1aRB%Up!_&nWriYofc!sB^8cF+ zM9v7%YlsSQfUh5SU%?&20yA!sec399yrc`8tfU1!ad5nsl8?HQ27&u49|VqVtc-)e zaTtg;^K@2OK7%$?K26DFNBj&c%!FnoU8*Iygl~skt+dGE?We}cWqHU-KM8(JcEe-3 zO~pcs@!f~7sXR#y+guF^T%Wape{)5xIU8nqPqr$zS%n{_!uKQvm|x^k6)h>_^JzYQ zCi!@c0lPyZ`8en}n61imBFcZ6CI^#D(`^~Ojtb=ahEN}%j@y#Y@3%VSI-9fK(zCtL z+^eCvS7F$CAC#qj;p}Z*702aBeqyyGE9q_4VS>%bU8H|9Nhg|&sT$-OuZmKkB-io% zn&i79Ys&zR(f$tKu1da50C2|pHad3$EBj_(`GQyFKIf7Qk^2it?i0w(dMiOJ(xt>& z{U+t_%v9yY=u)0$aPD+#R98Ga&re zFhIM#D!QeTTurXsNiM#p2wmX(XplMD6sa9%la*$Ao~UL^x#!%JoB6sEL}#n`cEB_h z5K6Rb)E>@<|1;BBo3T8~=#cYsgt+=Rl;K;m2jq#~Vx7fiUws;`7H-7s!&;@UNT><> zSw(@-j>j@(8E{AE$1<_(=)*8mM(hhXoQB;^@n{dc$#FnJyVwJUG=w9{gf2ztKhz(|-w)x}ba*6$^@~2H97cqYj=W1fiS;j$h?;1?<$IIPb zOwp??1r^nJm7jQVo+At0ZNr+K_f16_#8KXv70c|H<>tiY0of24t31CfXk66XlGasZ zU6{|Q2@0(~1oSOQDVb450UDvB;vRxX<&-kYN*-e8`XbLMOPh87IkCK*?lW(O6jKsy zCJ(Fm!p(H6E${dkrZZAG-ogR!5W_S(Xc<6ikuhaB*$7>M^i-H*Onj;)2+{ajvdb@e z2g&i_Y|Liu#Tip5Z+>ICC~iwMKJD7F`x>V^8q%nm&uPAZNpj*)GxJSJi3zfkg9iX` zv~a(EMPwVPoC==W4Jy1Xqiw(iHk2z{oH0yW9>Qt*FnS_Ophr_;lU8KLdR=c$+Zt+Y z3)wfn?b1$xXO~s}-NtJUt(x?@=5qK}1~hHCO&eMsL*{;YcC2z9)jT(@$#M3)C2iMC zp=y2HE^j2`i^_J=i4Vq#5dB+Y3%54<&LXQE8A^VL~ZyQgpmn(_aH zFZd<&{R*D`z*AEdi|n;UZ1m}r;g4CZ$Rm*2E8HH+9`i6X`F+`E@V$5)Fbfm~nqQOe zQFah$jr=N8wylJ7+ppX{As=?D9_ed|>s<(1Va+@0Z>OopGF6#?;E=lAIo5cns&UyH zifUSUNUqU4h&+caW47h<>|J%%@S%)j4dnyuRu46_rDC;O8&j#{Pe6Y-$?wwLHUd!Y zc(AfaD-K?xM2t@7sH5Dy8HUO2n)kY_Y>x5*x?qjrz9t`o0B^}wS;$Fa&#BTMK5$YZ z_QqR^sW5}RF&QId1ry3BlvVC$uo0cZq;uj86(LJ+dd{#Oq)qcCU!m#0a=araCyA>W zt@|DLjvJ+?*HCg!RT1LI^QuT{O7aP^KF^Jb6V|-8Vs3LPb6hI0gY7ck&4n8VV6paW z&y_Dz%>-A#Rb$0&pvmvj%P-Qm7gv=yByv(!nqW@eR#azQVX}hS+0usjIOg>KR8*qB z-m1%Kkhs&qODfvH0?nwhgS+Fl8J8qu!5TJ!HakF#1(HuW)JB_vPFfyLP)V+&YY!)b zNv{$XTrBRYbzfy>8SudkH_d7+qBlOFtxMC@{Y|s_?ALaGf9RdLtNJDW1o;57;ZKxbXBeC<)`HvW0PmTj zLv_E+z}@6E@+Zh8eS`i)Sg2-y0S{2p{8o+(?6fw@In86OvfZ7F*? z#pxb|^%57K{OkxOq??uyD!Is7*~SuCV%%d^&-4LKcx< z;M>B&o5(?d?PzLRk08{%M4_JY>QE(2-Mc@r|g zpJl4Zp-b{r=+@6NmO(DGW-Y1!hd(OmXZ_kgke9MdcL8utUH#gCtCdb1c2Q9hWSx zEkrOrqSH$V64|awxIi$ZNR&_vN7*sW!UX z3hjRtDJ5QC921>wibZMaD{hq+lwk>sdH1Jk5VB)T(b%7gB~3($i^HVEqOkoEd7jH} z{-C(gvT48?F;U;PP2w7yD@3@vrIY%7yM@K!LCJ1tAr*c1%C$U=$z&3EdDFVSo7bjM z9|NZWzT;v?!^ZXd0_7^1Lxi8zhLih(4K9x_Vwdgiv(>-PHsX?5f3^KT`X43{i$rK& zN&977S=Ll)a=HgLC183o4P|zIOYO_dp7hI!d|^*$WsS2nLE`sg1KP$#*J3wbU+=}b zL~id18>)Y#UditI%_Km3QL0Aq0Wkj_gFJ;@n8ePRmIF0girvvEY zlNxPT`9DxQNF|_QAci%c{=)|4lAWMxc^&b3M(Jjv9M)m@7b@fI z^H;K)M*e?Q5Ddv4qjs<2g$OqrLLy2YTkGe<@&(uW--6MAay|U~vG?#M!1UfCpJn*( zv*9=9;+Tf%W-39AY~B36y?wopw_4W;P#MVrk~EUDVlQ#OSa3;-UIgpz*X?GfXy+`Z z7mUTXxL*tR8k<_1Tqc;!bWjWPImQF8Q@{s#=}s*z+P0+i4;r7btB_;QdCEl4`#DT- zal~c}tx%fVk>=06A&C`BRA4Ra;Xt-6pH*`Z1G*p@Y2zb1v@xq%b}F zN8L^;kw|dd^Juw4Bt%N&|nkdSrgcqBAX+M$zuN;|>y=n2HTbR56>8NZlH1RcjO z0?HvE9t0#5hagj;8_tI%zEd-FfrN=C2{3UBjb+m(@1!u3>P#(4<+9bei(9HQ9nCAs zb4Hsj+s|OfyVyf+8txERmE|QDp5w|vZi~xv!mC|gmeN9%vke>wZk#6)4{){E)gI`4 zB93H&4>#!y&WgBjBqJzM;FnQ3bBxqNN$tW>7`gy6{K|zRTmhm)=)zI(<^f}r3|%-D zCDzxXdqs)4PW~{sZIp9@G8LhtKD*FSpKTb614n(qL)1~99rar`0~;dc8FEI{O5LL--N?*nUNxH5@gN+KeLFvdMG!&sVYSh_`g6TG`p|48uq-3SOQ|r?|yR!^ku2xVPIwsoDVdJ(n+X{icOBXkRJh!dTRiJDL07D8v`qQ~`4CH+Cm+)7&mRbiUyI^m0C(G&4~6vG z#x90s?9?-;UtwGx)VUjV`oZb;iS2ZLw|A-8GXCC$4N#X z>2rLJv9zpBb6ZQQb;+4+9ZRZLRd;4rb>i&8an7u%W-ry?63d~*it3fIAuErn!YzHS zoaW#1Zd&k}AOpo41BsQ%F!;SFVHt+Lprv@+sw)C~@`7;!GqlDGb55AL2?D_l!rkDB zg_tsvHB0yg@ess|<_$4y-523Jx*`K(w1ZUPKTD<$G3T?Q&xTG#ccV>}1AN`-qznYe z4Z^jD)-%4fDTmvf5Chn0SO#WcH?quH`obY7wLyWD-2%{gjRdPH7eGMTJ-8k{aAAZS zB2eHcEyBwY;8(<6=k?R<45SYgIBO@^^Jpa7hdE&AJ3?&;Mg{7Hi@dy( zp`J!xz=H+)yLLBBA8;i>Rl_0yneZBiS{(ZSFl5YG4wO=Gvf9TIUN)6NZPA*i4oe!@ z+zWAHzi=rwP%B)hKGfq9F)I*L-1i+(FML6Z9jWHnB>L*pJc#tg-NL0f&b(`390o?3 zlo-0^nqc&91YPduqg^83hC&X+x^k$HZa0WN9$Fm0^6~aC<(*pL)@$l_$v1-5cAzzQ z9~G_*9D>R3gFqV!3cF2pv$bZ6t{~_h^8^fiAX*KwXa`%k_^yC%DFA|}41OBajqb_; zg5z78-si)nyKC0H%8DxJI+}!tnex4!S7*fq{a_7@m6`N_>4 zW1u2r)2s}e0deuk0$q};(x&_%^gyBfQAaDCdJO&whq?!aOPN4}=D-aaSZEu&@YpE$ zFwRaeM`d1k5GQ2li6`9JCasm52V{#SCrhT>yZHE$2m$zs+CzHJVy^w z!tp_l72UXkNQ~0BF-U*6hZT zg5wO{(`v$5J^g0@&7Zh11Um z3AN9xQ*0{JbZiyR1?qZQFU$7Zg7$ua_Ee|uE9mqir8`~o?V#?9TzA}F?+i=+H%eLr za>IV_`cCj}zG4l&9v(L(t~6`k)K?;g27`j@a6UF}!Oi~~ z6#N#5F?On8jJ^cije&Lf7}$}g$8dfBUwPcghIXqd=qk3XY71f`5E>8`wku7I^* z9#OdU-g*yw7~b_rY!nBsu#N})Kgl~#_aUiPop&?~QMFxuCR@!2OlGu~Ox+cx_VM&2 zHQ3A2g{}`RY_>+p^}es)h8W%=Z-#v{L6-djE;dYHPX;vTRThoMT1l6ON+z z#NRTER4(1zj6x7HFHLnQ5pN9IZE2P$#tkFg*2)sic%fW)d1sbYKpCXXXR#y%B>bJMWUK$*Q2|KuF-P zN;bo)?2j3$RiN6_{e)FP@6W8$M7HL8LFHefve?AxG4Mmk*Bw?m(jJt{IMzO%H*F2< zBwQh08;HA#ei!qt3c4=u;8MWz(EhP1=vw*sYxTG#--z57)#Ekt@n!XRb$$@Jzg3T4 z&G+K*72N2yD(EVHwCQzZizcgr*5@5jk0O8OB-YcvjG1(8#1Ld51;;BVO0>G*`@zSK z;A1VD&h51-=p2&`TrSNzatsG~DxkW9@A2TB*=)xRhQO~w(>+0>mx7pDHq9T~ z=m9jkuwcrtqZacq&+$WQ zDSG>{3kTANgu$hij;1dQ?h9JvJCP6t+tTSx6E-p)421ZIflAL)j_S0&oU(kEx_va7Q zK}yfYi`AaYcu=by8u*Ar1FVgv z(Lg@X);pjZo=wN8?->#>FNklN)Gt2fuVD)xh^f(}+DaUV>E*2L(P*vcM&(Kqa`66D3n((~?2#_chWo9+8c3nUi&y zbU~R*R2j`qHazO#ARRH_GsW7R1){f8+qXl`91uN#z6AM>jD z$Wm+_^fjAX7c&| zuxV9rcX8_vWmhayn$s_OiAaLK+#!S#e?0Xm=x?uQoFY>Q}7~Gs71b^oap5HsA;#X~$*1kNTos*qDGOk1g>D zo6a1y;sh&REL|8deN_D;th!un`lVXU$W|dA;6~44v!MS1{sXo=5*;j?mRTjr6kN3*Yx~Ndn69a379)?sN;d zQ(WxCal>%2{-8av zQN+gW7!3Mfh56f9`tz=Y?;rY8Y?Q9dkKYRXDE$!wbxG+~ws0%IiH*{h30nD>FEC(& z)|GArHn3be5F4ehP0-32zMzBX%aw(#Fm!Chpa}CkIv5)f4pjaHZ9p0wij5*>ew<#7 zjnLgagH)M`!ojB;0Uwl(pu5ocLnRvD)xA3az1z(ZdQySjpgBV8CFn)L!WRG(!5;GH z?h@@i8)@$*bA*1O+PlFVq0J@R+mD^hqv+rLCE9x`(%x<62tA|PyVV?_O(olVfx-4( z4YvOwLGb!gAXo^tmMM92j4*A5lUj6*mkmyicx~aL3GFg6w7tinE{B9)EAI{ef&mzg z#c7{0D$BME!h|nbKHUIl9W4AjwFPGTcP@S19Hmz#Sd65;v&H&er+62oMrI!B- zD0ZHs?pwjI_)I|$=V9-FDFtmbaS{91#&8kdcnMG?AX2sBbekT*m*fb3eNrRHcZ)EB z64Ts~$9dV$Vxx3N-ZATFi#eje>6<-`1bdRRU~NgzouFIv)7U88Syb@4o<>*&f+?VT z`D|~maOu?IuJ6H%@J^ajm_>W@gS60r|6x6F{d7IA?O(@6>G}y)<*B})FJtDuQ8;tF zDlg@+GS8z+O}Q$Qf?&kXrOV7w#LSP=Xl#VGk6D%HIaZwZ>(SjSNB3Kk8ePu^zEpu8 z$b;JP8HQO0!l8!tx_l!I_4EpJESd(6gFGaG4z_Q%Cp5MtJ?XbWbcp zkLDX~x+msG%KoI=p~s92q)TY?9{A)C^k}}9?t{1Bhw~0XC(p2#G_$E;1o#Rk^&eQ}+(tBVA z<;cR`AnH;3J{)9%P`xH+p?@;7AYkvKo(2FJx5`ec8Nn|T*grCXy~-Q~=P)iEgRea7 z_TlmwJqxP83?xVYY>px}ZuLEeFC}?4ZR9&(V;3|r_i{Bf?*#3S4da`?$;_fnuTTb$ zSFObX?*{TAP~_fwR-D$!fuRx8$FrczCNnZ%fas=}PdD=VdOkKvH%_p=KE%D-+QZro z^Cg?(+6y7nw42bkdnYrwf;o)`dK}dFgpb*r@6ao}+HIWkFOkNtwD-dTUj&DU;ar(zzVMBJYz|jXo?JtEaGOM8|j}%o_CEdhEy|!B>{d_gd z_F0v5T|8r%^!#cEm=n$stV+5z&N~9jq!+jtL{(NLeT|F$X0;>ieK_A2u9-M^Ayi%0 zIFKZ|Y6ze`gF(SJNZyhKjZf1t_~<6K)gtY`?ZJ^At--b3J`c(lly~acqKr#xgDeOS8dcfq@FVwDj&doa0}6l?+mp8=12GNNB& z4<*pcH&&1BrDfXm2PlruktyKqEK>*u2(JJrwkN z*0gi2D*E~AM$4od=STxWhn^6z6&C3X#aS)t&B<2S1Xg77+O4eexIrf zR8}D=#|~Qx|D@9jfG{MVNwKg=tOvO925e!YTp=niDN+z$|8#XPzW>VjFpKbBV%?Y@ zmN;>o{B69pTy?H_No%U5TtP}X1?i~oJvj@*`Jov}Cfs4j^0}WC9ya2rva3CE?g+(Wv?xMhRE1%z zZfnhIiC9JS##-=@>{y(394CRgka00AC6~7bMm^N02T8ad!k>m3xP&3kB$X;}`=0{* z#d;>tHSp$HM0bD$7otxfCO2cn=~KO+99S9dKpohxq}Yp<1bbp2EFiV^21bRzu?N9T zSNTAP^}^@13MX5A!o_JtFDNF2U?K_gWhRXn8EY1Oxu=)R0n4OU4ZlHb7cifMcEJMx zm%?vmQY8OuDylN)VDKSQYo#9UWf_Hq(ISFRW&NHAq3UurVc?}^ zB3&IDz|`~$w-%#5!h9p-99#gKBDf6g6Q)0kN&Dby7SRFj&l~K{Aky$Le!?PphBKMI znssE3z_b}a;+j}S>9Sy&K>HzfOj%Wo%mG7Py;c=0yRko4%QWZE>O%sMXAf9Jzv6bs zy!1p^vD<{npz|GlUex|(Fy_C)Afgp(7CnglLEho}bF;@ER6Ld=+Rw^He?F*O*Be*Z}GNi;7(Npo zU)AZM*&1fPR~@ARe4szmv`!y;830~`Eg@{i3qdfwL@%3;xM1q9^qe*QuJmmEni_L6 zupJ@Ur9P|>Y58x+iMuSsck4v*lBpzECNSQfBNF~e95jxCqWq&ikMwC~#YY$=kujS1Y$vaSw} z)gK*CA)`7~ooZeMK$%D@bn@+$vwV)sJkkO+R1p#f0)Pp`G-(q_Q38N`1f-#iJtXAj zocH9~c9JGQC@F&^mDJ;;5|GJ3$EqlJTqe4y$2$;Y3;H$qm92S4KzJ#GOSF)6>AvDk zZ%=Rq-QVNTBZg0R_ehrPQnm(k(iB2$ODf&b+}YXnj)B=sb4NDK8)b!{fk9PNZksa1Up?_ta@EvmXdq;2Nbb}g6Om5^p?U3iw*^+hr-qf1ZOI4>@bItFV z^#=kri6yuHcm+%5q+uxvH<)+8=v&hbRT5h)UUz5(X-)i3t)hC~`vZ_+;_YOgnxwp* znBrGX75-dQy(o+Enr@S~;C+*tykMw#l!33pg(}m6#V#{ZK?a^Ly^4{9@&!RI%*h}> zS<>^o1g&*aiMLq7I5|iP`eGw)#Gfz0;FD7e2I=Z_*OHaZt70(Zr0SFj zfCzpu3IR!iLNU6K&zPsN00q)5_Y1{LgMLPv2%1Y$#buIwJ(}hKWTL5sd@G8DK>}$J zSb2eI(IWyYrcVKDaiS56RWM9VnFZKvb#_@QJxN3LNAtqLk?lvf{@-yys?=VT=e1}u z!)F&>z-hKGfdvaY1WH{BzdD4Vpdm*QIh}!mGA?07L7Qw}*9m_CaME6IVF_2j3d|`! zeMa)Wt!=pfGQJ4^ohTxkbNU!S#5e<^V+f;YNv2B#fH(r?0KcVz%qu`L?p{#6 zqOCK^Ar!+(*ya)8BMH1=V|bPgYGOF)t#iY;$QJ$A0k4Y2@mw5a{^5@e>dQ9eryM4( z##j^w*?c!A(fn3a#&}H9K)P8g^(O_%xRNDB8PIwd2>E9=QEq*oVVF9v(0y}_vd!| z{r1Q9&vxzcxUT!-dR)inC2Rv89Zz?0=|;X3VZFU3Bl7WZMgU>Yu)s@t0lH{sZSuRLLhF#%z*6O+`y9RlcC7%D9^ozdQtQP%7)_?$qO0x&-b}4`iI*>Y544?F9J#Wwd)f0$Sb!MMMTdC)i`iDEyZymL2*%x zF=vXAnD56o)_45x2*tUC*b!UVw^(+Xpt`CLiNaU;!Y3$~rBc*R# zh`;r`>7oI55o`5l3)1`PiBu6V*>3;T{ggI$2>ePm?}-k<6+(1KMh6c7eiH)QfbYvSJJ_GdDq!)tY6TI z1xv)sE%8rWrH0GATF(xMzL_YsoY40-WoLP>MoeryS8r}!x;@`X<)V37O=U%$_Y_&% zYN|>qYB0642OaRqrwBuHikhu;Ms6la-MYtlKxX!6@rBQk0> zc`{nzLy+f0Woy}KFA+}GYmLfAe9k`%3#cFT%WPk_y*L(NVL3jIyk;@-^uDP9%YQEp zCmjfDW@B)Jy_1b1(tEX1oEYLgYmpPy8lr#tj>vp#T(y2|<=~6E0;aN@Hxo=2%i3dA z?`7wU{=H(-7z=94InS}4Tx4_i>XW}skit`-q*}|Q&61m-+9&xvgrC2X=h06wd%^qD zF8c#AeE?j=f&X{_e6RSxNf$j|pZt2N@nAmCU3$iIZ?M6 zU0{Bez(ECn9hsZ7?=N$#HOa0fQ~7IkWG+S_#h3P$5uZ6HlW(wg?0r-n7{xlBa3y5B zzkWqv(lA@u4XMPZ0BuuZ{9a`KoE4d8TsPZJl-(YY-L8<`CZ+Eea4GK|T^_9NLLvLu zUDt$Cdq$<%>1?fK85j@Kqqn9<5YwZ)pIHHFRr`PY#whMyOU2{6R;j%w<4m+yZc*M4 z@^2igHppkrc9=~&jVs)e2J$vBDmb%`wUBBhjl8J$+m3GX1>Ch?OBxkJ#pv=N!R-oU@(@{FtlOr$aCFJ4{8QP>R=efRs86Z#7nGV`tZXjGq%tnA!S5AZ zR_|($dL3SeOqb>mq-1fjp;i{P2@bPQY74WCoV+#q>nBbyYNT?d-2k(buDH35ZTZh* z1NHLiU3>DU>s@zP9m9jy&L~e^nomRg?P7WPY~-cjH)5cTMgd%DuEguzX$ya zimw6BpFGr5ZK#ll+Xt#NXdNLGozV&`jXsS0*V{hy>XJqU-nimMURXn3uqAWH4@z_? zdsQ^+FLGmtXlW(9R^4Z_X=AhL&T+@iiNdOh7+?jHO{7Ober9^a1m!O# z9M%8rdym!6=c4;k8UI7k4CA8P}Z=3eJcd&i`#w()$fV^*>sl#~syCOr-r~ ze$D+IbKB_RMumrdGfr@@yJ;YbNm26;lVb1wOZ0t^lWCxzX&`!flcM!!Ukl00#4(IX zn)3gj8`4;znP_xTE&5 z?EemIy6?tZ-!$3=|Jhti1$>t&53^}GCaLPQ|90-iB-Jm6NMnrukEzVVwUe+9ubNn2 z>6@l&Ic|gpRt6-z-VXi_?%c_L@<}UZr$l`E{V`t5-T^4!asWNIXLrL%GGDR^@rlUs zd+kYwcFo^fIgFdCm{&!3My#8yM8Zl0qr;rj(OgLSF>1rjwG<~OX8!0=Qn)}6DJ=w{ zNeLCpV1~M5W&|B?g_oaz&a(y?W!>R684oUxXs%!ZKKbVO$hbm$z$KE0Kh7K)KqQfEA9A#>lQKUGMvRFzBa|^Y-)D~2FaN_HTV%$jIQ4DuY*<{~Q z5&6@-+WU&^j?41fPH(oO_jAQEQaw@ibo#h?8gTQ_)b+KSb8MGx=brdl=Lpgj7w!~_ z)}7y@<-t#Dq_1Lh&(PfbgVJDk_0&m7{u^?I8mOUL1OsFP9HDd7mhgI+Ik7B6EcFPJ z21f2Wv(8QrZf>qT^}SVnpOGlc=5CqNyF+{Ol5agBRJNnI3dW{y}&G&2-0|q}nD)4^&NkNJM_+0;fb1 zaL%#w9Yyov18zyp<=0&tK6`4t))`{ked7eJ-Qcx0D0HZ?-fo9E3uu#i3+J`H`Lemy zo3tt`-`{`M7wVSyurt27YuSzAT9B(O6rDBRdE^UT!Om9U;Vu ztZX z?t+a?h2IV0%GI+G9uG|ifI&~O7D7Y!4L&Q9*R-%kx;gMF=EcEO|1Q&_5dq_+8FNOu z#^j`jHl^CPBAB@QvP@YyaUE9(rUTH*D#7yj%2R)Z;+s-%;tgEik)N_USFlYCcG z)dQ?0TEugZe)Ew;p(Wld|4SBJIl8etife^yGbWr?g@U`{4O~knDRYN^lcW00O2>>N z9lbMm_L{gEcSZ@4&AD>|P{Nz0gDgEe2M@%}p0jIyICU1N{XelEuP@VEb&G135-bJz z>dc+K9LskNjpElz*8G&+cj-l(EP55}>*_{?InCR#myb5+*QosiR-SJqU*qtW@GB8S zx4~|=^==(Cok+!%y+*%m#98+{>i9qYDyHGT!L=p3m{*)1-+xyfSesCOSltH}#U&a= zEQiuEHk!o6S`&3?Wrd){UYfe{L&D3JejB;`4k3xD9oqNZcC8%UGngo-&~|fwrH8gN zy!?mMkDrYi=nK&Kr}x1=oTSk$_EaiZS}|sX;V|g8Py68I?dn@GbZqHHUJA8S8kp!Y z-yf+vPd}5XdkHD%^^IjD$KH2E&RXG3K~nD;-ypiSC*MC~L9@0AaFMh1*2nS-sdbR% z{3G{VQ`zanrQ^GRiSE#YmzfKT8UQtYeD^uxQ0+th)N3sEw|wh7$;XRlDh$vWut?9# zE5UKWheqs0v-So@m{f3{p=jeWjvP0Lp4v@>WbxT7s*&_=RHhw_>BXZ3++88hC6MV$ zA;gy2r={){zz&EM8r<*ccz9|l0F9*~dwbAAn`nO{?fruI)WHEu@k6DKEN)V?#&s9X z2g%Cym+)(_lLS4ybI>zm->Qqfj7h|k`Vl^$o=AKqB2(Hg;*Xj!OJuz@{Ry+T{LDba z68czh37t9r!AEy`(kMAmh9v2i8xYFQKWC(Z2dMbCt%|cMuQG) zJ&YIp89mA)K5%o@FwvYvvA8u1`1E%ZIqi4xD#*L4I~UKAeHBC#PRNt=Vel^+$NlFZ;HSTVVLTeB*M2bqukvqMJ_#@!*m!Vni(EQtU3YaaTfWTD zHs`l@!O#jNW6jb(zBJk8L5P-pp%qo{y{27x*Ha_Q?IbpA($Sjx?TN*@m`^WOSz=@z zH?5e!cD?~LqTBVFufO$(Pr?im8jz|Fg?%PhkM&VL+pVZ7-*f+_8Z+^Y58ar0kRdTW z^N{fbBV@WC08Ple4!)eIa9n@kyOzV}e3#dZ>BBQ?L}=$Yce>fjZ!CZam$A%nv;2i$ zDO1FHZu;j2JAT#E&vXw|Ux>!`8AaS~`e8qP9Kv`JoVmMmEIn;Ve=sgkmMc-U3%}5o z?B+1U3{;>0a1$oSX4CvV^~^CBB&|Z2)cK0`4(gNJ{4D5evnghVa_QJ?3RYGkx1g+$1=^?hg3Y%z+8xY^-{o6MD@u$@ge5)Jy+Dd= zCE6i#a(*)Nm4Cs|Y8ZJZ0A`#OpOUQI-`vG>^_vUda+!_8Kcz@Vuua=`GwLJ!XGQgP zOuyoGS6Tf}_JQVyD#f}@F2?}s&D zRyHF=}87sA>xK-B1c#=4ujCfYm<6!#Q zYO$64V+~yDD#Y3e=!-K_9*tk0^}$?eC@XTXSF`Ut=&xhVW86 zn}!>g+&Jccw5AR6)=+qmjTc-jzn-CUnjUaG${zRK@87QE>$XTFofl-v3hy?lmuTlhNJQ<65G4tG+l*b}@9}+rRGi*zkIB*`MR_#39U!OxBTw z;M0^J&5Ene1Wkehdyo@=df@x|uttdX;<%)MWqzXIPxX+-Pw2kEP{MWMdx~{aAoL=} z+D7*d@;=W%nKz5mzl+hT6YdA=$@J0{hsE6zmgwZ>A$80zP=I2# zfRt2vK0zw{{oz?Tv+DN=sa5~pHgHa};QxyRe5;zs%E)}mG`>l)+x<>289tQlbl;v5 zmu-FIZ_Rm>N0P_VJB@4h!=bA}Yg}|$jSYPa)?oH3z}Z5WWk|cAtgwLMcK8>y@ArH* z8>a*O_;6qlK$2PIp7I_96B5h8y-gjsvAs4OV#jA;n)367)5*MR%EYI_FB<;rq-bb7 zFLtuAR9Y9FL9;uGnA1YF*kuRCe2h8pD;3P=wR4u^egGYkY;~A-C&eRe|Anm>2C@3h z;Y`qR(8raj^~@8|n>YD3Cbsyo{@NeiNB&eF=be?_E5fn4ZR~T`YwUVvWeD&yQdy|^5b@|(In9E~}w!*1{7xpO0W`9K=yNE;`UKWM6t5cO7nu>Pc zJ?57}L->g9bNAdhe*wHhxjny|Df~J8`zFsqo)a~A4OpDm*7@%8-A1{f19m4)^SYlL zm}_OyvY5J<%>$+nU?a&jlzBi47jc?un2BH&-j(`m*l`M(cn8rweL2nABHMQBT zg5WdIQv^n4QAykgw1;`fi;@=kH1Yedo49>A|JsckiSl9-)vifgU271h=sUKkR|Sfi zLB-u&32^k9Mpo{!rvuHd_r#GEZM*Tzl3FkH_JHB~?4xY=Sp&6Hj?<4y$Mm-p$0g_h zeV88bHb7oI8sTIwjhIp74C<24cS&jXUDco!S{3NjgH9+?j299U)|D0i zj94NwonU5w;N7${(9i`?-*9JxY73oPUnHDx^ZR|S>F*;x?E-z+FY|kq(P4XnO>wO^%NDw{-XW`Xu1YRe z1LX?lxXV*@W_K__d_7^g7t?t1ol`jFmLTsMsQ93V`M z=PTK&YAEmaJa2yKeH!$EHctKTKGrD@T4cv^3b(OqePVfO3-!Vt0kX?_OyXqs#l3g~ z79?b<{O%ttx;~^$WhV=CB-5hQ9C!5PYI#Bt^>KN9)s;`FtY2{~RF* z^~?N{f>LaJ?CJ~)e(7gJSyGVblfW)~J`{b}T}6Fo;jy35*jNXq#v!Zx=8)OjD*fGf z<~^*%V7~d#j5W~RWj~HRkjAb*KOiFrOMWcSzi!bQZ+0#>`?;S8iVWnJ^C`R3;)LR* ze5on&jwG;!9t5dtu0vx9me4#H^P>^-E8jTACVA*^!dAE8CY=08F#r|CFwA^0A6@)t zOfqGluDy-$36tmpo5sI1_!v@_h2<}_?{zYbjjn2A56Zhu1QX=mohCnDc^$PUC!RwqL zX8kSZ?D0uQ@OD(o*N1o5+x$OZcp8j!$G@KU8Z&)%XYm0K8dvs9SSIxW>USiWt@Yqp z0~Q$mFy#t!bhymR+9X0C3KU%y#F{W5kb3Xv;~l@F$5;?yET+svw$ACZ@VLbyK*VX> zyLh`vWo<_a?)?@eyhPP$O|lOzbRZGRibGYSnvQ+q*i+LB7A^1HNb02A+5~@{-FP~W z3b~R6>V{9_*&KfXyC|o>ej}HMsVg^J?A)70&^lPPdG!1IBJiD%Xeyt&5lUH21Liiq z%e5-?q8@VhnHl;_Ud|*l$nh@biR*=fP$$XMpiKT!d+=FU@&L~%Z`DFgYf9>B#2^Y- z_MGPTIcfY~j=G;6^2!8NCu8~6RXFq{-5)0JbANcMV*m8f2>Yodu#Jh~IpWh}Hu`7p z#l>nj9M#c{P@WWR#n3vm!XDBvi+%y)CXVG^johoho@@}hp+`(V`8i##G{G)g+gs;+ zgz6LB-Q*}nvqTeLfG{nh{5I!mLp_37NU5Ied6lzvyy7^*0XlVPhJCHzzP@-UDVf3V zJ6F=6{dCzo3sux6ko7?A6H|eof8^YN;&3d`fn)O1p;VI_#(?Af#A^H!CXTW!B#&N9GYX@ro#4p>Uu|k_;*AU!X>c!z!44n+B zva$xs?e_IB`a2IVe_OV3*sGzAqOzQ!Js3PtiY5S9;jeH4Uub-a(k zA$YW!l#_|))0X_eHy01N^n|!Q@{1s`&&cP=GhWcM+P3SO7j3U zzU^tuaE|XR&GmH7*6lfBk8psCn>h?*3Zm{4y}#nT&jU|X$gb4WIS+G`j&Hv#EPFtz6^Uan`72DwnE*`0e(fbs$l~)e@K3%vUWT^G<$L%(pbheKf7L= zb)?x*b0dN>dL-fDg#r)^7;>~xii~DBtt)Po&Wfiel}wC2PuG;GyUT$`>ppcH9B*jK z6nDC#N4}->u)Pja9K;FV_^R}YyyuM#*SYhrl6dOZgUH?VU;%97v8t|3LiU|Xzvt0Z zWb4`YC9K>m@*}6wD`rB|apD&wYm*FX!eoi`Z z_x2))q~BEbM{X}z>w7dG=^cb<{#CuNWc22+maD*0SY6bhDZ=r2b++U=Ax@qvIA?CU z%~}bSb%^Wmn|W&l3v_3raz-rUpm=!#sb!Jv7ZdpSwf<`XoF<{U^&@_Br7PNbJmDHo zVY-f1lxx}+=5>@7<2NpvO9hLcf^c`h3sc3ucLX$@h2F;>H=WQ$O~@OO7d4GkDUJ9az_}WrP!(=b$pumpwr^?dPD~B4AZzj z-)Mt+AJE&V2*=#V%>{y3fU6^!olVoNG+F3|zn-@M7jn)RcK$F78Ty5^s#UWm9Rjuo z$seu<`MGn6uc+OuxvhvkeChm=3^v8-)GKmIoM#++?e(5^==1iK#mcYRPNQFnBj6{4 z;uE`48AhcxO&5phb}F+Q$3-`54g#v6XO_r2(#QR4aeC=1)tMb)uK#X%fHLjIIy$!R zPwWW|H(nqv)CPI#$ zPuJ?y=iQ5Hbl<+%k=E>T8`OnqbG$Yok%eFh8kGAu(V#LA=tl4%{Y3hd8lie=YzN>D z4!~mK+Si*O^tCgoHD)}qyth^!Bu;#S|Iteh!fK7dH26hcKOX(~8OW{!gAVN8-SF}c z6m%47{Lxo*DF?XOAW5&<0S{vqVuPR$mZ(Qj5%becB|_r)DRRKws)Ohza0jTxoJVgB z(FJm8y6`n~uDZp|1X%C<8H(2NUDTLzO}sg`L^@cs^#k6dBb$C7y52|k zhEFN74FD%xao^6$J@{s7PP!4oM>c7^v@K0+f)gTl#gONjt!8ooMZ2GNl*LJt^dG8j zFzYBqVu#Jyb2DLldDTa^ur{N?A9S79ztwTZsWWx%gWf%ETdjfvOn1Me&rM^?d3Bl^ zHk|rtvNvYH@lRM7VN~*!>!EBNOoD#0KIPC0_IcCFC|@TK#oFL8f48GE6m!|UG?e+Y z2fZ!sd(L-Bo;sa;^m3Q+(}%nQJZgFM2QzDmZNP6Td&x(*x{%9`2U$(rR4LNfp2~7w z;m?}1JkYi>p_1a{$wQPGs!a)O99H0!^RI$&QlQ7vyBfh|V!IkVqBWJw_B9V&WE#p?$?DKllj1oqzRDxUwU>hfr{ zUdKB?p33DPOHPE_?ww90Z#On^@7?fc2p62O(T=9hkZ(1C+H5~d6W_lR;AcrVh5!gH zhq`(RC(Lq=;w48nh4AtsC;%ncZ(wTQ|9J}pfBU7wb}aU51F{b9O>PR_JL!3j_&$!O&@(b~Q&f zdgb2fV{3<$#Ic|^)7o8DIfCArj8=4kqi`EfMEDG`J}(5nHuzWe2U&Jy^QE|q&+RYI z6rJ7xiJ&Z!dFvux$^j-EWx&)@mjhW+9L**o@ch7W+8j!&45nx$UU z^=0G6EU}$fJUuv^v)WzvN`Y*YPS$BS9L8;AjAGOteYsG z3PVb+oZg@lyt8u`8v+83zbvakuKb)V=s}*+0lF`{`sQ({gFKN_sjPtA=S15&#MRm# zG?R%@EE{ZmOH-CyinOVDx@Lt33w3@AzOz5W098gnqz_M#POown5mUJ>Y*YGq&_@=d z&R?oa?sT>hK{n(hbs}z36hecSNDw~z$I;|higxVIDAh2@`#IPEHpOp z9l9UZKEt0#PRey=_ww^hTP8MA{3k2N+gn%vnFWifhT!O8 zTer3|i2m2d)Thm0=OOy$;h20XTce)WtH8F75#O-PRqO0%le9=vW zjrJXs>Jv63TD_z+9qE2{qv$Ed@TyICnAwW`H$?wVG?Wb`8+X6#Xz`Pw4$I-79j9ZL zT|2B`?}|FAEm^=F3d9~ZVBq+fUJr;qwD4UxRvCa-|A?a}!B9^BKJKU4sk^zm4h-}f zm%W?KD~t<6-05_c!v@b9Fs!=_6Qmu!iYshC#mR5wlIkZ4^)U$v+;iqx? zrTl9-$3!+(Jep@x@35puZq>aDy%5UuNt63uK3Mp6YT7I#)+tD#fpnIss}j~q>rB3j zW(t%R8m`#H9Jy=tJ!18YWcsAM?osE0GzcwJDT1+6SwQmgd&u*-OAKy2PH55IQKg<`DQxfaT4E90 zJ0aimY1~Q2KR{7V&BFT~n`5~wfN{~Av8A6>*AIxnir8RDDPk6*m@e^_4{FGd$hhwI zSu6Kv|GIYkk}(@*LSi}4XbVOWsRR+gX}q2)UoDotXiU1XVMgL~E|vK8;uey)BZetc zFF%$w_ic!Y2+&&8=Bj?Ni#)9FldO((U-BN3GD#2p@=RcU$%WY9u+i2&@d#fo$Kvjp z#j87e|K#o{6?VGX$qEVVl_Hv&GNt4l$&{K;eS|nKtz(`^MNxW8P5e-h%4GM@j)4 zAPdBOG+X)LMP!KYWPlKr4|nvsu-rKJnk4qskJ99&vG-RInXarr!h==wV5Xjv9``ak zRm*q}-5^h!i6d zyh>^#_Z9{8m91iUbWrA((TC-j0ca&?SyxqAA+{|`R!1{l+Bo5po*ae~_AJrQ({sKZ z@|^L>_-D7;_f^_7IWPp*N%D#9KFDb_;QJM-1HV3ZS^K*rizA^d$E_H#eLa}P%*bjq zah3BUU_9+6=Xfrq0pvV8z#Sq?xwtEXsV&tvHS5$(r(m>B(&BL?D+OOj4_<_9i1P`P zvcONHUGwa~1Db7?g=r=c??aGnv=h*NX>7_+YlW>J`JYASo zk6`>W@0`S;fX$m52dP?4F$PBV>qrs$jnz#8>Yu2mw70QmpH}?!{U9JP1Zn`4A)fHh zzKV2vw>X`cxJzC)8#Kp>kS=+`PEYU&^1C7IE4u^hx~XEsJ~zkv28=sfiR zM|cmrzt=|gV0PBn>OsF^=0LfKXMm4rx%+W7Bi5rYrzco2z_{l}PEX=mn&OkRkB7uq z$}ZtOJHC%1s+!2~#Qiun%qFJCu0n=crxg)&cZ07`^~%4(hh8wL>IL&`%tiImDe_}wGy^RZ=amlUf!~|t3HDTW!&Qk)ka~CBeER;#ZQthl8Qgb9 zvCVMEJf=j1N6pSNxh>;ZhFM!CzZey}UUkOgD2pLT_%s&{wy@wTrfCddeM0!4s;jU% zN&XQhy+pbyK?isTX42U;?X*HaNo22nCvi{9`>+e^Gzd1zk_|2~^PM8Zza%!6?xR`J z6ZwS3QtQn`YbL`FQk-TTeR1%>7KI%mxTh z`2y00FfARR? zB=E&?p&L>qf*#l~j(?_ua(}Z+MDrBBHG|+!I8M4J6D=L|znXCA!ezCz|I5G$-&b_z z+|=9%FEXv%+|vCl7cH}-KA-sZDCRQLCWrD7&eK2^i>ij-I-O8pF7Q0YP_x^<@h3RK z|6w7?5z92~?veNr{v{h1g-%o&ek=Id@uDdY7zm(pdm29TftkIM0=A&fFnilY1rV<) z8Zrp|eA&m?0~w*ht~+uooqI=JSo!5FT3wf2?WYQ^OhCWbv5hb&(>Q{)?=>wW=qx>qWDG7!6FdWIcAVt;0ec>tcm8j63^<@ ziTJ;lzSwtnt{XFLf%GXmEzUnGsLYon?Y!@GKV@sI_3H7$2gic+&y-7^28ZnVHWRry zD>Q8wN5g5|k-ChG&z}tztMoV;zU<+OMm&qFGU?_8O}~E`|1>Y!9*8#2Re@LO@it^* za=bPSo0BWsn@hg1703DDSr}d2+=t=1onJCrBrU7N8f-zpxfXvkFbYbm>sh=sp!n3j z?MLNOyJm;>N8w$~Z+zQfp5i$<)wm+#{Kr9@f$!*h6K(fK0zl{{Ve>za=YF17xIh$& zv_@^yz=NWc*}kJLiywTG^=BJ@9&f@pAkXPnb{7s=YFCRX_tXS3>QvVii2gysRMH;% zOqm(+{=UTCl&}-$68ePu&aTZW�MZP+Yj{U#J*eh4AS(p7zyW2(@If%a({{RcsTz zT38X=wR9`}tYus|n$3NUJT!1_&hS_&>sPy^0_7&{CKIio@jYQ>#e`Ijq9sksWuwM2 zma-Pi=ComyH_^k5aGqL3cx0(1Gamir020gKS@K6+^I@HSiN_2{!sU{zqxUbmSbsk! zMARz17WLc32hU6ZAjJLkr`gZX=ZTD6WA+{yX8D@x!lCEs>~vw>Y=A?5+4%OAq@N?h zL29U{Q$L)|HWYgwS5*oR_?u+D4lbi<%J}x9>1oeQ!0wz>?xT|i2zWk=MUh%f+f9y% zdjPFvs(alh295D{$;nR!HDhNKILLy9Y^p zs^jM8^Q27|8I-^5&^g!=Y9tbJGGMbFX6V<5AJGG9lj>!AA~q}3W-;d zd2U>zC>>oU3(yL-HXV(FvD_AO|8`zyV#usbd`#Ez+%&fepM$2%aYZkoXH#iP&J?fv z;v4_nY%^o~BE1)v`!-iGpBM)7*QS4?8*T@7^TLy~lE`m&OPUTmIs6@VBeolUQ;Li; zkFg({xS_VpV7WfSvSGukiQfwvW%}A61;d(LQ=T zcQW4OqUP~dbGC~z%$x`skM)oP2@+jrPcY3%PhDpi0)O>Myu`4#4a@LQ@D(aInHy;H z_77|0^=|hU5I9sDmpX6U;|;Zx&ZAKSmEfs>UBl(VRUrWy<$1`&MK}LjyQ*7ezdUOK zCMYwkfK@9o^S7KO5p0T+%};lhTE0+kI++;@WO=tTQ{#+#iL9^ddNVkLnYjy$Ox&}J zi`A_TJ6MGh!%~-{xZ5x(-Y{J1Sn@|GPH47RHSz3&2UMa7IU||$YN(o={aJ&1Zp#nP zx}|pk@)6O(w`%%T@x^>pTuCR3;;6I?a`p#wZ1n+bKHxgGHPElkcevI-Qsz&U0Qh+! zaG-(?Aq#9Al<%b9D?xjtIm$K=1b8rW1Loj|FQWIkjKEZr~ z-M$Rg2zK}A-P8Jm&T-+TFI^XPF`8gT~9>tiM&$HXmV6tL7s5`F(3W&fk96~EGgkhMZcOD zFi*ZA1#mbA)1ngnw|ndyp!BaBzCABpx0@ABGC|q}$CrX|X=~_SKI+MO5214!i<}LU)f_`d+BWUURSOT0 zcN+%0l^rMXf-^q895CzM2{aqL+PsUW86ePB)!D1S0gnUxI>^(KLDXAyDDCu}K?4;l z8~^%`ykm6#wtRioFV7DDWh5hmNV#>yG<198v9-JAF|$SAN02->5OcNq3rU1-ru^_bFf@?J z2nglgmt#0eoGE9Sz#rsduuir3WaNmNS`7jEWW0FfNWWY-2dD@l#q{t6&b?g(W3Y`4 z7p3<|HP$`nz}=|Y1)EX%%AKMXAAf&uu@CIJ=aFxvxIFK9U%nAWd^)s9^AM;Gsc6MJKrDma9c@?0L;ukpn1wZ znLkCJ12Y4DPQ$GldazbKk>&U0Ae8h?DOd-PMF$90vI>te10A>_PZFdQg#pEOEWbQ& z?;A+dUywuyEy&`euC$15wS!Z#XybXeU8%;A)EodF@T`o$#{s7dYx6=7!upK$T5sEb zSGHS(J3fx{u_~@rtrco>7M$jkTwnQ-1oC0Pu$@6E{-ElgS-V@dfxn`=DAa5Pj`nGL zgR`3kiM>j0Pf#YvZ0|cPR>C1>d%HE(W)X)nT3U(~j5|~1m8H)eIjSrLPU1|D+XxMF zwz`qHh#7wnr?8qS84ZKjq*4}w>e_fZ0&9PI^;A(sHLkP?DR%C}WuveW>~VXeyOQ4% ztQ%6L0yPQ2Su5C%Re@bISCE&P`>0=(Qyx6F^d$TMl>&1zq%%78RKh$9bAk% zyIlFvo)M%jM=ppvdNKlR;WK&>zpAVX0lFtPzIz_#jyz50L|wU6w&~w8vQzP!1;6s% zYl-2!s9em^>ZOPJ@=3WcHbuex|{=38-wGky-hiJTD2^vka; zUU?$i`tsLqZSR$X+CAKaCrbhPndXIr<%XFuR*418N49oLy5}zRa|gRRa#Oxger{^K zv`Xmh!-k3<>KUk~z5y(Ct2p*7&-3u{P7!w&TG9 zR6q@`?gj=6O{NT5Z=N;IfE52mKH*5He*u(XR;u#l`@Fz0qjF?;S?N8@h~$OYsgC>s9%gE_>;^iY7JfN6HROH> zIS$6oy!9r9c?HtbWhwi1%m~o;W*4G;_|68!Fmz%$KS{0`(TsXajWIi&RoWx2Om8NX zh+sCac7S~4P|CVyHLIuSHwKKSQs$#a%RbK}F9k1fxxMp{LM;?DjT|^@xwqD^KJ*G+ z$$g+r47TSh6Bj_p05`lhnKg+yt zjw@`AfZ7_H`ed%Uzoeb6A1A%->z#5ZWrdXeM#lprLP^vRjlBIxGaI{Q+cvQa^MhHx zE7Yo~I`-;%&(`%@T<8jGyN5ahub%|Zx;+%Tgj1_paYE;{_`2 z^wATt;sEbDF<%$_*hBvW_4 zp&P)WxOMOaK)pgzll*mkA(#cyTy{D*-TIjZ#p|zWtonBr#kQ#31HmfJ=4*@XnUDd= zc)l6GQ?63_&;z|Enz0nFs$08p0lI3Gv+A{Sh^sa^nHk^q63qg7u0{d>pHGEZ<>eTmV|e|RHCF`x};yN>ujhe zSzr(85+t?tqkt8>Pw}aMyLz!e4jR^&((rh9$vc$WKYcB(wExb;vaueyU`?G8Jl?-x ztR`-FE;5yF&a_#waQqOKN9VdD(iUu%(Lv_+{-SwWfjTkTbnmZX1X+CctnX?U=pNI} zW9Inz{7aXV_Ue5&u?ENGeS@uYUL3~IBr}pg$bsjn!^(2)6+T_&Ro8vsD~Rd+^?8Y5 zLUp{0Q&e*M-5{AHh;=3_?%JpEZ*S!vfSO3Sp}&A9K}C^J(}A7K#45CLWh>QZ?nSiNmX!*kx@oRDDdhZ57Nq3iWeBm2vXVR11y8k}f2A<)5RT#-eudd00=>wbHCGu~95X!z1#Wy~t^E}#cI?Oedx&`wj?o>3|Q z86?s`Opc4+fSZr}%6#p2%BteJ7=n-Dtl&3UFwIQESf+se>WJM(=^w}`Il~#}_2@tR z+ACrMGVF8a)%KZ_ekM2b^JfHw1XF4=<^|nzXMBMF)2`%27goBXu$%bZBy67ul>QFZR|O#koy zcgUd}R#cS3LeU9DeNNjgz!UJk99(V{OlaNr3*@E0=`pgb z3OWxW=}3DfX}pc_;kSiPfihWxNL-PQ;cwA6ErP&nBd@XWvt*b%px_4j%{n2GThYP_ z#48?`dphUMklOXylcYi{LG$;q#=44|TETa8dmFHyq5zxoC&lB<;`_xi+zKs@7bt(c6Bn0+U6TG>;YLduGcv(Q7~06kI#V z(~0zplEc5`h$}I(^ca0`q9{beYj_$i&6J|ZGFG`?)B##NKX-BZ@0=sh{**I-<;F?# zXaEuVZ;VbP-Z-aRyhJxlnUz>W9kQFM^BqRgeniLzK!auQuq?Tp$4r8g4oa zozIH-=`}3oK2G^y=(XQqF^u)9*=4ad9(S)(`Ci*a+-;T+znxFKv6v+`*7ieVw2XVD z1F$RRjJ?ouzZa}@3+~}Zp3AW@YJ7?j=Y)s1IktfVXS*0Fl5;dM%#Vhz%b>D&m;P;= z@Am*cP4a{U?ooV%*M2=itGY?&)|%w3uckRJq+?k;_&EQv`;B&t(oEN_1C51hSAVre zB;li+D+YXkf9WlNZpzoydVTel1^K7xRi6BwueVI2Vll76FzNV@Bm#xdOkoD7vq;$j zFmhX3LNOvtLOf)bip&NI%{_2Ky}0jXT?KqA$IKqfwix)$jA^31c z`_w1<@tp#|UnCSwHeZGsKt-6KX?9-J0rC-Q`i@>tupe0k^bz_! zxl`yy>nXQijt><JHxsInt-fva~ij51wUFRUFjCt7Cp^}7P zz@tR%&0Hb(V#NMz*YusJ8(r`JDdqH@I-C`hi5lpTE!1OOMOiq%-VGZlV?{J4=&P>l zppJ`tfBN;RdvsgiGUz!}=VrK~rooVwlchXbklZrIHxm%NwlVnIIV#axy@55Jk6F%m zD-C);!Wk6qRMAM(QST$z63IDn)O+kbJ22K+bi0^MaVY{Qm2g_H)Mm>lUBuQ|C4``P#wlIETTu4sUHnZtv=v;&t`P`Tlvq|pt^}wTAA<0LbCLk2`b?hd1n-#G7{jhsa){g(o zLa_h0b2|klPxJ~fzso;z!k8-PW-&nhb!%DfDEZvlODgdQ-Esu>1M_M-L2IkoKY#R* zp9JaNU+dei_m;(M4}}J8HA!$Z*DA`fCsZGwH`d|MM)~#9qllkp1%GL;WpG?B*kFg= zg`5#Ow0>MyRv=!B02ut&gm$e5(*&*iU8r8ni#Ott+l2C^gJ&eLJxCe1|MtOej{7gwsENB zzvQ<49nRG8X1fQq;D5~P&5n!K84b;+?N{wZ^lgY3VQsS2azTjp_OBf^*q&K4i_y$$ z_EE!Fh+>L6i-kMFFZuJ48Va7GFIl!Gv_hLk>_d^=1QX?;!a1JNPLkWAK>ljhPJ-Ma z{gHcYH{TG^!ftEM)aSi|{S0h-^UL88**>I4PJ{anbO3d=s6A@1WcUnKm!;dB5E92f z`uVD2Iz>sezyFh;b?s!eViSSadDry-Mj(dm!1VzuSB>Bx7AZDG7>gX4clrl% z>tjEv+?UKMoK#BU+;V%lspLx|uAd}6{-3b^#oMz}X2^{BzoR5R3{Q3m3%p}|D<>8l zy>$Tk&Zy^^SJ5U$0OnMi_@*Mci(=+;{G%O7n_p6A%rY*Xk|;Yo{p91t#B`1}UIcN9 zSwL+G{iiK%Bs*7q9K3SR{;I%TOyPMIo(1C7wh(9^n6j_JgmKX?jHib;`eUo*^QS51 z6`XKF7w$&W^BdfBIHlViLU(RUw|U+qV05qkC~-2qIhDISyP{2Zn@?9K8#>cmNnQ9h z`YPw}PyYeQa?(cM!q1M!68U-~%XAyplGL7*aJw*RCcFL+)id#s;oTT5S5?A)qG{y} zxk21QeN0Eut)x5d5Fg>kLpSal1>zW8+#{SgLo;2H-fyHdFY{yh*Xaa}d%Y4(3Tz|h zey%M$@V;EQaDEP$N0=d>CXFG4keg$f(+YcAqmf%`YsF`+=v(1LHFH;e+RMYzjs51P zI1?b*l>5uowlBS`l=ZvCfVE*AIfgBKlBsIEb0I?vXZGfG zXJACU9Myc`%-Hgl$SaenKCPm@-0~iJ)pz_V;mg!yX<+!lj^VAe(j9Vjd-fqTw2?{A4 zd)$p1uz5@3)OXuvW88pfhc7BP%`5bLR=L1{tw-*mm;?2|as{YZ_Uw0&yY{DYBgLPJ;@?*tbZUyAntwpB~Blj1DTnskP2gX|C84*XRCcmb~ckIMuFp&UJ*lXf~ z&Y7V4(98S!Q<|?FF;G0Q`C#H2;>fzvnAFpFAMuYPc$H?C?`>?sKHZiS-~lL*_$-H+ z_3o_M=f@v?iPHikn$khY!ST)ezW3^Wd`_=5FS*2a5PaY*y2LyCb3n(6{gouBlm!1< z;nLV9x%b5R^Z&{T6AWHT9VsP!;WzM-Mtq?2)4WyHrpZQs)iS4U6$QvLSr(zB~W0-E2xss8C{3JfkhQGHavR2llpFkQ^(PJtOoU%E zx!L*|j&YU)&LLqc_@>zj(_5Qd=AvyhZQUkwoNo{v+7sN6E-*(t7Cml=)2%1nlXtD_ zyxnn(26+(cG>M-~PFqMA`1JzdNE%w_w1LWgkFYGS$4YRW1~i`y1Ml{Fr1c4VrN2be zbl>OxaC@-7w6*GZXZItywoU<17bYV9aE_zh*@4=YbOCLu0(tbt;S_ecr1q%B0&+|akxfCJtn?+*XvJi^M@E2zq(^3nFCxH#*{w?q z3ysZmrJk^mJPT3ACxgR1zLx~DLpVR6nw2BR-z_d|V0e=FR}qcvP1XaLHBNUOqO}1W zjtvld0n6^hS$&BTnc_6uMJM&`(p#r8cjj8EqJiuibTnGo?WpeUps%j`jUi!^vr{=< zj67Y>2kDT{1A*wnSkXCrzK8jQFU?;54K62BYs(W!!`(Z>qu z35iZ&F47|)386?ZxqHN*4_k5ViK*d5<6Izt3orLSDN)dy>a{H8QTgSe>V>JW3JKGr zaAc12sS&p)C~tQ0Iw* zB1~6A8;_V5=RbGy_}GCEBDVl3%DU}OJ{E6p=s?~*_;#l#VM{7cZVmfQEd8|a#&F$L zwA?OqLAGY#(VESk5ks9yp!NUsTOiZ~ojZOz6d?nBsGJz6{DOP0>d@*3C_y2nHplU# zFlpK8by>GG{`04jt_IU4xM`Be8ofrmG7ec z4gUF>+pc2lZSkQDT}+0TzCgc_K$%c$f$)FRe<8D;COw#j-d2lD2oV%*a!9tYkO zoJkN~*D9 zWgTd!daRJCk2%#rT<%;kZ$>5(S)<5@W=P>rM*zf5>R&#JAlH?^wO^#Ljxn-k4?wlS z^suw>T&3Y*X>c89Nw*mQH`{P1G8qfM*Ti=IrI8Jme;Wg2|F>&Ya9roaiK&)ha;tF} z8ut!gOnDWO*&XJL_@^J_4A*bsoxs90?6w|f2BUjZr~}FDX6xpi`%f3jcu{%4F*Til z*@QUb(cyn;>bwXeGE6aEIZe@-8>f1yu({x_tj6Momp8Q)oT>rcAv)ZRG}g4reufaL zd(WT8L!~ycOIltrPJGBFJe(PV-o`kgWT=_+o8iA(!a)_=Z+4o#&6Qo%*eH4<`2r)e zv+>=(q{49Dug|;5-Pw6nTSfoGdpPE?6qwrfp#FP&rDLqS!pwt|0D?(tzf}2i#WD;1 z8s52*qB-9S$yXxGB@_wm6L^$ci^d5=VP!H1R|LQ&-qG+J=e_j4fv}(-?1BD zj7w)`AIm}lJWRc3tcZP$VgGh&v2(yXp}J4w%GMr_iWdcHZR=gGQ#bnV{+VAXRSmyL zSmm;*|CZRCmZo=JGeVtQFHuK3?SF&VD6usoR({hiPOt9A_J_HrDFM3tnp)ixxn7gj z5QIG8DFHd5HuESYAc_AsX-*9h8JD?n$nRl**?_m{h+pM+45n$y`XSkUt}AR5Tf|}A zl2T-&mW#aMn#bo40<>hk_!}9`vbhLbbrp+qEN*dkJJDHt$v9W;SWbtdNN9LJd3U9g zIR6Jd{7pwj;qd(9haJWNmqgs1u-)u&&arj7?1MR<9F0p?;_e>EWN@{utyRlsEd>#bR+ zqbRNe%+t84x0rGlYlD+rS`tgU5U5zDC!{?pvQIloBPsphet%cTqy9oU2-0zeM^Wc) z)=8^7153`b8g6bMSz#Q#*yI$z4~<>ya1mP#V;2iphfN~uCU(o-d zlP@E4D_AyzyF|)=AWc&3r@vXZIZ$ulNMwxMSZ>gO8O`Ne)LWbg9q+#{XI;Mh@>%8= zi~MAa>{7}f z;7OdedefHJkaEYFpwYVLi!$s9eC&+5mSN*6;wFftGzbWESn&-x*$S4NqxizX62}jr zokoY#!}CL1y?<*U8@wgl^c&QC&fy^V zKfk+21_AxN!%(wi5B~=3#j~&9SaQXHqVD~sUyVRN)g>G)mT5#T)UI@V7bFzHWv^|G z?dkLuc^RhLRWj`o@8*n>7O>GI5>40W-y=bV=h82FLsW!%GG)Vm2#Mv#&<|A8(Z`I3AuL1O zS4%0bG}I~#9uVfsDo@&B`Pb+{!#0Y7`hiD((e0EH?|pHu-QWnXL>P2MhTJM2QyvqP z0g=)92I6ax^pre)%ZK&S+vqjd>_r#6fw#{XlYFthxZ>9NbVOY4F;p!8l`Dwx_RwZ9 zy#{IIu7Y7>BKnWt=H0DXF#qRWamuTZ(^I8o-q&4>Yu7E33=`7J>1Jeb{0F6oZwe10 zDGDM?n~s`&kV;)$8$t#bIJixFb5%Oq!_Hy9kqa~DjbAHJlQ30EIe2HghT$Q02pu*=G9bfzx zPI^aL#nJ>#e_H;<_@ae)HmQ`py(vhEUCW4yz_s179~LZrrc1N$$c3A7_c_N_n&R6{;l1>Nag7XEjY^ z==>9wUe?P}WpB(!19r7mEtfhC&&*f(X`&VrOErxAQt=Y8fbinxGF|~D4@MLP4or6$ ziqP0<87l5#A7 z;<#Z~WVlk+n7&Cmj9E^(3QDs6I;)R7MMFMY1V#iB4@5|E_6rZ&ehSKkX_0*w%Na78 z?}ECtL}9fRawgWiTHObVIEkO8cA>ny$tswmruF_<|Ig8nH+M7Qa8ZYu65BT9 zaJXeojl7i5+43OVk_?|gNqY+}kRTkPWDN1);T)?+th)ScCg1x9i8!HN=JK~7;y6@& z*iAlXysg8fhf+Y$Hr0dht?_oBA|SIpQ?ZICf7}}g8`64`!mkwrCYer;`x!kEA%SP` zv2GW%O>Z>>$5O%z{_PKOGmAP1C(951ns59DYW0E$(XTK^$NA9=^id{nS;Q%+v}*87 z*LE`IFb5i5;Qmu0v*0`CQeATj-DNj&0Jk=1ko*uxz0N)ubq4Yg#5#kPB%9gj=v|V2 z;8*PXA79wnkRsy#F2|Q9_(T+UY3l|pFi&CZT+pHm@_;>&$bKGp41Yc9HZ_lwYG6{l zUZflkkw&S*Pv_RRh=d=A>hM%1I1I`7??DHV6@W2?#3DYLo@A=TfpfiH5OkhK6JQAQfC_kWXh zQx|7_m5!EMMlL$8{hb8NM}oy*zjcq*q9G~`9}tO1F9G<<&e^i0rj+pb^DhH)pNE4+ zR-BvpPVL+im3OnZd_I?83g=%nd?$B8@94^2Jc*k8G?q({W!QW5jBs`8Ljoi1zG_pY zg|WFLo82?_((L0tLiQB-wXXN%B8r9Fq#v#%>@q%m3#CcFO_&cOr*2IC>ZRw`zid!l zJ~ufY?M^OOK>n*}gRJZHnS7>6Vx@4sa#4jf+FCe@!iQ`> z!k-43(6_0-f3!w^hdQ*Bba|)u5(TvdB4Yu44-6ILV0lIeM(Y(R=YL;&&gX zspx!2^(u@q-Zp>NY@P|eLN-WF}ZwOc-jtk`R>W-xS1uUZ{E!l3EJBd@59{`S;5 zTbZR7_lpF_3&Mqov_(nkv1L7M?vG&q|DC8it*Q4Qt8=7Q{1~S$!@@9~@758*Eu}h$ zj^7|feDQUF$oP0u%ZyJ8k%K8%FgXg45eB_{ zH9;z(xOu_ZYrDHL=OX|5J+ohJ`#jui0e2acSRX$pYkzUyve+z1WcDEPi=kB{y`1VflNRhjSD3NlYx9lv@vkOZ-lGm8y7$g+na`2eW zc7!bc)ow(or7B|NM5%5nv)g^Yv9@D9?KR&tHHGQPkHRMJa8qs28~#0S`z|sp>q8+T z@Rx3dkxK@1t@r~;jUENRGZ!=4Lu(vV-l%~_fC8N6l;+Y_5eIH+?p$^>fF0newHp33 zKn3wRuoU-}Qp8%j-{76~(ce~BgCtrN<-u1K*Pb_?H1+p})Kt^lg-tV8|9>wuoYSOC@Lj-+51aC@ z@K1G$%T$pj-$|4fF;~~n*VZ@^oPxv+yH{7I+@I3W+^qV%XMWvi6ZUu$&ejJb8DUK2 z9lWJV!j-yi<@wK%aqGN^de)M$qJrxOC7WL+%L&wiS)e7z6!FLSj@4c7HF-k!^p znAB!YYeZZfM=TzXUF?3OP;A> z8#-E#U%P%$`IGskR%F#lOXttlh~s<p0h>_ zOkzv8DIWL&r#_omt)mZu_X*oaL;z7d2kP{`^o=>ZF+wI+pR_zSXQ2_Pz)Yg#Qi^;x zTjl_Zb#ezLeKp+7+J|Mh$psc`^~DL@CM(!!sYQD?ZCNxcv^gQ_(zb-5dEYyAy0b3o zsOux}9qtfDjwHbO&+#C$^eSDc@A)zDB^)mtf4TelgUx)d1`#-N%u{*Z68P%;_I9y) z3{z~^fF(jD?n>3K{!ZgOBF!kc4heNeC6u&ePiyj9->_aMqO%|kZJqH+rpTt$w@MycLCC;f76lQpckFAaE1uhpL6 zCO=~cEcy$#sl>H34w4MB8i=xSna5@tcy}9bQyWO4O(Ef>t>6H6Nhz&mmks}Cn=#TD z-beOyD_&J;&GRwe75eJ_*S^rP_doMrb5iC;E=k+FA19#>NfS;rZLw#l`YG|EL}Kb+ z;IG{I$t7hb^zm_jTKW)}9Q%*;(EhQu4DEA=kuK^Fqt+*;0JMdXgT+M&ZKog1+jD0U z!c9<%t_Q!j*ya31Mx$#1D|bIslpRa|Axh+&d-Np~7H*@6c+&AHV$5@@J2wn*gu`U0 zhImX(f7$#O@pA+6o%Mua5&t%k;LJI`63_VCpS#F=0}*rmkfXnq*z$@3R7K=mPxCS% z?5{6@G^<^?f9h=^w4NjgBiZM6!L8`?{z7PV_qFh=t-9K;_^e|et_S0LTKO6VqSWh)kP;VuE{wL3FFikD+{T)Uc z*OoF}K9t3qgyivl?73U9@(QD#ZVqAoOPPdxkS%x#DZk|v%5tot4(a5DQJ~?*hc}mR+I-+`aj^IG{kR&8 zw~|_mU=&aHpX1U01!8ULw1xk$c+q-aHQe=>>mY?|{Bv3qkcSJ=pAhB@wd2{SPn>{` z+*dUTZ1B!^YE+r9ftF~R@keMA;s$TN$@MF-&vVfk`?=@dgPG$9A?Q~l4L?RcQ|Y^s zp$OmI_*+#b!R1g|@=4PUo@B%v(1Y)%6zzL;tprL{YXS>ld;iWCLP5{sMnYaN(Nm-R zLtKZ!@Idl_-+6!xZZdWSv{T7U;vX+|PHuzt%I{5?}4v0T$6O@5NAI&_qHRRuH( z2@LoXtcwfyq*keWOEm5^t(SFG-!WwVi!J=vZ)#)rw58Fe|$m*F)hv?>cZ=aofK zyZZaW2T4fD0p!R-(((8Q1n<|b9_}BQU*X4@&b4;g#BQFZRCzb>eJ&S1s9<2wTR(dq zL%Tzi?#GAz`LivH%YJX0j!v}Cq_b7hk8gGcT8pJEq)>pK$RfmvDV1RrN}l* z0qwEp-WqDYkntpD3V+10Xl=RIk^!S&qiPUmXrg)ZJ0CQ1&>JOBXewp&a_(OnNEQRf1v-;u=H`p&A2Ips5x?=?zVLhV)*&niyg}L*e6f$fN z`ujk0fON1m<)HSc(Zj-K{RSOWvDa|FX(zp8Kw>i2++A4g2P!e)#2h_1#?iBOZ7xr^ z#%Mq07KD(*Z^f9)i@`n}FQFuzi={FDM!uU!KLJ} z20Vp=LyEXpR=_}2*H#?K?>R1g$zR_y*K%?m%i3+c%uZw`b^XU3g3G1sYkB~v{8}=# zNbmC6eiaSL^*_6QPcKK_b<}9n!)G%mdC`&I2H1RE+xcV>F6Hy}J5L%;vawtVXLzdTOHO_ja6s^^1P?A6>YL%Ip;aAq@ zP0R|@$5LlI^B{mu{X$)PuMh)Z{4O~HX{W^gDF{~su@(&J8&*Dy`scbJ);B|XE1qLq z2lr+DiDFD#J$sHD>&NEYg~s(iBF$=xfO62yw4JKXHN2%1nQ|V)%F#V# zkpY$>6OwkS0CV?SM<7%dzlQKL;Tdt#2Hrc*rlztx9>OC$-=~!Kfc+0Mio3u-aHt7g zr|m=cGx$|w?ak8Pq07z|w1%0px>*TovA*AQ|AcBI-?h2OoV-`L;qM)=0ls@@@x<{2 zyC{{&^K@y-%>@AET|fJCWx0VapY+db%$NR1=u#GIm`mx7a(@PNiB!~>))?DjrAER2 zXuC|Y((@6B6gT3oLZO?n@}>&r^W`{rl_qnkTh?d(vB`fD5Lb5z?Qkbe7%g#~OxB35 z^>)~S2!k;%&)fB@w19J}ZE|UU|Fy`0%M;`0 zE0NG`*#$=dh!Sa~B$~#$D5MP+F}n8t^r{?K7=^&Pnuda z4{LPhyX_pYg)nm>^+yd45qWZt1QpTmqt?xoeQ!p!TGkN;Lj+?1{0ky4vkfGA(u`pt>mhuN0npC~u`F7zkZ zs^uK@8ZnrdRGxR>XNc8bao-GhpS+D5<&n7w3y%6=u`#rb<#@QaiJ^{uE?)@$uK}>C zB?-?iAHxhot9Sz3vH3yJ>aN243;XmvN`hv<0h+;RyDglQl52BK^{8~dD0Xz z==KxT?4L0$sc8DIY}AB)b{qIEC^$B0uPaddXVmN*6@@q+Mw6%e#GaEJm=>mrWBTBh zqT?3+PXgANWozNy0qYzeC5>#Cu6TJ%^0`X)k*I?q4t|il3-pl2cG!&kN7=gp2I#Nz zzbH~B!w4;@fpJnmve53P*8$yfv>n@$j4>TJ0f}`XVSKP7NA;&D{PXaxh`}XB;g;Uk zI~=;DX4~je-Jk6gnmE7n_6IH(8P}WaiCU+=#9XZV6L?s()&^PHxvf0^Br?ur>ri=Q z)CjbUEp;ES53~>^jvp(AxYri`dnxt;eF}3ad~S}Jt1#1mng_0Er(X_`!A|6u06F1? z!vo>Cs!$T-KiU}M>ws>G5B|I9bwhqe$N8doQsfr=MZIO+M!O*{gc>0_-h+^GeTDG# zUqYk=OiB@#bK#|40chm}mhEp+lGFF~gJtl>g^#9 zWMV(abrsFO;_gj{8CBTl2bJu6o#jiDkL*HW5CuCcmYuE@CBg?9gXM>*HAe1+NDXY8 z?LMWgC8^aewv)7wY(8RKE4av zjL)EJ{$E;M@OdxLiuFA|d*{pj$V_8?HbPC`h}m&E=K4{L)oWwMjgiLY@(cgy7IVW5 zufbvWOVuAz_>xo8G!q%WyMRvG*%9L}{8WWfWpCn|rbhWRCmwWwwOWbHmpI(V4dP-Y z(cat-el-5@f(b}!$QyL5SwkE|9;VMzhdpR>J9?d|oK{Yd$AD#WOq zD`AF30uEv?*?gy*R*NmmFFSDc<9UKZ=$3NKV7Vd;_rXj1{%$Kg*BGUKK}+>GM9svTtu~y(#WW!qrY#3J%(CS zE;a6dp@yqY;16qAF_Vqj?3=FVgV!&?_R}?q+Od=uOOfl(fH+As41OwHopIkO@*Q_D z^}-VUELxbFLBGA{8L&>dx9;7Y<0wj`{d-R$^qpf7q06{LZYK5j@4X+}d+z&S5bbDJ zTMXW~2&NtxN35%Ixr(`Es@Tc@5;h(`-E>EGc>Q(nBKF{Y7oEZ((Hty9($plXLSguv zpLt}z!Oym>%f*+FN4*4q>|YyRx~b`2zYcZVoFNh(@y*rdZvMWxZ+u%6CxW_=A_C@w zv=izg{%11c??Y^&MqbQH2um9B;t#jtJEijpC1=yqpp7#a{8-o@@^vh8JHZgf9o#WO z+`G>P>}HEDpMv-m}4|%XTH?XMe zJ!QUk0529fm5%$lu5-syp^B}BQ){EJ(yst7gM(jhZ9BCBZ3g|{N7mp@(xME;J}!lc zF_HV=WVIl72jL?JgqX#$F>o~NEdCX}13tpp$3OA~Rc)WKmAviN5O3I1#S_j0F6dw? zBrnP3C-TQWg_sOBk&pbRWYfAno5&rI^AC!FPL^ddJ(c2NrA{)rYHei|a_@ok&plWO>--5cc5jF_U6mtK6Q`#=LtXH`3LA5XSUMY*gl z&#gxT7tc^EUcC-4aDv|RR_fKN37)lT)80$G6ySFZxBphe$1s%x(ywtn?TrUFzNND) z_tb$&jJU)51m7;UjXIR7`~ z%yc8@UEt*!{-h=E8Ghl6p?p6QpGiFQK35-|sHcaz_R)2~ZY&V*cLcya^|v#(1v<7V z5H8W_Chs~@7q7X=k6aZsdaIFBgE<}ko0r#Rcb^`N9x$@k-?s4Yp!<^V2}pybvUXND z=gAp#rAyUSIDXhN(VNoPUXHJIH2Hwr!e(dU;8u}C!=^q@HE^=NfWSLrF%4sJS^r|~ zm)J+ivyZ|!@u7Q0zxQ_8Zx6-W-RM{C_Vt5WGu^K6pY53_npUc@aD@M4@Wk4>tEh!v zavj7`@)+Z%b-HYBQ>~j5qJYv~Fw2+i+NSVN8VEs*_1^gNr$z1&V`xXC6Z|#oyAU}% zY+4nH1oGU?dCG6k{rN!pS|f&5pd~ujcF##SJd9FZ56>nV*3U-XDTsh>OK9EyL<#aH z+X7vS%72Hyt@D0@s8sXIYO@tE8tDofW~SFZzFSzlurK9YN${~r8)-Jfd22yrvWEUC@Wu!ozM!_{BaXk(mDeV0(# zX}V+#tX!?|X!uR4x@ysZqa+7(hkit9*BMk*Ye&rOeA9|Eo*winH?wC8Q+{>)? zsswc|?4Im2L4cSNyH`pSR`mR$k*b4%vi^Gtd}j%jM9lf8!7<45vi{UeVuGas4Iu%w z-qU^hw8&M$7deD94`O>FtYZB~*TtH_nK^at?(!&F!r-}vB3J}Qs$rgWJqUZST%&!T z!}Y^0X}BS=7`dgkZT>8_c!(P^F+ zq-4lv3h58b0bgQ|N6?%TKZT7Os4j8uY+KgQJv4xqVRM?Ij^FOMW^O!VcQ)s`%sK`1 zf#$9mP=bQb%mn91a`!hR*ubH}}#-56LmYouW`e&8@Fu?~_4xi&$QKuh)KJwXgpEU-GWbxuw z!O|(+RrmKxorBS7pc(YjeP2h_(l&2%EQ+2L~uWfJjbJFnqGDz5ei~ARn zk9h#fWN3z_X7Al?1@n%RFSG48a(C7_Qh47Dt4*NU_2)7vCxTz@U8L*td;CQl@4;ZU zrle`RLTc`TmwR{k3(sW`lAc+5X_i-YBC8QlHIXKjH^91#XcxOZ$`}PLsMoqZywY3A z#TDQ@?BI;3`W^JcNr;+R_?Y1IlQE@Bq2B*FsO%pG@`P7tN>MYqw#r4Rq%Gg-YCwP4 z_4Z(*&9K~w=LeCHxw0!PjX~f&V*bXdt%LSXBi{}|$K-m*#b;i*kJ^|ZP4`E%l%E6- zJ{&;~1Kth@!RM)gk9=7>?9u_L(at4?{TXOa)sE1`Lb%xE_1)KZT`<+e`W9qq;N7it z&m1l6+etBsLbRYo(j>iNsPO)pd<08WUBq!Y0T2~t6@lj z{1)FXpZ2Jm0e>jJ`h3dM^gT{oEl<$_AOf$$I@yzrwqOCw;=Tz?&1e zCvCRRE$;Nygye_|*W{CZ!+nBI7$rbL}(gN(N z(0}id(3vxr_ZFP{F)-k|0GSZ+dOO^Ev%>T$Vw`gaulEZfuJ<#6 zP|x&?%ly|CXs15Zs~iK5MK>Cl>g-+{R^V@opm>)0Oywb)f8kja53=)$UOS*7Sjtc* zVG+nr<1+bT>Eb2|6)De%GZCV%pAb6Gzc{I^aXIQ zb`-?KMW})%iLp7gmXqTuO|4V0uCLsG!78-{n)FTAO1w5>+zWELh^^#|#VJl0ajVvU zlQ>NpCNDrw=WZNiO2OS0?VKGi!oiZJqmKLBcVoYa-@Oqz7MHLtvV4eQc^~tS4PHoW zReMsDAz`In#}LAOp^Ru{ngj1y9jWx@V%(@fM3sT4(#HJxq&UBEIu^3 zi1oA$nQR&4WKxteV;y{u2DMJ}<=w@zD4+N(Y+(ORBlbn|iuHmK`zt!F=vPCQiG`^H zU!T*B{bEI_^!_P(IU@JY-XP*Uxs5H$a#&sk>jR&N0@pUbSuSsj1ueS2x!ss)>gUf1 zaBb=pAa%Y9ndq3=*|^TovQ9`@s^fDYY&`aqqrFjQ=}(xycBC<$1N&75k(L}lfW_8} z-if`{cGjr~g@(hAr2D569aq<`&xW5#?;Y~bWS{ArlNH2_2lh*$yZd`GSTU#`YIKTuj&Xb0&MdYmwdVgLfep5#7Dn90K{hZ4Sfv&P`5(F8ZpjmgG zYjz#&5>=M+>IQZyR_Q>~8;~k2OdvwgedEtjxCePY^5~9RTJI(It6AMPj$kp)E<<>y zn#k21kP1r>SLv-xZP6?XyuJsz1Zq(?pOT;I3k1k;f6DwVun;uXk@jEaBKuU!5Y|Vp z!`~>8Immv%x-rKqCO3pbSBx!?yNv0c+2Zcf1a0b~8qS&NjrzWd{#=X48N1P(jcHyX z@twCDddsfrjniqs}f-Rqoa)-3(7$~yDcF~+ZW`X=1$+Fo<8wM?(h#DV7>sV7rN*Fk(< zk#+#kIDY()@+bWEqXdaIK&T4c=h4+Sbb47@r9iVWJkW@~9j-J7IVp8W5b~)s&|R+u z{#0W&ozKhgP#_@#aPoL7c_E?74%Hkn@dbjeL5&MLN4x?=bX-gJp@=doJ!P z53)<|-}VaQ&o4`mHKk|&2M0=JILLIS&Axy*CTTNOJAa0FE)>?aMs1bmZg9j`M2ynI zi`|b<{`-0`*oyE)kKo-WnxmFKxQwT_l+q@y=PP;(~ z!oi3vBwM}lz=kOGZury9dDIsat(fR$U+?EO&b!FJtfEnES?6r9chvU( z7@-U=?~(8>K1k0t-;=X!K%2cRPQC>#z#QZ5TVVy)e$ngp)9OZA{W*vA+0!=?%{@=8 zEAN8KP{(MT5q<3eq+?^tAH-@;DFXb&fm78G`QV4#cG*E6k)o|b^IpzZ*xuwSG%`1c z!Vgu9)c(i}^IdFqwUrB}vF$}lVz^4z_aATS#+ph^Rv+&K<0Cn!tH(pNfjaMRPga31 zQ%DWccw?u&tJ*7!|IpLNWVZi9m$g#3fz&@C#?y$$%BOurm_5RbcMbh7E6eYWcz^2n z*F@w=nI!w}g$_z=tJAIR-|1XKtr|tk?MSu|>KY8Pn$E_l2zjrsy|AIGc|@c=y)Wc=uIg;Jc1(FKpsY%7 za4G2CN~w$4_!rRX%yphy-a0`C&6+T{+GzBJ(C8gtd-gYh3jPo#4El*HwChawir*XW zP3Tb#{aiv@ioB}*^Ll%{bEkFW!3EIi+&OK&HdG}rE&`b&S6EPL;ii<;r@f;ap}i7; zc^6UpuP^{D{x{as`M%{IPRtl#3WVP3PS|nFsJugIJhR3BXup;KA4_^u!k`^lo6n%xLOYicfZEa$*n( zEB&;i*9q7J(`!lT1RNNHBeGdQrx~<)D z;rzCR1pXDuV(0OJod@vPH*S}2qqayw+KWXmiwgcK-ZTCrzr8H?T90W$b!;mt{kyBt zX0uqfm4SY-bO1^A0#gcKKK$wnKjQI?;{*VM8i>tsoB;;l>>#h zT`4ZhuQ(tfm@CHChW~rt%}%1M_tMU252Sv7?eV&n?m1`zLCxn1AlDb;*!^q!ZjO$U z=!P{?Azm+{^Nh?LdhkS+^td(MX21Z8;WvC$Zd<<$=nUI zx#SW>LXyh}xrLBBn@h~4Ou64?u5+8s44c{f_WeE1Isc!3clms_&-?beJTKDW07NM? z`uSc8EIqhUOJywC<-EGnM%bojpFqotCZ9r+uLwKl@s-#HIaV42u7yc(MAnqG|_jef{C#T205>NV`G{4n|-i3ya1>UB2H@VJps2WOG- zA0BNsO>Ft!qnv=v!aetHfGW%BX5n<1aGq@Z7q?w!&c13-C+Nc3p6bp~>bLOh8;s!e zFY1VIt^Uzh_V)8zF#3qA#`$Pj0P`OBEAStgY`EU%z@U)s(2aNXrP|a&2NF$_3?fU< zV~Y`1$L3G6tCRk6O-6;qS($G{(eI;=(#Sfah4f^j zeHN>bE|^IFcW}Z(JbhVzIMW{F$5djT8{DR&>5M%;G4MyQen|SFH**YrHJbP7K;tnz@U3Ru3pO+;yec%8wrE6t}i+{+S)K{b1MtnOY5~8zXl>Cec zZhFYXEm~8{Qjx@)%jj#WnyIAH{C|tx*(y>x(<=?MPXkL-)j#|@7ZStt?7qG$V`v|t ztp`A^$DRK9TxZ_v*)%vu1{eEVK_3~-I^X#2$QG21o{zYWUU)(X)U#o}jY`rS{rv6H zq>j6Er=mMI`nk!;q%kRXaiMR(Bagju-ECydkyMxCm6WI@*W-rCx`==~^q5H2_uSiu zkM=DK)+%|<6OVb@Dz8@ZOgDac(P@K`0~?pPHQ(pH8ZDO7EUqOMva_D>AHrX;59s4T z;2Q8|W?1a*8|wR9ZyslRgNfuX?79Wj*9lwcyaF}90-A-7bR(9)zu&YO?g*FHRFv~r zF$-B33GQtoec>YV3%zfpy`!PRFwRno6RHCOm?ATty@P{N6EmUA{s_YMv9kQeAmMYB z|7OW=+saBHjaRqVF~)sDou3w-@|8Y62Rs zXKoE#OQ);+odqp@q-;py-ISfT`l&@HW99yIjrCe`=un6L==U^dY0JxDZFrH#wZJkp z!9nO~of4)}bE=C*SnxMC(NRMv*dqPX*|c3C&49WvR@tC>I~&t_9r)c>_~#qd19t5; z%-HHG*a$-6`^dbJ!>5HTx(`p|OB=qp)dc2iF~Ov=o+bWbIYyd+I|&?+%6%~q9}Qps zFz}}gYOB!j-g3Pzrxrrt_5bBg5U2Itt{9KJ=NVe^VODaYu=VUQnDsV=&z5H!p9Uk` zLprrSEM!S>qAD%(4&vH+{LWni0fotP%v;GaeG=ZEe=3$FtV9|lm~2W=R;&lzUJ#Ir zaQr{~!G7VOVw}6MehC2=kSjcTl7b>A6kg!|RBH`y`H5k%t=@*Y3;7r3zs4I8L>V?> zxF)+oT6gG6c_?${)CQJ3(2R!MMYIF^XwT2}3?wf}ov#uKk)TOmEnq)>*oU}iCh}0P77^k%A?aKy_23;yxmN`^QoY;AK z;CkewYP`Mc!9o+1riJfnk|7X#CZm9*qb2`LEd^CK(x@(2ZYB+NnhvrK?HMbz6kZX# zUjQC;(UZA5RyoFGl9}RzQX3anxsRBdmuRWsHdQ$*ucGIJaqjI8AEz?HTiM1!Ptj{* zgOz)lF`WZrl-5MSx08Z6_&9B)}f1+dPX4w|}rr8AQoZUWno7yQ<8(?RCYGDU>91o$1!cRa=5=%U1~r zd%m2VWvPce)64p7UUbb{k7pZjn%xaUsv$LYFUWAjXuAl ze5AX5!vY^1yg>=2^gOzCPPy_+4kxU>39*GrpoBt*S*+)VGdnKN-mspXZMjNMn%Ijp z>fr`{SlY{a{ACclq<)W?(f4BCup}OSjfC5a@)`%?e*4_nk)7*iql9mtTN~l6SPT+g z<|53V`q>nTd-Z0&bnQqIwep$R)AXe0Wu@7oDy?g?LL{}SRO$WHoBIt zttXEpDZBC{NXu`U26uwZwyc)x*JfD*rslu|{7oBx<{=O`!tvM-bYn9z%Xt&F#pYp! zS+QbNvQeL;*=#7uk9Dig1GP(xgarUs_UTH;qh`$FtCCiYNaPG3t%6aZSE>&`F!R*O zuhy5xC{~;98JgMJ8To4G%{- zzv-Hczh{^GG~Q9mk0T<|5E6SU<>3M_L)33SlM%^##H|;BMW=hKJt=qa*s|TC41+Hv z`w2CV5XJN@Wu$?juK-U`>qzH}$DME92KSx0Fy<|iuxMIA9mK{sOStJlTNCH{ld>QV zgafCI#uS^B9!Ocbk)6;?@rwnT?huTJkN#6EMAg)46Bqk!H1>#7dkCvghIem8sS#~) z^tj?+TVqaQ-6RCKqaj)(IaTGa{3XK;Bi8yZL+O?KBaeE2kMzI?ss&2NPZnIsE=awp zcjCb{LDA?u3F%`e3O?{A-|8EpQu} z%P49i>BHy8uV%r@{xsYV)A^KG|NW+G@~0B5_=6t^jNkA&^%3>b7Xdl2hQcs`g^5sA zm`q*`o}f03KHh1eG-`)QdRrNTllKbj>K#*p0>hlW*2 z{TLzUbD|mJ`ffcfP)E)~+;;U;g~v>>n7nv1btn9b>TO^IX`ucH;<<$4+w=~WncI)e zvueph*_+2f)n#}0vOOlU$LjXQyH!EPr89E>vNyR=Dd5R#Pm-ToUKHIR37K5kWDoA!pT>QI2Aq5dUCz7)!^>%w7m4(9O~S#`<~)hH_aQsjk2YmMmG zlkp6kseS{u_arC01<1|F?9|9y9Be!L|=UdDa* zelEKrPaGzL^H5N*Btg2pV17YLvsAa&3N3R&hV9mLBVgNJk3&TFf|jugIAV)t2;^&EX9Y z)IU?nKt>2-1(dM;XhS*9T#Y=lVB3!%o|f0EtF*S=4=!ulzsRo;L9TwY?Vj>4wxcG_ z+t|T|n+D$vCI$-}sA+<1>)%)j`iUQG($E~(KQaZGt3MLpmaU8>PQ*SG-^>(_G_I;> z0}9b{Y`I|dvwCD{y2)3Kd5QYDJZr7&uG}#p<6m0Sm46v0@r|@6F)vbJKhXYAib}Z! z@!(_r^)`)L9kTQd0GIX{@C@Qd80CA|m7@<@aDsSsw49}AkXsck;L=GS4p z*?eoQrSaek*bUUSo^>o|n{+>E{ft}8_n5fHZR&=~D}Pj%9`#yV!q~!1 zz|F>=Pu}vp)Ar!_mj7`NLMSON>Hy-0rH*ml8(dNc`5q^K+F>Ih`LGi{t1^88By_45 z4>X%|MLk$(>VE4-7h=&1{z>DbplNjfc*5pTgryf!;Y!;46q)Kc``s;k1j#UU#YK zPQ^Iu3F=WjsKt@daJ*Vl4kvt`p7l2$7cVeu@mNoqOn-t;TN3n8Tj6ZFYijsS^3xvp zeiAGY8<``{oqR>Xzo+Jmpw<9^8_m&@SDqPPu3gti8hX6T#^v_Yc5eSPWvy7A#~wi? zR2JMT<-XKO(GSV@-~b>!w7a8X?PCk1c&`t>(wrJQGE2Ym__5oR=Ti&)XNyI3BCTpB(NWcT|EP@5KQ+kQACi`;>iKt@Bsmesc#Wyf5FDfcZU3b?r+@V@AufMaZj*hs|2>6ylZ@85K% z9S1O{zM~!)3!;yY$!g@r{hM8UrKH^ApkwKnU8-61i^q$qw&&EciNpnb*tM@(59 zz3B3o!a^{H1>rz6MTF=|{tze&P+V}Ci0kUSMR^kO$;BXEDl$Z+OO0Gvf&p9Bm2tq`YrPTza5u6qHDM@p0+YKhbH|dkf(fbQ zXh|R(1BseDy+fs>;dr1fm}8&?HP@#optA#cAn`;?&e`1^0kD-7`d7LfSPI3IYikbU z_&VkOR|{BkWo|V+rc#gT1-cL-T#hbzJW_E5w{i#H2z^Ta8VnPKP{iBQ1~PQP_c2gQ+mY20=aW;=Ls>fRXA_##+a zK4|yjp6q?X&FHir3d5N#`Awi@!cYt)@Tod|?L}i|5X5m@G1|F|`+41cDJMthW;0YZ zD_z@P@+-OgX-jQg!>PNcMyw_H)&qxvtQlWvi45n_+q4fv{l}wx{og4cXJ@WL?B6Wv z+WE7z7bcob&^0#76>_ttNAocUnyo{j;UwxS=>$?GU!H)Xb}uPfvQ?b6rFA4QeeTSX zY5mgWY5g=5H+0FzRGokQd;szRk z4UAC@1CTA2{C45^8&inXbsRVQC6yMQ(EN|5bVt^E3AmN4sb^hHjK7HXEgi` z6b3WJK-0(%WjEL6Q~Z@Le_r(4&C>{3Lk(&ba)%Mri&?P|!lbD>dTw`0PgF5wPU*=l zM|tCx9jngXADh|mV>=p%8~eRD+C!cLwf9y2Mzp*#s#zt7p?Al-Bht^2W*8)$5_@M1sWkXU= z^wV1^daHY(NLvivd z`Qd;oIvA43e*pt=h9+Y5!dBQBMA`iNz_|LGS_FZ@u%A(s@2}I6Uox&DIgw?3R)m^1 zo5rvh%WvGc(~nl#gf{~A8#O|3@bkp}HgX@;HT@s0X=6|^L2{n&JbtKGG-{_fST_tQ z4r&C}L%@66xt84tRO4ndJ#EPBIC;9|nd2MQy&Q8;f&MkcR>k4JQ#sgP{;hwCkvR!v z(W?A-1%{sCJ&16O<)(0V+4H@5HL4Vcwko`Kud@dHErvj0b`*7+l3(>zpW%ffPKA{1 zr%?^ts)xmebwSnn6w_!uxLifbd=YAO2W2dnk)Io=a9Xcb{;ub8iB6Na9}_T|W)+uA?m zXvw&xk+gpN)7!Jb3UdJ{iv-Ncdu<8y)TqnK=gM|nfD^USEhTg1rN%ScfqIaZ2Q7|# zRQBR?g&HB_<8U4DZIsXgKQ;*Chov3-dp}g%OWq`Xv|*yKK6GCbf{Mg zo!V|3zX&4P2f)0HA=M9BsB^gligLA1TMI9+KF?5oc<=38xdwbyH9RM!Mz2}>R*U)S zACIj%z}}{wBr?tG5-HtUYd~`~uq$L4O4JX}8IrCFll${yY`-{8BDQKSjp4-Dy^{33 zK!#=g+JBLIBrO>?NS>xCoqsp}Toph*&mNuqe>z?>j*`)8&MaB7)m+l0=r&u!)4c?L zVX_4=eK$XXFj+67`7~57;4b4cL_#zNt6B}4Hqoh~)TtS7BOTh~fHjn+eFEQ7LJVb5 z$+f-`$;_~BOvt<}P)0Ysyy^ew4Y7?a%nEDGv*TOZj-f=SjqTX%kFNzL!>9Vz$;}oZ z45BixW!6N;RTgk3HR-!now&ysfrmzuzi4bY$=Fa};6wGg6@#XG3ikRn_`y4lYDUcT<+Ef|dW&sJe*CRZGz z>!Fyi>tPim@?O@b2A+R!o`yA}V3qW+1r7 zC=9(@B$-_UEEwBg9J97fwfjBoxTPd>Vee?Pz_C8&-RTIK<8$H$!cM{-4;}Wnl$7OI zStP|zAuHG8Z(h{DaN(V1LQC|kONPwpCh*>+ES~ke>{Ek^K4^y)3gcCS;b~tHs4sBc zfpM~LW>M3mvcJ<$`wddJZ~Md{FPRwo_Lc+UIu=pCi62Nf7!djWg+l7t6W~CfB@(op zg}3V!=9>z0BK`=}FYI^`KX#m)E{n>R2m`ETKV)e905k@~)%NK>dRD&Jx5)nk>5m3L zYv$or6U`5kCy4moxs=0X4rqOG8+yGcS_u zTmVz-FKsyv07Mg>~|9d*odc7DgaJOg2oBGS)c zNF5s=51K*K^0sYLM?lj?E4rz5raHI3pJKdiN;-;@tv0Je+>r8Y#U5E0Un^T#@w`-@ zUjxw9RxrM@Z9K!RPcI6~0`t-WO<4hD&(@`I`QIx0Zf{K(_ZGG#q5YzF2%~nX+wV6# z*PYF~4m9s}BH0P1@MJ`C8iv79h3?c@vFDHQaS1uL)8*4UNo+)awhrDv-c)GP3XNwe zF|Q4qp@4>S{AVl1IP_6$a>!IKr78_WT^w-zge{-OT-hjEJc(D`EprvVllwyTIIXH3 z!*nEvc%6QhfmI3BH$`-z-mUN+g;jjM+1EuDAx~@MY{;8ysErlxK74R;J^&#G^@7W7 zyROM&y$;#nzQ%-IEJvl?FknL7Kviz`B9BZ?Jh*YV%3MbcHKViUN2yNEHV@GH%>syK zc@+Kb3_wUSko%(yt6_1Z*{QwrF^ruZ-2D+%;;^gMq)a$zUw_31$x9kFF?T{=mGRh8 z6P$J0)0dZ;QdQLwPVdz+*A5S~{slgKn|pRjX(Pow+dQjOS_4XwtC&@x0LVX|c4BwDy!M~14cp@_S2eU;bd+dbTRHj@dDGToFWPo*mkCu7 zMm29cHeBsp_}X#T%o z&P5Zg$%#$Gaczi;6|Tk?0?xczmqrUfW=79tC{ooX!JCv35aNrS7=g~+63 zu+}TTEaHZ^?FPi*P`!ro0<@szO=`?Fv(zcO29)mjaQQJQxDBAcRoXT86EL6f{8(&QVOIOetPk5U z)acxWjjuHDYu+q{r?=6^08DqGYE z3=Cv>{dq(Pn|p>=*M5N=aBDz_GWUPur(yRu%5sE94Dz>EQrOl;rm4c}?3_Nab|c55 zswS)-H+<9_HO`ykFE~A)S8+2B?}-+jBR&4>0~BIUoh!wvUY1$huIO`10fCJk>;WNK(W{A0 z2rQpsT}n^q%6_Pt@CXBdR|F;9VRY;c6}w(;_gO*lvdhNK&~v#)qeB(u>K8!DATHzA z&Jq78c3^hwbDpW64_!(kt{t%F z)dn{sS?|#=X-sqB`6LD>R5(zO6vR#+n#O@wKgn-3DRP6R0fEM!x)D93&mZ)6uZJBc z&$Di7X+vyd>uti8tJRw5NlG%sp)8z-pX_iNHKD}Bnt}HgOkDtf) zvQ4dMXId@M#VG?P;57HPX4ZLNDPb^;egf`qbEV~75~Z@^e0vi3D0B>cC3IkyAKWYk zI}B`V-Zfy>8yH}w?TgVWoGlA7RJMIPy^6|~zFj!Cj?h*Wdaoj7?y*hx-rEZ&(N0kh zpaqrOEepnzX2FoI4t#n!B1GSb83Cw6E-1k}-N~J*N8ncQ5Hwm0#uzYwt|B|2L*VPY zs4V2rIOQg$k#Tjnc}?vsf{YF)Q4BwVm+eMd1S*~xU1c{WqwNM6UkyUwWAS7NXG@Lr zKS)zzZ1E+m@w-_bsIZJ-=%!HXed%G;oaqwF^+V?BR5<#(L{d?BkgxQCQ1@->9)JU0 zbnqU>fAEc!E5$p@3B`a1#Vawb&77o3MW$ukD=P#+fD?TkNCX~fStzPQpXUN!oNeNd zy+>UT4MS40bL-`Frp6er@Xf5#@Kb^BL#F6w+b~-)&|#4^%n8*OY(gC$JCG|^dN!U^ z{o+i;cEuHXS&aPO?B|`tf$yywnCN!%@soBcqq(;z=!DR=q7?b$2ic^MP#{7TpV|HP z;K}S!s7&mYRy_1Q?i8(wmc4UTrA-~B3*y<0CnvZ=-CUfqZXp0`m2siNIQM@Ss$&!O zj-u|fcFaURJgo!QP$#yw#h{b_UJy&th#j<;?S-W1ed-o6ANE#Hr9zNHva- zIE)M62z;7klc{{jPaoLX$oi&us}s}me6N#D{Zjk1C)UT{TZ)RI*gv2b=lvIoy2&E% zq+-ST{!a{wA~JxlWg)7mL1KOXFZRpLgN>W$xXS`mQ;o&?iujglVkp56=wI`+=tD7E zkpGX5KkB5Zrq+x1Y4R=2#85yFg3)=fK@%O%|2D@Y@je;8C3Y#n>H)na4`ymM&~TNm z@($5b@rrS2*h&R`521C7rdHXs8>yw34nMckNGI!!dIJq-$Qz0bKD_(H(ZR%NLn-^;N%(yep+ zTjyiO(qH}^HE%B(FuSBv_2GUt~Y8 zI_wO2DR9-g!*rC*s;!cM4=g=Kox1g0duT;#wrHAVI4q7ukK!^(H7{P!FIWR=c6k4c zIfU|U#{cp|iH-J#Oa>QyWlMKf-mBCS$OHAIz9|WTe^WsNeJQGKNmDNC#YMI3rqiX6 zRxF3kwN36(K5DsUBj5$t{DeIp1qLA{v?XCqGH}U3FX4>b(@#GZFgWo2+qWcm+orF7 z57_);BEHeS`6 zdH<{RG3~SF_ZJG-ne7Mw;UbaM{o|g6+|b|ny=KH&@_g{&B*s^L9ih^S;Mb^Yg!qE)G*{GyCbf8N?R?-l0j_dNfzZ8- zboo*oTDIb?!-mXV<4hqzcz3#3?YoHLlWhaZ#X4bHf|E*W$6)NL zN#$A9HH96%%~VKo;Hfj;AF7tbzld~_-J;FGQYSec}LM{7(0m*D*wc17O=k)ha~GHrMT zq@JW06C+IMuR_~SX!J2JnML`rY-nT2`cf)AT-#WhdZdYqc$mQDup_iYX6z17HG()W zuqfHLtH6$;bi1}J97G@keogxK6s2No)0bH8?97s3_VLx!0(+4+1Njc1AnEPv6xFh8 z1o$G0-QQnI(Z#x@E?U{}OGd-)*-)50`3to>CV%DDBc2nOw~6^VO{|T>>wODq?nFOz zIEhf&UxJ)DD;u;PP;Hb;_j`CRczTpA!KIeij`}vL5Kvxf*LaYGJOOoq6l2pnXBrw4G4s{Ew* zYP(weP~;-e&W7sGOlD`B9u{)N?5jiNXz$PoZ-TW)AxeU;XTDdvDgs7?%dd_{tPYtZ zLAa;b@t=lft*fjtGLbF+CW`bU{qJs@!fwAvB3{cUEnTULIxD}&sJVvplMf0}(7!cS ztN9e)fUITml2v58^_6o<6}_L^542ZxVKsiA_#g|&cloMQWbB|K`n12sAztB3WzcQ1 z+`L@$?aXrQ*KJP-<2pGD$(!O_G5bvCBinFoW6Y^jqQ99Pp(0_4>{7yd+^G-1hvOA+ zE4x$cM6FZ)%!V3Cb_IA}#wTw#lbUuQ2zMtB%=QL7J1gn(-~y8!%#)U4mWY0`Ned;l zP@O3goq9?WeBCx-zo?5zRyO(@;&Dpma^;iz2*nESoSOPe4^oZ0NpchK`nwzmu6_=c%C8~zS~x@ki9;OCsWFZe=KBzMymYW) zfRK*T4b_%$oeq>+y2Lji z097vjo)8s{aWYabLZXOWNp*=hBdD*3-3HQ@#BO|CY$|!W7hiQ zjigBBpj<`IxkT`=bBRdI_M@8FBghJ*(_vB|8wB?I#*pXTjB}^G=n5drJ)I%XT;(hL zq%41fkCzkDBSFBX`Yy_^ro+?7c6QZJROf@_GtQb>tofl)3Mn`LET;aXk7)WVC$n98 z@y6o&+f}dAt36*&dZ>+;73KlSdLQ@ol!nu_UUYdpGF|hi5^Me~{oxoU8Ig_Sf-jIf ze(Kbppa0oQWUuh(`Je`XMNVb)n@eGrICa4CwxcFrWsX1lPaSLrv71km3Nh3w_BtQM21a-2(SZ5}p%=Gz#*BnBVziIXy} z!tL_zbg%mtsqW2GCC~T;tO$hlo11~hKBtVT@*UIl8wcbIrG_!f6(Z)UMwoJz;d zK2TSbgsczLfLDRHm!97UB*8@dv!(hpoEw6obS$W3u1xG7(ovAu48(b>Q{7JC!NFa# zfy$?w;|6E?cO$=u+=r-Ij0Ilk-GngdH`k9sOp z@{0ZfNZrx~!_F+=sSoA_zDRz}(;(({UNri`I!DmR_68cggjveid*a0 zI8%M?rugvX2vhrXHPw|rF7Fb1lSHoD1U-N8>!hRlpLuLcRf32>T$m#x7Fqt?^56s| z$@RAU^0$va5`l*jWIHYSU0saPzBNmY{WT5}CI73l#_VOSDeZkNyj^o4ye>0n@Pbhh z^9GJqE-6_bx)t3QQaJOXwA5>F%iCz56OY;ROvNy#OBX7tFT(!8lTbVwUOJYZ+1-K; zcD~I&Z)yqadrNZ7e}%62{96Ye3-Q8PvJz3I=w!D69IG`F@4P#J43=RLSz%u0f> zkGn0a=pw$$I6UAkcJ6i^#Gc)HGEs`%xRyDeMuD$}y>_8G$JEQU8c{^D4a(zHm0Qdi zSF{DF7HKtkbLD*m_El$YlUEm?Y&>#Q^5+PMF$m5O#g)PWt=ZM=GsO>G3R%( zh#J{}(xK)L06k8s@+fD$=fnOzi|E`X{_&107)L=kT6u!=6dlp7M<*0jI{g*~dt6+O zQf+m7wG;LPT@mMr2ZQWV{K`(RvmnF^Y6NkbzFjF9;A$@slEi^@3fVCFH?+yiR90#+ zCmIrx1E_V7*&ecmBziahE_UnMR<6+*>Gn}B-)RiHHS>flJN7P{hdD8GJVXeZ7XL8B zuhWlsHbiWFcuO7Xe??n#uaEyqD^;n@CSaOd^H(O3EnGgHy``?KRj(rx_;%Ydc(nO~ zBYr}$<{Wi8B&p4JddX_b5&t$FCQZ&_-DWSDmr$VvBcR1Km&X?RNq?lj{8Sj5YUgK* z3Rt$wq};t+9P^f`JkF=nANavJ-PJwtC_AyQ3`Fp)780UB$B}8r-l|q~r_fS{=4U2E z!=CHC9iv|z^a~kYDbi>E{=(g6-z>-#wmh%U?i1o0Wnp5Hs2FVea7%;nyN?;-lw0qj z8^T3e-9lAlq+#}?CR)F#EW1uxA?vEMcWSK~h{K;ox6UvJl9z-%jThIYn5}s9*>drh z0Q(%b#jfj*=AUIP$@P7hU9eN)F#Y#gQAyyodsO1op={u1csFo;xxYuT4EF;?oid%h zGzs)tPqo*P7v6$@X`DP&{i<(t^qbZ^ne5c4b7l7J{<0~GlaBtu8t)CM`xbU-HWqkD zh>^MPL=Ri66#>L0IC#Bjk_eW6ZH_W_*|#gk5*Jc}H7ZD|&^62bnQ)Tc`b5K?jPVch z0Q}w+5GgcVxPGi#dn0TjW$wYa1Ex`DmJY&?5JOk38)w0H4^U}ia{}&tC6EW~-mu}k zjnI>)YkK?HaPV#PMr>VLGpzBq&8_{1^Bl@@IgxZq<6KwBQTnO9W4+mfwyn(DJ zb9(^WrbNX1kokk#i}D*bDB0%E6=0pCc^FFlot+F~>TJNo*25k!;9=|1LG7I-sUh{d?nm(Ea}@ICs)ByKhxaDyc4H^9?>hE5I0AHI48GaLR{BDR~?-W zHSUmJ3Ozr$Ajk|3KpEE}l-3Nt?*BOay2HUt^Ws9vKpw_VL*f4 zCiWgE<24(T10_ry9+BNN3r@wUve7-LaSu`8b8lQ=t`xCz|O`&JMOkZ^B&{b4=AL1ZDEX*-74kr;8 zct#3}iGQWXd6+kK-tOPB`hvOUV413MkkxeVM=bQn)2n)Q!h;S%C4Hi%?(xjk;7Jz3YX)7|bIxmL7k+!Ny{)Vh8K_o_A5uuZ0Q z$h-A?m=W^bejl?xcug-RUnVHk z5Au5d_!X2~jb^F@i;<^8YR3WH_Tr+u0uJ&Qzevtk%ne15*s%MUl+=q-*{W^H$j!83 z?8Fj#586L&dTr84>V5oXJ&K1m0DlxJqPFeok_VW?an(?%G+x;aqzG4qKIU<1a@C!vZev9u91BaFSh?)=?3ElOvZ(p&{io9*ssZG zZwyXa5fn-exjg4f&ddkjXL>R3QSVAt$l0B%49ww!y0Ec|{=QCcH&q|8K~-JBpI*Ra zzi-42&PEY9&=mkRAW~$yMGc!yHyFoOquFMt-Tg<-1ZGh{j0=|e;`K$wp=v4(P}Cc( zXCLI>K4y#P?3ZxupW6vNupP`eM+bh8#xIVKd=VKD(R~m|Wq>VdD}D`fT^L+u6fR%EsmEY=H7Lz{2I3Ed)4m zbNaulrKEcqr!xwgxawu=ET5UCma(yu0Ve;?$HNX{>+^6LnwTx5Sk|_{ zNA6K(?0C%+hTOHemjn%~q~+X{o#&2~0u)tLnEJk7RHhK|`yinuV%CmBzVWifAX;M( zd4Th!3Ulr4d;^Ac`chL=k0{)jJW7}q2}(ema_c`jadAZ55oCVN_|0w+?lY4thQy&)MJ6#_YqY8KF+e~Ck| z#VPv#%er{)!!!`$d)B@2%rZQ0i4dCi_KI~Ty-0+IsNzvLDh3f3vObArt7~WF zD>e#&;FqyqG#}*XK1d?BlG_itvVC*-*OkBAdOv>{-LCpO%AJtZ3gl{S3iQc_IC^jG zwf;tHHB>34)IG`tEcdZN>+YVP0R=6An-e)w44;?YUaj|z#RNMBFCTar$3S*tg1hEt z`v0!BaC>`&S$D_5ALN*;D}mOoKY)E42nUZLJdLsVX|1Q890WJY6DRzE=E^KJtpD$0 zoInGYMk&aAo7B!7K0BQAw*B^CURI6vTys59KtaC<;w|LcRyJC?c!4@~@Sy*%8$!f8 zG4Wk*;KJF(moNZ1bN{uMwRe)wV! zZ~zz-)g?I7CI7v&qK4**iBSA<%Y!J#;y&3M7yY(%b@^z_&ONqX!izk-2N376S4++{ z?{ryf?PUHvBC4!ipb8dDVq@{EtF>GFfG~9EOYcqG$wrqwXS*P7%?RW`kqJaM$H3-2 zOc9n!ldOAH_n@V{$TA6G0!aZ!SE)ArCxx(z&^|sYt7th*W|0=WA`O`0-`Oq(FZ{2?5FgmTdrQlbQglez_ zTG1o#S0+sGpnLmaR**-4xz6c7a>kJuEenESo8J~$?|da7=J^$~uP@}<`@p7%5U^g@ zrqqqzvVUWJet0BvJnS^I0#H~!=>>p1;X`>ztRjcd4_du|S>(2UjyuZJX0Gr5tyf33 zP|*%Fp0-1pzHGu^ko zJ9R}MLI4b$8mjUg%Xz=?efgNL4&T5~oe+FPgbN3F>8u>3tQj`lo#Mt(H&X6|CGWCHqBU zCs_+WvdZk~>)&$E(SJSVY*%&dd(hzhRyfR6n0@qu(8D@Wzt^RypBIw9vjMv;E&SJ) zL!&?2d9;%z(=`h7qz0s7_OtA!(z^B-gK?z3C*qW_?)=!JXuwj0H-GC$;gg#p@8`i< z9VT;DR-O5J2M)aXOqm3}L7%`!-OrV3O_Q|&T1UtM3mQLt$GoaMrd2Ou-4`5fCk|)y zzk*~0&eX5%3I9EkW~5bN`m|x)VB})Yy-?vbKgJO!NdqULt?<&QOV7|UF_v`?#58RU z8lv0N_NL0L--N2|CvgE3q|$fBy#-FIM)ePxAPGsFpl4!-AGntS^jDIIO;?+c{yAT9 z<_xDFCtJS3Gem6d&?dmi*|_~_7Edx?_mo=<)116Gi8|0U%I2jd8f{J2SnI5gTwYlk zC(nnDRUMw$d)C48Y^lq!baatH8{oDpQfyY9zIeRqng3v+-4`*CF3h0yWrd*~a9fB8 zIno**mNSPFle)}F`T+TRgZ`>TX*w#z*7m}l3Em{~q6x}n)`9%&u@twrpSjK z^XbXpckLg&hq%;sUG`t+u5Y|sQC(1=VRS{r2CoPY3svV<}ML9rC9_ z{Z>h_oP;1xw;Fks;-ZPLdiP&Zy`o1_?slB5X{zSXw_C04M9$+Ub# zwaWg+-sbVPpxt^XIy?k)`zR-by=+-PHaaqz4VcQXPvXtcDO-BU=$_>aS!$^BMmaxK zMSzm)A#7EEge4LBE-cLEjH8&cE_8u(1f+}m%!v3E=h1TUdMQz3wUTR-8s3JIvNM zAkBl+G%Y(1c6BGZO4UAJT5{va(4Wz>kv)6e3*Ri;{37Mb-P}KdWU|{4PRps2pI^Q@ zChN)BAbYgB=j66lC*T-bAt&vQvbU4CJ)vU)IgeeG`{P~46P|WONH7t67<(7nW#;=i zks-@&L?srV1XqHjsm=^h-z9tcW$poN>f6fAa85ZYbTiaAqf7rFpN+M$e@$uwJSTz01T(Ggn#XRx09ELynNAQLEY$ZZS&^ zPyKrh2{Wlt6Q=k^t(0-YGK_o2MbKqRR4B*_*vUA?%(n4=jz1@Hhf)bytH^Wnh3;p5C=EtHuPgJJmH}@K~lC zaR^_=8+*X}6(_rSoAwQ!DVjw{VroES!NaMsK5%7PAX9WP$v=dPK!2$nCLgp@knvQ{ z3i}Jcww7TXY=*vU%=tf5y?Z>9?;k(jkxED^XG@C8VM=n|DhbJ<6e3$vR1R~lMktMFmhe8R)oSu~H}p<(hH0UrU1=*4lHW=rcV9jy_2P`DEv-%t`83fHvhYWL z#5f}D@(l+z&EPx7d$&4+Sk@3(;3tDVqyMh?npBdJ0LeeNxkh$`k5qZP09?1$TBIa0 zx|KGAAAZHXnh*bjTC+g&A*2b8xu4cHq`obt(T*2kI)!<)$6rkj`> z?`MSOOn38#JulQJLdO1}lItl-%*OjFPbvZTN)AlrA;^;7HZ0T2GyzL%spbb@Tp@sg5^+GI`2Ai~+8z6ev0 z@vd>0@*l%fe{KCZWvb`Dv9%AZ&B&7VExA+Q^kMAf871!W9S}yw86Q+ zJcjUp?uh^hvAuX&abBUl_Fihg?{`sT;bd+rCG~OboIk3#oF6eUnw_DewGhh3ClY|FM zzde|Oir^kTVL7_ZFgA_+Z+{ zdZ&5Oer(nJZDz5wZs1XqZNCqqI;v>xU9+LN5k*qb5qw%zIdA2|WShMpEQse3@hnZSVUIlbx?%I~fYV#)PZD~0m`@?^d zN2Uq0_afJ8@$?U~>hN{)<*QbfDCU zIGfM6v28x{NS0)No$18gvdP~4hqn#(P3{^6*9vZW?MYyc9dD1J`TwW(K{p{)pM8DY zGYb`9ykMHZ_&H^qPlDJez<46%5KVJzf+zKnGGq&Ssj3o;D!{r2Voq-e^P*N*{k3Av z6RmRsdcRbv-oh{N%EivP@?J;RuT=9mO`^<|3ALJY$NO20O*2zm%`*I&Q01AtebNMG zT4Q9Q=3_wLR`KieS**nBebZy6wct&KV#1*~8lD%HV}si)B~$riIXuAx9~6^Mzu|XL zlSCb`ezs6t`T&-vlC5vLcZ62MwkEmFg}mlgT_+i;1HESjxOeFmZ#ARV^DEe@&9bL6 zL&KA$JA__+%p6MeB#?>vKU^e-ecXHq2TlA2Y2vji!QE+D5nUqPL(|j?ht3@1r=RSq znfY+_!_|O6!7q6~l5m~;f6y^fwQT_svkAedFtW-~Uc%69g1z{+L8aQDb5FF+0)=~PKl}R6kK!^(#L{{`mcYsg z_V6Wa50>vh={p5Kt@6#&f9m)mo|M@u?}<^Ul;NO(z*o>fHriH}Q@(nfo}S~B<62Vt z=3qAEiQes?!o?kX`OQ~%RLjK%ksE>#uf>_faA5-U+vyjjzMG$?_XpH_;TlqouPJK# z0meSK+LjaKrbM#^Zhv}I>B_uFEY6_sgq-C2*1DICKMVhOP@(T^Oyk&Hrl(>A7+Sl$5$M~H{ z7=U|nYzL5A&uR3YZUa5H-Tk|<;c`ZxXQS<%Eqg!Cb02|^VF%#PmpwCatMG_>i=U~d zcH|lp3a7RVasZrCTDkHk(9*N^&<8jgzzCyPGW*ovAfsj@`g~+WGr#s%fb|?%YVO8D zK&s+BSv;%BUrNQi8S{Ry^|qd^w1os+H3yhC^G$3=*sLQHvP`v=FCTz^qDVr4 zDG^3_NUhG(Kld!;-H-NLrz%}3*N71zck<5lnfz4r$s18im$H+Uhy0qm4jEQ0ma+70 zF$^&j@_PTb^|V+VDDur#a5pztIHBDA^*zGmFELq2h4mxK+R~P>OA5(%q|bzzA1$O( z-5Vo_Hql|iBX(+NlCcCq~+a(9Ii7e!#hq0b+Q3JRXs3v(dS$~IQ530~GiT`<*{{g}!fryv2B6xv*lMbIn; zP17AQSZYa;x_YN2bg{Lidog)3zYFWcFt2|V5Dooea{`FZ_5ojlTh`%z2Va;yGlm&p zvmvplI*mj}HI)FVXJ!KPEiks$vS2w=rrnDsBP~_GahNg~Md&vnYEYEGYCbi6Xy^9t z5qaG^qMVmE>KcW`^~~oaHg>FV)ws{R(yb|T4Zewas_l1sk=i@Y7u<}S^qRIh@jDiu zAzHX+>~p@*1bunM4pWVI*#-zz8k@wJ-4$uRDf?dQhuGzOzkBAQz-oK0%uFNnqy^&M z#C;|ZY;9JbI!=LEFW(ooM`bA$d_4Cf`-SEYnN|s6WI*Hi=g$3WZ#m(kxVQkh-Yeje zx>X5n19I>z4RQx_RkzxxeujqVpzTYbHKY$GFftOrFvTF2zcjE z-Cqrh)y;*(m48C2w_eEvR3u+@Dq<}V3^|tQu_(I`Y9e>^B#54<=obgFP4fTdKK0|g zIOH9U{KEE{mKDu)FW6XdsD7ZgWig0x8Z=zW-MGM2Lry`b5A30^D0SbOKaotu?buiq zc9aL*Z$OZhCHyfzu&HDAJ-0I8G}exFu5NAgv&W2$k^TVu>5`|TL)+4=mQSim+SNGZ zo6#c8vw~-4U4(ESHc|`xSgfztq1rbj;gZEqk0+CZaWf5g|w`R0ezcRdg5Lm&KZ@| z{*rxPTR_;VK95Xs<1|WKk=svy&@46C$Z85aBL%d*?yMJSE0AaH{f)Da@;>xRLo(D_ zsHv$oT$6i~7{NMjLC2T0+VA$+VeWt|{+$IzXR(`G1h#(1bag+#yv84~hC^Enqmf1X zPCD&h1yp89BGUo#+~1F^(RhQG1EFIR1ga<_64(WP%1jOo%tv;zximlF=xtt^ssje*;Voh0)ZNv)fP zVq5*izFp;$W*pDGuf;ri7-C_C*ff4zUvwCr@dfh%XI#e&H0}bo;uX&Ql^-Z)>35P* zCW`YHKH;RK7*=4r)q8nmlxuY^D*D|AWv#%ns?6V3<@?LRy8TZA@vZ^W>ZDgfsL?DB z_3sJIZ|-28^1DkHSglIvSV;Bk#k#ONOO*+RI*p}ECCTd5;-2?Uas5SACpBNPzOznk zSpxo0y0R4wnc#9mc<-OtzLxxv*>PMiD@GaE#th6FxWxagHQ~x#(_xpjS3CFjbd7FL zwqQ=wyf=9OsR#iuk1(YRPweP7&&ju+LEnr+YL7A|q?EZ&b`{8vEAbVkJ+Pm5t;#Dn zMdXAV_gQ5em4WWHs>ROan#y|lL5lf{F0;i|#d=GQ(DFQc+@c!SA$ z?2-4Ne!+)mQHGdj1xBl@DwjU=|96*VdE32EW+ASYD~&~N^QC~#H?Zi6bXQBM)8GC? z1{_P@%OF_jFoQ6>{x4*zB)XFX@l_Pzzk z?W*fdx#Ve`zI>jW#yw0KY1#VPapjfp@LV?gLS-li)grv*S-yO$%w^0h_(N6S{idyv z@!#;b+and=t;DAX^p!vh06EAnf;IFYV8uzrz^?R+NyZxPT!RMuX@-H40O(IBbudnh z@rx-!ymIWmWbm&ZfXMfg`@)Ogy@t|DJMrhc^RMouklks2Pjp8pY&ila9pHE95j}hF zw%cg5n~5lD+s>zA<<-KG7n0Pwo|Mqa+}%>ivp6k=(FkfW^Q&ffYOe2GZF6yy=7o$Z zeDyuOOC>U#K|9uU!mT~0gydqWUKvmi`8Z_v=kAowwJj>~ru>6btxIwvqrsmVymkYh zEiTC{CJRrGU+$&H3zdF!_iIqD1)j>qPH^%da?iPDUt(SahZ@{g?S1Wbi%;R{Unytg zzne>vRG;e>;Si}J?jf-L4aQTO9$Ck9g(hULB7DhTO7rQxO-YwEqmu~Vscdhv$h#0= zSAd{QhtbPJ0Llg>%ks%}#HnTTGA<57=dX$$r4C_*1def_3M3-+!6Qd8*2Viz@hj3( zhoAp0=^u`@2uk=@hCML_fH)-KV&?zZ#wJ(eYCv%_RX8b z)5E)K5p(T+#voH5R9%$>OvYWQIyp^@npf(vT9F#~-f~3jBxK_vg-Scq7I|sC^5coi zu#iijc8hb64%2bQ7i2$H_TkqBei>68w&(R@=jn+6@iIx7Th(F2B=M zY`wH5a1_uM;a4baqj&vHjRrIG&7nMmV@Z=3x7+s|$&ihI+Thwdnj>sJmSg*HRYGuK zdsH)QE5f|Z+1D@&%seo#F|_Dgm8%&N+_rG9&rj1?Tn_G$ixiYRaqM4tLi_6D9KgD- zdV>kQP6F>OneKg7e}R>H(H)b>u--c0vV^n}m)qOmqOQTukQhQLq;7O4>eqJ-&J9O|k}1^(zy zI^4G7MbX71F@j0{%bTtXHdogdte%?+efd_OVIArV?O?sfUHjG}oa?B7{I;nJJclR+ z!OA9|R)G?CbY352IS=!)ClVvIdNz}t1o4)1^;9EYpd!K+kW4VAS9}_2zGQq40mI6A zL_qTKL17LiQvSZbW8EZGi=zOF5li&= zimWpA*fyie>P#vG`9#{gYffbElAkmN*~~s28`PIJh_sJ2+K1|ux6u4^Nfx5> zjTdQ}v7$SvfNhhSX&IfIO=Z{xFckuQaUVD^qHE25bGVs|Dm9myg3>H@1!DACxXz{; zpNIVKpV;V<vl&oP1WAyK4}BO7NRvOA8c)2|61o&grba}xGYds$oRp}Gi(iP{xFCaDZ;KU36V%D`4=(~#NR$l51@sp=~*4yE{9YtdJ(Hg0z6+pmF_nl+JMONj; z^UqX+bel50qHKH6{Y8;giN%XwzuzNk+A%1&7upqtVWI}HqpfB|ig89X3-++GFzdxG zBz91f5bqriUx-7|k&6*({aM!)7IJcycfXHSmrY*;P^M}FLjtKTkPNmuzVz76>QS<_jV30z(+8CDz|@9!B_ zpcT9mL|o*y?&dW-oE(-ARoxI@os81g{?Mvl=d6OP}K5yDTsE)llFzuY@JYqP9~b+Zt87-g6IKxPLwVwW3WvY`v} zu2VQvt>nzep-%~t^noy{(Lo@7F|rB<2~wj|^@ML~=ak#DcNO;MyPY}ktK1}R4IsA{ zC_6Oj<5ikaXy#R~(Ys@|dvP|VE@Rpz3HPQ-r{TkB1^;`P-TYh{D4&p&Xt5A*kTiiK94Yj#JMdZ(4q8@Q~Ic4J6nY>+ghA-?LI=Ogj`QuBu;oJa_Uq z;Y?ba$)3v*bZOe}1`{*kWM-fb`tlElLG%U0OBBgQPHo|oBgnFnGrqa_5mhP`*dPuC z$tAkEVY7TJ{`2U36!M1RnD|7stwnXze6w5f!s>cK6~S04JugXZaQW+^s3U7hupX;PrW3pLA04y+oYW^6Vt# z&h?l286?a;UUA1p+MW~>A_MdMHY(t;;F-2WLy%{e3mmK>yXpG_zisX(k>Zj+dH=0C z2HTy;!F3r?8^-Z2&R1q>q4`IJGvXIcc|Sj&wBmy~3z*W)=p;3ao}Q9X#Ss0Y#O9xQ{m!yV=Pw!7v_snLWyt?5?9OEXihxU` zUFw-y#Ygr)8xiVJAi3-q9w^@@}-xV#NB0dj~k#Atx!-Y~0y5mrfaA5m`? zU_GNmZNDf^x7C95kz-i{^`R!Jv34eKL@lkzwv4!#; zVh{c!{(|N>bGMWoI`j}g+-UQb~1o8ikLVI~+Wvx`omEppuFjAKl$Y z=3U79Gu9aFc=0^y_nbRxsxfSe~;uA_|`}S3G`{ z3690pW%z!hLKNLSBm@4n)mG zu-?FK*KOdqjsvhRykCRf=s|m65+n|z_s`58d7po12l^7y$MqRW!-G{seo!+}niP#` zOOX3T6np`K{R#5~Dz+NYfgLVxxTQ}Rc;Yvdkl6B%jA>|DM&6E)WS12*gW3a0h?qb0S|{Cu1$qB3iky)B-i;w!iYZ0Brn;^OfkTV5Hr%6ASwNW zcV{M<#H_o%nEon+x0<~c`YS7y06T(5M*hpQ^8c*=|HDNP$oG@zia_NtD*Q9m_ zP)88e_smG*2vYgZP>MaNOACDHQCh5Z;N&_X9@1enIu~2vlXFaac%4Ex2_7|FI6Vs; z*vDE7K{>QbPWq>iG!rVN)Cqk?k_ zioP8)lU#af_uZyk=qs;i>co!nG;NGgIG`Pi6bVf#wg^Pb>>IgR{zwf}_2G4x%J!?w zwv1%YN|%7d!AB5(j@L*czWTB7sNoV#iP5ik1i&dMw)rD`1mgWNG-18~L*L$yCfK98e&{SJX_ zcJhU#RhQDJC6|OjJ~d|Bz#fb~?JlWHg{ETO~E`v3AX7`QuuX2@V;c z4>S_fh1ELZK$U0BpBN=(wzub^wq%IyTze|C)#-5tp?Q|PMh#q0Pa4#Jut4XpsCzbR z9C%ky`vLW(-dfU13gDUktgMy2g&F$aN8ppjnFDUVO?&UDhf+KCM0_2r){sjfJiO&O zxz^2sY()k7I*Xj~#46VL?vt32zW{Kod10Yr@jT=vexwMcCM!C&nFz$kpDHu1E@cnN4NO+pKT0DeKX7Y>I;cDoK+)g6nPkjr_``~La7p2PXNImJY@ zr^R33b!{>Gx>U-v=xCvsaq<_nvu0 zZ`-^RKCpk-N-sTNixu!Yu**R!a`ChYY*Fka=pP{{LrMZ9d3BZsqEBw-@fyd(t6y zmq{R#VeyKm?{Gn07)vD6Ktgs6_^$Z`WFw^r77G%vh%%kn{krhkr@gzq7Cnf{toC80 z4$eHgsCA_*os~Cj{u(b(1H>F0n7I-7*__3K`Mn|I9^5mO_?#mBCDNzz z4)iJkN-en`cazGSn)jX&BQcS)E(gUfuP~O770}o4qZ9-7J#5YG80&)QMFr?Bh930S zhTG{-Uu+V|ad%X;7M2on{_nucnmnqoPdju_mideO0<@UGKMti{c7t6=lGjD`uYWH6 z&i|$GZRkv0gf}PhE-0gbI0TeOV39-g*=JA*D0?&`R1Ll0bY;8U$X(=;!yr=czrO~{Ad3~?>#pA8&En16m6<>p z&_Dh;brQ2;`CnVsJb2G;Byr1y&}z+Agtk-v81YueL!b$rWRerRJqip@ibYI^wXw_W zP@pcMpOy|*^)A2*@IHAd7xA9B50uFMv@<_$6Jci(%}RQt5p4bI%o1Yoovm`7ryYA``Us{ zYH=MUS2OMEs!dV%p8Lfj5f?u9TZQ^VZU!+yehc`*;CFG!HU^F<`R#LsLvbXfC^Xx& zr2Qf1A}`m~iD`xc@i5zMOY7l{HDZIG-@I|app7W-lWV;VOUmU7kqh~9J`<$x%D`zE= zsA~&d0vk@h(OtsUA>yQA_S`30kbhA3-D70%sNp#}Id35dGYy+B|WTTNDCV2gJ zCGWw!qxa_lxS%ladlNZCjB;yw436u)IHAt>`|#x^DeRX3xw!JT(BB@_t85vf&7-Zk zW%oE2^KLF+fs?K=m$e0GqF zI%CqU8t0)n^=lgDXX_s=dl7bE<6385=G-H_9UWq6o6}dP+?tmwo{e~W{UeiCi5d;- zA%JE6hLJkH293fx#yOQw;{RJJWn#+{7k7Q=pm_?ES6vZ6Gyy2 z9^otB!1{-Ndb8#0fwZS?+&=$BwG26P%J2$8fRcy&rP-Fxn$BplgF}T+udi=LoU?${ zr3kz=!NLn?Usbi8J8ySV#BA@rb@N?C;rlu7K8cO#V15Wx2Nw7!?GL-Pb~rI^ZkSU+ zw@R}A7x`=}_KkA?@q!)qm(=$AkEik{LUot#mHW1e>KZK?YU|q@euJB(*=?q-N6tu@ zH*DxQOUf!+IUj(%G|^GC=17x;ceK+L6CGBypNJEjVHBBbcGlvupmVSFQ$`-~S&bxy zTD)7-O_cmcF`o)_#Mk|t&KQ2rqoHnSrFTnXnwRT96G_qR*go^re!C-ru8n(+_1ZUv zdmE>6swFKHc`@q7o6LW-ZgGl(GOvpog`=|lhYuB@r|h?OJ*Qm~N$ zzrp8GDX7xl0vb3V=nOq!dW99=a*kr99zMF~ON?FF9bH{>Y!z^ZIbJMdXD;GyVib18 zAhJ~5FR*vnQQp!7qoAAXe8R3x`;KQE`C!PY4&`Zpm8U5TInpI%M2$df?d49~)eGXc7g3>RX6huL|1slGm3 z;pO1#%!4ChOq5<{u>l66GGL)_^NC?3r!UL(1#s!^NHekoSM%OLFQ``P=LOD=w4yETwI|C2CX#FO%f36<#fYr)o;u?$co=z;zy%%m%L zc3}I=yO{D6?1lzIcR*={Ab&M5cjJ(QWyXz9H~VjT!|$Q<)Hb)Z5BLBj;A@Wo=s`Np zgkR*S{`a>28FYt@TmHP}HubyB89V)=2DDy9hKD2?g1yvx7mk4IH?-uVV1E}CM+VK{ zL4h9?i@3im)Jjr7ap2mF492$rrev^YdF^ZGjh>#I9Scxph6i!5TXRgevz(6S-3DIr z$`Zfh7`U14SyYjX_^~Wq2I{{XU;rdsD`_!ehbB%}?YOQ6Y$@Z3e(YWDw8-^8@zQz_ zTJy}{-D}!$VkC)3h%8q4b)eT@x% z2nt-Xa0Q+$+m1#%LdY+!WwcvMNHfuJL`Un+F zvEs{+_KeD%91Ge*X4zi82$Ya{LWuEjPgzJ5h)-m|XHT{Yx0eOOhp>&JAH_zp-R|Nq z?1!p}a8}EYpu0bFO%{Q*0toN$%|NiWo?A?@rZC?qHkm1 zpe|o-65*G&E^Z>IOj5IX4;7FJimBJamzfEq$eMxDHUmNJa~o9)gJP^{(Fx6;f$ob1 zEv{WQg)#>t1?K)yo$Qd6F7vnU?SHfToN;Xczj*jl^B`*}GXbS`6`xM+q&X;jI(9Tc zasB~>wp^sRm(d@Uo=rbP(s!}vCw<X!k^dq+nzhO+BKcO!Pfb2)V-TH^XGS9!Clarm~_2voz^>UK?SN#2q9{X0xF#-$vNmy=pVL?7rH>ScS?!}cEEYF1Wj%#zj(5g$GF0; z%=!fPY}{ac(GmMKGhxFMt|;k^wy}@734i4d#pO1amULIHC(2-dV26=8GThkZcdSp0H}Y@R5#7* z)<^9Q%o<>ucAm*0K5izWKJO~*<^rZ*3UF0nDiDynMJh50kZ%_V+-xRQ-W7bM`z?0l zvIkUW8bY?h(MlB2_wkQFn^Xmy{x(&C^Bbi(Yk|QW4P79aF?@iqCTLKgDB{X7 zm&UU?_JPX$KyCd%C4Hb0`MSU*{vEr14Vb9C3|^y!|7+1a$&8xz|Fq_xC3eyhGHJ}z z=!fyL{kmP;@VK}U7-+@jwWx*A_kYb(c;-`3M(|cCAE2;TY^z!7DS&b<;qbfYZST!v zT@3}(pHb~W5nvutH)aW%vivV^55W@qKkJwT>Z{kG!3KdY27$a@&lBiWTO2E7hBUFm z9-ySIxZ_r4C#J?Mr>88Zw|KqhU3zFe69t=CCn{7G7EJRTf}q?D9y!t=NaFSU=YIoB zL;iOYh`g~FC!w-v;VqV>3M9X=Ok``9TDSO*n8Sey>2c#LmB=4B0!u4GBEQs_&qfQGk@fy#3bi>ydCxYG;C4Fa=)gZI>C*53A0S* z&BiXugp{&JuW`QLsOf8?qNN=>NQ(45vKi4z-9t9wj-PI2IhT(Z8Kh#-#8r9n@lXP# zkkhpp+af@&`x5#G^upPwFj#1UV8QSNwT^3wp?R-|u71F!Eq0NmZoN)$_$?`moxz|# z^Zd3J)g|p!y*_v6h@OKDro;CoWFk9mJC8pKQS{nv=D8t}bAdAzGv2?7z~ob1jaTb0 zLdXZXfC~+t(4>_8MLt)H`F!mIdsc7jIN!&aniUwxD<19o884l*mHHER2W*b;4kiUY z^*BbD($-Px%J|W`xNTbdLl=26>mryL=D;OSu+E38_dbkk_+ubn{QW~cmj+b~kS{^5qq?^E z*SjZzc=-#?g!0IO9X#K$UXbS-%j+XfO=(kqS?|-Uxd##=^$q%uTddh}4p81tU9+D} z?LfD+FM<tBL0HXO}_tJYvS;A&e4}BRXP|8CNW;EWdqsO^PcP34I)DS|~OG`m~>X zZ1yzn7UmbSX~%Wab?Q#ov1{-Hch^>@4KRJ?Qxqwg>)xTi$!q#xYemB;D57dzXCS@gQQ0U{R1i3ysL=vS1jzFqgjaCF1A zgNp@P^A#qgC&sQ#7H1V(b#C}hn}VW^9-PgSSFAACJ84)XS}pq%M>WrI;5VND@2iJ- zgg;1WI`-vNnBa7ul*K;IVBVP&NBTTv6_B!;PD_bE1PWKW}6ezpDrv?n%IiO2rJHxRZgdt zkChXnW4cX$%b=@624xxLPnuduxss3%1(}ZcU$#O*LXFmv{tY-!>{a&6*5!3V*83>n zpf2SFesj$^e;63XZwyNWoP<+Enik2}q!=`knudO1*9) ztHU?3tnnAW@6%`O#<9OV07}?V38FZ$H$xeWC5|dUH$=_07Wz*1mgl6>qQp5>X5bj) z=c#8wAo5YR`_f6m{OZ6s;RL2Kv9#C!RM-$0y#H`7 zv9@5dyvCkV{9z@6lq{~V04CvsES@(6>doxRt)cZELKGEN=(pye+16uIt%=4!`UGeX zHg)lin-0FB&4kh)dX+*Asfu=raQ0HZo>5F_|Hv@jz9SY7`AS&1s9J6{EOGwtO(ytZ zBL+g^%_mLzHh1V91JJW{E9#CTjopP!#_1Xm2St!Cw7G;HV*-pwL z-&7N;Q+}AMF7frNKMKAhmH=7u@AjwEnV8p{a`>lrEh%1LFvx?VoV`=`=f;vt~D zS?yEn2E@kV%YyKmfd|ar?JcTZf_dFc3H6hv>}Xt?P6ZE=yE&)k^wG*{ZG~0T@d%x- zhklO)1?=}mGSU`-dT6(XR@?a8u^{%V z>9Ihe<)U8Q{fOFyn+GGw&dfL-7$at=t!+P*)IR#=EV^`(j3xhB5lp%eHB;=Hf9EWu z@onGJ$dXdxrWX=kT3f342sUTyz1JmNmdq%lfn3u)J$(8~V#>yxKpE*i}2T zLXQ}qdhN7UQiZCZO+!Em4dgG(M?J*e8y*LBhv^J9;WmN_&z_KL(W=mlKmXwyF?~m) zMPTg*Tj1ewUU^y&k8!;;A~phbOMm&(TFLRL*Vu*C=`8L8Vni@)JN*)?^cu=?h5qvz z=u8|=2lRAb$!EQ~{Kxq7Y4|$a@|u77kIDmy9~o(AIY>uLYI>q(najhr0>x*=bCR$r zln5>g+!!l4`!r*qLDna-d+uCyyX67upN6&T74vBR(L|)0xqC>=<>;5$)ciTQ*=FtQ zx96X)>+N^X0^Q;p`CG8t8JknBkkJyTpIFO1PajhnX-X^dMK)zpb!_df zOH@J=SL`tf4AX#LrS6(OCnGGkpy!vH2L3j5KzcI?LR_B{SrvH4tO(Mru~S zwKUB(Gp^Mioi$`M{>=f552{9D^N2^vx)berQ8mE4_`wn7Qv+k=tl^AVJ{7DLB;<|K za;tAhW#}qN&iofm406e>>no|cPJTdYgv;UbJdClGZZCL)&D{?+eC9v>sdfWLy`OXf z1+ZIF!C|PWuUZ_nG-U0RaUJ0j|I@Cz8*{bXh9Z|?z`=^HaskzDmt5bfYgT`#hlEeO zz9jfOF5fQ}+Roa!9Jxam0sYe;13yfPHy9=~Z_>hr=bEuw^zUu$yxF|ZA?=m1P@?9E zQWGJ`PywEl4VmCHs;MENl$rM$#3^A7YH*24zs?xg@6EFzPu!vu8vwhEaaPatcMw^f zeH0rYFl(^e#0Vq!(0XHaa1U%>Y7aW`3f}b-jamt;<_C}@YUIdYtUsL8(gzZc7v_c*y&6O8x%72`inpHY| zw&7;TfK*cUte}Bj@-X3A_Kk>l(cYJpt?FW7zL#m^$jxUIjWC(@s!9fL$&KJq=&bpoxBoYlKMwe z+I_;eLg%~lnL|Tg+w28@?IhIsosOIRv2qM%m%2|(qiZ9Tg92zhU|dFqg}Pl8p$9! z;5)Wwh0KZB>gp^m7QUGM&L+;*G;Z;O;xXBE`v=r>4zaRuidStc7---s$Q9U)a~dmzPz=Gw5339@)x- z{|57*Av3SMxVbA}=Ct#uH+DyKuiHW%VJlYsMEe7F_yxH06=zv!gYu4cWkbH;fmheG zcnM=w_ADg6w9^DsijC!yB}MZ9LP}VM1o~I9HHtf_CzieS82VAn3iN0Vt@|Vc*k7k@ zp=uR&I{ysv+?06!W#~U^ri-}dB?!@*(ZFbmAL$YiD+w{_-S_g_lla*4$X-XP2*6T{3wg)36956CEwYZo(Xs;C9HQIgc3Q=kF)f2BA{+RrD*(ChLGV{`5#NC7MMLUBj z4~Zo5O)SLk&=;w`N4oWB0|q?g4tKClQv9C{YAIB8HY_70V>PwpfL1n`gISx2adG1Z zPoKmNPQ~rMF=b3I!i++(7dSI16a7$+qhQwiwWVs{xDcZ30-P>ToeiEiiQO~g?Q=T{ zhL8Ad$HY{J0boZ7fjfTN`SwlpjB*(+^UG!!a5`?++mz9NVWJ-v+Ud8Ms4`m*t&`!7 zec9yhh3c|mRAwU^)|SMeRWh6aQ%0{3&$KVY6BZ4dFJqOAkoVE zi~d74SL_3rsapJ>%h!`nayAQX36R;C?*H|3c_S7(f5n$^5m*W1Rl#+K?iJFlaZA9e zZ~!(ym(_ZDq7hjgzVW11hP(V_v!Qe>ZWnIKXf&NT?eaZ-{g>1($ zmM>!#T}2|Jux&={ie~#?@vQ<`qZFzJD+U8dXdTmMT16rk6_W`m!GVmp&ufS8)=#WP zq+KcWZCjV1O3b@?#aq{nUl{H9T~P#g*wY~vFOcIuU~UDjM>UfcD;zv@7Mv%@tdAxs z%WYH?(X0~YsZZuHW|RVl%0S8TK4$Vxd_W=l_KCdp^|OajAj-c>{3pPB76rdoz8KR8 zOMC+k<*Kb4=(F7p#je%R+0BuH5@Bpc;jv^3!wh?lg*0$dx1V>4DAUbX&37iIW30_B zr-G?jR+TThmu^!^YTpI~nlG2n^ZrV|ApYMmCIU+QcM%7Z^!-c!4^ihCmgM_~{rWYu zT$z>SA~UsekhvFBX69~KZpkdoG|jybDpzGnZp}gFsvM+dE|hX_%Dr)uqB0ak=5zm_ z=f(4e7reRPIN-jn>-?VQ=hUpa@NTEJDld$~${eSx>K6tcz56yIwa8c%Tcdh&<%P;) zq4K>$Q!O`M3LIFq49Wkjx+bqD%W585n3_oZE}Y!F^~LY+UZR3d*Xq$#{IB^Iu35FO zokGb8fI5IsTs<7|goz50gi)@tEa|C)&8FDUdTwEayY;Q-FYwBzhYhPUQ~${qvG;ez z9JW1H6R|T>R$>aN;%k2%-MjmowHF&$+m}R34ewogrM0)MQsYH2EEL-@ocJifJ^&p# ze1ApGJpq338l*}E-tmj-F5d(q41~)drXPtUS@I1rO^HEmj@4u>Y3r}Zhi9CM$o|1D z*6hpZnmx?uFmRCUIXn#d8&dIWGDJrLurvh7*H7032NfE~v%Z)-EBx0_7{3LcA^8`= zb;47B{0l+)w9uoyA_vjD&JX$Wda5C~J zF*nkrek-NS!v-e)gMDmQ+M_Xot#SbQh=)ZfF`M$IC z#=2ctP02F`bb%k@KXp*U!CzvwJN$LdgVCZA;aUm8Lu~y-nJF>W_U^4CaN9AL-F`UdV|TiS8Rzeg>xF z+6(*DX*^a`I6RlJ!ByV#OeMws&%0Lxcu*@1lRH}gAyFS{!adjAVM^#7doR`|<}-Vo z{rL=HqfWxg9$6>S#XdV4rz!kITwEAU&`#c&FO<}s^_ud(T=%d{WgtLbhhtsl%Ra%X zeaV4V25kS{>e2Tp*E&trJY&{eYf}BJ>L2|%SpW_GaV(~3Oj1{Bs95q>Dt1f z`XARmMW;V*rV=mclA>xo%5e&N zr+8iA{?Jau&G?}ZOt`Q(+pZS zy$wG;-=b6Pa!*ht)*|;V(gJG5Z0fUesdppwU7T{QWu6CJVl}W2Qm;cN>khcRXQtfs z+}NvI*^Re84#mZF(xEuT6M9Qy;%ASIg;y>lcSBRGw!z7SVZc_%S7XZRi$}`l-q*3o z-Z{A=ty){#j7s1A+Vbu`P32u@>yKDYf`a0Pz)16m0~->6edr;=2F=bwyeqcKL=3`- zLCT#+v$Rb-Q|(S3C@s9?mvT|fc;;Q8najJgN3+_`X{8+(>N;B!4D@44C~_sv z{wg_oM^N%vj*33SOVl@$DoVUZdr`OKksPUY?G=9Fe1WT0^qTeVr9q)Rus-NQiv(ZZ z$=8{Ari^xhH)ujZk4`oHLr#|4a{t4_hm*d8Yu5}Sc4HFJxdDOfRCMLllOxId#5i2R zXYdN2-9K?cdq`T{d*SIAb>n=pme6Dw((g}dI87ZrYYPeV4MP718;Yyk`)HLsmv-uT zNGD-fHMIueEICF!ntp6a2IgSm_Y9JYAvGm$2(!#AKo{d3YES)TEIK~ z=|}1}1}sfPE+5!^ps2^_nfelZ|Kn!R)r;D!Z@1HhjLR!&Ah@OY2^zibXD_WLfuv{r zrRGEJ%e$2Fo-Zo(a`%HVyu)PFE}pr#b2?8kM%3wGhH>bI^TIOiA3Fo7DE6lKYP2@@ z%0dh~bt52b-`@FmG6}?l5xuUZUP-D2%rmzH!Ld5N6eXWxFwFjEvlBVIYWu-wv*bA^ zG-)&8G+e%Si;Y8z{pUgH3$78L5e^3J>#aO^fC5J)ztDevFviWHm{!mT>t_Z;w9!j0 zeI%tvzER9T|0z?iQty>~3u4C}kl*M_cumSvnEuA=5EYvqpMP!mEaOCK_7V>;s@Aqb zeEy8BKcVL??~Q%uJ_Q%~io4_uZPl4pxiO*oahVsX-CMExX6BLxlE=&e9YX zVhl1yioT9S4%OjpH>77Run$3k*6N5)Sfioh4`e4=XE@B9odY&RT<`qM1NuB;4Pvow z<#^YBX|*yOmC+Q8Z+Np^Lo2O)dw>1$48hghxpTrWP5==-Q=+EsJP@ItjCszB=OvDACcNI14cwA@>~`oZt9DOKE?re( z+`Ru-LV%}1Ea4ZGe=GPCHfl&2;i3Z|{g=W`I9isamG#XADq6L;`Ty+3@84~ouZ&_xc^?4DU+e~xq&Tug&Ur8A)lRJp6A=D6@%cd{o$qLTTZaN*uUS^j?FF| zr?!M$Q_onv{Www4P>-pwupA~jld_wm@N2Vsi_*9D1GW&SFO6#+h}Ksujh2JmGom!a z=-gT?3dMzptS%Ezo{3ZBBn`}|cmC(x(s@31s%BaES>Tt}Zv?%h~O|J>Al{Fj@a5wWypRb5>`QCkZ^9i<4IJ!JbBd969KooC9P z#t-jZ`>b~FeB@pBK41*KjL2gb87&(dx2He2!5mMC6LAn{D3c<-VEIoy)cgwL?0(O) zGIYTq8{wN3qkLv1QMNWWpWDof5Ukk-U<>`svWA(RZ_{C8T5oq)a%@q z;di?5F0TCV4(l>CAfhKc#@F2P*CT-{T(yZzh3pOg%fcDDT{55QfWGGehv5JwDf^vsPi=8f|EBLTDBi;#`^;$H$V%(}#ZCO6zSb8z zF$&KW%h8Q{^@YVFJ)|^+4H@r$x_!A4V;fb@Px7*C3LHYlQ^-q z<#9Lzm*i4mlAE`QuR!VY>CK2}u`f_t^-u}fOXGQw!Bq@44t8diQHv48Z0TpjDIy;; z8{2xvuEF8IY9T~j)F%w&xv8&Uo^0-%haCcTy%AS9Y;>YfI~_P?Kw?Xn8}{`0n+sTb9HP!nZ8-m)Zz%A zrdrfpGQ{DqVpRC(&FH2h7#?365Q$27+cB1>Rx)~fM4Qv9)ar#?=%K_S1D}L$S-YHZ z*&VWt)#ffLwK{UU)8^^C?H)=oy57J5mUnToy?4&+2JR-aesNis7Y>no4*IhU>nr%R zu_*WWjm)P}$xfCXED!V|+>_IptZ}8BelYdM1~ZxTpZHz4hOe%(Sh|_Z0~%xFc}sc6 z9YI1N_^_}z?SSmSeyjB3O&^xNhMXjI>34-G3 zg->dp4IuMVlwHepY9n6;wz8#^eWUg)Nooh;9O>D=b$7c#_Bu{~3euxqCtNG33QFh3 z+aaw&NX^f3pKmU2gtKXYM6_gB4zg)$AA36}9h&A9D~>Ok$y=u_6qSWI;Lz&@j?1mP zKZ@VQGxP>&iY|W%j_tLJ!mHa=K8RG(CHN_YFJwE6QIcLx+M-{6pwq}*y!JK?e6 zJmi_wjb}j`5P0PE)&$#bF&Fl)j-vC{9POmdvx{zNuCe-bB`@hZRGFxV-5e7Gmzj_2Wo=_~gXW#zlfNvLM+yL5#l8(V^Jo`c z-Z0w9`p5s0vEiktUC)}W(6Hm|9?ZzABJkIyt@t+3@E+wx{Z#l(cN1pLc|@ z@Db!SiH{`rFBuyrXX+Q*!;M4cmw}`Rp^|YoFlf7Y7X90~pCdYxpAm=sG$FJazme>P zu)8Gc@;{p`w{YGyH%U5%hdO-3cRo~zyN&8O~JOp?`1KQQiPA=ZgHj6sjw5wy=Djm>7Hx?*)w!v@x|9N+wUm#;H zju{AH4anf-BYPiz5WE{s2`hY^9Am4j`+l(AxMxj(p3!Wzmx`6D*gLj!Pd}c8Mpw+; zjEGih4nl2f{dx<2=PTFrOZ?QO)<3-%adz9h_TJamWG=Z7G?zfu*{@|c!A04tV^@oA zGPsSV&~ddPk%Zu~-Hm8iu18yApUTyM>)5+c_x?~V@*A)I&Yx)J3`=-4>aleiNG-HY zWQ8?l&8*zb1x6zKqmYwgly^&a($>yEt^xrbI*4_9e-4p^i>J7vg@pxr3HL5{^+PBr zzP9@DYSb;pdsYBP#vpO-)G2KrOb2Gy5b(a72v&|Io_2b%gh%m2fB;f&VyV;vJO3}( zHywVzbt9HePTcl%-@eQNByO38*~hFl6XDiXo^BcsaQ03o+pq*28Om z>r`YE;CZO6AX>qKy3i?Ysw+SEY4c&|RrYt0-;9__)Ych^$oz%s)d(qHc{EYBR3MsB z#vn%HceAOGTQI1c+b2II)QL(7bP)2*c1uGoHS5HCL$?I{VY|fTj{@PGXA>$4BS!&ngWZ#~+3H|}N8x=;Z)lAhQ?5{w z(bMtofF&gbuq06U`tu$({e3)!pvA|cjw5nG>VW0Uz@n+c6hj5eBWN?L~b;t61b;>bK=}+F4UjCqjxMFN?(qY(Q_*W-l_oQVxz^ zp*M0C3vpjTALHs6?IlWEXgQ z;|%xUDv?%5uD%;^FNq()#_$vVAo7s@9pZ2@CmO$TT@RnIQIk4e2;yqaZw2H|c8-K! z%~JC|VSM$7dl#dEH`In7zxQ(oz>+F)M}N|x$W>{gdS(Xe=r^Wtu4W4nJJ5jWH&gd?Ix$~IRW;2#1H;Ia*5 z$7^atS)O@J&^h=&Jcrdo+ux!0!7m*$LjE^YB>p-baIL zdP4pvivVvAVg`_~3|$OpOUQG#WV)_UuAxcOeTP<)2EZws3Uz-SbTXSxc&LoFT=Tit z)P$_94OjGXRU+X`Oux2zY(xu`<%rQaQ*-&#k! z7RZ&Y7)g`Wqy<~kT35vOSFgR++g%d8`o;2WZO09>Mzfp1o#8IUpJ9~|I^cfu{@`T#^oQ|-~&}%X& zO?Mhocr<-)6B$AwSwro>L&dKf)t0Bdt@#R>?l^OR-L@z9Pdm9|f_aUMJO zE2X}DqkFA}X0P4B#p1u`!FgTwyt9vkDsR%4ul1uk{PrReeG@R9<_R1LE@Zy7Ud7RY zbBwK{I+*YFAY<)}%G=tp@OLQSu7|s|nP+3X0t>VJRHf4jFQxpc#Y_+WG?#NGe zc2^gIwtL@2dLtkCz94o|D(#4St!oq8cdr46>FK+X`64c`awo*rnG$1qhveH^B-}M(^ z@b&0xac|!u|rSF7II4E>@4u&fS!pyQ?o<;fnaU>>2@l4%_l5 z0owOd6$3c+xTy;wU^`pz>Q@3lpkU6hvsQvuN=>zy_j^Kwv{O-7_zaWU*4w(Lv#hOWQU3_+~F95gzj< zF$xGB*mvAg`;*n_tAzRDiTcTEeUsTH412h#Jf-2?QB0TEgo`=L6Y5QkDO1cLB;}SE zToAhrUClZX%l&zxVdV)$Z%`ZB>L^R0A1ivbP0S+r<%r;Q8Icex$$Hp2?ZNN%``1JZoyvbYIxsplPU1?QV2AzYw z$TqmM*%J2sr((1IHKx#Fa{2DdM%~)EcU$*a&C!fft`s|FnEa|WhAyf6>qX?7;}r-I z7*4wZ_zBazN$YQZ6mT}VL4*Co?og-y9fkgYHe?GNexJVmIz~GH`$u>Y<1O{-&2T)W z!SJWzdt`~!2YfK~Rpxzc)?!RhMDJA5`t6eQpQ%6BypR`3j`Shf!xK^|qC;?v#np2Q zC%}EX{9}EwgF5L0lQykd_t?m@~kaJL6BxCKKK&y$aN?;82X`Zp(B4gO4a&>FX1b<{?H=R3hwlU*Ld z$lmz(y;3e)IxMS}IPSP1q}FvLm*{ah$^E5OeU3=y|aKl%3PF$4WZ7YcNIfVT+y3__K-9Ef&>FY3b{!zm< zY0MuaM935Av}-7Z{|*}ty*N`ctipOIJiD7^*wR1A^v`~)f#KzB(}E5Wh$*AsK&x*5 zo)$;;F{;1ex}W)i=dzJa3Z_Rf-y_a7P@K?D8gJHzVZSY#}dJme?l`9S1H+C{|#~re}tch3@^! zt&DBw${keYEPU44r5^p33Vsv>xl8_S_n4KScyI8CUqS*D9`Ybjn39y_F^SU*gUK~7 zA30yJBWUc^V8PN;gkHnCI771_CJ>bO>^&Qgg5KgZ(jra03=~4WF%wt^h@g{_6 zFP`k*%OAx3KC5p4Ou+(pZ|DKJeNT+BzF7SlT@UaT&XxcG;dBd*%wW29&vm*Ag3m)A z(#+dPjn~yCCy^QF59@C_^x`X9oC!Ido|YUt?%~z4mHufGJ@J-+wDR6b^=J8O20Ijh zScK2;H@HM{i~58TTswXs0RvurRd ziJcO-9%0h`N_AKF$>D^j<+2}rPrM0RKlC}=OOxD6aD#5uwRbAbkiSW`^(&5qjqG&3 z5#Ny>#b>LfwPo5R++K;{UB8+Q(v_nj#mz^x`v)9{c=QMCT7=+B_G_u^F2beI zWbpu`rr3_4p&TSd<_u4CN^JYf^0kqn4Vq6KYs*Q<7)GWNGUkeII~de$t&G27{a&IhO4>r91u_q@Bj2&7r~9@nLU zSR5n~|0;D$7=OE_!>aw>3Cw4P@~Y(;ldxU2UUK4c#FzYXUT-{#Kfht>3HO4?=fsSQ zY(bTfi8_m`J>C9erb9)t{NbU^4Yl5b;kp*C-}QU4Zy&U&NjPQjUZ8v6eeGM&f^qg0 zoAxj>Y>9v$xC@=>V$7aK(^>L1r8D#C{xIgV3z7UnJM)7xZyysqY*Tzb9AF7AYdszi z+3p5Eg&8pnP^S7uP*IEYiJ}33Ah>zv`_}DlXy7Yw~0A5Zd-v0+QU;vsKMGy!VxjO;CT$)ZBvsd+@Kd-?}$O4=AWtT835^ zv;2ylbndy; z*gcJik2x3+?9Gd!`N2f&A?Snzf)(^ezll4-HLkmd96(Y7IyZohL??l z_3!R`_9s2|i>17t|FYh7X2)wL{7Al1#2UT>+)x^c08QbLzGv_u>hYJ= zemVN^F3k9@%8;QTpIOJ^=+$;14#vaKIM_EIT?#Em4N0qnWkU3AakN|aBO)4haY)J4 z*hs0B-JbcXI>Siw@_WJ>`*)Bg-eX@QOaH^ZJ+yD{Q2dm=bu+kvJ{frtIfBsd4M67Z zP8QAKM_&q?w$9x47rL+(x2m0FrQK^?N8n__BYV+Q$KZ^+Qca;iQ9#6CBz)*f{2~1~ z<3h;zt+W7^PWP`K7!g|>kzh8jaVUBKdpmJtd(NWxPRZV{#?h#*ZR-q{cI5 zyWwePHtdz|nRQ-&sVTh3cZ(dhHT@7Q@%SPra_KIu80)>;c*{2@!K=ZRHZ!TXbK?$T zu6fCaBJ>DNqgV5pDvpN@i9G#JFR2|iLzag(3(GeCb$C=&SoT+PzI3KF?hUki1>cNz zNfntTrZhDM9K@JbQia^rBTWDp*6MahS z0Fb>khxDIZHNFGjujnk9RmfaJTdmLE^D-)X-D-lF>$j;00Qzg_gr-Co4fo|l2N=if z?q4{>>tNDT!vX}cu8cqJQ)Sej1bWGv41#_)z0g4N=8O?q5OEr$skjpKdwz*ffJ5XY+w9Vh-OR&$&4Ki$k41}}+;`x3ktA*d zZ6}sC5KG(q=$~MM?`_rjh>YWQBagGa4GqF8sA6!k_&Dw`Gl2roZE3z6uVU*T_hpk| zT;o9zzjwdonxhB%=OTFNlxr@QxT|$?93YaqSIa)Veyb3Qc)e{DaXd1iWZMdmeb7i~ z9x41{LAfvP!2QrDn8Iw?X6IxWVQAd4YpeOz=ggKtc;HG~>p7DrGe#`8)&B-lAdaBXJQ%kqlES?N{f#l*6{&?@uZ#6-A9?5$_v+ox zc~jar&$_Lbj(^~eECFz$=q$%=9j6nsQkHJ?#7p2IUeKV>qR*~&Z$-EDr)86&Z$U*| zU?%te-a>$c%~`7GH!^&1svRkdP_^CGzAHm{x}jfsHb`|IEX^|`q1m>hgqNs~@883W!+co(q1YWF=3-6rfXA0@c;N_+pt^FS?phOUc3klB`s z;b(|AoH3(A=h4rNiZkc<2w&c8s9r>X5!sA-=)dr*q~kvy?7j?Le`v2CUg%Wub6;W5 z$Au76ZASd4$aeOkm9uY^vOa+eYMZ(|+mrPaJ7gG{;_(JI7G5+~j5EPHS=Aw5R=k*X zQD6UvStW~s(O{x4L;e^|89&H7J-@}R%v&Qda+3u;wJhn%>4_d~PRQdJAKzj0eCH9+ zsPl6}g+o^-l^-u+!rhTqu~-?h$a-o`H{x3fFHRUn0K4mE=7rwmbd&52%z;0xIla?w+j4Rbl^tFI&{w&6Uq$KzK93k zx)Q*MMHrkSwhLm{vN#t>6B^*xm~G!eWZlc;y>eU(lc^Jd`xt&%c~&&> zF?)^d-Spo%$pwA@B~E~!7Gn?2M;TrYJ?(!CzZ5ihj&m3%y?w^}SCPh!6-Vkh5c047 zjxN_f`N=CGM>=MHUd~uZHGg|y{n?-Z$tj(f1arkZs86esZ+=uNhk`3)5u4V2ph$-j z;H}s0k3`>&CK<`T9cN0RqG z`T2ic3yEB%@x)Ko%Fy?bVrTPyhg8VH6?@~Z;Fi(p*R;x>S(EwaTOs;W=&?8#{*A0) zerV5vN(nx+SF(_vxmn5&+Hs!LkxhJpczv`3twx3)hCV@MfdDp6l*|vm-#4yQygIsE zU>&pF)k2M$mVj)Mx<4>7r?;Zyanc=$3JAu3KNbJU4=p}J?dh4g8u)x0FjaA}#9j+d ze7%@OStB01vC+e`G_#k4TXdX9HI02Ytmm~cS~xFNGSi01dtOJ-WL8LHGFt!lKi?Ub z)tLeDe? zT{IwFkB+Pidgs{i)-lI1Dc!Hg=Akxcb8`Ev3Y?lx)KL6hWtKH zKQ|O?cC`@d?=xZY!*6~h=4^A=z8^N1d*Uc1u<$30WDHgE4Z8Qh#+vy08L4+(JFUn6@PotwA91-8{sKsw-m@dZesFff468ye^pLplS{=1byU;jV`|JqhJ zr7$7y!|qs-y>d^AQ|b5UV<;be%;!{BRL74X{;C4o;O-^+t(h=M(#CM-YJTMM(C$y4 zlpB;Fd*pJk(6=;=%_f1uG3dkUU-UXa4wD(Tg+u_RNzEJ#hZre+Nr-=LSf$zXnd+9% zxu-MM!9MV}8~tNNL7-q#>doLgsVUF&1qq)dLP8iTlKekayAh{Cl6*G7=Nrs}q*A}d zqbLrFf&~rt%grq}$$_BGRLn$*piSbbjMoIH4y_xQLq%Vt8XnUBKxgF&) zugz7IfHljsD1FRes)v1G>={a#f~nh5YpFAtNYH!$@(uArDOpQH`Jk_CXxBn|w^5;b zce7GRa3^`jia=b_oSw$^2b)`O&l<5QxkgTH_D@a$Yhfswk+ARx&>JqfUhe8{ZQq(FM8wGcq--8PH8u;hf#{d@ zo2jI^zey{yxDO+DzR8$!u8p860wXrh(sIy3>i`PKG1#ssDjoC9*podj_?#X|h*^x& z>7l5lYrMFXKS?RvNh~g_-4Bj;d&wtMjtHJL!HzKazE?K1@x(g4>@XAQpCK+Z!~@lt z+a~JIF#iM*$@E%vp3(+ud_>T-B<_T=i$jRf8~iPtFi0^smNQ5*B*nQ`O+4%!zt4`W zaDblSNe(7Z3wDkGQ?DGroR$nayPI?J&)}A>>LbtM1cG0X1r7j{L zZuXH$+$&R}v`-Db*>Zf~eG8eigX*2VW4O~9vZ%DtlX|?wZQJFu8K4(@9~Ja3`(fFv z-#&bhgVo&}h?E`ju+eKXz>NWO0ZQ*)wIXv;up5D(T+)!%?#%40}eq zNrfPcyU;@2(n%pUUTTc2gEwOi%Ng7X4rO?GTW9i3q4!yOM%JR25UZ5>nH_eW)$NJN zV+uavAy+)@*2&)8{KKWJ9(`P8ZSbvT1z}tdI$7XrWOeL)NG%IyXPu}0De`k?M_c)% zcW;E5$ff6&;k4ck>!jIY;K0PvK7#wGz5BFp&xVphI0yd|k}h^8if|FpO_pS9w-6C$ zHlC)vti2_go~qRT)^7vZb(9zPah$f(#mi#jtf1APX%olQ9Lb)0$6o?3oBdRmv>!#B zSenhVD8nde{wNb2WENHxkwIVaQ`>_)SEzAPZFpjZUV6e7q|yuomTR72bgzE&i@15< zLf4#|SNt}9Vb>JA%gdcrRX$Jkm-v2O!i4He^&31wthBt9imLU{kSF7pMBa$g5)Wrb z5~0fr>&QQ!l#4eDsh-H!+ca+I?4@$>>g#PEv_G5{`p$n^?*b>X3|s&4vDlO8V^&8LOEe73Bc%ZO;8mQs zOSf%fop8nW=S_mcN9A0@+Q*YExd$Rn`A$?T6gci&gh@63fFUN%aps6wQil9tCGXEO z74*$QC#o}l<=r0>D(W5H>k-LuX$6)Vr0Z-Z$>Yu+pG?QBD1>D?nd=FWQdsgLTCXGy zY%JFP9Jk)m4HI4MTO+1^(LXVJyxRey*z46F$ z&cb@a2<*DVTtI_C;Qr zP0sUcNqOroCfFAPgurj3_3QQxt1rR?#xr`|pB@oPVpbbigkQsD@sxgQNd7FZH?(nS z?9_zSDoiOPWzdY|YOpN+6{oiZ1~U>*(P z$nX2DIGMUmPviPycDlXDLL~yN*~_^Q)W#8-tBF={ntWrkLBch)^gmc(7h~)+!B01? zJn-k;$F3~7yLs372A@CFz*M^xYL@}}{1Ch~oaA#+Nz6tNQ}fNC^IvmpphSn!ImCBw zN`X9VV@zvd3j0X9Z6^J^xOp7R85iw2U!}&#V;nHkXF3^q{=&&l%0nNX$Tv zeWy=67-aQ=6=s~Q?_&N~=ez8)hnP96tsU0u)p4W;b1wm{CtKC!ARRkzR`a)sY&%FV zt?C`DNTBfv%;i??dh3tN$>kQ;UdRs*_)M5&T2j^tJ*OqzZ(e!Q*!V;ko&U(;*6q)C z<1F_#COx2)I_{`x-DoS2_OOOuW=bR)4M3Zb`vn}dGIs7wPlN$6RY?1G$>iiG=vT9$ z_iGO-0@84r*snlxnvT9is zR4^*yl)~=%8_=n}UFE56j zgp-{CV@CZw+|SMND%0(^>A0G@Y|0+@{HFDR_~I>gZUn#h`m36PpBSR)JsCh&mu`lk zMWz%#8GQl9FhaqcJI|`PzR9))`F7oTnwg3{lMkW<3myD4L-!(sLRanXKkJYugakra zpzSw%Bm5By27=8&CtXOf2Gq`@g(Wu$HyQBU{$-UZLP|^DVOLiHE4zaD&;M}Q+b!Jv z+2ExE|3YO4SLBKp`rm@X30Ca6INywrR@Ipch-@9F?;<}z@r0p}&g+z3^4Xd1K98FZ zPPX6q%I;hROj2#KbbZr5LJtbV!$p9Jr(tr`LL)zD$%3Ua7%~(qEWTbs-9LP&IyG(f z8B%+-Bj{v*L}zatoiTOyf+zLY-3yN<-JT#mNnR2}qkVR52S1f{!(&*Wv-nbUk% zk{{2NPvY8bzcm6hDa+DN7mOWk4kre8++$b5MW)h-ECXn*kYSI7RBEBFU5h09EcN>I z=SEbW?a7alL+R{yUl)xbNdz@VKz$&($S`UVCg;|c1%ZI9k+<(3k^;(KR5;b(caJ>pufX+CkNiPV!TS0$~c%?+T+N@ zi}i&&g3G>nQIvO`sv_1*&(%=Uwk;Jgn6UhhTVxPNJxa&e_Zg|e4aQ>Yh zraQEsunw!1c4Z5vhJ4CvgU+DOJ2gX$kbO;oy9Iz2YYpJJaa76l^ItYfb>NhtXx~hb z_wSR~juM`FbmzHSHR!GZqqF4nGpD`>w?yQG&U5*D_oI`gQ$B0y7jsWQ&9N_p$0&78 zm)5Jv{rsTyX6k9SUVqd-@F5sld&tD?U%^!*ZL1Kc=PTF(*E`PH;oCio@srSn+gWQh z9;{f*^D+2*Y5pWY!H#H8!M>LQ_eAw{O7XA1Q03cKan>KZ(FLGgX zjDz}>&a*;W$;|?Qnsl~Pi~CMIs9N)e(IRvY&~5xZLMJl{y=oug+K@v?bL?TnYtU=6 zDr^|>NXsr1&$VPlbUH56@*R-i#h8qTdpf-So^jo5 zC6;y~e2Mgh!SC|ZMT32C^^jpqkZ98Pvj>lddTCbVT8o1J8OH~Jsss6=93N6eWk#|z zta7czpk0{x*4nu59xR4}Fci~idkW($($wDVHS<~CVg|FkSVGU4_ptMAhAgpk2kE;% z)61MMOF$G;CZS;A0#f!QIBcCP$Nt9quU5T#qiz1d@~L3j&A&=NZ~5LAIja>}&8Q^4 zxHjwkT#R%?!lS+N-fxec-&^!mc2J1snDa)!lzZcA!zyN*V8d(4`=!u;PR9+AiEA%5 zN^c>hbC@$BbzusMeYLC#;zOd|nBL5LoK$lZ!|<1giv@$-d?yYn5Go*Z1?P6>I0WS- z%{{-=cSgB}hZlvck5xwqp`zLku(y|mag$sz%MDMEES#bG_Al-bB{TOOK@n}uh~3%# zlXn@?UdoRqCN$yjT7SvdkCY*A(3e&eb>r<-Bv%iRODd$B3B!4_;$nzOGoIQX5zfXo zKjAV2JD~Ezqrsf9yvD%)CG3Ol9c_t=;Ciz~qCn?(*dz+aR>JnLa5%CNqY)zs6ee0R zem_H^3UIHG9pv+H1gLljHV5guie#$*4K7?^iG%@kHJ58{Rf#tiMkIok`eb`N0vZM7-1a!Ff9mbPCx7w@+J=8hlAEP=D#YJfO#Q%t}VOO zk$zZP+$5^R5EA>1-a3m6#+HGat-9}7HlGjLXEBhGn)MCr{=2-O)^WpE3Tn*E#og|Y zB3dIU_q9a&&@HBO1x~QYn1lmz`WnwUdkWCb1=v{!!a7h&q6M%mFwRWpw~+E9z@yNrX~5g~e!U&-4JiTA0VJma=_YU!jpg*KNl3Ge0&a)eG_T4n(y77M51i9h0P z&_wrJh@LD@Ft4RuUP8jJxJNt$*2j%z3^9y%1D?gd5;Dry`9e@|p{NIyXbfFh@Sov! zA^#pc*1J?ZF5C1$+{GMKYIXii{;#JGsDE2lV>rdYjNI&igBcO=WetEv$)4RTgi3f9nADvpNwu`h!kkhcPtir;}ns<{T6E6ojIwv8G*YtJ-I}*Ipe!;$M%a!YbU7UdEGKze3Je>z$_Y8ICa+gzjkZd7zf@G$2qtX z@&bpIyxMK#mrA+gau-WlE)6^IW-ILP8J%f8JtMG4*h^q2t-L_^#ysUUe-`nznX8mN zl{;CT53kFI|0s6yzq~{9TtSA(D3%jQRuN(c`>n~~s+lHb+;93JAE)~03FW)co3N`4 zor*PLsL|eIqrE`O`laBN<=?9IkV9hEcmFesLw)zjxXV(&AhmPIYEBdjs_Ref9dFU@)7~i7 z%`mP(hO)z3cB^!F>xnP`Mph%Z`|#m^Ax&jF!1{kx_PO4gk+(F-N?97UHIXSN%sfW~BJ;%4eLXARq#fUkx00?YeTqE5&06k0l|cQ`HR>7v^KU(u zA|DPts39X$LilBki5_=KYPVxHR1OhZLS0s5=Lp? z>y084{KEiedz}GeS=&VhPChrU-S6=c9EazGq5ls}-yYB8`~P35Mmk9=re8wfnwy zUx(N0^*jKNFJ&NG1KGFNSE)i+?su#*KzSZX1UShv&??t z{HmoXkb8ZwO!?I!ZH@!TT?}0&;m3D1Eq=%vt3~q9lbT5GnAU6gIa;r+79yG(v+dor{a6FyfsYs zQE}wWLYSzXF~uK&p@eL|7DuclH^l#X*L~zabm-ajh{Ni>@TQ2fO7krVLAkTxg-hi+ z5>UrbbG8;ISuh#oaC-PM0qzpt$bAa1pVBGpU=m9%T4TuT?hObF`pMA-3UWU zIQ2dIhmTpvNp2t?f@0pLMyZQq?NM;&5$LV-W)FF|@nH3!vd#m_9BBIKz3|J0-)s2k zpeFjUtKV~yAmbq?)=T&LPJ+e8)#Od)3wdT*Cv*Zk9fsW}$d-SvSv7V(qZc%QrF3A+ z?C;M?HFXjUR^ z5Pp>Y1J#ag4SoqyMMwbo7=9cU_4a#PpTj#rovDdlOe)V zi@Jds8kAWmb&sd1d4x|xXu;ttuU20B8s{g z7q;+pMK5a2av0rdDWEW6fng;b@@(YXb8lJ+4VEB|4^0HgiF%8HKEC)Im_=l9Zfl9(7KA8aD-#R zZ@`@gU)nO&!FVJ-?EQT2#e;V#yU}lc0_S>MUB=#t3UJ^!ZM4!j?s0GB2Ob_4TGL$P zfenkdUN?vP9NjA`;h>aqF*FSK8R?AlsY$wKt@12zf$F(w^Sf5?h#8XrXMUL%T#c&B zFhyqz-81r(dJ18u+-%Q;a}nQ*p=Yxrrj8*I5=4c%?6A|Ew0}Z;AtrB1ep1Jx{TW+< z|9^EChUdZwmJ0owf%*D;a40e&DAjJZ)H1xTd8>Cf7#YtY-2ZqJcE$8mGo>Izi&Gpu zMIMkwuGd4Bo(ZSo6M|X?KQjO95?d83B{(*9a2JHp0OTB;y!8_*(7d_dF>g8jQ3bDc ze1b}k^Yi~ie!toAcmAdB!(|I#JR)Z!9R~ZOc9VRk8d#xI@>(&b2PmxmZzIS)eKm0- zTg&#(Vx<~SSx9$d@Ofat-n+b-*9V6K6K!Mb{+L&GE&jpnHLv}HtNzz)AJLC`-#@0Cmo3ZJMmY9RGUP(r!A7J;zpDS;#{B>8fRlRBY&mTC-)(RnN{X7MWt*nf)4i3Lw;lRZ z?T>pZqu(g8E~@=R@Ro1np(N8b*1+2z&*=mGk*nppH-{T_AdCD=K~q-z560IIL>2zn zG^oAWc%2J)1<2hDCGuH$M@Gn}=$-Qj3D_zm=BUHV$=rR@UuTDP^s~LiXP&U5@mDx3 z9C8T9ERiJ_dg07O_vz-8}y=3+iG2%Pddjoa(*N=e+!a#)RVn zSz#m1%9`&U3>ze`2`g_I-T8B)^yJ;RDa_Xg4_pCZUGB{)0AI6XDkO2hQJdJvOVz}O z4`N?)keQ{Bt(uaiLi#B(ey@`ufP-PUMv-=%i`aK^%@^JN<}-A zKn+`VzSJEeC)CC|K1;nk98b{Lj!_ai67!`T0)m{4SLUR8%(e6pS`|Yp5FWYXMUU`Q1rTFN`hJqu20@!kz^y4sWD++ zUb_Zl@Ih~KUJA|jXK+JPnv!q5oGz3QDwmu*D@DQMlDx)2z3!8H#|c?Qrn~^Mak_UG z{JeN1Ye~oeB+M73d$C6xF-g~J>t@yMa7S@YgjF!yK9A4cA&zIj$>F{!=b_#a=yunG2c2f8ktJkmj z%$W73$-me;Z*vuX1{<#5LHKRT{6qUvaFC2Wl-mm76IEy;w{KSw9CrGXjC`zqfbwAV zrD%g$nKkwm>Oot}s*=I%%QZ-x=F_eVe2)>wPsKlbS>!4CZ)yF_;ZN_%zi;js zgos4+8c2I8jUmHxuZ}z^xx;%_>JCLv)LzMoK7!fYFGy~0&Y67$vkqNWyWJO*VBJB$ zz9cp0-$?P2Yv0j{ERjla)OXPLvWxa zW9ovwHsA9dcg!FcU>9d4vO8gCNRI-XwqK_+)!2EpprkcSv|km>57JX_t+_f1SDk-8 z8K07>kNrT$MS^@o&RS$RS3LLGTKCl^==VI(IP*ll$6wJURP%s|m^Sr%g!UL7nRET3 zQ&h78nnd?-%$LXLcP^s`&K_K3v)m(vwmz&LE!a_hA$D#*C2%=6?@y$CcT-)$U?TPS z)&%1^#v%fTF?F3)3XZCLJ17q{f#c+X;NChI!3FLw_GWE&GB9RS*B5{Pcih*LpyF-d z;}@%^yG{a>l>g?YUyWEe$Q^D#^cUSoUc)^M%V{Al(MhG&z}fqh8`s7S;gJ>igyK>a!aU}hjWWx~EvBNv{y5cVO4p1hA9`GdCvmudt+V5)z@ zrad3G*SjMk_baJ`E7McV!Q$19`Kkk>swJnK?Gv6X)peJ}-c6;)sGfe-gTS?2E4m)} z1I=gqwb4clBRXr_wJTU|_#^Pe@_pvn`CARvfSanT_C05y28wZgd|ElGU3-z6vFTG| zBvLFJlL%1zaVRLNkVL>Fl1slInu;o{Kq#<_OY%LKC^p603ai&B5}xSp!#!U~bPIk< zEG3Fla@(PcJ#!T+Pe7+IVGgKP8jhj% zXxThYK+ByXEjvf-e!E-X|9l5vC_N&uF4`GUyQ`!ozz}@-78B#OYBD@9c=m;^FmCeo z`zJGlBrW%!J}Ok{;kd&995iO(xy64m`V8g1Jk&f4@jG>H*d{yZt1YqUBKr6XqjwJS zm0>{_#c~x$-hTMkES_;pn=h!e=Q}}|OnF@$NIS7jG z6v(hA}Cszttzl0&>?jd`|Wi{*nA*Fs+={|hHy%YFgbaMmpJDY8Ak{hw0V z!`$a-Qx1;`5bst=`lAn+pavk}b0^dzCrRlKSkm~`Db(Y=jk(iNsDY&0e2#A`Qe}0# zXX1B>IlD1+n}ncksQ2QD`qS}6pJ8fatp3+A`xg&H92Kcy9Lr_KU3Y2g>TXLdOrGMx4m_8$O<#B!7t~=g8zvus+vDlF6{mA>zOPx2tq{8r< zy^^TUsdXDZXZ9wx6GXr8TXh@hCPgH8OQBpQBYF(zivtk~A4iU-jEm|-*r;tgv7x*m zUh+Ly)>SI%P}J7%n2wlh@_IPa5Z@kAfgn&G#b@$K!$+mNsw{E>MnKOVqmC2{cF|MM zgUW!Rh>r2k`+Cd~%}11Pc+g7xzXfsmX=RPK7)`TIJ!{C_<~1^1y*pG&%*ELE1}1TL z2xUqxRq~CaKJpdj&AzChn z#XnDWw^JmNF74#a#?+sg0Ux}FDHBJ5UZ297ve%3OIGWR<-Yn84UyW?$RE@5KCV4GS zJVxCKPS2i(kSdAEmZOcYmFroL)F0c)m^xLSG$DB-gsCfs5RxYhR)PVzAV^1Uhn+S_ zH>B&#q`oO{K9lp)@WsC7tRaF3zV>O+ZI5bim6tjW_y*mJ+(+-t-c2R=P{RAzqD1HcnL*`sI9zc}T+6lBEU&K?-m`rw$uadyDQZplhmL#n>c%%1R=#s~)r-Zz~a@M%0bej?eF?faqo?>_&F=f zNJ(8?b$Z6$&LF)@UENB>pJ~zFoAB)KF|h7mH9z>FyWLlDiusXHNQ*@#Y(*_Pn%0AA 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 HRIL(nc7AkV@Wp}D;{Svs>-zC#&Nfk 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�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

    Q}DiX*w&VY2YVqZr@Bqtu%xh>zk8wn^At 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 h2W8Xso@Yf^z_3z;-awX$? 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
  1. >4U{LE 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

    ewD#{@tmmoF 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⋘maZ6=eRhK&&Uw((#^rM!`Um`lpmUVF3mw{ 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

    V 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 z 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 z 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 z zmufyl#l^yTSkyUji>~K%MgfOnt%m7yhJZ+W1i)6tM9z~qi!i~1$<)3vW>rmJyb%P8 z#9{+i`@-}_hH{qrR=rP!kw8avuz<29&WeqgOayo#V!bLHK1|k?ZJNdec?dBhvNRRh zGdy=v{JVpvd2FF%Z^DzLTTp7HXib^X2tq3qJsrUt5CJ^n zIHzQItKVDOmY*1ygP^9EVbiR|RytWEA4+sk1ALf9!2dzS+o?{3y+%+njrl$q*?*Ft zYTj_QVvJqRn>q&%FK9{?TKrS7zFW0}`0;vWE8b+ata<^Q^ad;7pnp1^x@t|4N!d4Y zfPw~(S_!jdmOv^{#J)V@tDU7NO(7ROEyu#oB0tE%7iH_02Ytt;`CC^|>K;!h zeK{H3nW}`$qrsk<9Psflb5PEww2EqX6hF(Yt+?$Hv)oQz*J;Zc)&#;>OW)8m;(#n0X3){#?0DS9D!Pbg<}=!26mSSh>8XgiG%ma~ahTV^T(Ss~&$**tGAif)P{sB) z@5K9bMTVwAs|mB437t5}61n{O`9c|%KWhw6pLLC3%lvwy388tsuF`7qxG~%f&0-XwFmWUj6NL^b<^z@$wqXPau0@Ib2(9(&1*r!W-$8;B z?sH46yk670&tZvfh<=%GX@UtQ_6rh*#tNzoFrY<&9H#rtP47El7_IO;dk(9hX=Rim z<4PR@&oGXKWhtW>`O2%J9O8#DBXU~*@D*!nXJ|uJd%!y^F%Gv6*b~!*wDzsSf$77} z0$ZHNSK7_U0_i*rok=y3ak0GnS@bq&wea=Qg->_fa2+mGjBa+bX6_Hy1K2xvXkR&#e= zRgW(hy>UTBR;)oRNqpcH%oel?EkhhXovKnn1&S@Z+*S(7+|sG59e%zT_Y%n?UGuHt z|KvMtv^6xi&>JPbgo0s-w6pt2>eXGmDv?vsdpMTm$o#m2G3Ir7H4h#B2e4YWu+i>Q z^^=G|Tp?}5=gZq!!a<4`x=I5&GxEbTKPmzKIg97?8$&ffAe#IAR=J7_!N84#&ij*q zD=Kj;@I@Cj3Bg%-tK-OmCT!?Dy!KIO}=$< zAlIe+>3oW+C+@a!MGl`3L%d+S=aYZ3ILp?Qy?*Z#x{8;lcj$=Xs3r(gdYbT$=o^@E z7*6?+6JAh zOL^Hn5Mh70q~0wskNSby=n<;DoM^)t9B!HVNzs3uOCbvbjfj2?Q#I2b97 zSz&v)(6)_+Pf3ORLQDNRvWUa z2SW5dfeN0Hy(?&W*r}Um!w`kArR0&5tC?sqaAn}XkDW7^!=^?51#|j|(Y!M#x|WH~ zS<8Y!?RJ65e`5mQygfjymKZtymNd@8_syK6e|>ys&CXByUDZtss9H1{Z&9tN3jn>} z@EQ58`Y5}8Kesnl^?>C|h(d{VNmUN2NjhaV;*vl6mb(ENzz`hQ6QntNKW{J1)l;Sq=4lYUgc=aVDNyP1jOMgSaHIH_@3Q=Uxl1*p3ANi>@s-C z1*JC9zRHx;C-0z{QsV5B>+#Uj^TBo9Xve)xW{<%p0?Af-(m8bP_PQ~Z2G55C=TaG$ z5;E$bPU@X0+2FRlWC@8yNV)M*g=O!r;qCQV+dlu}B^t^(yrkclrB+bj7mA84c3B&V z-<1A{h6-j27NDjX98-C9?mwx&FKB7*{qk8BHz}r zgq>S~*1AZAn^!yS-JHW+;nCYib`@e3KeKc}lz`$YzvY`yHmE3|Y-oBoFy7LF;98hR znNVeSbO6drg$dgtkY=t$SvJb=`TZp40wXE~Py`M8Kq1GWS|i z7d{)ze!wz*3pXXgIFHJQ`&-1i6#VQEB%-;2W0nSJH@riyRRlKW)C~&hc5NHp<^`+o zOYN;%;wE_2Ke1GSQ!OLZ)-qdi$C}4+@tZ$`^C%jlpbtx0BKbh zt9Hc~O}mkLe!Nl{^CjY6D{&mh0@LFU{Y<8INa+IZ|p|BTWFUg(RB%XfHdQ z^77Q})>B})j(1-jQ5U0ylfxj@SS|xm;i6dm%$@~JK=Z`WBCF;>IgG8LxUC%WsbcXq03ruSI2xRJSk6P0f4Dc&|f8zOP&!nsoyG#c|_0dBlr z-F?9@nxX#froby}Q|ka01mDSYgp5Un>RRe%9$x#M4k4`;{O@p6!Gv`&w5t~_)G0U< z?CHcrF{eEgw*dl!xdpTwc05w9{uFs*%f4qFy(!KBL`Xx#DWLri#4ztX!z4oaCQ1D;=Jqodf}=pSOXSK_H&g~>p55o4gpHfupmuURlKGCB~ z#o%^C*h@)O_$NTDp%+9)brgm6tIO{)BRps0=+6{~4jtW(FFaIFy%!CK2|2D(Dr99B z3qFB4K#TdVsqb031SUWFtYi`HU+3g&H!x=d1Jxx?zdj3!(t#V?%BM0%9{yP~%m4`= z1?WAD9kb4Vyc4b`bb?ogKSd}K3eH>e#0%C@!fw_QKHDP+C{(G2c7(qNVg|Hs@o0)keu=QuASX%Q2yU>y(62Vks@oPp+bAXD%-^`U ziYPd+x3Pcriw2NRJ5p(RP~sqK@HQ9OLXA#Je9x)J0YFm73!Ct;}Rby={f3S`m zrbX8sM0KMiM3 zmPAFb0U)<9!z7n@LY=)WiRG=t>woiy{_=scIiI9fO>Faf|mr?G75EzxBw zR-x1Nz2VmpAaz0>Fn?a&+1#?Ic`|#;wE_+`E3HG4k2MIx`-}g|!0GLmnu`h6yyaJ` zZYY|>p@VkZID6H9zMz*}E}C$Y!6M_nvA2nqjr#{1B4b9}U?^7-)W^5xbYJR6bDAC? zL3YDU_RvORK{&DK0F$?}aB&}v*ejT*pA_fb4}B3Psj#HOp$J{*3q2dcYAJ(Mk6>lT ztGGi_GLxfV8Ee4Y4UJyUDLD+Vj9jC-9l|A>%vG#X`RebC@QxjMw8*~`Fb2skiTJzE zoGi4MW>A(JcdguYv+B!yxeA<`xp(<*?^ltc)ur#&Lxh*{C=6`QbqA!NVnnuP6k`;n z&|}3vfW^!#t2Ly}aMo6vFTe8_ffXxJmafkug>$uWnQ{h)XN0CVG+_o zQ-#~PbVqC$j;1-_S}z*_p;&iuJAqD_`*LDQj4M%~i0FKvv05roW`Sd{U#3KLW#agkW4A>7yU3Fy@gLjTqgB8{$u;(Uyvb1>xoh>~h5(ae7>Hk&q& z;wB-SA)*Q)w{Mh-VY>ILX@0uw1*SgVFM8d1Lt4oh?D0cyuoD4kaQ3~})BXh?Y=SPE z?sH~SLq_Zs=U!-Cbrz6S^|WkpB8>SszxWx=hQEdCmw0m}Y0p=Sh;s_-(g{xTIcc-? z8~}>}9TMVz;i7P(lJ~gAf~5_1xH_?`E=`~v!=%FfU-^duAL!6*sT8`szU1f`55dTy z+U8?-JyCCPIGOZx*mse);N2heKrAjg+|+wI5pyn*M%(6{UATl95v}J-&?ZM=HOm?f ztdP5rs=ypN8twbm%nM}o878E3wB+kn{NP5bpy2g{4%5;6?SDo;IocsagBE^hUzS%_ z@Adj`XD_ay{4UZCk234XaWS+TOuM{CR?`_4uTi>4FAttpa<1^&KX^X1gR@8XYbj9# zco9B0lwk2MZp63m>WX$=bZYV;4Mw&mniR?w9C@!CHQDsN+1~&co;_kXpb3vn#2)Hv zf)d7wDy@PY?9p~{YT^&me)2y8{kWZKWeJ0jtP!@ ztmsPjPAKLFqpdD>)<~vPNiU@0ezmr7IlX~;SMm8MKJj~>9`)WRK}nN4GqLmzA`cN= zX_sQ$tNIC7k~0Gc6RnvVemQw1UmOypL2h%Mpj>w(q$WVym(4k(3&)nHG@8rey}tF# zK&N)msvNb7EcABY8Bwu z+dlvoQ*O|@V%I`h&uzPsH{>FH9)if8#t3-VHX3ApQ9yA6vHqn|+k?>6PP;~3xNF>! zh?N`5XJW1K>nfsdc|6}C6ojJSc_Gp`zn)Xn$yM#^G2EL@3>g~K`nD0!9 zU8hgoA@$meaWPNP&=_SdO1G)IFb>*Og}Y4^CMhLAq+JK`_iIT9uy-jFN*|< ze;#i0k`fi=&0$J?{oIW-U;}Lru_A(yW(Ln&pFfv4(LsN`p9P;36)?4PNRU5^VpT+2 zkCjGIu*n4Q>8Q-&YO z$y7pujEtr>^50`>dANw4O7b@e#vZn^VVKBkP;QIR3$`R z`;!V(_hArQ-E{Z**)<)3gX1(dKs!ud*5Aty*u7;_jcyt9H*utcq9__RNe0(9&Emzd zw|pk(To?>I4`Ks5{sZaB*bMx~J-^q~BMaiO*sgh93WfJ7~pu2^u#pC~x z>;d`p8}6(-hc)r)W1xmQE4imzjU2i(-Di%D)xqblfv_(UaA!YX`1h5#=|8X9NFO7w zI(39XHlT`wbaf7D!%)ZQy11B2d?-G^&88E%nXSJX2s{24nm*TBL)>({(!8%M`!Q!Z zXztGt{dim*ahE$!(EdUk5n_bpe`tB@9P)wm4RK@4ZS*Ms(=6@CLcf=_C|OHCrYUJC zXY0vT5tJ1D5$#Nz;Q7^u)CUZjWrogYGV6Fg-s%cCkWE{8l5-S0_K??0+NaZL=%)6% zl;mnM6LFuRP4vtLi`YzfArhea@zsNlmi@bTG{MErWI39tfPT<_q^dm#L~Ch}(((fP zG>Z@Zhcg1To&W5iG3BD#=R^qC{z$(CG{mEa0~b9@&A8qk4YXtiYR| zm{|0xV3S1Q|F1istoJh+y#5gh2z~U=EQPZqZ9;t*Q9yHGkv5~Y=U~RKUGf|mqR`7? z4U8YTjU^c+y!{+T-bkNzHSRU?h67KLIddq;UA zU(-onXxJl8!`xl`3%ofOQ>abb6JCjcY%-S20xuoq2EE51IGALHTP015x&=I}KX@{Q zPZxG$S58=ZZ&?3Ui%v2eXl@k?-*Z5}F#~n}6j?G1HnaRi(&UoAQ3PzLM}71l&3FM; zSmAx;^tDOi9G17TiBrDC+@ZgvV_a1wF75a*NHMjJ`yii?8K8U4d<4#^-u=6U+WKHA zQkl9Xml&{7u~E_y9CtKnlz=*_G!C-c)8U!27NhTLBL{7Otf*nAbiE-NSB24;-XntpcK2OLM#oL)3 z9l$Q-+MvR^1hB)qHdwWW}h9z zd13R1k4R8kiJJ^vg}f5iUoJiAd!U=52_wygEOx2ySH6haL!(7i6$vK6A4;5nqqGQm za$w=f@VGGKZ(xip+p*Y?+kx&8TF()OJ<=SpS+dePFOAv24k;$AKJ*&SDRs1 zD+WWSVh-D9r-2vP^5b-;aV|Og!@FU0trAz^kKp!ab zc+9p1OMr69zO-C)2l@3pd4dgF!HdgJsgtj@b=I1oRWOpm>ZP+Yr5?dM_@N1c0;l^G z&M9l88We~xazMsELV;ad@w=s(O%MFm7dbG4{w^MAXO�H7J%SFW z{R{9I?s+w4K3ck2Q~HAwuSqSa8k?3-Su{OmHfqWKUybL=+$vUB)t)BvF9`aPBT+>L z@l|cDu6k#Kmpo4COIGS^|0%U&1iR0hvLtWUbWm&irayEAV?ICDXKC(Iz4w2JTR zU$OB>JvRfl1q>6plx;HN3=zvOyfc!>O_4O~d@hC`jVD{G1S(weL3N?I4zK770;#n7 z`_W1pu6r>P4SXYY8PaY7`2NQ7ziG+aK%%^TCL@g?1IDTNN0%a;(Axd5GgZkPBJ z$XHio7!D(0lT4F$7GD$S0CWZ)HRdFDliAOsxtP0?WO_cs`tY(uhtQO> zq+q6^f15Rs$0tiUiRNowqD2_=#?owVQnFOYk0n(~yzXIc@KWLlsCP+@KuOciVAx|U22?BO?o=tP;_8-(3B*~V{N|frmi+6#S#=8cj=Ly zo(t!KgjBfyvNvPc*!(+T+I4OPm!L%&qvIK~yzOd~D<7M_tlE~~E(VK{%0}hDWZcSK zf&JWW7s;?q-{bAg9}v<*^lXJ_i1m0>6|a|}wD@2D&;RTF>x@3m8Rs0QXa0BUf8>Q7 z3w8w5KPV)nE!c19Vfj&D6q2D@$1SAd^20gx3;K5Zo}cN$QCyJGzA;w~62+HYu~T|& zYhkjCgxb&~N6^wVU?)E#O%S=2BY`)aMqy?@%$Ehklo^n}F5p9KiN*e|G&eE;Sd+mY z3kr>Du|Y71A8YS3L5-SGg}(?}@%#Mw6V09*9UsT*{?)wG-`1iAvzN`}U`6UzT@7$3 zn8853kZ~i^p>j*9pVz|v)3@Ao`}E0nh!dC=Z3$Hy#0ehTG|g7f@BfPB5EutmcQgAp z_AOYv|FpfV>4*}FtT8!Rv3H2y&e;y(*MHvFTbdn=`jM(=vRkKzJ0&!#)KnLa0Zw&Esi9_Ki%8)Q!M|bj{`ppG z-FYO)F$0o>$abK&13#X@rTE_%S4AkpFB$T2nO2Eq1O^iNJI>K)v-I0)R_u2fp?iu} z=xAuxZc+qMbR3S#ShU>*>=c3% zn1*sOyp59+iI4J1vX4XAg(!>t&MRIGjoMBS)C^4(ya~q%DB0>o&4a!i{h+w176brV zX^opd1SixTVWqz5X@5|9BgRt5 z|Jw$Sdd2m{MT{Mt$*B`9Hr?GP(ir?9W~25!BgRth$TO^GYYJ?xBLaG+)e2&`as-7n z7v>%dQU7b>Y>+C)rHY6TF^~n=13iK&doZ^qraRf!+gtQKKDW4)rRNlB7blCIFcN#7uGqIk&u8M#BUeLYRQoQEBS5bEO^b{G0wRP zG$Ihbc0rvjNGnj3ib;&$29*}pUlao#tP{(_Osy3_y+>k~{1^#Ot4x?qhbbLY zRU-A!G4CJ&2F}I~BP0CU0{-AABppwa-k3$F&F3a5b#)<)=}e(?r)Wot()#>q-0W2Y z+_0Eut7v%J+}LM62O{W(|94}3H?~|Tmo=FHYwHmZu64d@M5Da>$Ehf+ss__HT(l6KoHl)$#j_1UgLplVvTSE~ADq^x6 z^3z=rLr#=MfkkxhBwvEvZ{U#eW)(B6bo zau(zvO}hGPX)M6Z&Hl2Ks0w1WpsZbJb`%4(2xpf?vWOBk2gHLN(VIGGh)Gktad5UT zr#wn}wfjP17yp<7=890U5{48D(gG{{wTE;@q+31xUTQB0QZ295T-sBdj>l)P_cjaW z?c{`e#|JS|?~1u2D*^#(9fcl+


    - - > **Deprecated**: This field is only propagated when attached to the - > default "bridge" network. Use the information from the "bridge" - > network inside the `Networks` map instead, which contains the same - > information. This field was deprecated in Docker 1.9 and is scheduled - > to be removed in Docker 17.12.0 - type: "string" - example: "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" - Gateway: - description: | - Gateway address for the default "bridge" network. - -


    - - > **Deprecated**: This field is only propagated when attached to the - > default "bridge" network. Use the information from the "bridge" - > network inside the `Networks` map instead, which contains the same - > information. This field was deprecated in Docker 1.9 and is scheduled - > to be removed in Docker 17.12.0 - type: "string" - example: "172.17.0.1" - GlobalIPv6Address: - description: | - Global IPv6 address for the default "bridge" network. - -


    - - > **Deprecated**: This field is only propagated when attached to the - > default "bridge" network. Use the information from the "bridge" - > network inside the `Networks` map instead, which contains the same - > information. This field was deprecated in Docker 1.9 and is scheduled - > to be removed in Docker 17.12.0 - type: "string" - example: "2001:db8::5689" - GlobalIPv6PrefixLen: - description: | - Mask length of the global IPv6 address. - -


    - - > **Deprecated**: This field is only propagated when attached to the - > default "bridge" network. Use the information from the "bridge" - > network inside the `Networks` map instead, which contains the same - > information. This field was deprecated in Docker 1.9 and is scheduled - > to be removed in Docker 17.12.0 - type: "integer" - example: 64 - IPAddress: - description: | - IPv4 address for the default "bridge" network. - -


    - - > **Deprecated**: This field is only propagated when attached to the - > default "bridge" network. Use the information from the "bridge" - > network inside the `Networks` map instead, which contains the same - > information. This field was deprecated in Docker 1.9 and is scheduled - > to be removed in Docker 17.12.0 - type: "string" - example: "172.17.0.4" - IPPrefixLen: - description: | - Mask length of the IPv4 address. - -


    - - > **Deprecated**: This field is only propagated when attached to the - > default "bridge" network. Use the information from the "bridge" - > network inside the `Networks` map instead, which contains the same - > information. This field was deprecated in Docker 1.9 and is scheduled - > to be removed in Docker 17.12.0 - type: "integer" - example: 16 - IPv6Gateway: - description: | - IPv6 gateway address for this network. - -


    - - > **Deprecated**: This field is only propagated when attached to the - > default "bridge" network. Use the information from the "bridge" - > network inside the `Networks` map instead, which contains the same - > information. This field was deprecated in Docker 1.9 and is scheduled - > to be removed in Docker 17.12.0 - type: "string" - example: "2001:db8:2::100" - MacAddress: - description: | - MAC address for the container on the default "bridge" network. - -


    - - > **Deprecated**: This field is only propagated when attached to the - > default "bridge" network. Use the information from the "bridge" - > network inside the `Networks` map instead, which contains the same - > information. This field was deprecated in Docker 1.9 and is scheduled - > to be removed in Docker 17.12.0 - type: "string" - example: "02:42:ac:11:00:04" - Networks: - description: | - Information about all networks that the container is connected to. - type: "object" - additionalProperties: - $ref: "#/definitions/EndpointSettings" - - Address: - description: Address represents an IPv4 or IPv6 IP address. - type: "object" - properties: - Addr: - description: IP address. - type: "string" - PrefixLen: - description: Mask length of the IP address. - type: "integer" - - PortMap: - description: | - PortMap describes the mapping of container ports to host ports, using the - container's port-number and protocol as key in the format `/`, - for example, `80/udp`. - - If a container's port is mapped for multiple protocols, separate entries - are added to the mapping table. - type: "object" - additionalProperties: - type: "array" - x-nullable: true - items: - $ref: "#/definitions/PortBinding" - example: - "443/tcp": - - HostIp: "127.0.0.1" - HostPort: "4443" - "80/tcp": - - HostIp: "0.0.0.0" - HostPort: "80" - - HostIp: "0.0.0.0" - HostPort: "8080" - "80/udp": - - HostIp: "0.0.0.0" - HostPort: "80" - "53/udp": - - HostIp: "0.0.0.0" - HostPort: "53" - "2377/tcp": null - - PortBinding: - description: | - PortBinding represents a binding between a host IP address and a host - port. - type: "object" - properties: - HostIp: - description: "Host IP address that the container's port is mapped to." - type: "string" - example: "127.0.0.1" - HostPort: - description: "Host port number that the container's port is mapped to." - type: "string" - example: "4443" - - DriverData: - description: | - Information about the storage driver used to store the container's and - image's filesystem. - type: "object" - required: [Name, Data] - properties: - Name: - description: "Name of the storage driver." - type: "string" - x-nullable: false - example: "overlay2" - Data: - description: | - Low-level storage metadata, provided as key/value pairs. - - This information is driver-specific, and depends on the storage-driver - in use, and should be used for informational purposes only. - type: "object" - x-nullable: false - additionalProperties: - type: "string" - example: { - "MergedDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/merged", - "UpperDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/diff", - "WorkDir": "/var/lib/docker/overlay2/ef749362d13333e65fc95c572eb525abbe0052e16e086cb64bc3b98ae9aa6d74/work" - } - - FilesystemChange: - description: | - Change in the container's filesystem. - type: "object" - required: [Path, Kind] - properties: - Path: - description: | - Path to file or directory that has changed. - type: "string" - x-nullable: false - Kind: - $ref: "#/definitions/ChangeType" - - ChangeType: - description: | - Kind of change - - Can be one of: - - - `0`: Modified ("C") - - `1`: Added ("A") - - `2`: Deleted ("D") - type: "integer" - format: "uint8" - enum: [0, 1, 2] - x-nullable: false - - ImageInspect: - description: | - Information about an image in the local image cache. - type: "object" - properties: - Id: - description: | - ID is the content-addressable ID of an image. - - This identifier is a content-addressable digest calculated from the - image's configuration (which includes the digests of layers used by - the image). - - Note that this digest differs from the `RepoDigests` below, which - holds digests of image manifests that reference the image. - type: "string" - x-nullable: false - example: "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" - Descriptor: - description: | - Descriptor is an OCI descriptor of the image target. - In case of a multi-platform image, this descriptor points to the OCI index - or a manifest list. - - This field is only present if the daemon provides a multi-platform image store. - - WARNING: This is experimental and may change at any time without any backward - compatibility. - x-nullable: true - $ref: "#/definitions/OCIDescriptor" - Manifests: - description: | - Manifests is a list of image manifests available in this image. It - provides a more detailed view of the platform-specific image manifests or - other image-attached data like build attestations. - - Only available if the daemon provides a multi-platform image store - and the `manifests` option is set in the inspect request. - - WARNING: This is experimental and may change at any time without any backward - compatibility. - type: "array" - x-nullable: true - items: - $ref: "#/definitions/ImageManifestSummary" - RepoTags: - description: | - List of image names/tags in the local image cache that reference this - image. - - Multiple image tags can refer to the same image, and this list may be - empty if no tags reference the image, in which case the image is - "untagged", in which case it can still be referenced by its ID. - type: "array" - items: - type: "string" - example: - - "example:1.0" - - "example:latest" - - "example:stable" - - "internal.registry.example.com:5000/example:1.0" - RepoDigests: - description: | - List of content-addressable digests of locally available image manifests - that the image is referenced from. Multiple manifests can refer to the - same image. - - These digests are usually only available if the image was either pulled - from a registry, or if the image was pushed to a registry, which is when - the manifest is generated and its digest calculated. - type: "array" - items: - type: "string" - example: - - "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb" - - "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" - Parent: - description: | - ID of the parent image. - - Depending on how the image was created, this field may be empty and - is only set for images that were built/created locally. This field - is empty if the image was pulled from an image registry. - - > **Deprecated**: This field is only set when using the deprecated - > legacy builder. It is included in API responses for informational - > purposes, but should not be depended on as it will be omitted - > once the legacy builder is removed. - type: "string" - x-nullable: false - example: "" - Comment: - description: | - Optional message that was set when committing or importing the image. - type: "string" - x-nullable: false - example: "" - Created: - description: | - Date and time at which the image was created, formatted in - [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. - - This information is only available if present in the image, - and omitted otherwise. - type: "string" - format: "dateTime" - x-nullable: true - example: "2022-02-04T21:20:12.497794809Z" - DockerVersion: - description: | - The version of Docker that was used to build the image. - - Depending on how the image was created, this field may be empty. - - > **Deprecated**: This field is only set when using the deprecated - > legacy builder. It is included in API responses for informational - > purposes, but should not be depended on as it will be omitted - > once the legacy builder is removed. - type: "string" - x-nullable: false - example: "27.0.1" - Author: - description: | - Name of the author that was specified when committing the image, or as - specified through MAINTAINER (deprecated) in the Dockerfile. - type: "string" - x-nullable: false - example: "" - Config: - $ref: "#/definitions/ImageConfig" - Architecture: - description: | - Hardware CPU architecture that the image runs on. - type: "string" - x-nullable: false - example: "arm" - Variant: - description: | - CPU architecture variant (presently ARM-only). - type: "string" - x-nullable: true - example: "v7" - Os: - description: | - Operating System the image is built to run on. - type: "string" - x-nullable: false - example: "linux" - OsVersion: - description: | - Operating System version the image is built to run on (especially - for Windows). - type: "string" - example: "" - x-nullable: true - Size: - description: | - Total size of the image including all layers it is composed of. - type: "integer" - format: "int64" - x-nullable: false - example: 1239828 - GraphDriver: - $ref: "#/definitions/DriverData" - RootFS: - description: | - Information about the image's RootFS, including the layer IDs. - type: "object" - required: [Type] - properties: - Type: - type: "string" - x-nullable: false - example: "layers" - Layers: - type: "array" - items: - type: "string" - example: - - "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6" - - "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" - Metadata: - description: | - Additional metadata of the image in the local cache. This information - is local to the daemon, and not part of the image itself. - type: "object" - properties: - LastTagTime: - description: | - Date and time at which the image was last tagged in - [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. - - This information is only available if the image was tagged locally, - and omitted otherwise. - type: "string" - format: "dateTime" - example: "2022-02-28T14:40:02.623929178Z" - x-nullable: true - - ImageSummary: - type: "object" - x-go-name: "Summary" - required: - - Id - - ParentId - - RepoTags - - RepoDigests - - Created - - Size - - SharedSize - - Labels - - Containers - properties: - Id: - description: | - ID is the content-addressable ID of an image. - - This identifier is a content-addressable digest calculated from the - image's configuration (which includes the digests of layers used by - the image). - - Note that this digest differs from the `RepoDigests` below, which - holds digests of image manifests that reference the image. - type: "string" - x-nullable: false - example: "sha256:ec3f0931a6e6b6855d76b2d7b0be30e81860baccd891b2e243280bf1cd8ad710" - ParentId: - description: | - ID of the parent image. - - Depending on how the image was created, this field may be empty and - is only set for images that were built/created locally. This field - is empty if the image was pulled from an image registry. - type: "string" - x-nullable: false - example: "" - RepoTags: - description: | - List of image names/tags in the local image cache that reference this - image. - - Multiple image tags can refer to the same image, and this list may be - empty if no tags reference the image, in which case the image is - "untagged", in which case it can still be referenced by its ID. - type: "array" - x-nullable: false - items: - type: "string" - example: - - "example:1.0" - - "example:latest" - - "example:stable" - - "internal.registry.example.com:5000/example:1.0" - RepoDigests: - description: | - List of content-addressable digests of locally available image manifests - that the image is referenced from. Multiple manifests can refer to the - same image. - - These digests are usually only available if the image was either pulled - from a registry, or if the image was pushed to a registry, which is when - the manifest is generated and its digest calculated. - type: "array" - x-nullable: false - items: - type: "string" - example: - - "example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb" - - "internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578" - Created: - description: | - Date and time at which the image was created as a Unix timestamp - (number of seconds since EPOCH). - type: "integer" - x-nullable: false - example: "1644009612" - Size: - description: | - Total size of the image including all layers it is composed of. - type: "integer" - format: "int64" - x-nullable: false - example: 172064416 - SharedSize: - description: | - Total size of image layers that are shared between this image and other - images. - - This size is not calculated by default. `-1` indicates that the value - has not been set / calculated. - type: "integer" - format: "int64" - x-nullable: false - example: 1239828 - Labels: - description: "User-defined key/value metadata." - type: "object" - x-nullable: false - additionalProperties: - type: "string" - example: - com.example.some-label: "some-value" - com.example.some-other-label: "some-other-value" - Containers: - description: | - Number of containers using this image. Includes both stopped and running - containers. - - `-1` indicates that the value has not been set / calculated. - x-nullable: false - type: "integer" - example: 2 - Manifests: - description: | - Manifests is a list of manifests available in this image. - It provides a more detailed view of the platform-specific image manifests - or other image-attached data like build attestations. - - WARNING: This is experimental and may change at any time without any backward - compatibility. - type: "array" - x-nullable: false - x-omitempty: true - items: - $ref: "#/definitions/ImageManifestSummary" - Descriptor: - description: | - Descriptor is an OCI descriptor of the image target. - In case of a multi-platform image, this descriptor points to the OCI index - or a manifest list. - - This field is only present if the daemon provides a multi-platform image store. - - WARNING: This is experimental and may change at any time without any backward - compatibility. - x-nullable: true - $ref: "#/definitions/OCIDescriptor" - - AuthConfig: - type: "object" - properties: - username: - type: "string" - password: - type: "string" - email: - description: | - Email is an optional value associated with the username. - - > **Deprecated**: This field is deprecated since docker 1.11 (API v1.23) and will be removed in a future release. - type: "string" - serveraddress: - type: "string" - example: - username: "hannibal" - password: "xxxx" - serveraddress: "https://index.docker.io/v1/" - - ProcessConfig: - type: "object" - properties: - privileged: - type: "boolean" - user: - type: "string" - tty: - type: "boolean" - entrypoint: - type: "string" - arguments: - type: "array" - items: - type: "string" - - Volume: - type: "object" - required: [Name, Driver, Mountpoint, Labels, Scope, Options] - properties: - Name: - type: "string" - description: "Name of the volume." - x-nullable: false - example: "tardis" - Driver: - type: "string" - description: "Name of the volume driver used by the volume." - x-nullable: false - example: "custom" - Mountpoint: - type: "string" - description: "Mount path of the volume on the host." - x-nullable: false - example: "/var/lib/docker/volumes/tardis" - CreatedAt: - type: "string" - format: "dateTime" - description: "Date/Time the volume was created." - example: "2016-06-07T20:31:11.853781916Z" - Status: - type: "object" - description: | - Low-level details about the volume, provided by the volume driver. - Details are returned as a map with key/value pairs: - `{"key":"value","key2":"value2"}`. - - The `Status` field is optional, and is omitted if the volume driver - does not support this feature. - additionalProperties: - type: "object" - example: - hello: "world" - Labels: - type: "object" - description: "User-defined key/value metadata." - x-nullable: false - additionalProperties: - type: "string" - example: - com.example.some-label: "some-value" - com.example.some-other-label: "some-other-value" - Scope: - type: "string" - description: | - The level at which the volume exists. Either `global` for cluster-wide, - or `local` for machine level. - default: "local" - x-nullable: false - enum: ["local", "global"] - example: "local" - ClusterVolume: - $ref: "#/definitions/ClusterVolume" - Options: - type: "object" - description: | - The driver specific options used when creating the volume. - additionalProperties: - type: "string" - example: - device: "tmpfs" - o: "size=100m,uid=1000" - type: "tmpfs" - UsageData: - type: "object" - x-nullable: true - x-go-name: "UsageData" - required: [Size, RefCount] - description: | - Usage details about the volume. This information is used by the - `GET /system/df` endpoint, and omitted in other endpoints. - properties: - Size: - type: "integer" - format: "int64" - default: -1 - description: | - Amount of disk space used by the volume (in bytes). This information - is only available for volumes created with the `"local"` volume - driver. For volumes created with other volume drivers, this field - is set to `-1` ("not available") - x-nullable: false - RefCount: - type: "integer" - format: "int64" - default: -1 - description: | - The number of containers referencing this volume. This field - is set to `-1` if the reference-count is not available. - x-nullable: false - - VolumeCreateOptions: - description: "Volume configuration" - type: "object" - title: "VolumeConfig" - x-go-name: "CreateOptions" - properties: - Name: - description: | - The new volume's name. If not specified, Docker generates a name. - type: "string" - x-nullable: false - example: "tardis" - Driver: - description: "Name of the volume driver to use." - type: "string" - default: "local" - x-nullable: false - example: "custom" - DriverOpts: - description: | - A mapping of driver options and values. These options are - passed directly to the driver and are driver specific. - type: "object" - additionalProperties: - type: "string" - example: - device: "tmpfs" - o: "size=100m,uid=1000" - type: "tmpfs" - Labels: - description: "User-defined key/value metadata." - type: "object" - additionalProperties: - type: "string" - example: - com.example.some-label: "some-value" - com.example.some-other-label: "some-other-value" - ClusterVolumeSpec: - $ref: "#/definitions/ClusterVolumeSpec" - - VolumeListResponse: - type: "object" - title: "VolumeListResponse" - x-go-name: "ListResponse" - description: "Volume list response" - properties: - Volumes: - type: "array" - description: "List of volumes" - items: - $ref: "#/definitions/Volume" - Warnings: - type: "array" - description: | - Warnings that occurred when fetching the list of volumes. - items: - type: "string" - example: [] - - Network: - type: "object" - properties: - Name: - description: | - Name of the network. - type: "string" - example: "my_network" - Id: - description: | - ID that uniquely identifies a network on a single machine. - type: "string" - example: "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99" - Created: - description: | - Date and time at which the network was created in - [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. - type: "string" - format: "dateTime" - example: "2016-10-19T04:33:30.360899459Z" - Scope: - description: | - The level at which the network exists (e.g. `swarm` for cluster-wide - or `local` for machine level) - type: "string" - example: "local" - Driver: - description: | - The name of the driver used to create the network (e.g. `bridge`, - `overlay`). - type: "string" - example: "overlay" - EnableIPv4: - description: | - Whether the network was created with IPv4 enabled. - type: "boolean" - example: true - EnableIPv6: - description: | - Whether the network was created with IPv6 enabled. - type: "boolean" - example: false - IPAM: - $ref: "#/definitions/IPAM" - Internal: - description: | - Whether the network is created to only allow internal networking - connectivity. - type: "boolean" - default: false - example: false - Attachable: - description: | - Whether a global / swarm scope network is manually attachable by regular - containers from workers in swarm mode. - type: "boolean" - default: false - example: false - Ingress: - description: | - Whether the network is providing the routing-mesh for the swarm cluster. - type: "boolean" - default: false - example: false - ConfigFrom: - $ref: "#/definitions/ConfigReference" - ConfigOnly: - description: | - Whether the network is a config-only network. Config-only networks are - placeholder networks for network configurations to be used by other - networks. Config-only networks cannot be used directly to run containers - or services. - type: "boolean" - default: false - Containers: - description: | - Contains endpoints attached to the network. - type: "object" - additionalProperties: - $ref: "#/definitions/NetworkContainer" - example: - 19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c: - Name: "test" - EndpointID: "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a" - MacAddress: "02:42:ac:13:00:02" - IPv4Address: "172.19.0.2/16" - IPv6Address: "" - Options: - description: | - Network-specific options uses when creating the network. - type: "object" - additionalProperties: - type: "string" - example: - com.docker.network.bridge.default_bridge: "true" - com.docker.network.bridge.enable_icc: "true" - com.docker.network.bridge.enable_ip_masquerade: "true" - com.docker.network.bridge.host_binding_ipv4: "0.0.0.0" - com.docker.network.bridge.name: "docker0" - com.docker.network.driver.mtu: "1500" - Labels: - description: "User-defined key/value metadata." - type: "object" - additionalProperties: - type: "string" - example: - com.example.some-label: "some-value" - com.example.some-other-label: "some-other-value" - Peers: - description: | - List of peer nodes for an overlay network. This field is only present - for overlay networks, and omitted for other network types. - type: "array" - items: - $ref: "#/definitions/PeerInfo" - x-nullable: true - # TODO: Add Services (only present when "verbose" is set). - - ConfigReference: - description: | - The config-only network source to provide the configuration for - this network. - type: "object" - properties: - Network: - description: | - The name of the config-only network that provides the network's - configuration. The specified network must be an existing config-only - network. Only network names are allowed, not network IDs. - type: "string" - example: "config_only_network_01" - - IPAM: - type: "object" - properties: - Driver: - description: "Name of the IPAM driver to use." - type: "string" - default: "default" - example: "default" - Config: - description: | - List of IPAM configuration options, specified as a map: - - ``` - {"Subnet": , "IPRange": , "Gateway": , "AuxAddress": } - ``` - type: "array" - items: - $ref: "#/definitions/IPAMConfig" - Options: - description: "Driver-specific options, specified as a map." - type: "object" - additionalProperties: - type: "string" - example: - foo: "bar" - - IPAMConfig: - type: "object" - properties: - Subnet: - type: "string" - example: "172.20.0.0/16" - IPRange: - type: "string" - example: "172.20.10.0/24" - Gateway: - type: "string" - example: "172.20.10.11" - AuxiliaryAddresses: - type: "object" - additionalProperties: - type: "string" - - NetworkContainer: - type: "object" - properties: - Name: - type: "string" - example: "container_1" - EndpointID: - type: "string" - example: "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a" - MacAddress: - type: "string" - example: "02:42:ac:13:00:02" - IPv4Address: - type: "string" - example: "172.19.0.2/16" - IPv6Address: - type: "string" - example: "" - - PeerInfo: - description: | - PeerInfo represents one peer of an overlay network. - type: "object" - properties: - Name: - description: - ID of the peer-node in the Swarm cluster. - type: "string" - example: "6869d7c1732b" - IP: - description: - IP-address of the peer-node in the Swarm cluster. - type: "string" - example: "10.133.77.91" - - NetworkCreateResponse: - description: "OK response to NetworkCreate operation" - type: "object" - title: "NetworkCreateResponse" - x-go-name: "CreateResponse" - required: [Id, Warning] - properties: - Id: - description: "The ID of the created network." - type: "string" - x-nullable: false - example: "b5c4fc71e8022147cd25de22b22173de4e3b170134117172eb595cb91b4e7e5d" - Warning: - description: "Warnings encountered when creating the container" - type: "string" - x-nullable: false - example: "" - - BuildInfo: - type: "object" - properties: - id: - type: "string" - stream: - type: "string" - error: - type: "string" - x-nullable: true - description: |- - errors encountered during the operation. - - - > **Deprecated**: This field is deprecated since API v1.4, and will be omitted in a future API version. Use the information in errorDetail instead. - errorDetail: - $ref: "#/definitions/ErrorDetail" - status: - type: "string" - progress: - type: "string" - x-nullable: true - description: |- - Progress is a pre-formatted presentation of progressDetail. - - - > **Deprecated**: This field is deprecated since API v1.8, and will be omitted in a future API version. Use the information in progressDetail instead. - progressDetail: - $ref: "#/definitions/ProgressDetail" - aux: - $ref: "#/definitions/ImageID" - - BuildCache: - type: "object" - description: | - BuildCache contains information about a build cache record. - properties: - ID: - type: "string" - description: | - Unique ID of the build cache record. - example: "ndlpt0hhvkqcdfkputsk4cq9c" - Parents: - description: | - List of parent build cache record IDs. - type: "array" - items: - type: "string" - x-nullable: true - example: ["hw53o5aio51xtltp5xjp8v7fx"] - Type: - type: "string" - description: | - Cache record type. - example: "regular" - # see https://github.com/moby/buildkit/blob/fce4a32258dc9d9664f71a4831d5de10f0670677/client/diskusage.go#L75-L84 - enum: - - "internal" - - "frontend" - - "source.local" - - "source.git.checkout" - - "exec.cachemount" - - "regular" - Description: - type: "string" - description: | - Description of the build-step that produced the build cache. - example: "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache" - InUse: - type: "boolean" - description: | - Indicates if the build cache is in use. - example: false - Shared: - type: "boolean" - description: | - Indicates if the build cache is shared. - example: true - Size: - description: | - Amount of disk space used by the build cache (in bytes). - type: "integer" - example: 51 - CreatedAt: - description: | - Date and time at which the build cache was created in - [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. - type: "string" - format: "dateTime" - example: "2016-08-18T10:44:24.496525531Z" - LastUsedAt: - description: | - Date and time at which the build cache was last used in - [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. - type: "string" - format: "dateTime" - x-nullable: true - example: "2017-08-09T07:09:37.632105588Z" - UsageCount: - type: "integer" - example: 26 - - ImageID: - type: "object" - description: "Image ID or Digest" - properties: - ID: - type: "string" - example: - ID: "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" - - CreateImageInfo: - type: "object" - properties: - id: - type: "string" - error: - type: "string" - x-nullable: true - description: |- - errors encountered during the operation. - - - > **Deprecated**: This field is deprecated since API v1.4, and will be omitted in a future API version. Use the information in errorDetail instead. - errorDetail: - $ref: "#/definitions/ErrorDetail" - status: - type: "string" - progress: - type: "string" - x-nullable: true - description: |- - Progress is a pre-formatted presentation of progressDetail. - - - > **Deprecated**: This field is deprecated since API v1.8, and will be omitted in a future API version. Use the information in progressDetail instead. - progressDetail: - $ref: "#/definitions/ProgressDetail" - - PushImageInfo: - type: "object" - properties: - error: - type: "string" - x-nullable: true - description: |- - errors encountered during the operation. - - - > **Deprecated**: This field is deprecated since API v1.4, and will be omitted in a future API version. Use the information in errorDetail instead. - errorDetail: - $ref: "#/definitions/ErrorDetail" - status: - type: "string" - progress: - type: "string" - x-nullable: true - description: |- - Progress is a pre-formatted presentation of progressDetail. - - - > **Deprecated**: This field is deprecated since API v1.8, and will be omitted in a future API version. Use the information in progressDetail instead. - progressDetail: - $ref: "#/definitions/ProgressDetail" - - DeviceInfo: - type: "object" - description: | - DeviceInfo represents a device that can be used by a container. - properties: - Source: - type: "string" - example: "cdi" - description: | - The origin device driver. - ID: - type: "string" - example: "vendor.com/gpu=0" - description: | - The unique identifier for the device within its source driver. - For CDI devices, this would be an FQDN like "vendor.com/gpu=0". - - ErrorDetail: - type: "object" - properties: - code: - type: "integer" - message: - type: "string" - - ProgressDetail: - type: "object" - properties: - current: - type: "integer" - total: - type: "integer" - - ErrorResponse: - description: "Represents an error." - type: "object" - required: ["message"] - properties: - message: - description: "The error message." - type: "string" - x-nullable: false - example: - message: "Something went wrong." - - IDResponse: - description: "Response to an API call that returns just an Id" - type: "object" - x-go-name: "IDResponse" - required: ["Id"] - properties: - Id: - description: "The id of the newly created object." - type: "string" - x-nullable: false - - EndpointSettings: - description: "Configuration for a network endpoint." - type: "object" - properties: - # Configurations - IPAMConfig: - $ref: "#/definitions/EndpointIPAMConfig" - Links: - type: "array" - items: - type: "string" - example: - - "container_1" - - "container_2" - MacAddress: - description: | - MAC address for the endpoint on this network. The network driver might ignore this parameter. - type: "string" - example: "02:42:ac:11:00:04" - Aliases: - type: "array" - items: - type: "string" - example: - - "server_x" - - "server_y" - DriverOpts: - description: | - DriverOpts is a mapping of driver options and values. These options - are passed directly to the driver and are driver specific. - type: "object" - x-nullable: true - additionalProperties: - type: "string" - example: - com.example.some-label: "some-value" - com.example.some-other-label: "some-other-value" - GwPriority: - description: | - This property determines which endpoint will provide the default - gateway for a container. The endpoint with the highest priority will - be used. If multiple endpoints have the same priority, endpoints are - lexicographically sorted based on their network name, and the one - that sorts first is picked. - type: "integer" - format: "int64" - example: - - 10 - - # Operational data - NetworkID: - description: | - Unique ID of the network. - type: "string" - example: "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" - EndpointID: - description: | - Unique ID for the service endpoint in a Sandbox. - type: "string" - example: "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" - Gateway: - description: | - Gateway address for this network. - type: "string" - example: "172.17.0.1" - IPAddress: - description: | - IPv4 address. - type: "string" - example: "172.17.0.4" - IPPrefixLen: - description: | - Mask length of the IPv4 address. - type: "integer" - example: 16 - IPv6Gateway: - description: | - IPv6 gateway address. - type: "string" - example: "2001:db8:2::100" - GlobalIPv6Address: - description: | - Global IPv6 address. - type: "string" - example: "2001:db8::5689" - GlobalIPv6PrefixLen: - description: | - Mask length of the global IPv6 address. - type: "integer" - format: "int64" - example: 64 - DNSNames: - description: | - List of all DNS names an endpoint has on a specific network. This - list is based on the container name, network aliases, container short - ID, and hostname. - - These DNS names are non-fully qualified but can contain several dots. - You can get fully qualified DNS names by appending `.`. - For instance, if container name is `my.ctr` and the network is named - `testnet`, `DNSNames` will contain `my.ctr` and the FQDN will be - `my.ctr.testnet`. - type: array - items: - type: string - example: ["foobar", "server_x", "server_y", "my.ctr"] - - EndpointIPAMConfig: - description: | - EndpointIPAMConfig represents an endpoint's IPAM configuration. - type: "object" - x-nullable: true - properties: - IPv4Address: - type: "string" - example: "172.20.30.33" - IPv6Address: - type: "string" - example: "2001:db8:abcd::3033" - LinkLocalIPs: - type: "array" - items: - type: "string" - example: - - "169.254.34.68" - - "fe80::3468" - - PluginMount: - type: "object" - x-nullable: false - required: [Name, Description, Settable, Source, Destination, Type, Options] - properties: - Name: - type: "string" - x-nullable: false - example: "some-mount" - Description: - type: "string" - x-nullable: false - example: "This is a mount that's used by the plugin." - Settable: - type: "array" - items: - type: "string" - Source: - type: "string" - example: "/var/lib/docker/plugins/" - Destination: - type: "string" - x-nullable: false - example: "/mnt/state" - Type: - type: "string" - x-nullable: false - example: "bind" - Options: - type: "array" - items: - type: "string" - example: - - "rbind" - - "rw" - - PluginDevice: - type: "object" - required: [Name, Description, Settable, Path] - x-nullable: false - properties: - Name: - type: "string" - x-nullable: false - Description: - type: "string" - x-nullable: false - Settable: - type: "array" - items: - type: "string" - Path: - type: "string" - example: "/dev/fuse" - - PluginEnv: - type: "object" - x-nullable: false - required: [Name, Description, Settable, Value] - properties: - Name: - x-nullable: false - type: "string" - Description: - x-nullable: false - type: "string" - Settable: - type: "array" - items: - type: "string" - Value: - type: "string" - - PluginInterfaceType: - type: "object" - x-nullable: false - required: [Prefix, Capability, Version] - properties: - Prefix: - type: "string" - x-nullable: false - Capability: - type: "string" - x-nullable: false - Version: - type: "string" - x-nullable: false - - PluginPrivilege: - description: | - Describes a permission the user has to accept upon installing - the plugin. - type: "object" - x-go-name: "PluginPrivilege" - properties: - Name: - type: "string" - example: "network" - Description: - type: "string" - Value: - type: "array" - items: - type: "string" - example: - - "host" - - Plugin: - description: "A plugin for the Engine API" - type: "object" - required: [Settings, Enabled, Config, Name] - properties: - Id: - type: "string" - example: "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" - Name: - type: "string" - x-nullable: false - example: "tiborvass/sample-volume-plugin" - Enabled: - description: - True if the plugin is running. False if the plugin is not running, - only installed. - type: "boolean" - x-nullable: false - example: true - Settings: - description: "Settings that can be modified by users." - type: "object" - x-nullable: false - required: [Args, Devices, Env, Mounts] - properties: - Mounts: - type: "array" - items: - $ref: "#/definitions/PluginMount" - Env: - type: "array" - items: - type: "string" - example: - - "DEBUG=0" - Args: - type: "array" - items: - type: "string" - Devices: - type: "array" - items: - $ref: "#/definitions/PluginDevice" - PluginReference: - description: "plugin remote reference used to push/pull the plugin" - type: "string" - x-nullable: false - example: "localhost:5000/tiborvass/sample-volume-plugin:latest" - Config: - description: "The config of a plugin." - type: "object" - x-nullable: false - required: - - Description - - Documentation - - Interface - - Entrypoint - - WorkDir - - Network - - Linux - - PidHost - - PropagatedMount - - IpcHost - - Mounts - - Env - - Args - properties: - DockerVersion: - description: |- - Docker Version used to create the plugin. - - Depending on how the plugin was created, this field may be empty or omitted. - - Deprecated: this field is no longer set, and will be removed in the next API version. - type: "string" - x-nullable: false - x-omitempty: true - Description: - type: "string" - x-nullable: false - example: "A sample volume plugin for Docker" - Documentation: - type: "string" - x-nullable: false - example: "https://docs.docker.com/engine/extend/plugins/" - Interface: - description: "The interface between Docker and the plugin" - x-nullable: false - type: "object" - required: [Types, Socket] - properties: - Types: - type: "array" - items: - $ref: "#/definitions/PluginInterfaceType" - example: - - "docker.volumedriver/1.0" - Socket: - type: "string" - x-nullable: false - example: "plugins.sock" - ProtocolScheme: - type: "string" - example: "some.protocol/v1.0" - description: "Protocol to use for clients connecting to the plugin." - enum: - - "" - - "moby.plugins.http/v1" - Entrypoint: - type: "array" - items: - type: "string" - example: - - "/usr/bin/sample-volume-plugin" - - "/data" - WorkDir: - type: "string" - x-nullable: false - example: "/bin/" - User: - type: "object" - x-nullable: false - properties: - UID: - type: "integer" - format: "uint32" - example: 1000 - GID: - type: "integer" - format: "uint32" - example: 1000 - Network: - type: "object" - x-nullable: false - required: [Type] - properties: - Type: - x-nullable: false - type: "string" - example: "host" - Linux: - type: "object" - x-nullable: false - required: [Capabilities, AllowAllDevices, Devices] - properties: - Capabilities: - type: "array" - items: - type: "string" - example: - - "CAP_SYS_ADMIN" - - "CAP_SYSLOG" - AllowAllDevices: - type: "boolean" - x-nullable: false - example: false - Devices: - type: "array" - items: - $ref: "#/definitions/PluginDevice" - PropagatedMount: - type: "string" - x-nullable: false - example: "/mnt/volumes" - IpcHost: - type: "boolean" - x-nullable: false - example: false - PidHost: - type: "boolean" - x-nullable: false - example: false - Mounts: - type: "array" - items: - $ref: "#/definitions/PluginMount" - Env: - type: "array" - items: - $ref: "#/definitions/PluginEnv" - example: - - Name: "DEBUG" - Description: "If set, prints debug messages" - Settable: null - Value: "0" - Args: - type: "object" - x-nullable: false - required: [Name, Description, Settable, Value] - properties: - Name: - x-nullable: false - type: "string" - example: "args" - Description: - x-nullable: false - type: "string" - example: "command line arguments" - Settable: - type: "array" - items: - type: "string" - Value: - type: "array" - items: - type: "string" - rootfs: - type: "object" - properties: - type: - type: "string" - example: "layers" - diff_ids: - type: "array" - items: - type: "string" - example: - - "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887" - - "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" - - ObjectVersion: - description: | - The version number of the object such as node, service, etc. This is needed - to avoid conflicting writes. The client must send the version number along - with the modified specification when updating these objects. - - This approach ensures safe concurrency and determinism in that the change - on the object may not be applied if the version number has changed from the - last read. In other words, if two update requests specify the same base - version, only one of the requests can succeed. As a result, two separate - update requests that happen at the same time will not unintentionally - overwrite each other. - type: "object" - properties: - Index: - type: "integer" - format: "uint64" - example: 373531 - - NodeSpec: - type: "object" - properties: - Name: - description: "Name for the node." - type: "string" - example: "my-node" - Labels: - description: "User-defined key/value metadata." - type: "object" - additionalProperties: - type: "string" - Role: - description: "Role of the node." - type: "string" - enum: - - "worker" - - "manager" - example: "manager" - Availability: - description: "Availability of the node." - type: "string" - enum: - - "active" - - "pause" - - "drain" - example: "active" - example: - Availability: "active" - Name: "node-name" - Role: "manager" - Labels: - foo: "bar" - - Node: - type: "object" - properties: - ID: - type: "string" - example: "24ifsmvkjbyhk" - Version: - $ref: "#/definitions/ObjectVersion" - CreatedAt: - description: | - Date and time at which the node was added to the swarm in - [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. - type: "string" - format: "dateTime" - example: "2016-08-18T10:44:24.496525531Z" - UpdatedAt: - description: | - Date and time at which the node was last updated in - [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. - type: "string" - format: "dateTime" - example: "2017-08-09T07:09:37.632105588Z" - Spec: - $ref: "#/definitions/NodeSpec" - Description: - $ref: "#/definitions/NodeDescription" - Status: - $ref: "#/definitions/NodeStatus" - ManagerStatus: - $ref: "#/definitions/ManagerStatus" - - NodeDescription: - description: | - NodeDescription encapsulates the properties of the Node as reported by the - agent. - type: "object" - properties: - Hostname: - type: "string" - example: "bf3067039e47" - Platform: - $ref: "#/definitions/Platform" - Resources: - $ref: "#/definitions/ResourceObject" - Engine: - $ref: "#/definitions/EngineDescription" - TLSInfo: - $ref: "#/definitions/TLSInfo" - - Platform: - description: | - Platform represents the platform (Arch/OS). - type: "object" - properties: - Architecture: - description: | - Architecture represents the hardware architecture (for example, - `x86_64`). - type: "string" - example: "x86_64" - OS: - description: | - OS represents the Operating System (for example, `linux` or `windows`). - type: "string" - example: "linux" - - EngineDescription: - description: "EngineDescription provides information about an engine." - type: "object" - properties: - EngineVersion: - type: "string" - example: "17.06.0" - Labels: - type: "object" - additionalProperties: - type: "string" - example: - foo: "bar" - Plugins: - type: "array" - items: - type: "object" - properties: - Type: - type: "string" - Name: - type: "string" - example: - - Type: "Log" - Name: "awslogs" - - Type: "Log" - Name: "fluentd" - - Type: "Log" - Name: "gcplogs" - - Type: "Log" - Name: "gelf" - - Type: "Log" - Name: "journald" - - Type: "Log" - Name: "json-file" - - Type: "Log" - Name: "splunk" - - Type: "Log" - Name: "syslog" - - Type: "Network" - Name: "bridge" - - Type: "Network" - Name: "host" - - Type: "Network" - Name: "ipvlan" - - Type: "Network" - Name: "macvlan" - - Type: "Network" - Name: "null" - - Type: "Network" - Name: "overlay" - - Type: "Volume" - Name: "local" - - Type: "Volume" - Name: "localhost:5000/vieux/sshfs:latest" - - Type: "Volume" - Name: "vieux/sshfs:latest" - - TLSInfo: - description: | - Information about the issuer of leaf TLS certificates and the trusted root - CA certificate. - type: "object" - properties: - TrustRoot: - description: | - The root CA certificate(s) that are used to validate leaf TLS - certificates. - type: "string" - CertIssuerSubject: - description: - The base64-url-safe-encoded raw subject bytes of the issuer. - type: "string" - CertIssuerPublicKey: - description: | - The base64-url-safe-encoded raw public key bytes of the issuer. - type: "string" - example: - TrustRoot: | - -----BEGIN CERTIFICATE----- - MIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw - EzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0 - MzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH - A0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf - 3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB - Af8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO - PQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz - pxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H - -----END CERTIFICATE----- - CertIssuerSubject: "MBMxETAPBgNVBAMTCHN3YXJtLWNh" - CertIssuerPublicKey: "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==" - - NodeStatus: - description: | - NodeStatus represents the status of a node. - - It provides the current status of the node, as seen by the manager. - type: "object" - properties: - State: - $ref: "#/definitions/NodeState" - Message: - type: "string" - example: "" - Addr: - description: "IP address of the node." - type: "string" - example: "172.17.0.2" - - NodeState: - description: "NodeState represents the state of a node." - type: "string" - enum: - - "unknown" - - "down" - - "ready" - - "disconnected" - example: "ready" - - ManagerStatus: - description: | - ManagerStatus represents the status of a manager. - - It provides the current status of a node's manager component, if the node - is a manager. - x-nullable: true - type: "object" - properties: - Leader: - type: "boolean" - default: false - example: true - Reachability: - $ref: "#/definitions/Reachability" - Addr: - description: | - The IP address and port at which the manager is reachable. - type: "string" - example: "10.0.0.46:2377" - - Reachability: - description: "Reachability represents the reachability of a node." - type: "string" - enum: - - "unknown" - - "unreachable" - - "reachable" - example: "reachable" - - SwarmSpec: - description: "User modifiable swarm configuration." - type: "object" - properties: - Name: - description: "Name of the swarm." - type: "string" - example: "default" - Labels: - description: "User-defined key/value metadata." - type: "object" - additionalProperties: - type: "string" - example: - com.example.corp.type: "production" - com.example.corp.department: "engineering" - Orchestration: - description: "Orchestration configuration." - type: "object" - x-nullable: true - properties: - TaskHistoryRetentionLimit: - description: | - The number of historic tasks to keep per instance or node. If - negative, never remove completed or failed tasks. - type: "integer" - format: "int64" - example: 10 - Raft: - description: "Raft configuration." - type: "object" - properties: - SnapshotInterval: - description: "The number of log entries between snapshots." - type: "integer" - format: "uint64" - example: 10000 - KeepOldSnapshots: - description: | - The number of snapshots to keep beyond the current snapshot. - type: "integer" - format: "uint64" - LogEntriesForSlowFollowers: - description: | - The number of log entries to keep around to sync up slow followers - after a snapshot is created. - type: "integer" - format: "uint64" - example: 500 - ElectionTick: - description: | - The number of ticks that a follower will wait for a message from - the leader before becoming a candidate and starting an election. - `ElectionTick` must be greater than `HeartbeatTick`. - - A tick currently defaults to one second, so these translate - directly to seconds currently, but this is NOT guaranteed. - type: "integer" - example: 3 - HeartbeatTick: - description: | - The number of ticks between heartbeats. Every HeartbeatTick ticks, - the leader will send a heartbeat to the followers. - - A tick currently defaults to one second, so these translate - directly to seconds currently, but this is NOT guaranteed. - type: "integer" - example: 1 - Dispatcher: - description: "Dispatcher configuration." - type: "object" - x-nullable: true - properties: - HeartbeatPeriod: - description: | - The delay for an agent to send a heartbeat to the dispatcher. - type: "integer" - format: "int64" - example: 5000000000 - CAConfig: - description: "CA configuration." - type: "object" - x-nullable: true - properties: - NodeCertExpiry: - description: "The duration node certificates are issued for." - type: "integer" - format: "int64" - example: 7776000000000000 - ExternalCAs: - description: | - Configuration for forwarding signing requests to an external - certificate authority. - type: "array" - items: - type: "object" - properties: - Protocol: - description: | - Protocol for communication with the external CA (currently - only `cfssl` is supported). - type: "string" - enum: - - "cfssl" - default: "cfssl" - URL: - description: | - URL where certificate signing requests should be sent. - type: "string" - Options: - description: | - An object with key/value pairs that are interpreted as - protocol-specific options for the external CA driver. - type: "object" - additionalProperties: - type: "string" - CACert: - description: | - The root CA certificate (in PEM format) this external CA uses - to issue TLS certificates (assumed to be to the current swarm - root CA certificate if not provided). - type: "string" - SigningCACert: - description: | - The desired signing CA certificate for all swarm node TLS leaf - certificates, in PEM format. - type: "string" - SigningCAKey: - description: | - The desired signing CA key for all swarm node TLS leaf certificates, - in PEM format. - type: "string" - ForceRotate: - description: | - An integer whose purpose is to force swarm to generate a new - signing CA certificate and key, if none have been specified in - `SigningCACert` and `SigningCAKey` - format: "uint64" - type: "integer" - EncryptionConfig: - description: "Parameters related to encryption-at-rest." - type: "object" - properties: - AutoLockManagers: - description: | - If set, generate a key and use it to lock data stored on the - managers. - type: "boolean" - example: false - TaskDefaults: - description: "Defaults for creating tasks in this cluster." - type: "object" - properties: - LogDriver: - description: | - The log driver to use for tasks created in the orchestrator if - unspecified by a service. - - Updating this value only affects new tasks. Existing tasks continue - to use their previously configured log driver until recreated. - type: "object" - properties: - Name: - description: | - The log driver to use as a default for new tasks. - type: "string" - example: "json-file" - Options: - description: | - Driver-specific options for the selected log driver, specified - as key/value pairs. - type: "object" - additionalProperties: - type: "string" - example: - "max-file": "10" - "max-size": "100m" - - # The Swarm information for `GET /info`. It is the same as `GET /swarm`, but - # without `JoinTokens`. - ClusterInfo: - description: | - ClusterInfo represents information about the swarm as is returned by the - "/info" endpoint. Join-tokens are not included. - x-nullable: true - type: "object" - properties: - ID: - description: "The ID of the swarm." - type: "string" - example: "abajmipo7b4xz5ip2nrla6b11" - Version: - $ref: "#/definitions/ObjectVersion" - CreatedAt: - description: | - Date and time at which the swarm was initialised in - [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. - type: "string" - format: "dateTime" - example: "2016-08-18T10:44:24.496525531Z" - UpdatedAt: - description: | - Date and time at which the swarm was last updated in - [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. - type: "string" - format: "dateTime" - example: "2017-08-09T07:09:37.632105588Z" - Spec: - $ref: "#/definitions/SwarmSpec" - TLSInfo: - $ref: "#/definitions/TLSInfo" - RootRotationInProgress: - description: | - Whether there is currently a root CA rotation in progress for the swarm - type: "boolean" - example: false - DataPathPort: - description: | - DataPathPort specifies the data path port number for data traffic. - Acceptable port range is 1024 to 49151. - If no port is set or is set to 0, the default port (4789) is used. - type: "integer" - format: "uint32" - default: 4789 - example: 4789 - DefaultAddrPool: - description: | - Default Address Pool specifies default subnet pools for global scope - networks. - type: "array" - items: - type: "string" - format: "CIDR" - example: ["10.10.0.0/16", "20.20.0.0/16"] - SubnetSize: - description: | - SubnetSize specifies the subnet size of the networks created from the - default subnet pool. - type: "integer" - format: "uint32" - maximum: 29 - default: 24 - example: 24 - - JoinTokens: - description: | - JoinTokens contains the tokens workers and managers need to join the swarm. - type: "object" - properties: - Worker: - description: | - The token workers can use to join the swarm. - type: "string" - example: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" - Manager: - description: | - The token managers can use to join the swarm. - type: "string" - example: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" - - Swarm: - type: "object" - allOf: - - $ref: "#/definitions/ClusterInfo" - - type: "object" - properties: - JoinTokens: - $ref: "#/definitions/JoinTokens" - - TaskSpec: - description: "User modifiable task configuration." - type: "object" - properties: - PluginSpec: - type: "object" - description: | - Plugin spec for the service. *(Experimental release only.)* - -


    - - > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are - > mutually exclusive. PluginSpec is only used when the Runtime field - > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime - > field is set to `attachment`. - properties: - Name: - description: "The name or 'alias' to use for the plugin." - type: "string" - Remote: - description: "The plugin image reference to use." - type: "string" - Disabled: - description: "Disable the plugin once scheduled." - type: "boolean" - PluginPrivilege: - type: "array" - items: - $ref: "#/definitions/PluginPrivilege" - ContainerSpec: - type: "object" - description: | - Container spec for the service. - -


    - - > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are - > mutually exclusive. PluginSpec is only used when the Runtime field - > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime - > field is set to `attachment`. - properties: - Image: - description: "The image name to use for the container" - type: "string" - Labels: - description: "User-defined key/value data." - type: "object" - additionalProperties: - type: "string" - Command: - description: "The command to be run in the image." - type: "array" - items: - type: "string" - Args: - description: "Arguments to the command." - type: "array" - items: - type: "string" - Hostname: - description: | - The hostname to use for the container, as a valid - [RFC 1123](https://tools.ietf.org/html/rfc1123) hostname. - type: "string" - Env: - description: | - A list of environment variables in the form `VAR=value`. - type: "array" - items: - type: "string" - Dir: - description: "The working directory for commands to run in." - type: "string" - User: - description: "The user inside the container." - type: "string" - Groups: - type: "array" - description: | - A list of additional groups that the container process will run as. - items: - type: "string" - Privileges: - type: "object" - description: "Security options for the container" - properties: - CredentialSpec: - type: "object" - description: "CredentialSpec for managed service account (Windows only)" - properties: - Config: - type: "string" - example: "0bt9dmxjvjiqermk6xrop3ekq" - description: | - Load credential spec from a Swarm Config with the given ID. - The specified config must also be present in the Configs - field with the Runtime property set. - -


    - - - > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, - > and `CredentialSpec.Config` are mutually exclusive. - File: - type: "string" - example: "spec.json" - description: | - Load credential spec from this file. The file is read by - the daemon, and must be present in the `CredentialSpecs` - subdirectory in the docker data directory, which defaults - to `C:\ProgramData\Docker\` on Windows. - - For example, specifying `spec.json` loads - `C:\ProgramData\Docker\CredentialSpecs\spec.json`. - -


    - - > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, - > and `CredentialSpec.Config` are mutually exclusive. - Registry: - type: "string" - description: | - Load credential spec from this value in the Windows - registry. The specified registry value must be located in: - - `HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs` - -


    - - - > **Note**: `CredentialSpec.File`, `CredentialSpec.Registry`, - > and `CredentialSpec.Config` are mutually exclusive. - SELinuxContext: - type: "object" - description: "SELinux labels of the container" - properties: - Disable: - type: "boolean" - description: "Disable SELinux" - User: - type: "string" - description: "SELinux user label" - Role: - type: "string" - description: "SELinux role label" - Type: - type: "string" - description: "SELinux type label" - Level: - type: "string" - description: "SELinux level label" - Seccomp: - type: "object" - description: "Options for configuring seccomp on the container" - properties: - Mode: - type: "string" - enum: - - "default" - - "unconfined" - - "custom" - Profile: - description: "The custom seccomp profile as a json object" - type: "string" - AppArmor: - type: "object" - description: "Options for configuring AppArmor on the container" - properties: - Mode: - type: "string" - enum: - - "default" - - "disabled" - NoNewPrivileges: - type: "boolean" - description: "Configuration of the no_new_privs bit in the container" - - TTY: - description: "Whether a pseudo-TTY should be allocated." - type: "boolean" - OpenStdin: - description: "Open `stdin`" - type: "boolean" - ReadOnly: - description: "Mount the container's root filesystem as read only." - type: "boolean" - Mounts: - description: | - Specification for mounts to be added to containers created as part - of the service. - type: "array" - items: - $ref: "#/definitions/Mount" - StopSignal: - description: "Signal to stop the container." - type: "string" - StopGracePeriod: - description: | - Amount of time to wait for the container to terminate before - forcefully killing it. - type: "integer" - format: "int64" - HealthCheck: - $ref: "#/definitions/HealthConfig" - Hosts: - type: "array" - description: | - A list of hostname/IP mappings to add to the container's `hosts` - file. The format of extra hosts is specified in the - [hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html) - man page: - - IP_address canonical_hostname [aliases...] - items: - type: "string" - DNSConfig: - description: | - Specification for DNS related configurations in resolver configuration - file (`resolv.conf`). - type: "object" - properties: - Nameservers: - description: "The IP addresses of the name servers." - type: "array" - items: - type: "string" - Search: - description: "A search list for host-name lookup." - type: "array" - items: - type: "string" - Options: - description: | - A list of internal resolver variables to be modified (e.g., - `debug`, `ndots:3`, etc.). - type: "array" - items: - type: "string" - Secrets: - description: | - Secrets contains references to zero or more secrets that will be - exposed to the service. - type: "array" - items: - type: "object" - properties: - File: - description: | - File represents a specific target that is backed by a file. - type: "object" - properties: - Name: - description: | - Name represents the final filename in the filesystem. - type: "string" - UID: - description: "UID represents the file UID." - type: "string" - GID: - description: "GID represents the file GID." - type: "string" - Mode: - description: "Mode represents the FileMode of the file." - type: "integer" - format: "uint32" - SecretID: - description: | - SecretID represents the ID of the specific secret that we're - referencing. - type: "string" - SecretName: - description: | - SecretName is the name of the secret that this references, - but this is just provided for lookup/display purposes. The - secret in the reference will be identified by its ID. - type: "string" - OomScoreAdj: - type: "integer" - format: "int64" - description: | - An integer value containing the score given to the container in - order to tune OOM killer preferences. - example: 0 - Configs: - description: | - Configs contains references to zero or more configs that will be - exposed to the service. - type: "array" - items: - type: "object" - properties: - File: - description: | - File represents a specific target that is backed by a file. - -


    - - > **Note**: `Configs.File` and `Configs.Runtime` are mutually exclusive - type: "object" - properties: - Name: - description: | - Name represents the final filename in the filesystem. - type: "string" - UID: - description: "UID represents the file UID." - type: "string" - GID: - description: "GID represents the file GID." - type: "string" - Mode: - description: "Mode represents the FileMode of the file." - type: "integer" - format: "uint32" - Runtime: - description: | - Runtime represents a target that is not mounted into the - container but is used by the task - -


    - - > **Note**: `Configs.File` and `Configs.Runtime` are mutually - > exclusive - type: "object" - ConfigID: - description: | - ConfigID represents the ID of the specific config that we're - referencing. - type: "string" - ConfigName: - description: | - ConfigName is the name of the config that this references, - but this is just provided for lookup/display purposes. The - config in the reference will be identified by its ID. - type: "string" - Isolation: - type: "string" - description: | - Isolation technology of the containers running the service. - (Windows only) - enum: - - "default" - - "process" - - "hyperv" - - "" - Init: - description: | - Run an init inside the container that forwards signals and reaps - processes. This field is omitted if empty, and the default (as - configured on the daemon) is used. - type: "boolean" - x-nullable: true - Sysctls: - description: | - Set kernel namedspaced parameters (sysctls) in the container. - The Sysctls option on services accepts the same sysctls as the - are supported on containers. Note that while the same sysctls are - supported, no guarantees or checks are made about their - suitability for a clustered environment, and it's up to the user - to determine whether a given sysctl will work properly in a - Service. - type: "object" - additionalProperties: - type: "string" - # This option is not used by Windows containers - CapabilityAdd: - type: "array" - description: | - A list of kernel capabilities to add to the default set - for the container. - items: - type: "string" - example: - - "CAP_NET_RAW" - - "CAP_SYS_ADMIN" - - "CAP_SYS_CHROOT" - - "CAP_SYSLOG" - CapabilityDrop: - type: "array" - description: | - A list of kernel capabilities to drop from the default set - for the container. - items: - type: "string" - example: - - "CAP_NET_RAW" - Ulimits: - description: | - A list of resource limits to set in the container. For example: `{"Name": "nofile", "Soft": 1024, "Hard": 2048}`" - type: "array" - items: - type: "object" - properties: - Name: - description: "Name of ulimit" - type: "string" - Soft: - description: "Soft limit" - type: "integer" - Hard: - description: "Hard limit" - type: "integer" - NetworkAttachmentSpec: - description: | - Read-only spec type for non-swarm containers attached to swarm overlay - networks. - -


    - - > **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are - > mutually exclusive. PluginSpec is only used when the Runtime field - > is set to `plugin`. NetworkAttachmentSpec is used when the Runtime - > field is set to `attachment`. - type: "object" - properties: - ContainerID: - description: "ID of the container represented by this task" - type: "string" - Resources: - description: | - Resource requirements which apply to each individual container created - as part of the service. - type: "object" - properties: - Limits: - description: "Define resources limits." - $ref: "#/definitions/Limit" - Reservations: - description: "Define resources reservation." - $ref: "#/definitions/ResourceObject" - RestartPolicy: - description: | - Specification for the restart policy which applies to containers - created as part of this service. - type: "object" - properties: - Condition: - description: "Condition for restart." - type: "string" - enum: - - "none" - - "on-failure" - - "any" - Delay: - description: "Delay between restart attempts." - type: "integer" - format: "int64" - MaxAttempts: - description: | - Maximum attempts to restart a given container before giving up - (default value is 0, which is ignored). - type: "integer" - format: "int64" - default: 0 - Window: - description: | - Windows is the time window used to evaluate the restart policy - (default value is 0, which is unbounded). - type: "integer" - format: "int64" - default: 0 - Placement: - type: "object" - properties: - Constraints: - description: | - An array of constraint expressions to limit the set of nodes where - a task can be scheduled. Constraint expressions can either use a - _match_ (`==`) or _exclude_ (`!=`) rule. Multiple constraints find - nodes that satisfy every expression (AND match). Constraints can - match node or Docker Engine labels as follows: - - node attribute | matches | example - ---------------------|--------------------------------|----------------------------------------------- - `node.id` | Node ID | `node.id==2ivku8v2gvtg4` - `node.hostname` | Node hostname | `node.hostname!=node-2` - `node.role` | Node role (`manager`/`worker`) | `node.role==manager` - `node.platform.os` | Node operating system | `node.platform.os==windows` - `node.platform.arch` | Node architecture | `node.platform.arch==x86_64` - `node.labels` | User-defined node labels | `node.labels.security==high` - `engine.labels` | Docker Engine's labels | `engine.labels.operatingsystem==ubuntu-24.04` - - `engine.labels` apply to Docker Engine labels like operating system, - drivers, etc. Swarm administrators add `node.labels` for operational - purposes by using the [`node update endpoint`](#operation/NodeUpdate). - - type: "array" - items: - type: "string" - example: - - "node.hostname!=node3.corp.example.com" - - "node.role!=manager" - - "node.labels.type==production" - - "node.platform.os==linux" - - "node.platform.arch==x86_64" - Preferences: - description: | - Preferences provide a way to make the scheduler aware of factors - such as topology. They are provided in order from highest to - lowest precedence. - type: "array" - items: - type: "object" - properties: - Spread: - type: "object" - properties: - SpreadDescriptor: - description: | - label descriptor, such as `engine.labels.az`. - type: "string" - example: - - Spread: - SpreadDescriptor: "node.labels.datacenter" - - Spread: - SpreadDescriptor: "node.labels.rack" - MaxReplicas: - description: | - Maximum number of replicas for per node (default value is 0, which - is unlimited) - type: "integer" - format: "int64" - default: 0 - Platforms: - description: | - Platforms stores all the platforms that the service's image can - run on. This field is used in the platform filter for scheduling. - If empty, then the platform filter is off, meaning there are no - scheduling restrictions. - type: "array" - items: - $ref: "#/definitions/Platform" - ForceUpdate: - description: | - A counter that triggers an update even if no relevant parameters have - been changed. - type: "integer" - format: "uint64" - Runtime: - description: | - Runtime is the type of runtime specified for the task executor. - type: "string" - Networks: - description: "Specifies which networks the service should attach to." - type: "array" - items: - $ref: "#/definitions/NetworkAttachmentConfig" - LogDriver: - description: | - Specifies the log driver to use for tasks created from this spec. If - not present, the default one for the swarm will be used, finally - falling back to the engine default if not specified. - type: "object" - properties: - Name: - type: "string" - Options: - type: "object" - additionalProperties: - type: "string" - - TaskState: - type: "string" - enum: - - "new" - - "allocated" - - "pending" - - "assigned" - - "accepted" - - "preparing" - - "ready" - - "starting" - - "running" - - "complete" - - "shutdown" - - "failed" - - "rejected" - - "remove" - - "orphaned" - - ContainerStatus: - type: "object" - description: "represents the status of a container." - properties: - ContainerID: - type: "string" - PID: - type: "integer" - ExitCode: - type: "integer" - - PortStatus: - type: "object" - description: "represents the port status of a task's host ports whose service has published host ports" - properties: - Ports: - type: "array" - items: - $ref: "#/definitions/EndpointPortConfig" - - TaskStatus: - type: "object" - description: "represents the status of a task." - properties: - Timestamp: - type: "string" - format: "dateTime" - State: - $ref: "#/definitions/TaskState" - Message: - type: "string" - Err: - type: "string" - ContainerStatus: - $ref: "#/definitions/ContainerStatus" - PortStatus: - $ref: "#/definitions/PortStatus" - - Task: - type: "object" - properties: - ID: - description: "The ID of the task." - type: "string" - Version: - $ref: "#/definitions/ObjectVersion" - CreatedAt: - type: "string" - format: "dateTime" - UpdatedAt: - type: "string" - format: "dateTime" - Name: - description: "Name of the task." - type: "string" - Labels: - description: "User-defined key/value metadata." - type: "object" - additionalProperties: - type: "string" - Spec: - $ref: "#/definitions/TaskSpec" - ServiceID: - description: "The ID of the service this task is part of." - type: "string" - Slot: - type: "integer" - NodeID: - description: "The ID of the node that this task is on." - type: "string" - AssignedGenericResources: - $ref: "#/definitions/GenericResources" - Status: - $ref: "#/definitions/TaskStatus" - DesiredState: - $ref: "#/definitions/TaskState" - JobIteration: - description: | - If the Service this Task belongs to is a job-mode service, contains - the JobIteration of the Service this Task was created for. Absent if - the Task was created for a Replicated or Global Service. - $ref: "#/definitions/ObjectVersion" - example: - ID: "0kzzo1i0y4jz6027t0k7aezc7" - Version: - Index: 71 - CreatedAt: "2016-06-07T21:07:31.171892745Z" - UpdatedAt: "2016-06-07T21:07:31.376370513Z" - Spec: - ContainerSpec: - Image: "redis" - Resources: - Limits: {} - Reservations: {} - RestartPolicy: - Condition: "any" - MaxAttempts: 0 - Placement: {} - ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz" - Slot: 1 - NodeID: "60gvrl6tm78dmak4yl7srz94v" - Status: - Timestamp: "2016-06-07T21:07:31.290032978Z" - State: "running" - Message: "started" - ContainerStatus: - ContainerID: "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035" - PID: 677 - DesiredState: "running" - NetworksAttachments: - - Network: - ID: "4qvuz4ko70xaltuqbt8956gd1" - Version: - Index: 18 - CreatedAt: "2016-06-07T20:31:11.912919752Z" - UpdatedAt: "2016-06-07T21:07:29.955277358Z" - Spec: - Name: "ingress" - Labels: - com.docker.swarm.internal: "true" - DriverConfiguration: {} - IPAMOptions: - Driver: {} - Configs: - - Subnet: "10.255.0.0/16" - Gateway: "10.255.0.1" - DriverState: - Name: "overlay" - Options: - com.docker.network.driver.overlay.vxlanid_list: "256" - IPAMOptions: - Driver: - Name: "default" - Configs: - - Subnet: "10.255.0.0/16" - Gateway: "10.255.0.1" - Addresses: - - "10.255.0.10/16" - AssignedGenericResources: - - DiscreteResourceSpec: - Kind: "SSD" - Value: 3 - - NamedResourceSpec: - Kind: "GPU" - Value: "UUID1" - - NamedResourceSpec: - Kind: "GPU" - Value: "UUID2" - - ServiceSpec: - description: "User modifiable configuration for a service." - type: object - properties: - Name: - description: "Name of the service." - type: "string" - Labels: - description: "User-defined key/value metadata." - type: "object" - additionalProperties: - type: "string" - TaskTemplate: - $ref: "#/definitions/TaskSpec" - Mode: - description: "Scheduling mode for the service." - type: "object" - properties: - Replicated: - type: "object" - properties: - Replicas: - type: "integer" - format: "int64" - Global: - type: "object" - ReplicatedJob: - description: | - The mode used for services with a finite number of tasks that run - to a completed state. - type: "object" - properties: - MaxConcurrent: - description: | - The maximum number of replicas to run simultaneously. - type: "integer" - format: "int64" - default: 1 - TotalCompletions: - description: | - The total number of replicas desired to reach the Completed - state. If unset, will default to the value of `MaxConcurrent` - type: "integer" - format: "int64" - GlobalJob: - description: | - The mode used for services which run a task to the completed state - on each valid node. - type: "object" - UpdateConfig: - description: "Specification for the update strategy of the service." - type: "object" - properties: - Parallelism: - description: | - Maximum number of tasks to be updated in one iteration (0 means - unlimited parallelism). - type: "integer" - format: "int64" - Delay: - description: "Amount of time between updates, in nanoseconds." - type: "integer" - format: "int64" - FailureAction: - description: | - Action to take if an updated task fails to run, or stops running - during the update. - type: "string" - enum: - - "continue" - - "pause" - - "rollback" - Monitor: - description: | - Amount of time to monitor each updated task for failures, in - nanoseconds. - type: "integer" - format: "int64" - MaxFailureRatio: - description: | - The fraction of tasks that may fail during an update before the - failure action is invoked, specified as a floating point number - between 0 and 1. - type: "number" - default: 0 - Order: - description: | - The order of operations when rolling out an updated task. Either - the old task is shut down before the new task is started, or the - new task is started before the old task is shut down. - type: "string" - enum: - - "stop-first" - - "start-first" - RollbackConfig: - description: "Specification for the rollback strategy of the service." - type: "object" - properties: - Parallelism: - description: | - Maximum number of tasks to be rolled back in one iteration (0 means - unlimited parallelism). - type: "integer" - format: "int64" - Delay: - description: | - Amount of time between rollback iterations, in nanoseconds. - type: "integer" - format: "int64" - FailureAction: - description: | - Action to take if an rolled back task fails to run, or stops - running during the rollback. - type: "string" - enum: - - "continue" - - "pause" - Monitor: - description: | - Amount of time to monitor each rolled back task for failures, in - nanoseconds. - type: "integer" - format: "int64" - MaxFailureRatio: - description: | - The fraction of tasks that may fail during a rollback before the - failure action is invoked, specified as a floating point number - between 0 and 1. - type: "number" - default: 0 - Order: - description: | - The order of operations when rolling back a task. Either the old - task is shut down before the new task is started, or the new task - is started before the old task is shut down. - type: "string" - enum: - - "stop-first" - - "start-first" - Networks: - description: | - Specifies which networks the service should attach to. - - Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. - type: "array" - items: - $ref: "#/definitions/NetworkAttachmentConfig" - - EndpointSpec: - $ref: "#/definitions/EndpointSpec" - - EndpointPortConfig: - type: "object" - properties: - Name: - type: "string" - Protocol: - type: "string" - enum: - - "tcp" - - "udp" - - "sctp" - TargetPort: - description: "The port inside the container." - type: "integer" - PublishedPort: - description: "The port on the swarm hosts." - type: "integer" - PublishMode: - description: | - The mode in which port is published. - -


    - - - "ingress" makes the target port accessible on every node, - regardless of whether there is a task for the service running on - that node or not. - - "host" bypasses the routing mesh and publish the port directly on - the swarm node where that service is running. - - type: "string" - enum: - - "ingress" - - "host" - default: "ingress" - example: "ingress" - - EndpointSpec: - description: "Properties that can be configured to access and load balance a service." - type: "object" - properties: - Mode: - description: | - The mode of resolution to use for internal load balancing between tasks. - type: "string" - enum: - - "vip" - - "dnsrr" - default: "vip" - Ports: - description: | - List of exposed ports that this service is accessible on from the - outside. Ports can only be provided if `vip` resolution mode is used. - type: "array" - items: - $ref: "#/definitions/EndpointPortConfig" - - Service: - type: "object" - properties: - ID: - type: "string" - Version: - $ref: "#/definitions/ObjectVersion" - CreatedAt: - type: "string" - format: "dateTime" - UpdatedAt: - type: "string" - format: "dateTime" - Spec: - $ref: "#/definitions/ServiceSpec" - Endpoint: - type: "object" - properties: - Spec: - $ref: "#/definitions/EndpointSpec" - Ports: - type: "array" - items: - $ref: "#/definitions/EndpointPortConfig" - VirtualIPs: - type: "array" - items: - type: "object" - properties: - NetworkID: - type: "string" - Addr: - type: "string" - UpdateStatus: - description: "The status of a service update." - type: "object" - properties: - State: - type: "string" - enum: - - "updating" - - "paused" - - "completed" - StartedAt: - type: "string" - format: "dateTime" - CompletedAt: - type: "string" - format: "dateTime" - Message: - type: "string" - ServiceStatus: - description: | - The status of the service's tasks. Provided only when requested as - part of a ServiceList operation. - type: "object" - properties: - RunningTasks: - description: | - The number of tasks for the service currently in the Running state. - type: "integer" - format: "uint64" - example: 7 - DesiredTasks: - description: | - The number of tasks for the service desired to be running. - For replicated services, this is the replica count from the - service spec. For global services, this is computed by taking - count of all tasks for the service with a Desired State other - than Shutdown. - type: "integer" - format: "uint64" - example: 10 - CompletedTasks: - description: | - The number of tasks for a job that are in the Completed state. - This field must be cross-referenced with the service type, as the - value of 0 may mean the service is not in a job mode, or it may - mean the job-mode service has no tasks yet Completed. - type: "integer" - format: "uint64" - JobStatus: - description: | - The status of the service when it is in one of ReplicatedJob or - GlobalJob modes. Absent on Replicated and Global mode services. The - JobIteration is an ObjectVersion, but unlike the Service's version, - does not need to be sent with an update request. - type: "object" - properties: - JobIteration: - description: | - JobIteration is a value increased each time a Job is executed, - successfully or otherwise. "Executed", in this case, means the - job as a whole has been started, not that an individual Task has - been launched. A job is "Executed" when its ServiceSpec is - updated. JobIteration can be used to disambiguate Tasks belonging - to different executions of a job. Though JobIteration will - increase with each subsequent execution, it may not necessarily - increase by 1, and so JobIteration should not be used to - $ref: "#/definitions/ObjectVersion" - LastExecution: - description: | - The last time, as observed by the server, that this job was - started. - type: "string" - format: "dateTime" - example: - ID: "9mnpnzenvg8p8tdbtq4wvbkcz" - Version: - Index: 19 - CreatedAt: "2016-06-07T21:05:51.880065305Z" - UpdatedAt: "2016-06-07T21:07:29.962229872Z" - Spec: - Name: "hopeful_cori" - TaskTemplate: - ContainerSpec: - Image: "redis" - Resources: - Limits: {} - Reservations: {} - RestartPolicy: - Condition: "any" - MaxAttempts: 0 - Placement: {} - ForceUpdate: 0 - Mode: - Replicated: - Replicas: 1 - UpdateConfig: - Parallelism: 1 - Delay: 1000000000 - FailureAction: "pause" - Monitor: 15000000000 - MaxFailureRatio: 0.15 - RollbackConfig: - Parallelism: 1 - Delay: 1000000000 - FailureAction: "pause" - Monitor: 15000000000 - MaxFailureRatio: 0.15 - EndpointSpec: - Mode: "vip" - Ports: - - - Protocol: "tcp" - TargetPort: 6379 - PublishedPort: 30001 - Endpoint: - Spec: - Mode: "vip" - Ports: - - - Protocol: "tcp" - TargetPort: 6379 - PublishedPort: 30001 - Ports: - - - Protocol: "tcp" - TargetPort: 6379 - PublishedPort: 30001 - VirtualIPs: - - - NetworkID: "4qvuz4ko70xaltuqbt8956gd1" - Addr: "10.255.0.2/16" - - - NetworkID: "4qvuz4ko70xaltuqbt8956gd1" - Addr: "10.255.0.3/16" - - ImageDeleteResponseItem: - type: "object" - x-go-name: "DeleteResponse" - properties: - Untagged: - description: "The image ID of an image that was untagged" - type: "string" - Deleted: - description: "The image ID of an image that was deleted" - type: "string" - - ServiceCreateResponse: - type: "object" - description: | - contains the information returned to a client on the - creation of a new service. - properties: - ID: - description: "The ID of the created service." - type: "string" - x-nullable: false - example: "ak7w3gjqoa3kuz8xcpnyy0pvl" - Warnings: - description: | - Optional warning message. - - FIXME(thaJeztah): this should have "omitempty" in the generated type. - type: "array" - x-nullable: true - items: - type: "string" - example: - - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" - - ServiceUpdateResponse: - type: "object" - properties: - Warnings: - description: "Optional warning messages" - type: "array" - items: - type: "string" - example: - Warnings: - - "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" - - ContainerInspectResponse: - type: "object" - title: "ContainerInspectResponse" - x-go-name: "InspectResponse" - properties: - Id: - description: |- - The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). - type: "string" - x-go-name: "ID" - minLength: 64 - maxLength: 64 - pattern: "^[0-9a-fA-F]{64}$" - example: "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" - Created: - description: |- - Date and time at which the container was created, formatted in - [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. - type: "string" - format: "dateTime" - x-nullable: true - example: "2025-02-17T17:43:39.64001363Z" - Path: - description: |- - The path to the command being run - type: "string" - example: "/bin/sh" - Args: - description: "The arguments to the command being run" - type: "array" - items: - type: "string" - example: - - "-c" - - "exit 9" - State: - $ref: "#/definitions/ContainerState" - Image: - description: |- - The ID (digest) of the image that this container was created from. - type: "string" - example: "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" - ResolvConfPath: - description: |- - Location of the `/etc/resolv.conf` generated for the container on the - host. - - This file is managed through the docker daemon, and should not be - accessed or modified by other tools. - type: "string" - example: "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/resolv.conf" - HostnamePath: - description: |- - Location of the `/etc/hostname` generated for the container on the - host. - - This file is managed through the docker daemon, and should not be - accessed or modified by other tools. - type: "string" - example: "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hostname" - HostsPath: - description: |- - Location of the `/etc/hosts` generated for the container on the - host. - - This file is managed through the docker daemon, and should not be - accessed or modified by other tools. - type: "string" - example: "/var/lib/docker/containers/aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf/hosts" - LogPath: - description: |- - Location of the file used to buffer the container's logs. Depending on - the logging-driver used for the container, this field may be omitted. - - This file is managed through the docker daemon, and should not be - accessed or modified by other tools. - type: "string" - x-nullable: true - example: "/var/lib/docker/containers/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59/5b7c7e2b992aa426584ce6c47452756066be0e503a08b4516a433a54d2f69e59-json.log" - Name: - description: |- - The name associated with this container. - - For historic reasons, the name may be prefixed with a forward-slash (`/`). - type: "string" - example: "/funny_chatelet" - RestartCount: - description: |- - Number of times the container was restarted since it was created, - or since daemon was started. - type: "integer" - example: 0 - Driver: - description: |- - The storage-driver used for the container's filesystem (graph-driver - or snapshotter). - type: "string" - example: "overlayfs" - Platform: - description: |- - The platform (operating system) for which the container was created. - - This field was introduced for the experimental "LCOW" (Linux Containers - On Windows) features, which has been removed. In most cases, this field - is equal to the host's operating system (`linux` or `windows`). - type: "string" - example: "linux" - ImageManifestDescriptor: - $ref: "#/definitions/OCIDescriptor" - description: |- - OCI descriptor of the platform-specific manifest of the image - the container was created from. - - Note: Only available if the daemon provides a multi-platform - image store. - MountLabel: - description: |- - SELinux mount label set for the container. - type: "string" - example: "" - ProcessLabel: - description: |- - SELinux process label set for the container. - type: "string" - example: "" - AppArmorProfile: - description: |- - The AppArmor profile set for the container. - type: "string" - example: "" - ExecIDs: - description: |- - IDs of exec instances that are running in the container. - type: "array" - items: - type: "string" - x-nullable: true - example: - - "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca" - - "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4" - HostConfig: - $ref: "#/definitions/HostConfig" - GraphDriver: - $ref: "#/definitions/DriverData" - SizeRw: - description: |- - The size of files that have been created or changed by this container. - - This field is omitted by default, and only set when size is requested - in the API request. - type: "integer" - format: "int64" - x-nullable: true - example: "122880" - SizeRootFs: - description: |- - The total size of all files in the read-only layers from the image - that the container uses. These layers can be shared between containers. - - This field is omitted by default, and only set when size is requested - in the API request. - type: "integer" - format: "int64" - x-nullable: true - example: "1653948416" - Mounts: - description: |- - List of mounts used by the container. - type: "array" - items: - $ref: "#/definitions/MountPoint" - Config: - $ref: "#/definitions/ContainerConfig" - NetworkSettings: - $ref: "#/definitions/NetworkSettings" - - ContainerSummary: - type: "object" - properties: - Id: - description: |- - The ID of this container as a 128-bit (64-character) hexadecimal string (32 bytes). - type: "string" - x-go-name: "ID" - minLength: 64 - maxLength: 64 - pattern: "^[0-9a-fA-F]{64}$" - example: "aa86eacfb3b3ed4cd362c1e88fc89a53908ad05fb3a4103bca3f9b28292d14bf" - Names: - description: |- - The names associated with this container. Most containers have a single - name, but when using legacy "links", the container can have multiple - names. - - For historic reasons, names are prefixed with a forward-slash (`/`). - type: "array" - items: - type: "string" - example: - - "/funny_chatelet" - Image: - description: |- - The name or ID of the image used to create the container. - - This field shows the image reference as was specified when creating the container, - which can be in its canonical form (e.g., `docker.io/library/ubuntu:latest` - or `docker.io/library/ubuntu@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`), - short form (e.g., `ubuntu:latest`)), or the ID(-prefix) of the image (e.g., `72297848456d`). - - The content of this field can be updated at runtime if the image used to - create the container is untagged, in which case the field is updated to - contain the the image ID (digest) it was resolved to in its canonical, - non-truncated form (e.g., `sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782`). - type: "string" - example: "docker.io/library/ubuntu:latest" - ImageID: - description: |- - The ID (digest) of the image that this container was created from. - type: "string" - example: "sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782" - ImageManifestDescriptor: - $ref: "#/definitions/OCIDescriptor" - x-nullable: true - description: | - OCI descriptor of the platform-specific manifest of the image - the container was created from. - - Note: Only available if the daemon provides a multi-platform - image store. - - This field is not populated in the `GET /system/df` endpoint. - Command: - description: "Command to run when starting the container" - type: "string" - example: "/bin/bash" - Created: - description: |- - Date and time at which the container was created as a Unix timestamp - (number of seconds since EPOCH). - type: "integer" - format: "int64" - example: "1739811096" - Ports: - description: |- - Port-mappings for the container. - type: "array" - items: - $ref: "#/definitions/Port" - SizeRw: - description: |- - The size of files that have been created or changed by this container. - - This field is omitted by default, and only set when size is requested - in the API request. - type: "integer" - format: "int64" - x-nullable: true - example: "122880" - SizeRootFs: - description: |- - The total size of all files in the read-only layers from the image - that the container uses. These layers can be shared between containers. - - This field is omitted by default, and only set when size is requested - in the API request. - type: "integer" - format: "int64" - x-nullable: true - example: "1653948416" - Labels: - description: "User-defined key/value metadata." - type: "object" - additionalProperties: - type: "string" - example: - com.example.vendor: "Acme" - com.example.license: "GPL" - com.example.version: "1.0" - State: - description: | - The state of this container. - type: "string" - enum: - - "created" - - "running" - - "paused" - - "restarting" - - "exited" - - "removing" - - "dead" - example: "running" - Status: - description: |- - Additional human-readable status of this container (e.g. `Exit 0`) - type: "string" - example: "Up 4 days" - HostConfig: - type: "object" - description: |- - Summary of host-specific runtime information of the container. This - is a reduced set of information in the container's "HostConfig" as - available in the container "inspect" response. - properties: - NetworkMode: - description: |- - Networking mode (`host`, `none`, `container:`) or name of the - primary network the container is using. - - This field is primarily for backward compatibility. The container - can be connected to multiple networks for which information can be - found in the `NetworkSettings.Networks` field, which enumerates - settings per network. - type: "string" - example: "mynetwork" - Annotations: - description: |- - Arbitrary key-value metadata attached to the container. - type: "object" - x-nullable: true - additionalProperties: - type: "string" - example: - io.kubernetes.docker.type: "container" - io.kubernetes.sandbox.id: "3befe639bed0fd6afdd65fd1fa84506756f59360ec4adc270b0fdac9be22b4d3" - NetworkSettings: - description: |- - Summary of the container's network settings - type: "object" - properties: - Networks: - type: "object" - description: |- - Summary of network-settings for each network the container is - attached to. - additionalProperties: - $ref: "#/definitions/EndpointSettings" - Mounts: - type: "array" - description: |- - List of mounts used by the container. - items: - $ref: "#/definitions/MountPoint" - - Driver: - description: "Driver represents a driver (network, logging, secrets)." - type: "object" - required: [Name] - properties: - Name: - description: "Name of the driver." - type: "string" - x-nullable: false - example: "some-driver" - Options: - description: "Key/value map of driver-specific options." - type: "object" - x-nullable: false - additionalProperties: - type: "string" - example: - OptionA: "value for driver-specific option A" - OptionB: "value for driver-specific option B" - - SecretSpec: - type: "object" - properties: - Name: - description: "User-defined name of the secret." - type: "string" - Labels: - description: "User-defined key/value metadata." - type: "object" - additionalProperties: - type: "string" - example: - com.example.some-label: "some-value" - com.example.some-other-label: "some-other-value" - Data: - description: | - Data is the data to store as a secret, formatted as a Base64-url-safe-encoded - ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5)) string. - It must be empty if the Driver field is set, in which case the data is - loaded from an external secret store. The maximum allowed size is 500KB, - as defined in [MaxSecretSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/api/validation#MaxSecretSize). - - This field is only used to _create_ a secret, and is not returned by - other endpoints. - type: "string" - example: "" - Driver: - description: | - Name of the secrets driver used to fetch the secret's value from an - external secret store. - $ref: "#/definitions/Driver" - Templating: - description: | - Templating driver, if applicable - - Templating controls whether and how to evaluate the config payload as - a template. If no driver is set, no templating is used. - $ref: "#/definitions/Driver" - - Secret: - type: "object" - properties: - ID: - type: "string" - example: "blt1owaxmitz71s9v5zh81zun" - Version: - $ref: "#/definitions/ObjectVersion" - CreatedAt: - type: "string" - format: "dateTime" - example: "2017-07-20T13:55:28.678958722Z" - UpdatedAt: - type: "string" - format: "dateTime" - example: "2017-07-20T13:55:28.678958722Z" - Spec: - $ref: "#/definitions/SecretSpec" - - ConfigSpec: - type: "object" - properties: - Name: - description: "User-defined name of the config." - type: "string" - Labels: - description: "User-defined key/value metadata." - type: "object" - additionalProperties: - type: "string" - Data: - description: | - Data is the data to store as a config, formatted as a Base64-url-safe-encoded - ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-5)) string. - The maximum allowed size is 1000KB, as defined in [MaxConfigSize](https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/manager/controlapi#MaxConfigSize). - type: "string" - Templating: - description: | - Templating driver, if applicable - - Templating controls whether and how to evaluate the config payload as - a template. If no driver is set, no templating is used. - $ref: "#/definitions/Driver" - - Config: - type: "object" - properties: - ID: - type: "string" - Version: - $ref: "#/definitions/ObjectVersion" - CreatedAt: - type: "string" - format: "dateTime" - UpdatedAt: - type: "string" - format: "dateTime" - Spec: - $ref: "#/definitions/ConfigSpec" - - ContainerState: - description: | - ContainerState stores container's running state. It's part of ContainerJSONBase - and will be returned by the "inspect" command. - type: "object" - x-nullable: true - properties: - Status: - description: | - String representation of the container state. Can be one of "created", - "running", "paused", "restarting", "removing", "exited", or "dead". - type: "string" - enum: ["created", "running", "paused", "restarting", "removing", "exited", "dead"] - example: "running" - Running: - description: | - Whether this container is running. - - Note that a running container can be _paused_. The `Running` and `Paused` - booleans are not mutually exclusive: - - When pausing a container (on Linux), the freezer cgroup is used to suspend - all processes in the container. Freezing the process requires the process to - be running. As a result, paused containers are both `Running` _and_ `Paused`. - - Use the `Status` field instead to determine if a container's state is "running". - type: "boolean" - example: true - Paused: - description: "Whether this container is paused." - type: "boolean" - example: false - Restarting: - description: "Whether this container is restarting." - type: "boolean" - example: false - OOMKilled: - description: | - Whether a process within this container has been killed because it ran - out of memory since the container was last started. - type: "boolean" - example: false - Dead: - type: "boolean" - example: false - Pid: - description: "The process ID of this container" - type: "integer" - example: 1234 - ExitCode: - description: "The last exit code of this container" - type: "integer" - example: 0 - Error: - type: "string" - StartedAt: - description: "The time when this container was last started." - type: "string" - example: "2020-01-06T09:06:59.461876391Z" - FinishedAt: - description: "The time when this container last exited." - type: "string" - example: "2020-01-06T09:07:59.461876391Z" - Health: - $ref: "#/definitions/Health" - - ContainerCreateResponse: - description: "OK response to ContainerCreate operation" - type: "object" - title: "ContainerCreateResponse" - x-go-name: "CreateResponse" - required: [Id, Warnings] - properties: - Id: - description: "The ID of the created container" - type: "string" - x-nullable: false - example: "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" - Warnings: - description: "Warnings encountered when creating the container" - type: "array" - x-nullable: false - items: - type: "string" - example: [] - - ContainerUpdateResponse: - type: "object" - title: "ContainerUpdateResponse" - x-go-name: "UpdateResponse" - description: |- - Response for a successful container-update. - properties: - Warnings: - type: "array" - description: |- - Warnings encountered when updating the container. - items: - type: "string" - example: ["Published ports are discarded when using host network mode"] - - ContainerStatsResponse: - description: | - Statistics sample for a container. - type: "object" - x-go-name: "StatsResponse" - title: "ContainerStatsResponse" - properties: - name: - description: "Name of the container" - type: "string" - x-nullable: true - example: "boring_wozniak" - id: - description: "ID of the container" - type: "string" - x-nullable: true - example: "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" - read: - description: | - Date and time at which this sample was collected. - The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) - with nano-seconds. - type: "string" - format: "date-time" - example: "2025-01-16T13:55:22.165243637Z" - preread: - description: | - Date and time at which this first sample was collected. This field - is not propagated if the "one-shot" option is set. If the "one-shot" - option is set, this field may be omitted, empty, or set to a default - date (`0001-01-01T00:00:00Z`). - - The value is formatted as [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) - with nano-seconds. - type: "string" - format: "date-time" - example: "2025-01-16T13:55:21.160452595Z" - pids_stats: - $ref: "#/definitions/ContainerPidsStats" - blkio_stats: - $ref: "#/definitions/ContainerBlkioStats" - num_procs: - description: | - The number of processors on the system. - - This field is Windows-specific and always zero for Linux containers. - type: "integer" - format: "uint32" - example: 16 - storage_stats: - $ref: "#/definitions/ContainerStorageStats" - cpu_stats: - $ref: "#/definitions/ContainerCPUStats" - precpu_stats: - $ref: "#/definitions/ContainerCPUStats" - memory_stats: - $ref: "#/definitions/ContainerMemoryStats" - networks: - description: | - Network statistics for the container per interface. - - This field is omitted if the container has no networking enabled. - x-nullable: true - additionalProperties: - $ref: "#/definitions/ContainerNetworkStats" - example: - eth0: - rx_bytes: 5338 - rx_dropped: 0 - rx_errors: 0 - rx_packets: 36 - tx_bytes: 648 - tx_dropped: 0 - tx_errors: 0 - tx_packets: 8 - eth5: - rx_bytes: 4641 - rx_dropped: 0 - rx_errors: 0 - rx_packets: 26 - tx_bytes: 690 - tx_dropped: 0 - tx_errors: 0 - tx_packets: 9 - - ContainerBlkioStats: - description: | - BlkioStats stores all IO service stats for data read and write. - - This type is Linux-specific and holds many fields that are specific to cgroups v1. - On a cgroup v2 host, all fields other than `io_service_bytes_recursive` - are omitted or `null`. - - This type is only populated on Linux and omitted for Windows containers. - type: "object" - x-go-name: "BlkioStats" - x-nullable: true - properties: - io_service_bytes_recursive: - type: "array" - items: - $ref: "#/definitions/ContainerBlkioStatEntry" - io_serviced_recursive: - description: | - This field is only available when using Linux containers with - cgroups v1. It is omitted or `null` when using cgroups v2. - x-nullable: true - type: "array" - items: - $ref: "#/definitions/ContainerBlkioStatEntry" - io_queue_recursive: - description: | - This field is only available when using Linux containers with - cgroups v1. It is omitted or `null` when using cgroups v2. - x-nullable: true - type: "array" - items: - $ref: "#/definitions/ContainerBlkioStatEntry" - io_service_time_recursive: - description: | - This field is only available when using Linux containers with - cgroups v1. It is omitted or `null` when using cgroups v2. - x-nullable: true - type: "array" - items: - $ref: "#/definitions/ContainerBlkioStatEntry" - io_wait_time_recursive: - description: | - This field is only available when using Linux containers with - cgroups v1. It is omitted or `null` when using cgroups v2. - x-nullable: true - type: "array" - items: - $ref: "#/definitions/ContainerBlkioStatEntry" - io_merged_recursive: - description: | - This field is only available when using Linux containers with - cgroups v1. It is omitted or `null` when using cgroups v2. - x-nullable: true - type: "array" - items: - $ref: "#/definitions/ContainerBlkioStatEntry" - io_time_recursive: - description: | - This field is only available when using Linux containers with - cgroups v1. It is omitted or `null` when using cgroups v2. - x-nullable: true - type: "array" - items: - $ref: "#/definitions/ContainerBlkioStatEntry" - sectors_recursive: - description: | - This field is only available when using Linux containers with - cgroups v1. It is omitted or `null` when using cgroups v2. - x-nullable: true - type: "array" - items: - $ref: "#/definitions/ContainerBlkioStatEntry" - example: - io_service_bytes_recursive: [ - {"major": 254, "minor": 0, "op": "read", "value": 7593984}, - {"major": 254, "minor": 0, "op": "write", "value": 100} - ] - io_serviced_recursive: null - io_queue_recursive: null - io_service_time_recursive: null - io_wait_time_recursive: null - io_merged_recursive: null - io_time_recursive: null - sectors_recursive: null - - ContainerBlkioStatEntry: - description: | - Blkio stats entry. - - This type is Linux-specific and omitted for Windows containers. - type: "object" - x-go-name: "BlkioStatEntry" - x-nullable: true - properties: - major: - type: "integer" - format: "uint64" - example: 254 - minor: - type: "integer" - format: "uint64" - example: 0 - op: - type: "string" - example: "read" - value: - type: "integer" - format: "uint64" - example: 7593984 - - ContainerCPUStats: - description: | - CPU related info of the container - type: "object" - x-go-name: "CPUStats" - x-nullable: true - properties: - cpu_usage: - $ref: "#/definitions/ContainerCPUUsage" - system_cpu_usage: - description: | - System Usage. - - This field is Linux-specific and omitted for Windows containers. - type: "integer" - format: "uint64" - x-nullable: true - example: 5 - online_cpus: - description: | - Number of online CPUs. - - This field is Linux-specific and omitted for Windows containers. - type: "integer" - format: "uint32" - x-nullable: true - example: 5 - throttling_data: - $ref: "#/definitions/ContainerThrottlingData" - - ContainerCPUUsage: - description: | - All CPU stats aggregated since container inception. - type: "object" - x-go-name: "CPUUsage" - x-nullable: true - properties: - total_usage: - description: | - Total CPU time consumed in nanoseconds (Linux) or 100's of nanoseconds (Windows). - type: "integer" - format: "uint64" - example: 29912000 - percpu_usage: - description: | - Total CPU time (in nanoseconds) consumed per core (Linux). - - This field is Linux-specific when using cgroups v1. It is omitted - when using cgroups v2 and Windows containers. - type: "array" - x-nullable: true - items: - type: "integer" - format: "uint64" - example: 29912000 - - usage_in_kernelmode: - description: | - Time (in nanoseconds) spent by tasks of the cgroup in kernel mode (Linux), - or time spent (in 100's of nanoseconds) by all container processes in - kernel mode (Windows). - - Not populated for Windows containers using Hyper-V isolation. - type: "integer" - format: "uint64" - example: 21994000 - usage_in_usermode: - description: | - Time (in nanoseconds) spent by tasks of the cgroup in user mode (Linux), - or time spent (in 100's of nanoseconds) by all container processes in - kernel mode (Windows). - - Not populated for Windows containers using Hyper-V isolation. - type: "integer" - format: "uint64" - example: 7918000 - - ContainerPidsStats: - description: | - PidsStats contains Linux-specific stats of a container's process-IDs (PIDs). - - This type is Linux-specific and omitted for Windows containers. - type: "object" - x-go-name: "PidsStats" - x-nullable: true - properties: - current: - description: | - Current is the number of PIDs in the cgroup. - type: "integer" - format: "uint64" - x-nullable: true - example: 5 - limit: - description: | - Limit is the hard limit on the number of pids in the cgroup. - A "Limit" of 0 means that there is no limit. - type: "integer" - format: "uint64" - x-nullable: true - example: "18446744073709551615" - - ContainerThrottlingData: - description: | - CPU throttling stats of the container. - - This type is Linux-specific and omitted for Windows containers. - type: "object" - x-go-name: "ThrottlingData" - x-nullable: true - properties: - periods: - description: | - Number of periods with throttling active. - type: "integer" - format: "uint64" - example: 0 - throttled_periods: - description: | - Number of periods when the container hit its throttling limit. - type: "integer" - format: "uint64" - example: 0 - throttled_time: - description: | - Aggregated time (in nanoseconds) the container was throttled for. - type: "integer" - format: "uint64" - example: 0 - - ContainerMemoryStats: - description: | - Aggregates all memory stats since container inception on Linux. - Windows returns stats for commit and private working set only. - type: "object" - x-go-name: "MemoryStats" - properties: - usage: - description: | - Current `res_counter` usage for memory. - - This field is Linux-specific and omitted for Windows containers. - type: "integer" - format: "uint64" - x-nullable: true - example: 0 - max_usage: - description: | - Maximum usage ever recorded. - - This field is Linux-specific and only supported on cgroups v1. - It is omitted when using cgroups v2 and for Windows containers. - type: "integer" - format: "uint64" - x-nullable: true - example: 0 - stats: - description: | - All the stats exported via memory.stat. when using cgroups v2. - - This field is Linux-specific and omitted for Windows containers. - type: "object" - additionalProperties: - type: "integer" - format: "uint64" - x-nullable: true - example: - { - "active_anon": 1572864, - "active_file": 5115904, - "anon": 1572864, - "anon_thp": 0, - "file": 7626752, - "file_dirty": 0, - "file_mapped": 2723840, - "file_writeback": 0, - "inactive_anon": 0, - "inactive_file": 2510848, - "kernel_stack": 16384, - "pgactivate": 0, - "pgdeactivate": 0, - "pgfault": 2042, - "pglazyfree": 0, - "pglazyfreed": 0, - "pgmajfault": 45, - "pgrefill": 0, - "pgscan": 0, - "pgsteal": 0, - "shmem": 0, - "slab": 1180928, - "slab_reclaimable": 725576, - "slab_unreclaimable": 455352, - "sock": 0, - "thp_collapse_alloc": 0, - "thp_fault_alloc": 1, - "unevictable": 0, - "workingset_activate": 0, - "workingset_nodereclaim": 0, - "workingset_refault": 0 - } - failcnt: - description: | - Number of times memory usage hits limits. - - This field is Linux-specific and only supported on cgroups v1. - It is omitted when using cgroups v2 and for Windows containers. - type: "integer" - format: "uint64" - x-nullable: true - example: 0 - limit: - description: | - This field is Linux-specific and omitted for Windows containers. - type: "integer" - format: "uint64" - x-nullable: true - example: 8217579520 - commitbytes: - description: | - Committed bytes. - - This field is Windows-specific and omitted for Linux containers. - type: "integer" - format: "uint64" - x-nullable: true - example: 0 - commitpeakbytes: - description: | - Peak committed bytes. - - This field is Windows-specific and omitted for Linux containers. - type: "integer" - format: "uint64" - x-nullable: true - example: 0 - privateworkingset: - description: | - Private working set. - - This field is Windows-specific and omitted for Linux containers. - type: "integer" - format: "uint64" - x-nullable: true - example: 0 - - ContainerNetworkStats: - description: | - Aggregates the network stats of one container - type: "object" - x-go-name: "NetworkStats" - x-nullable: true - properties: - rx_bytes: - description: | - Bytes received. Windows and Linux. - type: "integer" - format: "uint64" - example: 5338 - rx_packets: - description: | - Packets received. Windows and Linux. - type: "integer" - format: "uint64" - example: 36 - rx_errors: - description: | - Received errors. Not used on Windows. - - This field is Linux-specific and always zero for Windows containers. - type: "integer" - format: "uint64" - example: 0 - rx_dropped: - description: | - Incoming packets dropped. Windows and Linux. - type: "integer" - format: "uint64" - example: 0 - tx_bytes: - description: | - Bytes sent. Windows and Linux. - type: "integer" - format: "uint64" - example: 1200 - tx_packets: - description: | - Packets sent. Windows and Linux. - type: "integer" - format: "uint64" - example: 12 - tx_errors: - description: | - Sent errors. Not used on Windows. - - This field is Linux-specific and always zero for Windows containers. - type: "integer" - format: "uint64" - example: 0 - tx_dropped: - description: | - Outgoing packets dropped. Windows and Linux. - type: "integer" - format: "uint64" - example: 0 - endpoint_id: - description: | - Endpoint ID. Not used on Linux. - - This field is Windows-specific and omitted for Linux containers. - type: "string" - x-nullable: true - instance_id: - description: | - Instance ID. Not used on Linux. - - This field is Windows-specific and omitted for Linux containers. - type: "string" - x-nullable: true - - ContainerStorageStats: - description: | - StorageStats is the disk I/O stats for read/write on Windows. - - This type is Windows-specific and omitted for Linux containers. - type: "object" - x-go-name: "StorageStats" - x-nullable: true - properties: - read_count_normalized: - type: "integer" - format: "uint64" - x-nullable: true - example: 7593984 - read_size_bytes: - type: "integer" - format: "uint64" - x-nullable: true - example: 7593984 - write_count_normalized: - type: "integer" - format: "uint64" - x-nullable: true - example: 7593984 - write_size_bytes: - type: "integer" - format: "uint64" - x-nullable: true - example: 7593984 - - ContainerTopResponse: - type: "object" - x-go-name: "TopResponse" - title: "ContainerTopResponse" - description: |- - Container "top" response. - properties: - Titles: - description: "The ps column titles" - type: "array" - items: - type: "string" - example: - Titles: - - "UID" - - "PID" - - "PPID" - - "C" - - "STIME" - - "TTY" - - "TIME" - - "CMD" - Processes: - description: |- - Each process running in the container, where each process - is an array of values corresponding to the titles. - type: "array" - items: - type: "array" - items: - type: "string" - example: - Processes: - - - - "root" - - "13642" - - "882" - - "0" - - "17:03" - - "pts/0" - - "00:00:00" - - "/bin/bash" - - - - "root" - - "13735" - - "13642" - - "0" - - "17:06" - - "pts/0" - - "00:00:00" - - "sleep 10" - - ContainerWaitResponse: - description: "OK response to ContainerWait operation" - type: "object" - x-go-name: "WaitResponse" - title: "ContainerWaitResponse" - required: [StatusCode] - properties: - StatusCode: - description: "Exit code of the container" - type: "integer" - format: "int64" - x-nullable: false - Error: - $ref: "#/definitions/ContainerWaitExitError" - - ContainerWaitExitError: - description: "container waiting error, if any" - type: "object" - x-go-name: "WaitExitError" - properties: - Message: - description: "Details of an error" - type: "string" - - SystemVersion: - type: "object" - description: | - Response of Engine API: GET "/version" - properties: - Platform: - type: "object" - required: [Name] - properties: - Name: - type: "string" - Components: - type: "array" - description: | - Information about system components - items: - type: "object" - x-go-name: ComponentVersion - required: [Name, Version] - properties: - Name: - description: | - Name of the component - type: "string" - example: "Engine" - Version: - description: | - Version of the component - type: "string" - x-nullable: false - example: "27.0.1" - Details: - description: | - Key/value pairs of strings with additional information about the - component. These values are intended for informational purposes - only, and their content is not defined, and not part of the API - specification. - - These messages can be printed by the client as information to the user. - type: "object" - x-nullable: true - Version: - description: "The version of the daemon" - type: "string" - example: "27.0.1" - ApiVersion: - description: | - The default (and highest) API version that is supported by the daemon - type: "string" - example: "1.47" - MinAPIVersion: - description: | - The minimum API version that is supported by the daemon - type: "string" - example: "1.24" - GitCommit: - description: | - The Git commit of the source code that was used to build the daemon - type: "string" - example: "48a66213fe" - GoVersion: - description: | - The version Go used to compile the daemon, and the version of the Go - runtime in use. - type: "string" - example: "go1.22.7" - Os: - description: | - The operating system that the daemon is running on ("linux" or "windows") - type: "string" - example: "linux" - Arch: - description: | - The architecture that the daemon is running on - type: "string" - example: "amd64" - KernelVersion: - description: | - The kernel version (`uname -r`) that the daemon is running on. - - This field is omitted when empty. - type: "string" - example: "6.8.0-31-generic" - Experimental: - description: | - Indicates if the daemon is started with experimental features enabled. - - This field is omitted when empty / false. - type: "boolean" - example: true - BuildTime: - description: | - The date and time that the daemon was compiled. - type: "string" - example: "2020-06-22T15:49:27.000000000+00:00" - - SystemInfo: - type: "object" - properties: - ID: - description: | - Unique identifier of the daemon. - -


    - - > **Note**: The format of the ID itself is not part of the API, and - > should not be considered stable. - type: "string" - example: "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" - Containers: - description: "Total number of containers on the host." - type: "integer" - example: 14 - ContainersRunning: - description: | - Number of containers with status `"running"`. - type: "integer" - example: 3 - ContainersPaused: - description: | - Number of containers with status `"paused"`. - type: "integer" - example: 1 - ContainersStopped: - description: | - Number of containers with status `"stopped"`. - type: "integer" - example: 10 - Images: - description: | - Total number of images on the host. - - Both _tagged_ and _untagged_ (dangling) images are counted. - type: "integer" - example: 508 - Driver: - description: "Name of the storage driver in use." - type: "string" - example: "overlay2" - DriverStatus: - description: | - Information specific to the storage driver, provided as - "label" / "value" pairs. - - This information is provided by the storage driver, and formatted - in a way consistent with the output of `docker info` on the command - line. - -


    - - > **Note**: The information returned in this field, including the - > formatting of values and labels, should not be considered stable, - > and may change without notice. - type: "array" - items: - type: "array" - items: - type: "string" - example: - - ["Backing Filesystem", "extfs"] - - ["Supports d_type", "true"] - - ["Native Overlay Diff", "true"] - DockerRootDir: - description: | - Root directory of persistent Docker state. - - Defaults to `/var/lib/docker` on Linux, and `C:\ProgramData\docker` - on Windows. - type: "string" - example: "/var/lib/docker" - Plugins: - $ref: "#/definitions/PluginsInfo" - MemoryLimit: - description: "Indicates if the host has memory limit support enabled." - type: "boolean" - example: true - SwapLimit: - description: "Indicates if the host has memory swap limit support enabled." - type: "boolean" - example: true - KernelMemoryTCP: - description: | - Indicates if the host has kernel memory TCP limit support enabled. This - field is omitted if not supported. - - Kernel memory TCP limits are not supported when using cgroups v2, which - does not support the corresponding `memory.kmem.tcp.limit_in_bytes` cgroup. - - **Deprecated**: This field is deprecated as kernel 6.12 has deprecated kernel memory TCP accounting. - type: "boolean" - example: true - CpuCfsPeriod: - description: | - Indicates if CPU CFS(Completely Fair Scheduler) period is supported by - the host. - type: "boolean" - example: true - CpuCfsQuota: - description: | - Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by - the host. - type: "boolean" - example: true - CPUShares: - description: | - Indicates if CPU Shares limiting is supported by the host. - type: "boolean" - example: true - CPUSet: - description: | - Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host. - - See [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt) - type: "boolean" - example: true - PidsLimit: - description: "Indicates if the host kernel has PID limit support enabled." - type: "boolean" - example: true - OomKillDisable: - description: "Indicates if OOM killer disable is supported on the host." - type: "boolean" - IPv4Forwarding: - description: "Indicates IPv4 forwarding is enabled." - type: "boolean" - example: true - Debug: - description: | - Indicates if the daemon is running in debug-mode / with debug-level - logging enabled. - type: "boolean" - example: true - NFd: - description: | - The total number of file Descriptors in use by the daemon process. - - This information is only returned if debug-mode is enabled. - type: "integer" - example: 64 - NGoroutines: - description: | - The number of goroutines that currently exist. - - This information is only returned if debug-mode is enabled. - type: "integer" - example: 174 - SystemTime: - description: | - Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) - format with nano-seconds. - type: "string" - example: "2017-08-08T20:28:29.06202363Z" - LoggingDriver: - description: | - The logging driver to use as a default for new containers. - type: "string" - CgroupDriver: - description: | - The driver to use for managing cgroups. - type: "string" - enum: ["cgroupfs", "systemd", "none"] - default: "cgroupfs" - example: "cgroupfs" - CgroupVersion: - description: | - The version of the cgroup. - type: "string" - enum: ["1", "2"] - default: "1" - example: "1" - NEventsListener: - description: "Number of event listeners subscribed." - type: "integer" - example: 30 - KernelVersion: - description: | - Kernel version of the host. - - On Linux, this information obtained from `uname`. On Windows this - information is queried from the HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ - registry value, for example _"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)"_. - type: "string" - example: "6.8.0-31-generic" - OperatingSystem: - description: | - Name of the host's operating system, for example: "Ubuntu 24.04 LTS" - or "Windows Server 2016 Datacenter" - type: "string" - example: "Ubuntu 24.04 LTS" - OSVersion: - description: | - Version of the host's operating system - -


    - - > **Note**: The information returned in this field, including its - > very existence, and the formatting of values, should not be considered - > stable, and may change without notice. - type: "string" - example: "24.04" - OSType: - description: | - Generic type of the operating system of the host, as returned by the - Go runtime (`GOOS`). - - Currently returned values are "linux" and "windows". A full list of - possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). - type: "string" - example: "linux" - Architecture: - description: | - Hardware architecture of the host, as returned by the Go runtime - (`GOARCH`). - - A full list of possible values can be found in the [Go documentation](https://go.dev/doc/install/source#environment). - type: "string" - example: "x86_64" - NCPU: - description: | - The number of logical CPUs usable by the daemon. - - The number of available CPUs is checked by querying the operating - system when the daemon starts. Changes to operating system CPU - allocation after the daemon is started are not reflected. - type: "integer" - example: 4 - MemTotal: - description: | - Total amount of physical memory available on the host, in bytes. - type: "integer" - format: "int64" - example: 2095882240 - - IndexServerAddress: - description: | - Address / URL of the index server that is used for image search, - and as a default for user authentication for Docker Hub and Docker Cloud. - default: "https://index.docker.io/v1/" - type: "string" - example: "https://index.docker.io/v1/" - RegistryConfig: - $ref: "#/definitions/RegistryServiceConfig" - GenericResources: - $ref: "#/definitions/GenericResources" - HttpProxy: - description: | - HTTP-proxy configured for the daemon. This value is obtained from the - [`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. - Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL - are masked in the API response. - - Containers do not automatically inherit this configuration. - type: "string" - example: "http://xxxxx:xxxxx@proxy.corp.example.com:8080" - HttpsProxy: - description: | - HTTPS-proxy configured for the daemon. This value is obtained from the - [`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable. - Credentials ([user info component](https://tools.ietf.org/html/rfc3986#section-3.2.1)) in the proxy URL - are masked in the API response. - - Containers do not automatically inherit this configuration. - type: "string" - example: "https://xxxxx:xxxxx@proxy.corp.example.com:4443" - NoProxy: - description: | - Comma-separated list of domain extensions for which no proxy should be - used. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) - environment variable. - - Containers do not automatically inherit this configuration. - type: "string" - example: "*.local, 169.254/16" - Name: - description: "Hostname of the host." - type: "string" - example: "node5.corp.example.com" - Labels: - description: | - User-defined labels (key/value metadata) as set on the daemon. - -


    - - > **Note**: When part of a Swarm, nodes can both have _daemon_ labels, - > set through the daemon configuration, and _node_ labels, set from a - > manager node in the Swarm. Node labels are not included in this - > field. Node labels can be retrieved using the `/nodes/(id)` endpoint - > on a manager node in the Swarm. - type: "array" - items: - type: "string" - example: ["storage=ssd", "production"] - ExperimentalBuild: - description: | - Indicates if experimental features are enabled on the daemon. - type: "boolean" - example: true - ServerVersion: - description: | - Version string of the daemon. - type: "string" - example: "27.0.1" - Runtimes: - description: | - List of [OCI compliant](https://github.com/opencontainers/runtime-spec) - runtimes configured on the daemon. Keys hold the "name" used to - reference the runtime. - - The Docker daemon relies on an OCI compliant runtime (invoked via the - `containerd` daemon) as its interface to the Linux kernel namespaces, - cgroups, and SELinux. - - The default runtime is `runc`, and automatically configured. Additional - runtimes can be configured by the user and will be listed here. - type: "object" - additionalProperties: - $ref: "#/definitions/Runtime" - default: - runc: - path: "runc" - example: - runc: - path: "runc" - runc-master: - path: "/go/bin/runc" - custom: - path: "/usr/local/bin/my-oci-runtime" - runtimeArgs: ["--debug", "--systemd-cgroup=false"] - DefaultRuntime: - description: | - Name of the default OCI runtime that is used when starting containers. - - The default can be overridden per-container at create time. - type: "string" - default: "runc" - example: "runc" - Swarm: - $ref: "#/definitions/SwarmInfo" - LiveRestoreEnabled: - description: | - Indicates if live restore is enabled. - - If enabled, containers are kept running when the daemon is shutdown - or upon daemon start if running containers are detected. - type: "boolean" - default: false - example: false - Isolation: - description: | - Represents the isolation technology to use as a default for containers. - The supported values are platform-specific. - - If no isolation value is specified on daemon start, on Windows client, - the default is `hyperv`, and on Windows server, the default is `process`. - - This option is currently not used on other platforms. - default: "default" - type: "string" - enum: - - "default" - - "hyperv" - - "process" - - "" - InitBinary: - description: | - Name and, optional, path of the `docker-init` binary. - - If the path is omitted, the daemon searches the host's `$PATH` for the - binary and uses the first result. - type: "string" - example: "docker-init" - ContainerdCommit: - $ref: "#/definitions/Commit" - RuncCommit: - $ref: "#/definitions/Commit" - InitCommit: - $ref: "#/definitions/Commit" - SecurityOptions: - description: | - List of security features that are enabled on the daemon, such as - apparmor, seccomp, SELinux, user-namespaces (userns), rootless and - no-new-privileges. - - Additional configuration options for each security feature may - be present, and are included as a comma-separated list of key/value - pairs. - type: "array" - items: - type: "string" - example: - - "name=apparmor" - - "name=seccomp,profile=default" - - "name=selinux" - - "name=userns" - - "name=rootless" - ProductLicense: - description: | - Reports a summary of the product license on the daemon. - - If a commercial license has been applied to the daemon, information - such as number of nodes, and expiration are included. - type: "string" - example: "Community Engine" - DefaultAddressPools: - description: | - List of custom default address pools for local networks, which can be - specified in the daemon.json file or dockerd option. - - Example: a Base "10.10.0.0/16" with Size 24 will define the set of 256 - 10.10.[0-255].0/24 address pools. - type: "array" - items: - type: "object" - properties: - Base: - description: "The network address in CIDR format" - type: "string" - example: "10.10.0.0/16" - Size: - description: "The network pool size" - type: "integer" - example: "24" - FirewallBackend: - $ref: "#/definitions/FirewallInfo" - DiscoveredDevices: - description: | - List of devices discovered by device drivers. - - Each device includes information about its source driver, kind, name, - and additional driver-specific attributes. - type: "array" - items: - $ref: "#/definitions/DeviceInfo" - Warnings: - description: | - List of warnings / informational messages about missing features, or - issues related to the daemon configuration. - - These messages can be printed by the client as information to the user. - type: "array" - items: - type: "string" - example: - - "WARNING: No memory limit support" - CDISpecDirs: - description: | - List of directories where (Container Device Interface) CDI - specifications are located. - - These specifications define vendor-specific modifications to an OCI - runtime specification for a container being created. - - An empty list indicates that CDI device injection is disabled. - - Note that since using CDI device injection requires the daemon to have - experimental enabled. For non-experimental daemons an empty list will - always be returned. - type: "array" - items: - type: "string" - example: - - "/etc/cdi" - - "/var/run/cdi" - Containerd: - $ref: "#/definitions/ContainerdInfo" - - ContainerdInfo: - description: | - Information for connecting to the containerd instance that is used by the daemon. - This is included for debugging purposes only. - type: "object" - x-nullable: true - properties: - Address: - description: "The address of the containerd socket." - type: "string" - example: "/run/containerd/containerd.sock" - Namespaces: - description: | - The namespaces that the daemon uses for running containers and - plugins in containerd. These namespaces can be configured in the - daemon configuration, and are considered to be used exclusively - by the daemon, Tampering with the containerd instance may cause - unexpected behavior. - - As these namespaces are considered to be exclusively accessed - by the daemon, it is not recommended to change these values, - or to change them to a value that is used by other systems, - such as cri-containerd. - type: "object" - properties: - Containers: - description: | - The default containerd namespace used for containers managed - by the daemon. - - The default namespace for containers is "moby", but will be - suffixed with the `.` of the remapped `root` if - user-namespaces are enabled and the containerd image-store - is used. - type: "string" - default: "moby" - example: "moby" - Plugins: - description: | - The default containerd namespace used for plugins managed by - the daemon. - - The default namespace for plugins is "plugins.moby", but will be - suffixed with the `.` of the remapped `root` if - user-namespaces are enabled and the containerd image-store - is used. - type: "string" - default: "plugins.moby" - example: "plugins.moby" - - FirewallInfo: - description: | - Information about the daemon's firewalling configuration. - - This field is currently only used on Linux, and omitted on other platforms. - type: "object" - x-nullable: true - properties: - Driver: - description: | - The name of the firewall backend driver. - type: "string" - example: "nftables" - Info: - description: | - Information about the firewall backend, provided as - "label" / "value" pairs. - -


    - - > **Note**: The information returned in this field, including the - > formatting of values and labels, should not be considered stable, - > and may change without notice. - type: "array" - items: - type: "array" - items: - type: "string" - example: - - ["ReloadedAt", "2025-01-01T00:00:00Z"] - - # PluginsInfo is a temp struct holding Plugins name - # registered with docker daemon. It is used by Info struct - PluginsInfo: - description: | - Available plugins per type. - -


    - - > **Note**: Only unmanaged (V1) plugins are included in this list. - > V1 plugins are "lazily" loaded, and are not returned in this list - > if there is no resource using the plugin. - type: "object" - properties: - Volume: - description: "Names of available volume-drivers, and network-driver plugins." - type: "array" - items: - type: "string" - example: ["local"] - Network: - description: "Names of available network-drivers, and network-driver plugins." - type: "array" - items: - type: "string" - example: ["bridge", "host", "ipvlan", "macvlan", "null", "overlay"] - Authorization: - description: "Names of available authorization plugins." - type: "array" - items: - type: "string" - example: ["img-authz-plugin", "hbm"] - Log: - description: "Names of available logging-drivers, and logging-driver plugins." - type: "array" - items: - type: "string" - example: ["awslogs", "fluentd", "gcplogs", "gelf", "journald", "json-file", "splunk", "syslog"] - - - RegistryServiceConfig: - description: | - RegistryServiceConfig stores daemon registry services configuration. - type: "object" - x-nullable: true - properties: - InsecureRegistryCIDRs: - description: | - List of IP ranges of insecure registries, using the CIDR syntax - ([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries - accept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates - from unknown CAs) communication. - - By default, local registries (`::1/128` and `127.0.0.0/8`) are configured as - insecure. All other registries are secure. Communicating with an - insecure registry is not possible if the daemon assumes that registry - is secure. - - This configuration override this behavior, insecure communication with - registries whose resolved IP address is within the subnet described by - the CIDR syntax. - - Registries can also be marked insecure by hostname. Those registries - are listed under `IndexConfigs` and have their `Secure` field set to - `false`. - - > **Warning**: Using this option can be useful when running a local - > registry, but introduces security vulnerabilities. This option - > should therefore ONLY be used for testing purposes. For increased - > security, users should add their CA to their system's list of trusted - > CAs instead of enabling this option. - type: "array" - items: - type: "string" - example: ["::1/128", "127.0.0.0/8"] - IndexConfigs: - type: "object" - additionalProperties: - $ref: "#/definitions/IndexInfo" - example: - "127.0.0.1:5000": - "Name": "127.0.0.1:5000" - "Mirrors": [] - "Secure": false - "Official": false - "[2001:db8:a0b:12f0::1]:80": - "Name": "[2001:db8:a0b:12f0::1]:80" - "Mirrors": [] - "Secure": false - "Official": false - "docker.io": - Name: "docker.io" - Mirrors: ["https://hub-mirror.corp.example.com:5000/"] - Secure: true - Official: true - "registry.internal.corp.example.com:3000": - Name: "registry.internal.corp.example.com:3000" - Mirrors: [] - Secure: false - Official: false - Mirrors: - description: | - List of registry URLs that act as a mirror for the official - (`docker.io`) registry. - - type: "array" - items: - type: "string" - example: - - "https://hub-mirror.corp.example.com:5000/" - - "https://[2001:db8:a0b:12f0::1]/" - - IndexInfo: - description: - IndexInfo contains information about a registry. - type: "object" - x-nullable: true - properties: - Name: - description: | - Name of the registry, such as "docker.io". - type: "string" - example: "docker.io" - Mirrors: - description: | - List of mirrors, expressed as URIs. - type: "array" - items: - type: "string" - example: - - "https://hub-mirror.corp.example.com:5000/" - - "https://registry-2.docker.io/" - - "https://registry-3.docker.io/" - Secure: - description: | - Indicates if the registry is part of the list of insecure - registries. - - If `false`, the registry is insecure. Insecure registries accept - un-encrypted (HTTP) and/or untrusted (HTTPS with certificates from - unknown CAs) communication. - - > **Warning**: Insecure registries can be useful when running a local - > registry. However, because its use creates security vulnerabilities - > it should ONLY be enabled for testing purposes. For increased - > security, users should add their CA to their system's list of - > trusted CAs instead of enabling this option. - type: "boolean" - example: true - Official: - description: | - Indicates whether this is an official registry (i.e., Docker Hub / docker.io) - type: "boolean" - example: true - - Runtime: - description: | - Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec) - runtime. - - The runtime is invoked by the daemon via the `containerd` daemon. OCI - runtimes act as an interface to the Linux kernel namespaces, cgroups, - and SELinux. - type: "object" - properties: - path: - description: | - Name and, optional, path, of the OCI executable binary. - - If the path is omitted, the daemon searches the host's `$PATH` for the - binary and uses the first result. - type: "string" - example: "/usr/local/bin/my-oci-runtime" - runtimeArgs: - description: | - List of command-line arguments to pass to the runtime when invoked. - type: "array" - x-nullable: true - items: - type: "string" - example: ["--debug", "--systemd-cgroup=false"] - status: - description: | - Information specific to the runtime. - - While this API specification does not define data provided by runtimes, - the following well-known properties may be provided by runtimes: - - `org.opencontainers.runtime-spec.features`: features structure as defined - in the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec/blob/main/features.md), - in a JSON string representation. - -


    - - > **Note**: The information returned in this field, including the - > formatting of values and labels, should not be considered stable, - > and may change without notice. - type: "object" - x-nullable: true - additionalProperties: - type: "string" - example: - "org.opencontainers.runtime-spec.features": "{\"ociVersionMin\":\"1.0.0\",\"ociVersionMax\":\"1.1.0\",\"...\":\"...\"}" - - Commit: - description: | - Commit holds the Git-commit (SHA1) that a binary was built from, as - reported in the version-string of external tools, such as `containerd`, - or `runC`. - type: "object" - properties: - ID: - description: "Actual commit ID of external tool." - type: "string" - example: "cfb82a876ecc11b5ca0977d1733adbe58599088a" - - SwarmInfo: - description: | - Represents generic information about swarm. - type: "object" - properties: - NodeID: - description: "Unique identifier of for this node in the swarm." - type: "string" - default: "" - example: "k67qz4598weg5unwwffg6z1m1" - NodeAddr: - description: | - IP address at which this node can be reached by other nodes in the - swarm. - type: "string" - default: "" - example: "10.0.0.46" - LocalNodeState: - $ref: "#/definitions/LocalNodeState" - ControlAvailable: - type: "boolean" - default: false - example: true - Error: - type: "string" - default: "" - RemoteManagers: - description: | - List of ID's and addresses of other managers in the swarm. - type: "array" - default: null - x-nullable: true - items: - $ref: "#/definitions/PeerNode" - example: - - NodeID: "71izy0goik036k48jg985xnds" - Addr: "10.0.0.158:2377" - - NodeID: "79y6h1o4gv8n120drcprv5nmc" - Addr: "10.0.0.159:2377" - - NodeID: "k67qz4598weg5unwwffg6z1m1" - Addr: "10.0.0.46:2377" - Nodes: - description: "Total number of nodes in the swarm." - type: "integer" - x-nullable: true - example: 4 - Managers: - description: "Total number of managers in the swarm." - type: "integer" - x-nullable: true - example: 3 - Cluster: - $ref: "#/definitions/ClusterInfo" - - LocalNodeState: - description: "Current local status of this node." - type: "string" - default: "" - enum: - - "" - - "inactive" - - "pending" - - "active" - - "error" - - "locked" - example: "active" - - PeerNode: - description: "Represents a peer-node in the swarm" - type: "object" - properties: - NodeID: - description: "Unique identifier of for this node in the swarm." - type: "string" - Addr: - description: | - IP address and ports at which this node can be reached. - type: "string" - - NetworkAttachmentConfig: - description: | - Specifies how a service should be attached to a particular network. - type: "object" - properties: - Target: - description: | - The target network for attachment. Must be a network name or ID. - type: "string" - Aliases: - description: | - Discoverable alternate names for the service on this network. - type: "array" - items: - type: "string" - DriverOpts: - description: | - Driver attachment options for the network target. - type: "object" - additionalProperties: - type: "string" - - EventActor: - description: | - Actor describes something that generates events, like a container, network, - or a volume. - type: "object" - properties: - ID: - description: "The ID of the object emitting the event" - type: "string" - example: "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" - Attributes: - description: | - Various key/value attributes of the object, depending on its type. - type: "object" - additionalProperties: - type: "string" - example: - com.example.some-label: "some-label-value" - image: "alpine:latest" - name: "my-container" - - EventMessage: - description: | - EventMessage represents the information an event contains. - type: "object" - title: "SystemEventsResponse" - properties: - Type: - description: "The type of object emitting the event" - type: "string" - enum: ["builder", "config", "container", "daemon", "image", "network", "node", "plugin", "secret", "service", "volume"] - example: "container" - Action: - description: "The type of event" - type: "string" - example: "create" - Actor: - $ref: "#/definitions/EventActor" - scope: - description: | - Scope of the event. Engine events are `local` scope. Cluster (Swarm) - events are `swarm` scope. - type: "string" - enum: ["local", "swarm"] - time: - description: "Timestamp of event" - type: "integer" - format: "int64" - example: 1629574695 - timeNano: - description: "Timestamp of event, with nanosecond accuracy" - type: "integer" - format: "int64" - example: 1629574695515050031 - - OCIDescriptor: - type: "object" - x-go-name: Descriptor - description: | - A descriptor struct containing digest, media type, and size, as defined in - the [OCI Content Descriptors Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/descriptor.md). - properties: - mediaType: - description: | - The media type of the object this schema refers to. - type: "string" - example: "application/vnd.oci.image.manifest.v1+json" - digest: - description: | - The digest of the targeted content. - type: "string" - example: "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96" - size: - description: | - The size in bytes of the blob. - type: "integer" - format: "int64" - example: 424 - urls: - description: |- - List of URLs from which this object MAY be downloaded. - type: "array" - items: - type: "string" - format: "uri" - x-nullable: true - annotations: - description: |- - Arbitrary metadata relating to the targeted content. - type: "object" - x-nullable: true - additionalProperties: - type: "string" - example: - "com.docker.official-images.bashbrew.arch": "amd64" - "org.opencontainers.image.base.digest": "sha256:0d0ef5c914d3ea700147da1bd050c59edb8bb12ca312f3800b29d7c8087eabd8" - "org.opencontainers.image.base.name": "scratch" - "org.opencontainers.image.created": "2025-01-27T00:00:00Z" - "org.opencontainers.image.revision": "9fabb4bad5138435b01857e2fe9363e2dc5f6a79" - "org.opencontainers.image.source": "https://git.launchpad.net/cloud-images/+oci/ubuntu-base" - "org.opencontainers.image.url": "https://hub.docker.com/_/ubuntu" - "org.opencontainers.image.version": "24.04" - data: - type: string - x-nullable: true - description: |- - Data is an embedding of the targeted content. This is encoded as a base64 - string when marshalled to JSON (automatically, by encoding/json). If - present, Data can be used directly to avoid fetching the targeted content. - example: null - platform: - $ref: "#/definitions/OCIPlatform" - artifactType: - description: |- - ArtifactType is the IANA media type of this artifact. - type: "string" - x-nullable: true - example: null - - OCIPlatform: - type: "object" - x-go-name: Platform - x-nullable: true - description: | - Describes the platform which the image in the manifest runs on, as defined - in the [OCI Image Index Specification](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-index.md). - properties: - architecture: - description: | - The CPU architecture, for example `amd64` or `ppc64`. - type: "string" - example: "arm" - os: - description: | - The operating system, for example `linux` or `windows`. - type: "string" - example: "windows" - os.version: - description: | - Optional field specifying the operating system version, for example on - Windows `10.0.19041.1165`. - type: "string" - example: "10.0.19041.1165" - os.features: - description: | - Optional field specifying an array of strings, each listing a required - OS feature (for example on Windows `win32k`). - type: "array" - items: - type: "string" - example: - - "win32k" - variant: - description: | - Optional field specifying a variant of the CPU, for example `v7` to - specify ARMv7 when architecture is `arm`. - type: "string" - example: "v7" - - DistributionInspect: - type: "object" - x-go-name: DistributionInspect - title: "DistributionInspectResponse" - required: [Descriptor, Platforms] - description: | - Describes the result obtained from contacting the registry to retrieve - image metadata. - properties: - Descriptor: - $ref: "#/definitions/OCIDescriptor" - Platforms: - type: "array" - description: | - An array containing all platforms supported by the image. - items: - $ref: "#/definitions/OCIPlatform" - - ClusterVolume: - type: "object" - description: | - Options and information specific to, and only present on, Swarm CSI - cluster volumes. - properties: - ID: - type: "string" - description: | - The Swarm ID of this volume. Because cluster volumes are Swarm - objects, they have an ID, unlike non-cluster volumes. This ID can - be used to refer to the Volume instead of the name. - Version: - $ref: "#/definitions/ObjectVersion" - CreatedAt: - type: "string" - format: "dateTime" - UpdatedAt: - type: "string" - format: "dateTime" - Spec: - $ref: "#/definitions/ClusterVolumeSpec" - Info: - type: "object" - description: | - Information about the global status of the volume. - properties: - CapacityBytes: - type: "integer" - format: "int64" - description: | - The capacity of the volume in bytes. A value of 0 indicates that - the capacity is unknown. - VolumeContext: - type: "object" - description: | - A map of strings to strings returned from the storage plugin when - the volume is created. - additionalProperties: - type: "string" - VolumeID: - type: "string" - description: | - The ID of the volume as returned by the CSI storage plugin. This - is distinct from the volume's ID as provided by Docker. This ID - is never used by the user when communicating with Docker to refer - to this volume. If the ID is blank, then the Volume has not been - successfully created in the plugin yet. - AccessibleTopology: - type: "array" - description: | - The topology this volume is actually accessible from. - items: - $ref: "#/definitions/Topology" - PublishStatus: - type: "array" - description: | - The status of the volume as it pertains to its publishing and use on - specific nodes - items: - type: "object" - properties: - NodeID: - type: "string" - description: | - The ID of the Swarm node the volume is published on. - State: - type: "string" - description: | - The published state of the volume. - * `pending-publish` The volume should be published to this node, but the call to the controller plugin to do so has not yet been successfully completed. - * `published` The volume is published successfully to the node. - * `pending-node-unpublish` The volume should be unpublished from the node, and the manager is awaiting confirmation from the worker that it has done so. - * `pending-controller-unpublish` The volume is successfully unpublished from the node, but has not yet been successfully unpublished on the controller. - enum: - - "pending-publish" - - "published" - - "pending-node-unpublish" - - "pending-controller-unpublish" - PublishContext: - type: "object" - description: | - A map of strings to strings returned by the CSI controller - plugin when a volume is published. - additionalProperties: - type: "string" - - ClusterVolumeSpec: - type: "object" - description: | - Cluster-specific options used to create the volume. - properties: - Group: - type: "string" - description: | - Group defines the volume group of this volume. Volumes belonging to - the same group can be referred to by group name when creating - Services. Referring to a volume by group instructs Swarm to treat - volumes in that group interchangeably for the purpose of scheduling. - Volumes with an empty string for a group technically all belong to - the same, emptystring group. - AccessMode: - type: "object" - description: | - Defines how the volume is used by tasks. - properties: - Scope: - type: "string" - description: | - The set of nodes this volume can be used on at one time. - - `single` The volume may only be scheduled to one node at a time. - - `multi` the volume may be scheduled to any supported number of nodes at a time. - default: "single" - enum: ["single", "multi"] - x-nullable: false - Sharing: - type: "string" - description: | - The number and way that different tasks can use this volume - at one time. - - `none` The volume may only be used by one task at a time. - - `readonly` The volume may be used by any number of tasks, but they all must mount the volume as readonly - - `onewriter` The volume may be used by any number of tasks, but only one may mount it as read/write. - - `all` The volume may have any number of readers and writers. - default: "none" - enum: ["none", "readonly", "onewriter", "all"] - x-nullable: false - MountVolume: - type: "object" - description: | - Options for using this volume as a Mount-type volume. - - Either MountVolume or BlockVolume, but not both, must be - present. - properties: - FsType: - type: "string" - description: | - Specifies the filesystem type for the mount volume. - Optional. - MountFlags: - type: "array" - description: | - Flags to pass when mounting the volume. Optional. - items: - type: "string" - BlockVolume: - type: "object" - description: | - Options for using this volume as a Block-type volume. - Intentionally empty. - Secrets: - type: "array" - description: | - Swarm Secrets that are passed to the CSI storage plugin when - operating on this volume. - items: - type: "object" - description: | - One cluster volume secret entry. Defines a key-value pair that - is passed to the plugin. - properties: - Key: - type: "string" - description: | - Key is the name of the key of the key-value pair passed to - the plugin. - Secret: - type: "string" - description: | - Secret is the swarm Secret object from which to read data. - This can be a Secret name or ID. The Secret data is - retrieved by swarm and used as the value of the key-value - pair passed to the plugin. - AccessibilityRequirements: - type: "object" - description: | - Requirements for the accessible topology of the volume. These - fields are optional. For an in-depth description of what these - fields mean, see the CSI specification. - properties: - Requisite: - type: "array" - description: | - A list of required topologies, at least one of which the - volume must be accessible from. - items: - $ref: "#/definitions/Topology" - Preferred: - type: "array" - description: | - A list of topologies that the volume should attempt to be - provisioned in. - items: - $ref: "#/definitions/Topology" - CapacityRange: - type: "object" - description: | - The desired capacity that the volume should be created with. If - empty, the plugin will decide the capacity. - properties: - RequiredBytes: - type: "integer" - format: "int64" - description: | - The volume must be at least this big. The value of 0 - indicates an unspecified minimum - LimitBytes: - type: "integer" - format: "int64" - description: | - The volume must not be bigger than this. The value of 0 - indicates an unspecified maximum. - Availability: - type: "string" - description: | - The availability of the volume for use in tasks. - - `active` The volume is fully available for scheduling on the cluster - - `pause` No new workloads should use the volume, but existing workloads are not stopped. - - `drain` All workloads using this volume should be stopped and rescheduled, and no new ones should be started. - default: "active" - x-nullable: false - enum: - - "active" - - "pause" - - "drain" - - Topology: - description: | - A map of topological domains to topological segments. For in depth - details, see documentation for the Topology object in the CSI - specification. - type: "object" - additionalProperties: - type: "string" - - ImageManifestSummary: - x-go-name: "ManifestSummary" - description: | - ImageManifestSummary represents a summary of an image manifest. - type: "object" - required: ["ID", "Descriptor", "Available", "Size", "Kind"] - properties: - ID: - description: | - ID is the content-addressable ID of an image and is the same as the - digest of the image manifest. - type: "string" - example: "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" - Descriptor: - $ref: "#/definitions/OCIDescriptor" - Available: - description: Indicates whether all the child content (image config, layers) is fully available locally. - type: "boolean" - example: true - Size: - type: "object" - x-nullable: false - required: ["Content", "Total"] - properties: - Total: - type: "integer" - format: "int64" - example: 8213251 - description: | - Total is the total size (in bytes) of all the locally present - data (both distributable and non-distributable) that's related to - this manifest and its children. - This equal to the sum of [Content] size AND all the sizes in the - [Size] struct present in the Kind-specific data struct. - For example, for an image kind (Kind == "image") - this would include the size of the image content and unpacked - image snapshots ([Size.Content] + [ImageData.Size.Unpacked]). - Content: - description: | - Content is the size (in bytes) of all the locally present - content in the content store (e.g. image config, layers) - referenced by this manifest and its children. - This only includes blobs in the content store. - type: "integer" - format: "int64" - example: 3987495 - Kind: - type: "string" - example: "image" - enum: - - "image" - - "attestation" - - "unknown" - description: | - The kind of the manifest. - - kind | description - -------------|----------------------------------------------------------- - image | Image manifest that can be used to start a container. - attestation | Attestation manifest produced by the Buildkit builder for a specific image manifest. - ImageData: - description: | - The image data for the image manifest. - This field is only populated when Kind is "image". - type: "object" - x-nullable: true - x-omitempty: true - required: ["Platform", "Containers", "Size", "UnpackedSize"] - properties: - Platform: - $ref: "#/definitions/OCIPlatform" - description: | - OCI platform of the image. This will be the platform specified in the - manifest descriptor from the index/manifest list. - If it's not available, it will be obtained from the image config. - Containers: - description: | - The IDs of the containers that are using this image. - type: "array" - items: - type: "string" - example: ["ede54ee1fda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c7430", "abadbce344c096744d8d6071a90d474d28af8f1034b5ea9fb03c3f4bfc6d005e"] - Size: - type: "object" - x-nullable: false - required: ["Unpacked"] - properties: - Unpacked: - type: "integer" - format: "int64" - example: 3987495 - description: | - Unpacked is the size (in bytes) of the locally unpacked - (uncompressed) image content that's directly usable by the containers - running this image. - It's independent of the distributable content - e.g. - the image might still have an unpacked data that's still used by - some container even when the distributable/compressed content is - already gone. - AttestationData: - description: | - The image data for the attestation manifest. - This field is only populated when Kind is "attestation". - type: "object" - x-nullable: true - x-omitempty: true - required: ["For"] - properties: - For: - description: | - The digest of the image manifest that this attestation is for. - type: "string" - example: "sha256:95869fbcf224d947ace8d61d0e931d49e31bb7fc67fffbbe9c3198c33aa8e93f" - -paths: - /containers/json: - get: - summary: "List containers" - description: | - Returns a list of containers. For details on the format, see the - [inspect endpoint](#operation/ContainerInspect). - - Note that it uses a different, smaller representation of a container - than inspecting a single container. For example, the list of linked - containers is not propagated . - operationId: "ContainerList" - produces: - - "application/json" - parameters: - - name: "all" - in: "query" - description: | - Return all containers. By default, only running containers are shown. - type: "boolean" - default: false - - name: "limit" - in: "query" - description: | - Return this number of most recently created containers, including - non-running ones. - type: "integer" - - name: "size" - in: "query" - description: | - Return the size of container as fields `SizeRw` and `SizeRootFs`. - type: "boolean" - default: false - - name: "filters" - in: "query" - description: | - Filters to process on the container list, encoded as JSON (a - `map[string][]string`). For example, `{"status": ["paused"]}` will - only return paused containers. - - Available filters: - - - `ancestor`=(`[:]`, ``, or ``) - - `before`=(`` or ``) - - `expose`=(`[/]`|`/[]`) - - `exited=` containers with exit code of `` - - `health`=(`starting`|`healthy`|`unhealthy`|`none`) - - `id=` a container's ID - - `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only) - - `is-task=`(`true`|`false`) - - `label=key` or `label="key=value"` of a container label - - `name=` a container's name - - `network`=(`` or ``) - - `publish`=(`[/]`|`/[]`) - - `since`=(`` or ``) - - `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`) - - `volume`=(`` or ``) - type: "string" - responses: - 200: - description: "no error" - schema: - type: "array" - items: - $ref: "#/definitions/ContainerSummary" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - tags: ["Container"] - /containers/create: - post: - summary: "Create a container" - operationId: "ContainerCreate" - consumes: - - "application/json" - - "application/octet-stream" - produces: - - "application/json" - parameters: - - name: "name" - in: "query" - description: | - Assign the specified name to the container. Must match - `/?[a-zA-Z0-9][a-zA-Z0-9_.-]+`. - type: "string" - pattern: "^/?[a-zA-Z0-9][a-zA-Z0-9_.-]+$" - - name: "platform" - in: "query" - description: | - Platform in the format `os[/arch[/variant]]` used for image lookup. - - When specified, the daemon checks if the requested image is present - in the local image cache with the given OS and Architecture, and - otherwise returns a `404` status. - - If the option is not set, the host's native OS and Architecture are - used to look up the image in the image cache. However, if no platform - is passed and the given image does exist in the local image cache, - but its OS or architecture does not match, the container is created - with the available image, and a warning is added to the `Warnings` - field in the response, for example; - - WARNING: The requested image's platform (linux/arm64/v8) does not - match the detected host platform (linux/amd64) and no - specific platform was requested - - type: "string" - default: "" - - name: "body" - in: "body" - description: "Container to create" - schema: - allOf: - - $ref: "#/definitions/ContainerConfig" - - type: "object" - properties: - HostConfig: - $ref: "#/definitions/HostConfig" - NetworkingConfig: - $ref: "#/definitions/NetworkingConfig" - example: - Hostname: "" - Domainname: "" - User: "" - AttachStdin: false - AttachStdout: true - AttachStderr: true - Tty: false - OpenStdin: false - StdinOnce: false - Env: - - "FOO=bar" - - "BAZ=quux" - Cmd: - - "date" - Entrypoint: "" - Image: "ubuntu" - Labels: - com.example.vendor: "Acme" - com.example.license: "GPL" - com.example.version: "1.0" - Volumes: - /volumes/data: {} - WorkingDir: "" - NetworkDisabled: false - MacAddress: "12:34:56:78:9a:bc" - ExposedPorts: - 22/tcp: {} - StopSignal: "SIGTERM" - StopTimeout: 10 - HostConfig: - Binds: - - "/tmp:/tmp" - Links: - - "redis3:redis" - Memory: 0 - MemorySwap: 0 - MemoryReservation: 0 - NanoCpus: 500000 - CpuPercent: 80 - CpuShares: 512 - CpuPeriod: 100000 - CpuRealtimePeriod: 1000000 - CpuRealtimeRuntime: 10000 - CpuQuota: 50000 - CpusetCpus: "0,1" - CpusetMems: "0,1" - MaximumIOps: 0 - MaximumIOBps: 0 - BlkioWeight: 300 - BlkioWeightDevice: - - {} - BlkioDeviceReadBps: - - {} - BlkioDeviceReadIOps: - - {} - BlkioDeviceWriteBps: - - {} - BlkioDeviceWriteIOps: - - {} - DeviceRequests: - - Driver: "nvidia" - Count: -1 - DeviceIDs": ["0", "1", "GPU-fef8089b-4820-abfc-e83e-94318197576e"] - Capabilities: [["gpu", "nvidia", "compute"]] - Options: - property1: "string" - property2: "string" - MemorySwappiness: 60 - OomKillDisable: false - OomScoreAdj: 500 - PidMode: "" - PidsLimit: 0 - PortBindings: - 22/tcp: - - HostPort: "11022" - PublishAllPorts: false - Privileged: false - ReadonlyRootfs: false - Dns: - - "8.8.8.8" - DnsOptions: - - "" - DnsSearch: - - "" - VolumesFrom: - - "parent" - - "other:ro" - CapAdd: - - "NET_ADMIN" - CapDrop: - - "MKNOD" - GroupAdd: - - "newgroup" - RestartPolicy: - Name: "" - MaximumRetryCount: 0 - AutoRemove: true - NetworkMode: "bridge" - Devices: [] - Ulimits: - - {} - LogConfig: - Type: "json-file" - Config: {} - SecurityOpt: [] - StorageOpt: {} - CgroupParent: "" - VolumeDriver: "" - ShmSize: 67108864 - NetworkingConfig: - EndpointsConfig: - isolated_nw: - IPAMConfig: - IPv4Address: "172.20.30.33" - IPv6Address: "2001:db8:abcd::3033" - LinkLocalIPs: - - "169.254.34.68" - - "fe80::3468" - Links: - - "container_1" - - "container_2" - Aliases: - - "server_x" - - "server_y" - database_nw: {} - - required: true - responses: - 201: - description: "Container created successfully" - schema: - $ref: "#/definitions/ContainerCreateResponse" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "no such image" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such image: c2ada9df5af8" - 409: - description: "conflict" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - tags: ["Container"] - /containers/{id}/json: - get: - summary: "Inspect a container" - description: "Return low-level information about a container." - operationId: "ContainerInspect" - produces: - - "application/json" - responses: - 200: - description: "no error" - schema: - $ref: "#/definitions/ContainerInspectResponse" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "size" - in: "query" - type: "boolean" - default: false - description: "Return the size of container as fields `SizeRw` and `SizeRootFs`" - tags: ["Container"] - /containers/{id}/top: - get: - summary: "List processes running inside a container" - description: | - On Unix systems, this is done by running the `ps` command. This endpoint - is not supported on Windows. - operationId: "ContainerTop" - responses: - 200: - description: "no error" - schema: - $ref: "#/definitions/ContainerTopResponse" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "ps_args" - in: "query" - description: "The arguments to pass to `ps`. For example, `aux`" - type: "string" - default: "-ef" - tags: ["Container"] - /containers/{id}/logs: - get: - summary: "Get container logs" - description: | - Get `stdout` and `stderr` logs from a container. - - Note: This endpoint works only for containers with the `json-file` or - `journald` logging driver. - produces: - - "application/vnd.docker.raw-stream" - - "application/vnd.docker.multiplexed-stream" - operationId: "ContainerLogs" - responses: - 200: - description: | - logs returned as a stream in response body. - For the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach). - Note that unlike the attach endpoint, the logs endpoint does not - upgrade the connection and does not set Content-Type. - schema: - type: "string" - format: "binary" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "follow" - in: "query" - description: "Keep connection after returning logs." - type: "boolean" - default: false - - name: "stdout" - in: "query" - description: "Return logs from `stdout`" - type: "boolean" - default: false - - name: "stderr" - in: "query" - description: "Return logs from `stderr`" - type: "boolean" - default: false - - name: "since" - in: "query" - description: "Only return logs since this time, as a UNIX timestamp" - type: "integer" - default: 0 - - name: "until" - in: "query" - description: "Only return logs before this time, as a UNIX timestamp" - type: "integer" - default: 0 - - name: "timestamps" - in: "query" - description: "Add timestamps to every log line" - type: "boolean" - default: false - - name: "tail" - in: "query" - description: | - Only return this number of log lines from the end of the logs. - Specify as an integer or `all` to output all log lines. - type: "string" - default: "all" - tags: ["Container"] - /containers/{id}/changes: - get: - summary: "Get changes on a container’s filesystem" - description: | - Returns which files in a container's filesystem have been added, deleted, - or modified. The `Kind` of modification can be one of: - - - `0`: Modified ("C") - - `1`: Added ("A") - - `2`: Deleted ("D") - operationId: "ContainerChanges" - produces: ["application/json"] - responses: - 200: - description: "The list of changes" - schema: - type: "array" - items: - $ref: "#/definitions/FilesystemChange" - examples: - application/json: - - Path: "/dev" - Kind: 0 - - Path: "/dev/kmsg" - Kind: 1 - - Path: "/test" - Kind: 1 - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - tags: ["Container"] - /containers/{id}/export: - get: - summary: "Export a container" - description: "Export the contents of a container as a tarball." - operationId: "ContainerExport" - produces: - - "application/octet-stream" - responses: - 200: - description: "no error" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - tags: ["Container"] - /containers/{id}/stats: - get: - summary: "Get container stats based on resource usage" - description: | - This endpoint returns a live stream of a container’s resource usage - statistics. - - The `precpu_stats` is the CPU statistic of the *previous* read, and is - used to calculate the CPU usage percentage. It is not an exact copy - of the `cpu_stats` field. - - If either `precpu_stats.online_cpus` or `cpu_stats.online_cpus` is - nil then for compatibility with older daemons the length of the - corresponding `cpu_usage.percpu_usage` array should be used. - - On a cgroup v2 host, the following fields are not set - * `blkio_stats`: all fields other than `io_service_bytes_recursive` - * `cpu_stats`: `cpu_usage.percpu_usage` - * `memory_stats`: `max_usage` and `failcnt` - Also, `memory_stats.stats` fields are incompatible with cgroup v1. - - To calculate the values shown by the `stats` command of the docker cli tool - the following formulas can be used: - * used_memory = `memory_stats.usage - memory_stats.stats.cache` - * available_memory = `memory_stats.limit` - * Memory usage % = `(used_memory / available_memory) * 100.0` - * cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage` - * system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage` - * number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus` - * CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0` - operationId: "ContainerStats" - produces: ["application/json"] - responses: - 200: - description: "no error" - schema: - $ref: "#/definitions/ContainerStatsResponse" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "stream" - in: "query" - description: | - Stream the output. If false, the stats will be output once and then - it will disconnect. - type: "boolean" - default: true - - name: "one-shot" - in: "query" - description: | - Only get a single stat instead of waiting for 2 cycles. Must be used - with `stream=false`. - type: "boolean" - default: false - tags: ["Container"] - /containers/{id}/resize: - post: - summary: "Resize a container TTY" - description: "Resize the TTY for a container." - operationId: "ContainerResize" - consumes: - - "application/octet-stream" - produces: - - "text/plain" - responses: - 200: - description: "no error" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "cannot resize container" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "h" - in: "query" - required: true - description: "Height of the TTY session in characters" - type: "integer" - - name: "w" - in: "query" - required: true - description: "Width of the TTY session in characters" - type: "integer" - tags: ["Container"] - /containers/{id}/start: - post: - summary: "Start a container" - operationId: "ContainerStart" - responses: - 204: - description: "no error" - 304: - description: "container already started" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "detachKeys" - in: "query" - description: | - Override the key sequence for detaching a container. Format is a - single character `[a-Z]` or `ctrl-` where `` is one - of: `a-z`, `@`, `^`, `[`, `,` or `_`. - type: "string" - tags: ["Container"] - /containers/{id}/stop: - post: - summary: "Stop a container" - operationId: "ContainerStop" - responses: - 204: - description: "no error" - 304: - description: "container already stopped" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "signal" - in: "query" - description: | - Signal to send to the container as an integer or string (e.g. `SIGINT`). - type: "string" - - name: "t" - in: "query" - description: "Number of seconds to wait before killing the container" - type: "integer" - tags: ["Container"] - /containers/{id}/restart: - post: - summary: "Restart a container" - operationId: "ContainerRestart" - responses: - 204: - description: "no error" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "signal" - in: "query" - description: | - Signal to send to the container as an integer or string (e.g. `SIGINT`). - type: "string" - - name: "t" - in: "query" - description: "Number of seconds to wait before killing the container" - type: "integer" - tags: ["Container"] - /containers/{id}/kill: - post: - summary: "Kill a container" - description: | - Send a POSIX signal to a container, defaulting to killing to the - container. - operationId: "ContainerKill" - responses: - 204: - description: "no error" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 409: - description: "container is not running" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "signal" - in: "query" - description: | - Signal to send to the container as an integer or string (e.g. `SIGINT`). - type: "string" - default: "SIGKILL" - tags: ["Container"] - /containers/{id}/update: - post: - summary: "Update a container" - description: | - Change various configuration options of a container without having to - recreate it. - operationId: "ContainerUpdate" - consumes: ["application/json"] - produces: ["application/json"] - responses: - 200: - description: "The container has been updated." - schema: - $ref: "#/definitions/ContainerUpdateResponse" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "update" - in: "body" - required: true - schema: - allOf: - - $ref: "#/definitions/Resources" - - type: "object" - properties: - RestartPolicy: - $ref: "#/definitions/RestartPolicy" - example: - BlkioWeight: 300 - CpuShares: 512 - CpuPeriod: 100000 - CpuQuota: 50000 - CpuRealtimePeriod: 1000000 - CpuRealtimeRuntime: 10000 - CpusetCpus: "0,1" - CpusetMems: "0" - Memory: 314572800 - MemorySwap: 514288000 - MemoryReservation: 209715200 - RestartPolicy: - MaximumRetryCount: 4 - Name: "on-failure" - tags: ["Container"] - /containers/{id}/rename: - post: - summary: "Rename a container" - operationId: "ContainerRename" - responses: - 204: - description: "no error" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 409: - description: "name already in use" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "name" - in: "query" - required: true - description: "New name for the container" - type: "string" - tags: ["Container"] - /containers/{id}/pause: - post: - summary: "Pause a container" - description: | - Use the freezer cgroup to suspend all processes in a container. - - Traditionally, when suspending a process the `SIGSTOP` signal is used, - which is observable by the process being suspended. With the freezer - cgroup the process is unaware, and unable to capture, that it is being - suspended, and subsequently resumed. - operationId: "ContainerPause" - responses: - 204: - description: "no error" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - tags: ["Container"] - /containers/{id}/unpause: - post: - summary: "Unpause a container" - description: "Resume a container which has been paused." - operationId: "ContainerUnpause" - responses: - 204: - description: "no error" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - tags: ["Container"] - /containers/{id}/attach: - post: - summary: "Attach to a container" - description: | - Attach to a container to read its output or send it input. You can attach - to the same container multiple times and you can reattach to containers - that have been detached. - - Either the `stream` or `logs` parameter must be `true` for this endpoint - to do anything. - - See the [documentation for the `docker attach` command](https://docs.docker.com/engine/reference/commandline/attach/) - for more details. - - ### Hijacking - - This endpoint hijacks the HTTP connection to transport `stdin`, `stdout`, - and `stderr` on the same socket. - - This is the response from the daemon for an attach request: - - ``` - HTTP/1.1 200 OK - Content-Type: application/vnd.docker.raw-stream - - [STREAM] - ``` - - After the headers and two new lines, the TCP connection can now be used - for raw, bidirectional communication between the client and server. - - To hint potential proxies about connection hijacking, the Docker client - can also optionally send connection upgrade headers. - - For example, the client sends this request to upgrade the connection: - - ``` - POST /containers/16253994b7c4/attach?stream=1&stdout=1 HTTP/1.1 - Upgrade: tcp - Connection: Upgrade - ``` - - The Docker daemon will respond with a `101 UPGRADED` response, and will - similarly follow with the raw stream: - - ``` - HTTP/1.1 101 UPGRADED - Content-Type: application/vnd.docker.raw-stream - Connection: Upgrade - Upgrade: tcp - - [STREAM] - ``` - - ### Stream format - - When the TTY setting is disabled in [`POST /containers/create`](#operation/ContainerCreate), - the HTTP Content-Type header is set to application/vnd.docker.multiplexed-stream - and the stream over the hijacked connected is multiplexed to separate out - `stdout` and `stderr`. The stream consists of a series of frames, each - containing a header and a payload. - - The header contains the information which the stream writes (`stdout` or - `stderr`). It also contains the size of the associated frame encoded in - the last four bytes (`uint32`). - - It is encoded on the first eight bytes like this: - - ```go - header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} - ``` - - `STREAM_TYPE` can be: - - - 0: `stdin` (is written on `stdout`) - - 1: `stdout` - - 2: `stderr` - - `SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of the `uint32` size - encoded as big endian. - - Following the header is the payload, which is the specified number of - bytes of `STREAM_TYPE`. - - The simplest way to implement this protocol is the following: - - 1. Read 8 bytes. - 2. Choose `stdout` or `stderr` depending on the first byte. - 3. Extract the frame size from the last four bytes. - 4. Read the extracted size and output it on the correct output. - 5. Goto 1. - - ### Stream format when using a TTY - - When the TTY setting is enabled in [`POST /containers/create`](#operation/ContainerCreate), - the stream is not multiplexed. The data exchanged over the hijacked - connection is simply the raw data from the process PTY and client's - `stdin`. - - operationId: "ContainerAttach" - produces: - - "application/vnd.docker.raw-stream" - - "application/vnd.docker.multiplexed-stream" - responses: - 101: - description: "no error, hints proxy about hijacking" - 200: - description: "no error, no upgrade header found" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "detachKeys" - in: "query" - description: | - Override the key sequence for detaching a container.Format is a single - character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, - `@`, `^`, `[`, `,` or `_`. - type: "string" - - name: "logs" - in: "query" - description: | - Replay previous logs from the container. - - This is useful for attaching to a container that has started and you - want to output everything since the container started. - - If `stream` is also enabled, once all the previous output has been - returned, it will seamlessly transition into streaming current - output. - type: "boolean" - default: false - - name: "stream" - in: "query" - description: | - Stream attached streams from the time the request was made onwards. - type: "boolean" - default: false - - name: "stdin" - in: "query" - description: "Attach to `stdin`" - type: "boolean" - default: false - - name: "stdout" - in: "query" - description: "Attach to `stdout`" - type: "boolean" - default: false - - name: "stderr" - in: "query" - description: "Attach to `stderr`" - type: "boolean" - default: false - tags: ["Container"] - /containers/{id}/attach/ws: - get: - summary: "Attach to a container via a websocket" - operationId: "ContainerAttachWebsocket" - responses: - 101: - description: "no error, hints proxy about hijacking" - 200: - description: "no error, no upgrade header found" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "detachKeys" - in: "query" - description: | - Override the key sequence for detaching a container.Format is a single - character `[a-Z]` or `ctrl-` where `` is one of: `a-z`, - `@`, `^`, `[`, `,`, or `_`. - type: "string" - - name: "logs" - in: "query" - description: "Return logs" - type: "boolean" - default: false - - name: "stream" - in: "query" - description: "Return stream" - type: "boolean" - default: false - - name: "stdin" - in: "query" - description: "Attach to `stdin`" - type: "boolean" - default: false - - name: "stdout" - in: "query" - description: "Attach to `stdout`" - type: "boolean" - default: false - - name: "stderr" - in: "query" - description: "Attach to `stderr`" - type: "boolean" - default: false - tags: ["Container"] - /containers/{id}/wait: - post: - summary: "Wait for a container" - description: "Block until a container stops, then returns the exit code." - operationId: "ContainerWait" - produces: ["application/json"] - responses: - 200: - description: "The container has exit." - schema: - $ref: "#/definitions/ContainerWaitResponse" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "condition" - in: "query" - description: | - Wait until a container state reaches the given condition. - - Defaults to `not-running` if omitted or empty. - type: "string" - enum: - - "not-running" - - "next-exit" - - "removed" - default: "not-running" - tags: ["Container"] - /containers/{id}: - delete: - summary: "Remove a container" - operationId: "ContainerDelete" - responses: - 204: - description: "no error" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 409: - description: "conflict" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: | - You cannot remove a running container: c2ada9df5af8. Stop the - container before attempting removal or force remove - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "v" - in: "query" - description: "Remove anonymous volumes associated with the container." - type: "boolean" - default: false - - name: "force" - in: "query" - description: "If the container is running, kill it before removing it." - type: "boolean" - default: false - - name: "link" - in: "query" - description: "Remove the specified link associated with the container." - type: "boolean" - default: false - tags: ["Container"] - /containers/{id}/archive: - head: - summary: "Get information about files in a container" - description: | - A response header `X-Docker-Container-Path-Stat` is returned, containing - a base64 - encoded JSON object with some filesystem header information - about the path. - operationId: "ContainerArchiveInfo" - responses: - 200: - description: "no error" - headers: - X-Docker-Container-Path-Stat: - type: "string" - description: | - A base64 - encoded JSON object with some filesystem header - information about the path - 400: - description: "Bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "Container or path does not exist" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "path" - in: "query" - required: true - description: "Resource in the container’s filesystem to archive." - type: "string" - tags: ["Container"] - get: - summary: "Get an archive of a filesystem resource in a container" - description: "Get a tar archive of a resource in the filesystem of container id." - operationId: "ContainerArchive" - produces: ["application/x-tar"] - responses: - 200: - description: "no error" - 400: - description: "Bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "Container or path does not exist" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "path" - in: "query" - required: true - description: "Resource in the container’s filesystem to archive." - type: "string" - tags: ["Container"] - put: - summary: "Extract an archive of files or folders to a directory in a container" - description: | - Upload a tar archive to be extracted to a path in the filesystem of container id. - `path` parameter is asserted to be a directory. If it exists as a file, 400 error - will be returned with message "not a directory". - operationId: "PutContainerArchive" - consumes: ["application/x-tar", "application/octet-stream"] - responses: - 200: - description: "The content was extracted successfully" - 400: - description: "Bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "not a directory" - 403: - description: "Permission denied, the volume or container rootfs is marked as read-only." - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "No such container or path does not exist inside the container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the container" - type: "string" - - name: "path" - in: "query" - required: true - description: "Path to a directory in the container to extract the archive’s contents into. " - type: "string" - - name: "noOverwriteDirNonDir" - in: "query" - description: | - If `1`, `true`, or `True` then it will be an error if unpacking the - given content would cause an existing directory to be replaced with - a non-directory and vice versa. - type: "string" - - name: "copyUIDGID" - in: "query" - description: | - If `1`, `true`, then it will copy UID/GID maps to the dest file or - dir - type: "string" - - name: "inputStream" - in: "body" - required: true - description: | - The input stream must be a tar archive compressed with one of the - following algorithms: `identity` (no compression), `gzip`, `bzip2`, - or `xz`. - schema: - type: "string" - format: "binary" - tags: ["Container"] - /containers/prune: - post: - summary: "Delete stopped containers" - produces: - - "application/json" - operationId: "ContainerPrune" - parameters: - - name: "filters" - in: "query" - description: | - Filters to process on the prune list, encoded as JSON (a `map[string][]string`). - - Available filters: - - `until=` Prune containers created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. - - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune containers with (or without, in case `label!=...` is used) the specified labels. - type: "string" - responses: - 200: - description: "No error" - schema: - type: "object" - title: "ContainerPruneResponse" - properties: - ContainersDeleted: - description: "Container IDs that were deleted" - type: "array" - items: - type: "string" - SpaceReclaimed: - description: "Disk space reclaimed in bytes" - type: "integer" - format: "int64" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - tags: ["Container"] - /images/json: - get: - summary: "List Images" - description: "Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image." - operationId: "ImageList" - produces: - - "application/json" - responses: - 200: - description: "Summary image data for the images matching the query" - schema: - type: "array" - items: - $ref: "#/definitions/ImageSummary" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "all" - in: "query" - description: "Show all images. Only images from a final layer (no children) are shown by default." - type: "boolean" - default: false - - name: "filters" - in: "query" - description: | - A JSON encoded value of the filters (a `map[string][]string`) to - process on the images list. - - Available filters: - - - `before`=(`[:]`, `` or ``) - - `dangling=true` - - `label=key` or `label="key=value"` of an image label - - `reference`=(`[:]`) - - `since`=(`[:]`, `` or ``) - - `until=` - type: "string" - - name: "shared-size" - in: "query" - description: "Compute and show shared size as a `SharedSize` field on each image." - type: "boolean" - default: false - - name: "digests" - in: "query" - description: "Show digest information as a `RepoDigests` field on each image." - type: "boolean" - default: false - - name: "manifests" - in: "query" - description: "Include `Manifests` in the image summary." - type: "boolean" - default: false - tags: ["Image"] - /build: - post: - summary: "Build an image" - description: | - Build an image from a tar archive with a `Dockerfile` in it. - - The `Dockerfile` specifies how the image is built from the tar archive. It is typically in the archive's root, but can be at a different path or have a different name by specifying the `dockerfile` parameter. [See the `Dockerfile` reference for more information](https://docs.docker.com/engine/reference/builder/). - - The Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output. - - The build is canceled if the client drops the connection by quitting or being killed. - operationId: "ImageBuild" - consumes: - - "application/octet-stream" - produces: - - "application/json" - parameters: - - name: "inputStream" - in: "body" - description: "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz." - schema: - type: "string" - format: "binary" - - name: "dockerfile" - in: "query" - description: "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`." - type: "string" - default: "Dockerfile" - - name: "t" - in: "query" - description: "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters." - type: "string" - - name: "extrahosts" - in: "query" - description: "Extra hosts to add to /etc/hosts" - type: "string" - - name: "remote" - in: "query" - description: "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball." - type: "string" - - name: "q" - in: "query" - description: "Suppress verbose build output." - type: "boolean" - default: false - - name: "nocache" - in: "query" - description: "Do not use the cache when building the image." - type: "boolean" - default: false - - name: "cachefrom" - in: "query" - description: "JSON array of images used for build cache resolution." - type: "string" - - name: "pull" - in: "query" - description: "Attempt to pull the image even if an older image exists locally." - type: "string" - - name: "rm" - in: "query" - description: "Remove intermediate containers after a successful build." - type: "boolean" - default: true - - name: "forcerm" - in: "query" - description: "Always remove intermediate containers, even upon failure." - type: "boolean" - default: false - - name: "memory" - in: "query" - description: "Set memory limit for build." - type: "integer" - - name: "memswap" - in: "query" - description: "Total memory (memory + swap). Set as `-1` to disable swap." - type: "integer" - - name: "cpushares" - in: "query" - description: "CPU shares (relative weight)." - type: "integer" - - name: "cpusetcpus" - in: "query" - description: "CPUs in which to allow execution (e.g., `0-3`, `0,1`)." - type: "string" - - name: "cpuperiod" - in: "query" - description: "The length of a CPU period in microseconds." - type: "integer" - - name: "cpuquota" - in: "query" - description: "Microseconds of CPU time that the container can get in a CPU period." - type: "integer" - - name: "buildargs" - in: "query" - description: > - JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker - uses the buildargs as the environment context for commands run via the `Dockerfile` RUN - instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for - passing secret values. - - - For example, the build arg `FOO=bar` would become `{"FOO":"bar"}` in JSON. This would result in the - query parameter `buildargs={"FOO":"bar"}`. Note that `{"FOO":"bar"}` should be URI component encoded. - - - [Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg) - type: "string" - - name: "shmsize" - in: "query" - description: "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB." - type: "integer" - - name: "squash" - in: "query" - description: "Squash the resulting images layers into a single layer. *(Experimental release only.)*" - type: "boolean" - - name: "labels" - in: "query" - description: "Arbitrary key/value labels to set on the image, as a JSON map of string pairs." - type: "string" - - name: "networkmode" - in: "query" - description: | - Sets the networking mode for the run commands during build. Supported - standard values are: `bridge`, `host`, `none`, and `container:`. - Any other value is taken as a custom network's name or ID to which this - container should connect to. - type: "string" - - name: "Content-type" - in: "header" - type: "string" - enum: - - "application/x-tar" - default: "application/x-tar" - - name: "X-Registry-Config" - in: "header" - description: | - This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to. - - The key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example: - - ``` - { - "docker.example.com": { - "username": "janedoe", - "password": "hunter2" - }, - "https://index.docker.io/v1/": { - "username": "mobydock", - "password": "conta1n3rize14" - } - } - ``` - - Only the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API. - type: "string" - - name: "platform" - in: "query" - description: "Platform in the format os[/arch[/variant]]" - type: "string" - default: "" - - name: "target" - in: "query" - description: "Target build stage" - type: "string" - default: "" - - name: "outputs" - in: "query" - description: "BuildKit output configuration" - type: "string" - default: "" - - name: "version" - in: "query" - type: "string" - default: "1" - enum: ["1", "2"] - description: | - Version of the builder backend to use. - - - `1` is the first generation classic (deprecated) builder in the Docker daemon (default) - - `2` is [BuildKit](https://github.com/moby/buildkit) - responses: - 200: - description: "no error" - 400: - description: "Bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - tags: ["Image"] - /build/prune: - post: - summary: "Delete builder cache" - produces: - - "application/json" - operationId: "BuildPrune" - parameters: - - name: "keep-storage" - in: "query" - description: | - Amount of disk space in bytes to keep for cache - - > **Deprecated**: This parameter is deprecated and has been renamed to "reserved-space". - > It is kept for backward compatibility and will be removed in API v1.49. - type: "integer" - format: "int64" - - name: "reserved-space" - in: "query" - description: "Amount of disk space in bytes to keep for cache" - type: "integer" - format: "int64" - - name: "max-used-space" - in: "query" - description: "Maximum amount of disk space allowed to keep for cache" - type: "integer" - format: "int64" - - name: "min-free-space" - in: "query" - description: "Target amount of free disk space after pruning" - type: "integer" - format: "int64" - - name: "all" - in: "query" - type: "boolean" - description: "Remove all types of build cache" - - name: "filters" - in: "query" - type: "string" - description: | - A JSON encoded value of the filters (a `map[string][]string`) to - process on the list of build cache objects. - - Available filters: - - - `until=` remove cache older than ``. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon's local time. - - `id=` - - `parent=` - - `type=` - - `description=` - - `inuse` - - `shared` - - `private` - responses: - 200: - description: "No error" - schema: - type: "object" - title: "BuildPruneResponse" - properties: - CachesDeleted: - type: "array" - items: - description: "ID of build cache object" - type: "string" - SpaceReclaimed: - description: "Disk space reclaimed in bytes" - type: "integer" - format: "int64" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - tags: ["Image"] - /images/create: - post: - summary: "Create an image" - description: "Pull or import an image." - operationId: "ImageCreate" - consumes: - - "text/plain" - - "application/octet-stream" - produces: - - "application/json" - responses: - 200: - description: "no error" - 404: - description: "repository does not exist or no read access" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "fromImage" - in: "query" - description: | - Name of the image to pull. If the name includes a tag or digest, specific behavior applies: - - - If only `fromImage` includes a tag, that tag is used. - - If both `fromImage` and `tag` are provided, `tag` takes precedence. - - If `fromImage` includes a digest, the image is pulled by digest, and `tag` is ignored. - - If neither a tag nor digest is specified, all tags are pulled. - type: "string" - - name: "fromSrc" - in: "query" - description: "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image." - type: "string" - - name: "repo" - in: "query" - description: "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image." - type: "string" - - name: "tag" - in: "query" - description: "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled." - type: "string" - - name: "message" - in: "query" - description: "Set commit message for imported image." - type: "string" - - name: "inputImage" - in: "body" - description: "Image content if the value `-` has been specified in fromSrc query parameter" - schema: - type: "string" - required: false - - name: "X-Registry-Auth" - in: "header" - description: | - A base64url-encoded auth configuration. - - Refer to the [authentication section](#section/Authentication) for - details. - type: "string" - - name: "changes" - in: "query" - description: | - Apply `Dockerfile` instructions to the image that is created, - for example: `changes=ENV DEBUG=true`. - Note that `ENV DEBUG=true` should be URI component encoded. - - Supported `Dockerfile` instructions: - `CMD`|`ENTRYPOINT`|`ENV`|`EXPOSE`|`ONBUILD`|`USER`|`VOLUME`|`WORKDIR` - type: "array" - items: - type: "string" - - name: "platform" - in: "query" - description: | - Platform in the format os[/arch[/variant]]. - - When used in combination with the `fromImage` option, the daemon checks - if the given image is present in the local image cache with the given - OS and Architecture, and otherwise attempts to pull the image. If the - option is not set, the host's native OS and Architecture are used. - If the given image does not exist in the local image cache, the daemon - attempts to pull the image with the host's native OS and Architecture. - If the given image does exists in the local image cache, but its OS or - architecture does not match, a warning is produced. - - When used with the `fromSrc` option to import an image from an archive, - this option sets the platform information for the imported image. If - the option is not set, the host's native OS and Architecture are used - for the imported image. - type: "string" - default: "" - tags: ["Image"] - /images/{name}/json: - get: - summary: "Inspect an image" - description: "Return low-level information about an image." - operationId: "ImageInspect" - produces: - - "application/json" - responses: - 200: - description: "No error" - schema: - $ref: "#/definitions/ImageInspect" - 404: - description: "No such image" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such image: someimage (tag: latest)" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "name" - in: "path" - description: "Image name or id" - type: "string" - required: true - - name: "manifests" - in: "query" - description: "Include Manifests in the image summary." - type: "boolean" - default: false - required: false - tags: ["Image"] - /images/{name}/history: - get: - summary: "Get the history of an image" - description: "Return parent layers of an image." - operationId: "ImageHistory" - produces: ["application/json"] - responses: - 200: - description: "List of image layers" - schema: - type: "array" - items: - type: "object" - x-go-name: HistoryResponseItem - title: "HistoryResponseItem" - description: "individual image layer information in response to ImageHistory operation" - required: [Id, Created, CreatedBy, Tags, Size, Comment] - properties: - Id: - type: "string" - x-nullable: false - Created: - type: "integer" - format: "int64" - x-nullable: false - CreatedBy: - type: "string" - x-nullable: false - Tags: - type: "array" - items: - type: "string" - Size: - type: "integer" - format: "int64" - x-nullable: false - Comment: - type: "string" - x-nullable: false - examples: - application/json: - - Id: "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710" - Created: 1398108230 - CreatedBy: "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /" - Tags: - - "ubuntu:lucid" - - "ubuntu:10.04" - Size: 182964289 - Comment: "" - - Id: "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8" - Created: 1398108222 - CreatedBy: "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/" - Tags: [] - Size: 0 - Comment: "" - - Id: "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158" - Created: 1371157430 - CreatedBy: "" - Tags: - - "scratch12:latest" - - "scratch:latest" - Size: 0 - Comment: "Imported from -" - 404: - description: "No such image" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "name" - in: "path" - description: "Image name or ID" - type: "string" - required: true - - name: "platform" - type: "string" - in: "query" - description: | - JSON-encoded OCI platform to select the platform-variant. - If omitted, it defaults to any locally available platform, - prioritizing the daemon's host platform. - - If the daemon provides a multi-platform image store, this selects - the platform-variant to show the history for. If the image is - a single-platform image, or if the multi-platform image does not - provide a variant matching the given platform, an error is returned. - - Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` - tags: ["Image"] - /images/{name}/push: - post: - summary: "Push an image" - description: | - Push an image to a registry. - - If you wish to push an image on to a private registry, that image must - already have a tag which references the registry. For example, - `registry.example.com/myimage:latest`. - - The push is cancelled if the HTTP connection is closed. - operationId: "ImagePush" - consumes: - - "application/octet-stream" - responses: - 200: - description: "No error" - 404: - description: "No such image" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "name" - in: "path" - description: | - Name of the image to push. For example, `registry.example.com/myimage`. - The image must be present in the local image store with the same name. - - The name should be provided without tag; if a tag is provided, it - is ignored. For example, `registry.example.com/myimage:latest` is - considered equivalent to `registry.example.com/myimage`. - - Use the `tag` parameter to specify the tag to push. - type: "string" - required: true - - name: "tag" - in: "query" - description: | - Tag of the image to push. For example, `latest`. If no tag is provided, - all tags of the given image that are present in the local image store - are pushed. - type: "string" - - name: "platform" - type: "string" - in: "query" - description: | - JSON-encoded OCI platform to select the platform-variant to push. - If not provided, all available variants will attempt to be pushed. - - If the daemon provides a multi-platform image store, this selects - the platform-variant to push to the registry. If the image is - a single-platform image, or if the multi-platform image does not - provide a variant matching the given platform, an error is returned. - - Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` - - name: "X-Registry-Auth" - in: "header" - description: | - A base64url-encoded auth configuration. - - Refer to the [authentication section](#section/Authentication) for - details. - type: "string" - required: true - tags: ["Image"] - /images/{name}/tag: - post: - summary: "Tag an image" - description: "Tag an image so that it becomes part of a repository." - operationId: "ImageTag" - responses: - 201: - description: "No error" - 400: - description: "Bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "No such image" - schema: - $ref: "#/definitions/ErrorResponse" - 409: - description: "Conflict" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "name" - in: "path" - description: "Image name or ID to tag." - type: "string" - required: true - - name: "repo" - in: "query" - description: "The repository to tag in. For example, `someuser/someimage`." - type: "string" - - name: "tag" - in: "query" - description: "The name of the new tag." - type: "string" - tags: ["Image"] - /images/{name}: - delete: - summary: "Remove an image" - description: | - Remove an image, along with any untagged parent images that were - referenced by that image. - - Images can't be removed if they have descendant images, are being - used by a running container or are being used by a build. - operationId: "ImageDelete" - produces: ["application/json"] - responses: - 200: - description: "The image was deleted successfully" - schema: - type: "array" - items: - $ref: "#/definitions/ImageDeleteResponseItem" - examples: - application/json: - - Untagged: "3e2f21a89f" - - Deleted: "3e2f21a89f" - - Deleted: "53b4f83ac9" - 404: - description: "No such image" - schema: - $ref: "#/definitions/ErrorResponse" - 409: - description: "Conflict" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "name" - in: "path" - description: "Image name or ID" - type: "string" - required: true - - name: "force" - in: "query" - description: "Remove the image even if it is being used by stopped containers or has other tags" - type: "boolean" - default: false - - name: "noprune" - in: "query" - description: "Do not delete untagged parent images" - type: "boolean" - default: false - - name: "platforms" - in: "query" - description: | - Select platform-specific content to delete. - Multiple values are accepted. - Each platform is a OCI platform encoded as a JSON string. - type: "array" - items: - # This should be OCIPlatform - # but $ref is not supported for array in query in Swagger 2.0 - # $ref: "#/definitions/OCIPlatform" - type: "string" - tags: ["Image"] - /images/search: - get: - summary: "Search images" - description: "Search for an image on Docker Hub." - operationId: "ImageSearch" - produces: - - "application/json" - responses: - 200: - description: "No error" - schema: - type: "array" - items: - type: "object" - title: "ImageSearchResponseItem" - properties: - description: - type: "string" - is_official: - type: "boolean" - is_automated: - description: | - Whether this repository has automated builds enabled. - -


    - - > **Deprecated**: This field is deprecated and will always be "false". - type: "boolean" - example: false - name: - type: "string" - star_count: - type: "integer" - examples: - application/json: - - description: "A minimal Docker image based on Alpine Linux with a complete package index and only 5 MB in size!" - is_official: true - is_automated: false - name: "alpine" - star_count: 10093 - - description: "Busybox base image." - is_official: true - is_automated: false - name: "Busybox base image." - star_count: 3037 - - description: "The PostgreSQL object-relational database system provides reliability and data integrity." - is_official: true - is_automated: false - name: "postgres" - star_count: 12408 - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "term" - in: "query" - description: "Term to search" - type: "string" - required: true - - name: "limit" - in: "query" - description: "Maximum number of results to return" - type: "integer" - - name: "filters" - in: "query" - description: | - A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters: - - - `is-official=(true|false)` - - `stars=` Matches images that has at least 'number' stars. - type: "string" - tags: ["Image"] - /images/prune: - post: - summary: "Delete unused images" - produces: - - "application/json" - operationId: "ImagePrune" - parameters: - - name: "filters" - in: "query" - description: | - Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters: - - - `dangling=` When set to `true` (or `1`), prune only - unused *and* untagged images. When set to `false` - (or `0`), all unused images are pruned. - - `until=` Prune images created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. - - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune images with (or without, in case `label!=...` is used) the specified labels. - type: "string" - responses: - 200: - description: "No error" - schema: - type: "object" - title: "ImagePruneResponse" - properties: - ImagesDeleted: - description: "Images that were deleted" - type: "array" - items: - $ref: "#/definitions/ImageDeleteResponseItem" - SpaceReclaimed: - description: "Disk space reclaimed in bytes" - type: "integer" - format: "int64" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - tags: ["Image"] - /auth: - post: - summary: "Check auth configuration" - description: | - Validate credentials for a registry and, if available, get an identity - token for accessing the registry without password. - operationId: "SystemAuth" - consumes: ["application/json"] - produces: ["application/json"] - responses: - 200: - description: "An identity token was generated successfully." - schema: - type: "object" - title: "SystemAuthResponse" - required: [Status] - properties: - Status: - description: "The status of the authentication" - type: "string" - x-nullable: false - IdentityToken: - description: "An opaque token used to authenticate a user after a successful login" - type: "string" - x-nullable: false - examples: - application/json: - Status: "Login Succeeded" - IdentityToken: "9cbaf023786cd7..." - 204: - description: "No error" - 401: - description: "Auth error" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "authConfig" - in: "body" - description: "Authentication to check" - schema: - $ref: "#/definitions/AuthConfig" - tags: ["System"] - /info: - get: - summary: "Get system information" - operationId: "SystemInfo" - produces: - - "application/json" - responses: - 200: - description: "No error" - schema: - $ref: "#/definitions/SystemInfo" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - tags: ["System"] - /version: - get: - summary: "Get version" - description: "Returns the version of Docker that is running and various information about the system that Docker is running on." - operationId: "SystemVersion" - produces: ["application/json"] - responses: - 200: - description: "no error" - schema: - $ref: "#/definitions/SystemVersion" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - tags: ["System"] - /_ping: - get: - summary: "Ping" - description: "This is a dummy endpoint you can use to test if the server is accessible." - operationId: "SystemPing" - produces: ["text/plain"] - responses: - 200: - description: "no error" - schema: - type: "string" - example: "OK" - headers: - Api-Version: - type: "string" - description: "Max API Version the server supports" - Builder-Version: - type: "string" - description: | - Default version of docker image builder - - The default on Linux is version "2" (BuildKit), but the daemon - can be configured to recommend version "1" (classic Builder). - Windows does not yet support BuildKit for native Windows images, - and uses "1" (classic builder) as a default. - - This value is a recommendation as advertised by the daemon, and - it is up to the client to choose which builder to use. - default: "2" - Docker-Experimental: - type: "boolean" - description: "If the server is running with experimental mode enabled" - Swarm: - type: "string" - enum: ["inactive", "pending", "error", "locked", "active/worker", "active/manager"] - description: | - Contains information about Swarm status of the daemon, - and if the daemon is acting as a manager or worker node. - default: "inactive" - Cache-Control: - type: "string" - default: "no-cache, no-store, must-revalidate" - Pragma: - type: "string" - default: "no-cache" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - headers: - Cache-Control: - type: "string" - default: "no-cache, no-store, must-revalidate" - Pragma: - type: "string" - default: "no-cache" - tags: ["System"] - head: - summary: "Ping" - description: "This is a dummy endpoint you can use to test if the server is accessible." - operationId: "SystemPingHead" - produces: ["text/plain"] - responses: - 200: - description: "no error" - schema: - type: "string" - example: "(empty)" - headers: - Api-Version: - type: "string" - description: "Max API Version the server supports" - Builder-Version: - type: "string" - description: "Default version of docker image builder" - Docker-Experimental: - type: "boolean" - description: "If the server is running with experimental mode enabled" - Swarm: - type: "string" - enum: ["inactive", "pending", "error", "locked", "active/worker", "active/manager"] - description: | - Contains information about Swarm status of the daemon, - and if the daemon is acting as a manager or worker node. - default: "inactive" - Cache-Control: - type: "string" - default: "no-cache, no-store, must-revalidate" - Pragma: - type: "string" - default: "no-cache" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - tags: ["System"] - /commit: - post: - summary: "Create a new image from a container" - operationId: "ImageCommit" - consumes: - - "application/json" - produces: - - "application/json" - responses: - 201: - description: "no error" - schema: - $ref: "#/definitions/IDResponse" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "containerConfig" - in: "body" - description: "The container configuration" - schema: - $ref: "#/definitions/ContainerConfig" - - name: "container" - in: "query" - description: "The ID or name of the container to commit" - type: "string" - - name: "repo" - in: "query" - description: "Repository name for the created image" - type: "string" - - name: "tag" - in: "query" - description: "Tag name for the create image" - type: "string" - - name: "comment" - in: "query" - description: "Commit message" - type: "string" - - name: "author" - in: "query" - description: "Author of the image (e.g., `John Hannibal Smith `)" - type: "string" - - name: "pause" - in: "query" - description: "Whether to pause the container before committing" - type: "boolean" - default: true - - name: "changes" - in: "query" - description: "`Dockerfile` instructions to apply while committing" - type: "string" - tags: ["Image"] - /events: - get: - summary: "Monitor events" - description: | - Stream real-time events from the server. - - Various objects within Docker report events when something happens to them. - - Containers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, `update`, and `prune` - - Images report these events: `create`, `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, `untag`, and `prune` - - Volumes report these events: `create`, `mount`, `unmount`, `destroy`, and `prune` - - Networks report these events: `create`, `connect`, `disconnect`, `destroy`, `update`, `remove`, and `prune` - - The Docker daemon reports these events: `reload` - - Services report these events: `create`, `update`, and `remove` - - Nodes report these events: `create`, `update`, and `remove` - - Secrets report these events: `create`, `update`, and `remove` - - Configs report these events: `create`, `update`, and `remove` - - The Builder reports `prune` events - - operationId: "SystemEvents" - produces: - - "application/json" - responses: - 200: - description: "no error" - schema: - $ref: "#/definitions/EventMessage" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "since" - in: "query" - description: "Show events created since this timestamp then stream new events." - type: "string" - - name: "until" - in: "query" - description: "Show events created until this timestamp then stop streaming." - type: "string" - - name: "filters" - in: "query" - description: | - A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters: - - - `config=` config name or ID - - `container=` container name or ID - - `daemon=` daemon name or ID - - `event=` event type - - `image=` image name or ID - - `label=` image or container label - - `network=` network name or ID - - `node=` node ID - - `plugin`= plugin name or ID - - `scope`= local or swarm - - `secret=` secret name or ID - - `service=` service name or ID - - `type=` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config` - - `volume=` volume name - type: "string" - tags: ["System"] - /system/df: - get: - summary: "Get data usage information" - operationId: "SystemDataUsage" - responses: - 200: - description: "no error" - schema: - type: "object" - title: "SystemDataUsageResponse" - properties: - LayersSize: - type: "integer" - format: "int64" - Images: - type: "array" - items: - $ref: "#/definitions/ImageSummary" - Containers: - type: "array" - items: - $ref: "#/definitions/ContainerSummary" - Volumes: - type: "array" - items: - $ref: "#/definitions/Volume" - BuildCache: - type: "array" - items: - $ref: "#/definitions/BuildCache" - example: - LayersSize: 1092588 - Images: - - - Id: "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749" - ParentId: "" - RepoTags: - - "busybox:latest" - RepoDigests: - - "busybox@sha256:a59906e33509d14c036c8678d687bd4eec81ed7c4b8ce907b888c607f6a1e0e6" - Created: 1466724217 - Size: 1092588 - SharedSize: 0 - Labels: {} - Containers: 1 - Containers: - - - Id: "e575172ed11dc01bfce087fb27bee502db149e1a0fad7c296ad300bbff178148" - Names: - - "/top" - Image: "busybox" - ImageID: "sha256:2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749" - Command: "top" - Created: 1472592424 - Ports: [] - SizeRootFs: 1092588 - Labels: {} - State: "exited" - Status: "Exited (0) 56 minutes ago" - HostConfig: - NetworkMode: "default" - NetworkSettings: - Networks: - bridge: - IPAMConfig: null - Links: null - Aliases: null - NetworkID: "d687bc59335f0e5c9ee8193e5612e8aee000c8c62ea170cfb99c098f95899d92" - EndpointID: "8ed5115aeaad9abb174f68dcf135b49f11daf597678315231a32ca28441dec6a" - Gateway: "172.18.0.1" - IPAddress: "172.18.0.2" - IPPrefixLen: 16 - IPv6Gateway: "" - GlobalIPv6Address: "" - GlobalIPv6PrefixLen: 0 - MacAddress: "02:42:ac:12:00:02" - Mounts: [] - Volumes: - - - Name: "my-volume" - Driver: "local" - Mountpoint: "/var/lib/docker/volumes/my-volume/_data" - Labels: null - Scope: "local" - Options: null - UsageData: - Size: 10920104 - RefCount: 2 - BuildCache: - - - ID: "hw53o5aio51xtltp5xjp8v7fx" - Parents: [] - Type: "regular" - Description: "pulled from docker.io/library/debian@sha256:234cb88d3020898631af0ccbbcca9a66ae7306ecd30c9720690858c1b007d2a0" - InUse: false - Shared: true - Size: 0 - CreatedAt: "2021-06-28T13:31:01.474619385Z" - LastUsedAt: "2021-07-07T22:02:32.738075951Z" - UsageCount: 26 - - - ID: "ndlpt0hhvkqcdfkputsk4cq9c" - Parents: ["ndlpt0hhvkqcdfkputsk4cq9c"] - Type: "regular" - Description: "mount / from exec /bin/sh -c echo 'Binary::apt::APT::Keep-Downloaded-Packages \"true\";' > /etc/apt/apt.conf.d/keep-cache" - InUse: false - Shared: true - Size: 51 - CreatedAt: "2021-06-28T13:31:03.002625487Z" - LastUsedAt: "2021-07-07T22:02:32.773909517Z" - UsageCount: 26 - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "type" - in: "query" - description: | - Object types, for which to compute and return data. - type: "array" - collectionFormat: multi - items: - type: "string" - enum: ["container", "image", "volume", "build-cache"] - tags: ["System"] - /images/{name}/get: - get: - summary: "Export an image" - description: | - Get a tarball containing all images and metadata for a repository. - - If `name` is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned. If `name` is an image ID, similarly only that image (and its parents) are returned, but with the exclusion of the `repositories` file in the tarball, as there were no image names referenced. - - ### Image tarball format - - An image tarball contains [Content as defined in the OCI Image Layout Specification](https://github.com/opencontainers/image-spec/blob/v1.1.1/image-layout.md#content). - - Additionally, includes the manifest.json file associated with a backwards compatible docker save format. - - If the tarball defines a repository, the tarball should also include a `repositories` file at the root that contains a list of repository and tag names mapped to layer IDs. - - ```json - { - "hello-world": { - "latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1" - } - } - ``` - operationId: "ImageGet" - produces: - - "application/x-tar" - responses: - 200: - description: "no error" - schema: - type: "string" - format: "binary" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "name" - in: "path" - description: "Image name or ID" - type: "string" - required: true - - name: "platform" - type: "string" - in: "query" - description: | - JSON encoded OCI platform describing a platform which will be used - to select a platform-specific image to be saved if the image is - multi-platform. - If not provided, the full multi-platform image will be saved. - - Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` - tags: ["Image"] - /images/get: - get: - summary: "Export several images" - description: | - Get a tarball containing all images and metadata for several image - repositories. - - For each value of the `names` parameter: if it is a specific name and - tag (e.g. `ubuntu:latest`), then only that image (and its parents) are - returned; if it is an image ID, similarly only that image (and its parents) - are returned and there would be no names referenced in the 'repositories' - file for this image ID. - - For details on the format, see the [export image endpoint](#operation/ImageGet). - operationId: "ImageGetAll" - produces: - - "application/x-tar" - responses: - 200: - description: "no error" - schema: - type: "string" - format: "binary" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "names" - in: "query" - description: "Image names to filter by" - type: "array" - items: - type: "string" - - name: "platform" - type: "string" - in: "query" - description: | - JSON encoded OCI platform describing a platform which will be used - to select a platform-specific image to be saved if the image is - multi-platform. - If not provided, the full multi-platform image will be saved. - - Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` - tags: ["Image"] - /images/load: - post: - summary: "Import images" - description: | - Load a set of images and tags into a repository. - - For details on the format, see the [export image endpoint](#operation/ImageGet). - operationId: "ImageLoad" - consumes: - - "application/x-tar" - produces: - - "application/json" - responses: - 200: - description: "no error" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "imagesTarball" - in: "body" - description: "Tar archive containing images" - schema: - type: "string" - format: "binary" - - name: "quiet" - in: "query" - description: "Suppress progress details during load." - type: "boolean" - default: false - - name: "platform" - type: "string" - in: "query" - description: | - JSON encoded OCI platform describing a platform which will be used - to select a platform-specific image to be load if the image is - multi-platform. - If not provided, the full multi-platform image will be loaded. - - Example: `{"os": "linux", "architecture": "arm", "variant": "v5"}` - tags: ["Image"] - /containers/{id}/exec: - post: - summary: "Create an exec instance" - description: "Run a command inside a running container." - operationId: "ContainerExec" - consumes: - - "application/json" - produces: - - "application/json" - responses: - 201: - description: "no error" - schema: - $ref: "#/definitions/IDResponse" - 404: - description: "no such container" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such container: c2ada9df5af8" - 409: - description: "container is paused" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "execConfig" - in: "body" - description: "Exec configuration" - schema: - type: "object" - title: "ExecConfig" - properties: - AttachStdin: - type: "boolean" - description: "Attach to `stdin` of the exec command." - AttachStdout: - type: "boolean" - description: "Attach to `stdout` of the exec command." - AttachStderr: - type: "boolean" - description: "Attach to `stderr` of the exec command." - ConsoleSize: - type: "array" - description: "Initial console size, as an `[height, width]` array." - x-nullable: true - minItems: 2 - maxItems: 2 - items: - type: "integer" - minimum: 0 - example: [80, 64] - DetachKeys: - type: "string" - description: | - Override the key sequence for detaching a container. Format is - a single character `[a-Z]` or `ctrl-` where `` - is one of: `a-z`, `@`, `^`, `[`, `,` or `_`. - Tty: - type: "boolean" - description: "Allocate a pseudo-TTY." - Env: - description: | - A list of environment variables in the form `["VAR=value", ...]`. - type: "array" - items: - type: "string" - Cmd: - type: "array" - description: "Command to run, as a string or array of strings." - items: - type: "string" - Privileged: - type: "boolean" - description: "Runs the exec process with extended privileges." - default: false - User: - type: "string" - description: | - The user, and optionally, group to run the exec process inside - the container. Format is one of: `user`, `user:group`, `uid`, - or `uid:gid`. - WorkingDir: - type: "string" - description: | - The working directory for the exec process inside the container. - example: - AttachStdin: false - AttachStdout: true - AttachStderr: true - DetachKeys: "ctrl-p,ctrl-q" - Tty: false - Cmd: - - "date" - Env: - - "FOO=bar" - - "BAZ=quux" - required: true - - name: "id" - in: "path" - description: "ID or name of container" - type: "string" - required: true - tags: ["Exec"] - /exec/{id}/start: - post: - summary: "Start an exec instance" - description: | - Starts a previously set up exec instance. If detach is true, this endpoint - returns immediately after starting the command. Otherwise, it sets up an - interactive session with the command. - operationId: "ExecStart" - consumes: - - "application/json" - produces: - - "application/vnd.docker.raw-stream" - - "application/vnd.docker.multiplexed-stream" - responses: - 200: - description: "No error" - 404: - description: "No such exec instance" - schema: - $ref: "#/definitions/ErrorResponse" - 409: - description: "Container is stopped or paused" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "execStartConfig" - in: "body" - schema: - type: "object" - title: "ExecStartConfig" - properties: - Detach: - type: "boolean" - description: "Detach from the command." - example: false - Tty: - type: "boolean" - description: "Allocate a pseudo-TTY." - example: true - ConsoleSize: - type: "array" - description: "Initial console size, as an `[height, width]` array." - x-nullable: true - minItems: 2 - maxItems: 2 - items: - type: "integer" - minimum: 0 - example: [80, 64] - - name: "id" - in: "path" - description: "Exec instance ID" - required: true - type: "string" - tags: ["Exec"] - /exec/{id}/resize: - post: - summary: "Resize an exec instance" - description: | - Resize the TTY session used by an exec instance. This endpoint only works - if `tty` was specified as part of creating and starting the exec instance. - operationId: "ExecResize" - responses: - 200: - description: "No error" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "No such exec instance" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - description: "Exec instance ID" - required: true - type: "string" - - name: "h" - in: "query" - required: true - description: "Height of the TTY session in characters" - type: "integer" - - name: "w" - in: "query" - required: true - description: "Width of the TTY session in characters" - type: "integer" - tags: ["Exec"] - /exec/{id}/json: - get: - summary: "Inspect an exec instance" - description: "Return low-level information about an exec instance." - operationId: "ExecInspect" - produces: - - "application/json" - responses: - 200: - description: "No error" - schema: - type: "object" - title: "ExecInspectResponse" - properties: - CanRemove: - type: "boolean" - DetachKeys: - type: "string" - ID: - type: "string" - Running: - type: "boolean" - ExitCode: - type: "integer" - ProcessConfig: - $ref: "#/definitions/ProcessConfig" - OpenStdin: - type: "boolean" - OpenStderr: - type: "boolean" - OpenStdout: - type: "boolean" - ContainerID: - type: "string" - Pid: - type: "integer" - description: "The system process ID for the exec process." - examples: - application/json: - CanRemove: false - ContainerID: "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126" - DetachKeys: "" - ExitCode: 2 - ID: "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b" - OpenStderr: true - OpenStdin: true - OpenStdout: true - ProcessConfig: - arguments: - - "-c" - - "exit 2" - entrypoint: "sh" - privileged: false - tty: true - user: "1000" - Running: false - Pid: 42000 - 404: - description: "No such exec instance" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - description: "Exec instance ID" - required: true - type: "string" - tags: ["Exec"] - - /volumes: - get: - summary: "List volumes" - operationId: "VolumeList" - produces: ["application/json"] - responses: - 200: - description: "Summary volume data that matches the query" - schema: - $ref: "#/definitions/VolumeListResponse" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "filters" - in: "query" - description: | - JSON encoded value of the filters (a `map[string][]string`) to - process on the volumes list. Available filters: - - - `dangling=` When set to `true` (or `1`), returns all - volumes that are not in use by a container. When set to `false` - (or `0`), only volumes that are in use by one or more - containers are returned. - - `driver=` Matches volumes based on their driver. - - `label=` or `label=:` Matches volumes based on - the presence of a `label` alone or a `label` and a value. - - `name=` Matches all or part of a volume name. - type: "string" - format: "json" - tags: ["Volume"] - - /volumes/create: - post: - summary: "Create a volume" - operationId: "VolumeCreate" - consumes: ["application/json"] - produces: ["application/json"] - responses: - 201: - description: "The volume was created successfully" - schema: - $ref: "#/definitions/Volume" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "volumeConfig" - in: "body" - required: true - description: "Volume configuration" - schema: - $ref: "#/definitions/VolumeCreateOptions" - tags: ["Volume"] - - /volumes/{name}: - get: - summary: "Inspect a volume" - operationId: "VolumeInspect" - produces: ["application/json"] - responses: - 200: - description: "No error" - schema: - $ref: "#/definitions/Volume" - 404: - description: "No such volume" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "name" - in: "path" - required: true - description: "Volume name or ID" - type: "string" - tags: ["Volume"] - - put: - summary: | - "Update a volume. Valid only for Swarm cluster volumes" - operationId: "VolumeUpdate" - consumes: ["application/json"] - produces: ["application/json"] - responses: - 200: - description: "no error" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "no such volume" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "name" - in: "path" - description: "The name or ID of the volume" - type: "string" - required: true - - name: "body" - in: "body" - schema: - # though the schema for is an object that contains only a - # ClusterVolumeSpec, wrapping the ClusterVolumeSpec in this object - # means that if, later on, we support things like changing the - # labels, we can do so without duplicating that information to the - # ClusterVolumeSpec. - type: "object" - description: "Volume configuration" - properties: - Spec: - $ref: "#/definitions/ClusterVolumeSpec" - description: | - The spec of the volume to update. Currently, only Availability may - change. All other fields must remain unchanged. - - name: "version" - in: "query" - description: | - The version number of the volume being updated. This is required to - avoid conflicting writes. Found in the volume's `ClusterVolume` - field. - type: "integer" - format: "int64" - required: true - tags: ["Volume"] - - delete: - summary: "Remove a volume" - description: "Instruct the driver to remove the volume." - operationId: "VolumeDelete" - responses: - 204: - description: "The volume was removed" - 404: - description: "No such volume or volume driver" - schema: - $ref: "#/definitions/ErrorResponse" - 409: - description: "Volume is in use and cannot be removed" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "name" - in: "path" - required: true - description: "Volume name or ID" - type: "string" - - name: "force" - in: "query" - description: "Force the removal of the volume" - type: "boolean" - default: false - tags: ["Volume"] - - /volumes/prune: - post: - summary: "Delete unused volumes" - produces: - - "application/json" - operationId: "VolumePrune" - parameters: - - name: "filters" - in: "query" - description: | - Filters to process on the prune list, encoded as JSON (a `map[string][]string`). - - Available filters: - - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune volumes with (or without, in case `label!=...` is used) the specified labels. - - `all` (`all=true`) - Consider all (local) volumes for pruning and not just anonymous volumes. - type: "string" - responses: - 200: - description: "No error" - schema: - type: "object" - title: "VolumePruneResponse" - properties: - VolumesDeleted: - description: "Volumes that were deleted" - type: "array" - items: - type: "string" - SpaceReclaimed: - description: "Disk space reclaimed in bytes" - type: "integer" - format: "int64" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - tags: ["Volume"] - /networks: - get: - summary: "List networks" - description: | - Returns a list of networks. For details on the format, see the - [network inspect endpoint](#operation/NetworkInspect). - - Note that it uses a different, smaller representation of a network than - inspecting a single network. For example, the list of containers attached - to the network is not propagated in API versions 1.28 and up. - operationId: "NetworkList" - produces: - - "application/json" - responses: - 200: - description: "No error" - schema: - type: "array" - items: - $ref: "#/definitions/Network" - examples: - application/json: - - Name: "bridge" - Id: "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566" - Created: "2016-10-19T06:21:00.416543526Z" - Scope: "local" - Driver: "bridge" - EnableIPv4: true - EnableIPv6: false - Internal: false - Attachable: false - Ingress: false - IPAM: - Driver: "default" - Config: - - - Subnet: "172.17.0.0/16" - Options: - com.docker.network.bridge.default_bridge: "true" - com.docker.network.bridge.enable_icc: "true" - com.docker.network.bridge.enable_ip_masquerade: "true" - com.docker.network.bridge.host_binding_ipv4: "0.0.0.0" - com.docker.network.bridge.name: "docker0" - com.docker.network.driver.mtu: "1500" - - Name: "none" - Id: "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794" - Created: "0001-01-01T00:00:00Z" - Scope: "local" - Driver: "null" - EnableIPv4: false - EnableIPv6: false - Internal: false - Attachable: false - Ingress: false - IPAM: - Driver: "default" - Config: [] - Containers: {} - Options: {} - - Name: "host" - Id: "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e" - Created: "0001-01-01T00:00:00Z" - Scope: "local" - Driver: "host" - EnableIPv4: false - EnableIPv6: false - Internal: false - Attachable: false - Ingress: false - IPAM: - Driver: "default" - Config: [] - Containers: {} - Options: {} - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "filters" - in: "query" - description: | - JSON encoded value of the filters (a `map[string][]string`) to process - on the networks list. - - Available filters: - - - `dangling=` When set to `true` (or `1`), returns all - networks that are not in use by a container. When set to `false` - (or `0`), only networks that are in use by one or more - containers are returned. - - `driver=` Matches a network's driver. - - `id=` Matches all or part of a network ID. - - `label=` or `label==` of a network label. - - `name=` Matches all or part of a network name. - - `scope=["swarm"|"global"|"local"]` Filters networks by scope (`swarm`, `global`, or `local`). - - `type=["custom"|"builtin"]` Filters networks by type. The `custom` keyword returns all user-defined networks. - type: "string" - tags: ["Network"] - - /networks/{id}: - get: - summary: "Inspect a network" - operationId: "NetworkInspect" - produces: - - "application/json" - responses: - 200: - description: "No error" - schema: - $ref: "#/definitions/Network" - 404: - description: "Network not found" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - description: "Network ID or name" - required: true - type: "string" - - name: "verbose" - in: "query" - description: "Detailed inspect output for troubleshooting" - type: "boolean" - default: false - - name: "scope" - in: "query" - description: "Filter the network by scope (swarm, global, or local)" - type: "string" - tags: ["Network"] - - delete: - summary: "Remove a network" - operationId: "NetworkDelete" - responses: - 204: - description: "No error" - 403: - description: "operation not supported for pre-defined networks" - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "no such network" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - description: "Network ID or name" - required: true - type: "string" - tags: ["Network"] - - /networks/create: - post: - summary: "Create a network" - operationId: "NetworkCreate" - consumes: - - "application/json" - produces: - - "application/json" - responses: - 201: - description: "Network created successfully" - schema: - $ref: "#/definitions/NetworkCreateResponse" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 403: - description: | - Forbidden operation. This happens when trying to create a network named after a pre-defined network, - or when trying to create an overlay network on a daemon which is not part of a Swarm cluster. - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "plugin not found" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "networkConfig" - in: "body" - description: "Network configuration" - required: true - schema: - type: "object" - title: "NetworkCreateRequest" - required: ["Name"] - properties: - Name: - description: "The network's name." - type: "string" - example: "my_network" - Driver: - description: "Name of the network driver plugin to use." - type: "string" - default: "bridge" - example: "bridge" - Scope: - description: | - The level at which the network exists (e.g. `swarm` for cluster-wide - or `local` for machine level). - type: "string" - Internal: - description: "Restrict external access to the network." - type: "boolean" - Attachable: - description: | - Globally scoped network is manually attachable by regular - containers from workers in swarm mode. - type: "boolean" - example: true - Ingress: - description: | - Ingress network is the network which provides the routing-mesh - in swarm mode. - type: "boolean" - example: false - ConfigOnly: - description: | - Creates a config-only network. Config-only networks are placeholder - networks for network configurations to be used by other networks. - Config-only networks cannot be used directly to run containers - or services. - type: "boolean" - default: false - example: false - ConfigFrom: - description: | - Specifies the source which will provide the configuration for - this network. The specified network must be an existing - config-only network; see ConfigOnly. - $ref: "#/definitions/ConfigReference" - IPAM: - description: "Optional custom IP scheme for the network." - $ref: "#/definitions/IPAM" - EnableIPv4: - description: "Enable IPv4 on the network." - type: "boolean" - example: true - EnableIPv6: - description: "Enable IPv6 on the network." - type: "boolean" - example: true - Options: - description: "Network specific options to be used by the drivers." - type: "object" - additionalProperties: - type: "string" - example: - com.docker.network.bridge.default_bridge: "true" - com.docker.network.bridge.enable_icc: "true" - com.docker.network.bridge.enable_ip_masquerade: "true" - com.docker.network.bridge.host_binding_ipv4: "0.0.0.0" - com.docker.network.bridge.name: "docker0" - com.docker.network.driver.mtu: "1500" - Labels: - description: "User-defined key/value metadata." - type: "object" - additionalProperties: - type: "string" - example: - com.example.some-label: "some-value" - com.example.some-other-label: "some-other-value" - tags: ["Network"] - - /networks/{id}/connect: - post: - summary: "Connect a container to a network" - description: "The network must be either a local-scoped network or a swarm-scoped network with the `attachable` option set. A network cannot be re-attached to a running container" - operationId: "NetworkConnect" - consumes: - - "application/json" - responses: - 200: - description: "No error" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 403: - description: "Operation forbidden" - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "Network or container not found" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - description: "Network ID or name" - required: true - type: "string" - - name: "container" - in: "body" - required: true - schema: - type: "object" - title: "NetworkConnectRequest" - properties: - Container: - type: "string" - description: "The ID or name of the container to connect to the network." - EndpointConfig: - $ref: "#/definitions/EndpointSettings" - example: - Container: "3613f73ba0e4" - EndpointConfig: - IPAMConfig: - IPv4Address: "172.24.56.89" - IPv6Address: "2001:db8::5689" - MacAddress: "02:42:ac:12:05:02" - Priority: 100 - tags: ["Network"] - - /networks/{id}/disconnect: - post: - summary: "Disconnect a container from a network" - operationId: "NetworkDisconnect" - consumes: - - "application/json" - responses: - 200: - description: "No error" - 403: - description: "Operation not supported for swarm scoped networks" - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "Network or container not found" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - description: "Network ID or name" - required: true - type: "string" - - name: "container" - in: "body" - required: true - schema: - type: "object" - title: "NetworkDisconnectRequest" - properties: - Container: - type: "string" - description: | - The ID or name of the container to disconnect from the network. - Force: - type: "boolean" - description: | - Force the container to disconnect from the network. - tags: ["Network"] - /networks/prune: - post: - summary: "Delete unused networks" - produces: - - "application/json" - operationId: "NetworkPrune" - parameters: - - name: "filters" - in: "query" - description: | - Filters to process on the prune list, encoded as JSON (a `map[string][]string`). - - Available filters: - - `until=` Prune networks created before this timestamp. The `` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time. - - `label` (`label=`, `label==`, `label!=`, or `label!==`) Prune networks with (or without, in case `label!=...` is used) the specified labels. - type: "string" - responses: - 200: - description: "No error" - schema: - type: "object" - title: "NetworkPruneResponse" - properties: - NetworksDeleted: - description: "Networks that were deleted" - type: "array" - items: - type: "string" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - tags: ["Network"] - /plugins: - get: - summary: "List plugins" - operationId: "PluginList" - description: "Returns information about installed plugins." - produces: ["application/json"] - responses: - 200: - description: "No error" - schema: - type: "array" - items: - $ref: "#/definitions/Plugin" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "filters" - in: "query" - type: "string" - description: | - A JSON encoded value of the filters (a `map[string][]string`) to - process on the plugin list. - - Available filters: - - - `capability=` - - `enable=|` - tags: ["Plugin"] - - /plugins/privileges: - get: - summary: "Get plugin privileges" - operationId: "GetPluginPrivileges" - responses: - 200: - description: "no error" - schema: - type: "array" - items: - $ref: "#/definitions/PluginPrivilege" - example: - - Name: "network" - Description: "" - Value: - - "host" - - Name: "mount" - Description: "" - Value: - - "/data" - - Name: "device" - Description: "" - Value: - - "/dev/cpu_dma_latency" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "remote" - in: "query" - description: | - The name of the plugin. The `:latest` tag is optional, and is the - default if omitted. - required: true - type: "string" - tags: - - "Plugin" - - /plugins/pull: - post: - summary: "Install a plugin" - operationId: "PluginPull" - description: | - Pulls and installs a plugin. After the plugin is installed, it can be - enabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable). - produces: - - "application/json" - responses: - 204: - description: "no error" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "remote" - in: "query" - description: | - Remote reference for plugin to install. - - The `:latest` tag is optional, and is used as the default if omitted. - required: true - type: "string" - - name: "name" - in: "query" - description: | - Local name for the pulled plugin. - - The `:latest` tag is optional, and is used as the default if omitted. - required: false - type: "string" - - name: "X-Registry-Auth" - in: "header" - description: | - A base64url-encoded auth configuration to use when pulling a plugin - from a registry. - - Refer to the [authentication section](#section/Authentication) for - details. - type: "string" - - name: "body" - in: "body" - schema: - type: "array" - items: - $ref: "#/definitions/PluginPrivilege" - example: - - Name: "network" - Description: "" - Value: - - "host" - - Name: "mount" - Description: "" - Value: - - "/data" - - Name: "device" - Description: "" - Value: - - "/dev/cpu_dma_latency" - tags: ["Plugin"] - /plugins/{name}/json: - get: - summary: "Inspect a plugin" - operationId: "PluginInspect" - responses: - 200: - description: "no error" - schema: - $ref: "#/definitions/Plugin" - 404: - description: "plugin is not installed" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "name" - in: "path" - description: | - The name of the plugin. The `:latest` tag is optional, and is the - default if omitted. - required: true - type: "string" - tags: ["Plugin"] - /plugins/{name}: - delete: - summary: "Remove a plugin" - operationId: "PluginDelete" - responses: - 200: - description: "no error" - schema: - $ref: "#/definitions/Plugin" - 404: - description: "plugin is not installed" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "name" - in: "path" - description: | - The name of the plugin. The `:latest` tag is optional, and is the - default if omitted. - required: true - type: "string" - - name: "force" - in: "query" - description: | - Disable the plugin before removing. This may result in issues if the - plugin is in use by a container. - type: "boolean" - default: false - tags: ["Plugin"] - /plugins/{name}/enable: - post: - summary: "Enable a plugin" - operationId: "PluginEnable" - responses: - 200: - description: "no error" - 404: - description: "plugin is not installed" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "name" - in: "path" - description: | - The name of the plugin. The `:latest` tag is optional, and is the - default if omitted. - required: true - type: "string" - - name: "timeout" - in: "query" - description: "Set the HTTP client timeout (in seconds)" - type: "integer" - default: 0 - tags: ["Plugin"] - /plugins/{name}/disable: - post: - summary: "Disable a plugin" - operationId: "PluginDisable" - responses: - 200: - description: "no error" - 404: - description: "plugin is not installed" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "name" - in: "path" - description: | - The name of the plugin. The `:latest` tag is optional, and is the - default if omitted. - required: true - type: "string" - - name: "force" - in: "query" - description: | - Force disable a plugin even if still in use. - required: false - type: "boolean" - tags: ["Plugin"] - /plugins/{name}/upgrade: - post: - summary: "Upgrade a plugin" - operationId: "PluginUpgrade" - responses: - 204: - description: "no error" - 404: - description: "plugin not installed" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "name" - in: "path" - description: | - The name of the plugin. The `:latest` tag is optional, and is the - default if omitted. - required: true - type: "string" - - name: "remote" - in: "query" - description: | - Remote reference to upgrade to. - - The `:latest` tag is optional, and is used as the default if omitted. - required: true - type: "string" - - name: "X-Registry-Auth" - in: "header" - description: | - A base64url-encoded auth configuration to use when pulling a plugin - from a registry. - - Refer to the [authentication section](#section/Authentication) for - details. - type: "string" - - name: "body" - in: "body" - schema: - type: "array" - items: - $ref: "#/definitions/PluginPrivilege" - example: - - Name: "network" - Description: "" - Value: - - "host" - - Name: "mount" - Description: "" - Value: - - "/data" - - Name: "device" - Description: "" - Value: - - "/dev/cpu_dma_latency" - tags: ["Plugin"] - /plugins/create: - post: - summary: "Create a plugin" - operationId: "PluginCreate" - consumes: - - "application/x-tar" - responses: - 204: - description: "no error" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "name" - in: "query" - description: | - The name of the plugin. The `:latest` tag is optional, and is the - default if omitted. - required: true - type: "string" - - name: "tarContext" - in: "body" - description: "Path to tar containing plugin rootfs and manifest" - schema: - type: "string" - format: "binary" - tags: ["Plugin"] - /plugins/{name}/push: - post: - summary: "Push a plugin" - operationId: "PluginPush" - description: | - Push a plugin to the registry. - parameters: - - name: "name" - in: "path" - description: | - The name of the plugin. The `:latest` tag is optional, and is the - default if omitted. - required: true - type: "string" - responses: - 200: - description: "no error" - 404: - description: "plugin not installed" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - tags: ["Plugin"] - /plugins/{name}/set: - post: - summary: "Configure a plugin" - operationId: "PluginSet" - consumes: - - "application/json" - parameters: - - name: "name" - in: "path" - description: | - The name of the plugin. The `:latest` tag is optional, and is the - default if omitted. - required: true - type: "string" - - name: "body" - in: "body" - schema: - type: "array" - items: - type: "string" - example: ["DEBUG=1"] - responses: - 204: - description: "No error" - 404: - description: "Plugin not installed" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - tags: ["Plugin"] - /nodes: - get: - summary: "List nodes" - operationId: "NodeList" - responses: - 200: - description: "no error" - schema: - type: "array" - items: - $ref: "#/definitions/Node" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "filters" - in: "query" - description: | - Filters to process on the nodes list, encoded as JSON (a `map[string][]string`). - - Available filters: - - `id=` - - `label=` - - `membership=`(`accepted`|`pending`)` - - `name=` - - `node.label=` - - `role=`(`manager`|`worker`)` - type: "string" - tags: ["Node"] - /nodes/{id}: - get: - summary: "Inspect a node" - operationId: "NodeInspect" - responses: - 200: - description: "no error" - schema: - $ref: "#/definitions/Node" - 404: - description: "no such node" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - description: "The ID or name of the node" - type: "string" - required: true - tags: ["Node"] - delete: - summary: "Delete a node" - operationId: "NodeDelete" - responses: - 200: - description: "no error" - 404: - description: "no such node" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - description: "The ID or name of the node" - type: "string" - required: true - - name: "force" - in: "query" - description: "Force remove a node from the swarm" - default: false - type: "boolean" - tags: ["Node"] - /nodes/{id}/update: - post: - summary: "Update a node" - operationId: "NodeUpdate" - responses: - 200: - description: "no error" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "no such node" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - description: "The ID of the node" - type: "string" - required: true - - name: "body" - in: "body" - schema: - $ref: "#/definitions/NodeSpec" - - name: "version" - in: "query" - description: | - The version number of the node object being updated. This is required - to avoid conflicting writes. - type: "integer" - format: "int64" - required: true - tags: ["Node"] - /swarm: - get: - summary: "Inspect swarm" - operationId: "SwarmInspect" - responses: - 200: - description: "no error" - schema: - $ref: "#/definitions/Swarm" - 404: - description: "no such swarm" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - tags: ["Swarm"] - /swarm/init: - post: - summary: "Initialize a new swarm" - operationId: "SwarmInit" - produces: - - "application/json" - - "text/plain" - responses: - 200: - description: "no error" - schema: - description: "The node ID" - type: "string" - example: "7v2t30z9blmxuhnyo6s4cpenp" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is already part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "body" - in: "body" - required: true - schema: - type: "object" - title: "SwarmInitRequest" - properties: - ListenAddr: - description: | - Listen address used for inter-manager communication, as well - as determining the networking interface used for the VXLAN - Tunnel Endpoint (VTEP). This can either be an address/port - combination in the form `192.168.1.1:4567`, or an interface - followed by a port number, like `eth0:4567`. If the port number - is omitted, the default swarm listening port is used. - type: "string" - AdvertiseAddr: - description: | - Externally reachable address advertised to other nodes. This - can either be an address/port combination in the form - `192.168.1.1:4567`, or an interface followed by a port number, - like `eth0:4567`. If the port number is omitted, the port - number from the listen address is used. If `AdvertiseAddr` is - not specified, it will be automatically detected when possible. - type: "string" - DataPathAddr: - description: | - Address or interface to use for data path traffic (format: - ``), for example, `192.168.1.1`, or an interface, - like `eth0`. If `DataPathAddr` is unspecified, the same address - as `AdvertiseAddr` is used. - - The `DataPathAddr` specifies the address that global scope - network drivers will publish towards other nodes in order to - reach the containers running on this node. Using this parameter - it is possible to separate the container data traffic from the - management traffic of the cluster. - type: "string" - DataPathPort: - description: | - DataPathPort specifies the data path port number for data traffic. - Acceptable port range is 1024 to 49151. - if no port is set or is set to 0, default port 4789 will be used. - type: "integer" - format: "uint32" - DefaultAddrPool: - description: | - Default Address Pool specifies default subnet pools for global - scope networks. - type: "array" - items: - type: "string" - example: ["10.10.0.0/16", "20.20.0.0/16"] - ForceNewCluster: - description: "Force creation of a new swarm." - type: "boolean" - SubnetSize: - description: | - SubnetSize specifies the subnet size of the networks created - from the default subnet pool. - type: "integer" - format: "uint32" - Spec: - $ref: "#/definitions/SwarmSpec" - example: - ListenAddr: "0.0.0.0:2377" - AdvertiseAddr: "192.168.1.1:2377" - DataPathPort: 4789 - DefaultAddrPool: ["10.10.0.0/8", "20.20.0.0/8"] - SubnetSize: 24 - ForceNewCluster: false - Spec: - Orchestration: {} - Raft: {} - Dispatcher: {} - CAConfig: {} - EncryptionConfig: - AutoLockManagers: false - tags: ["Swarm"] - /swarm/join: - post: - summary: "Join an existing swarm" - operationId: "SwarmJoin" - responses: - 200: - description: "no error" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is already part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "body" - in: "body" - required: true - schema: - type: "object" - title: "SwarmJoinRequest" - properties: - ListenAddr: - description: | - Listen address used for inter-manager communication if the node - gets promoted to manager, as well as determining the networking - interface used for the VXLAN Tunnel Endpoint (VTEP). - type: "string" - AdvertiseAddr: - description: | - Externally reachable address advertised to other nodes. This - can either be an address/port combination in the form - `192.168.1.1:4567`, or an interface followed by a port number, - like `eth0:4567`. If the port number is omitted, the port - number from the listen address is used. If `AdvertiseAddr` is - not specified, it will be automatically detected when possible. - type: "string" - DataPathAddr: - description: | - Address or interface to use for data path traffic (format: - ``), for example, `192.168.1.1`, or an interface, - like `eth0`. If `DataPathAddr` is unspecified, the same address - as `AdvertiseAddr` is used. - - The `DataPathAddr` specifies the address that global scope - network drivers will publish towards other nodes in order to - reach the containers running on this node. Using this parameter - it is possible to separate the container data traffic from the - management traffic of the cluster. - - type: "string" - RemoteAddrs: - description: | - Addresses of manager nodes already participating in the swarm. - type: "array" - items: - type: "string" - JoinToken: - description: "Secret token for joining this swarm." - type: "string" - example: - ListenAddr: "0.0.0.0:2377" - AdvertiseAddr: "192.168.1.1:2377" - DataPathAddr: "192.168.1.1" - RemoteAddrs: - - "node1:2377" - JoinToken: "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" - tags: ["Swarm"] - /swarm/leave: - post: - summary: "Leave a swarm" - operationId: "SwarmLeave" - responses: - 200: - description: "no error" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "force" - description: | - Force leave swarm, even if this is the last manager or that it will - break the cluster. - in: "query" - type: "boolean" - default: false - tags: ["Swarm"] - /swarm/update: - post: - summary: "Update a swarm" - operationId: "SwarmUpdate" - responses: - 200: - description: "no error" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "body" - in: "body" - required: true - schema: - $ref: "#/definitions/SwarmSpec" - - name: "version" - in: "query" - description: | - The version number of the swarm object being updated. This is - required to avoid conflicting writes. - type: "integer" - format: "int64" - required: true - - name: "rotateWorkerToken" - in: "query" - description: "Rotate the worker join token." - type: "boolean" - default: false - - name: "rotateManagerToken" - in: "query" - description: "Rotate the manager join token." - type: "boolean" - default: false - - name: "rotateManagerUnlockKey" - in: "query" - description: "Rotate the manager unlock key." - type: "boolean" - default: false - tags: ["Swarm"] - /swarm/unlockkey: - get: - summary: "Get the unlock key" - operationId: "SwarmUnlockkey" - consumes: - - "application/json" - responses: - 200: - description: "no error" - schema: - type: "object" - title: "UnlockKeyResponse" - properties: - UnlockKey: - description: "The swarm's unlock key." - type: "string" - example: - UnlockKey: "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - tags: ["Swarm"] - /swarm/unlock: - post: - summary: "Unlock a locked manager" - operationId: "SwarmUnlock" - consumes: - - "application/json" - produces: - - "application/json" - parameters: - - name: "body" - in: "body" - required: true - schema: - type: "object" - title: "SwarmUnlockRequest" - properties: - UnlockKey: - description: "The swarm's unlock key." - type: "string" - example: - UnlockKey: "SWMKEY-1-7c37Cc8654o6p38HnroywCi19pllOnGtbdZEgtKxZu8" - responses: - 200: - description: "no error" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - tags: ["Swarm"] - /services: - get: - summary: "List services" - operationId: "ServiceList" - responses: - 200: - description: "no error" - schema: - type: "array" - items: - $ref: "#/definitions/Service" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "filters" - in: "query" - type: "string" - description: | - A JSON encoded value of the filters (a `map[string][]string`) to - process on the services list. - - Available filters: - - - `id=` - - `label=` - - `mode=["replicated"|"global"]` - - `name=` - - name: "status" - in: "query" - type: "boolean" - description: | - Include service status, with count of running and desired tasks. - tags: ["Service"] - /services/create: - post: - summary: "Create a service" - operationId: "ServiceCreate" - consumes: - - "application/json" - produces: - - "application/json" - responses: - 201: - description: "no error" - schema: - $ref: "#/definitions/ServiceCreateResponse" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 403: - description: "network is not eligible for services" - schema: - $ref: "#/definitions/ErrorResponse" - 409: - description: "name conflicts with an existing service" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "body" - in: "body" - required: true - schema: - allOf: - - $ref: "#/definitions/ServiceSpec" - - type: "object" - example: - Name: "web" - TaskTemplate: - ContainerSpec: - Image: "nginx:alpine" - Mounts: - - - ReadOnly: true - Source: "web-data" - Target: "/usr/share/nginx/html" - Type: "volume" - VolumeOptions: - DriverConfig: {} - Labels: - com.example.something: "something-value" - Hosts: ["10.10.10.10 host1", "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2"] - User: "33" - DNSConfig: - Nameservers: ["8.8.8.8"] - Search: ["example.org"] - Options: ["timeout:3"] - Secrets: - - - File: - Name: "www.example.org.key" - UID: "33" - GID: "33" - Mode: 384 - SecretID: "fpjqlhnwb19zds35k8wn80lq9" - SecretName: "example_org_domain_key" - OomScoreAdj: 0 - LogDriver: - Name: "json-file" - Options: - max-file: "3" - max-size: "10M" - Placement: {} - Resources: - Limits: - MemoryBytes: 104857600 - Reservations: {} - RestartPolicy: - Condition: "on-failure" - Delay: 10000000000 - MaxAttempts: 10 - Mode: - Replicated: - Replicas: 4 - UpdateConfig: - Parallelism: 2 - Delay: 1000000000 - FailureAction: "pause" - Monitor: 15000000000 - MaxFailureRatio: 0.15 - RollbackConfig: - Parallelism: 1 - Delay: 1000000000 - FailureAction: "pause" - Monitor: 15000000000 - MaxFailureRatio: 0.15 - EndpointSpec: - Ports: - - - Protocol: "tcp" - PublishedPort: 8080 - TargetPort: 80 - Labels: - foo: "bar" - - name: "X-Registry-Auth" - in: "header" - description: | - A base64url-encoded auth configuration for pulling from private - registries. - - Refer to the [authentication section](#section/Authentication) for - details. - type: "string" - tags: ["Service"] - /services/{id}: - get: - summary: "Inspect a service" - operationId: "ServiceInspect" - responses: - 200: - description: "no error" - schema: - $ref: "#/definitions/Service" - 404: - description: "no such service" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - description: "ID or name of service." - required: true - type: "string" - - name: "insertDefaults" - in: "query" - description: "Fill empty fields with default values." - type: "boolean" - default: false - tags: ["Service"] - delete: - summary: "Delete a service" - operationId: "ServiceDelete" - responses: - 200: - description: "no error" - 404: - description: "no such service" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - description: "ID or name of service." - required: true - type: "string" - tags: ["Service"] - /services/{id}/update: - post: - summary: "Update a service" - operationId: "ServiceUpdate" - consumes: ["application/json"] - produces: ["application/json"] - responses: - 200: - description: "no error" - schema: - $ref: "#/definitions/ServiceUpdateResponse" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "no such service" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - description: "ID or name of service." - required: true - type: "string" - - name: "body" - in: "body" - required: true - schema: - allOf: - - $ref: "#/definitions/ServiceSpec" - - type: "object" - example: - Name: "top" - TaskTemplate: - ContainerSpec: - Image: "busybox" - Args: - - "top" - OomScoreAdj: 0 - Resources: - Limits: {} - Reservations: {} - RestartPolicy: - Condition: "any" - MaxAttempts: 0 - Placement: {} - ForceUpdate: 0 - Mode: - Replicated: - Replicas: 1 - UpdateConfig: - Parallelism: 2 - Delay: 1000000000 - FailureAction: "pause" - Monitor: 15000000000 - MaxFailureRatio: 0.15 - RollbackConfig: - Parallelism: 1 - Delay: 1000000000 - FailureAction: "pause" - Monitor: 15000000000 - MaxFailureRatio: 0.15 - EndpointSpec: - Mode: "vip" - - - name: "version" - in: "query" - description: | - The version number of the service object being updated. This is - required to avoid conflicting writes. - This version number should be the value as currently set on the - service *before* the update. You can find the current version by - calling `GET /services/{id}` - required: true - type: "integer" - - name: "registryAuthFrom" - in: "query" - description: | - If the `X-Registry-Auth` header is not specified, this parameter - indicates where to find registry authorization credentials. - type: "string" - enum: ["spec", "previous-spec"] - default: "spec" - - name: "rollback" - in: "query" - description: | - Set to this parameter to `previous` to cause a server-side rollback - to the previous service spec. The supplied spec will be ignored in - this case. - type: "string" - - name: "X-Registry-Auth" - in: "header" - description: | - A base64url-encoded auth configuration for pulling from private - registries. - - Refer to the [authentication section](#section/Authentication) for - details. - type: "string" - - tags: ["Service"] - /services/{id}/logs: - get: - summary: "Get service logs" - description: | - Get `stdout` and `stderr` logs from a service. See also - [`/containers/{id}/logs`](#operation/ContainerLogs). - - **Note**: This endpoint works only for services with the `local`, - `json-file` or `journald` logging drivers. - produces: - - "application/vnd.docker.raw-stream" - - "application/vnd.docker.multiplexed-stream" - operationId: "ServiceLogs" - responses: - 200: - description: "logs returned as a stream in response body" - schema: - type: "string" - format: "binary" - 404: - description: "no such service" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such service: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID or name of the service" - type: "string" - - name: "details" - in: "query" - description: "Show service context and extra details provided to logs." - type: "boolean" - default: false - - name: "follow" - in: "query" - description: "Keep connection after returning logs." - type: "boolean" - default: false - - name: "stdout" - in: "query" - description: "Return logs from `stdout`" - type: "boolean" - default: false - - name: "stderr" - in: "query" - description: "Return logs from `stderr`" - type: "boolean" - default: false - - name: "since" - in: "query" - description: "Only return logs since this time, as a UNIX timestamp" - type: "integer" - default: 0 - - name: "timestamps" - in: "query" - description: "Add timestamps to every log line" - type: "boolean" - default: false - - name: "tail" - in: "query" - description: | - Only return this number of log lines from the end of the logs. - Specify as an integer or `all` to output all log lines. - type: "string" - default: "all" - tags: ["Service"] - /tasks: - get: - summary: "List tasks" - operationId: "TaskList" - produces: - - "application/json" - responses: - 200: - description: "no error" - schema: - type: "array" - items: - $ref: "#/definitions/Task" - example: - - ID: "0kzzo1i0y4jz6027t0k7aezc7" - Version: - Index: 71 - CreatedAt: "2016-06-07T21:07:31.171892745Z" - UpdatedAt: "2016-06-07T21:07:31.376370513Z" - Spec: - ContainerSpec: - Image: "redis" - Resources: - Limits: {} - Reservations: {} - RestartPolicy: - Condition: "any" - MaxAttempts: 0 - Placement: {} - ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz" - Slot: 1 - NodeID: "60gvrl6tm78dmak4yl7srz94v" - Status: - Timestamp: "2016-06-07T21:07:31.290032978Z" - State: "running" - Message: "started" - ContainerStatus: - ContainerID: "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035" - PID: 677 - DesiredState: "running" - NetworksAttachments: - - Network: - ID: "4qvuz4ko70xaltuqbt8956gd1" - Version: - Index: 18 - CreatedAt: "2016-06-07T20:31:11.912919752Z" - UpdatedAt: "2016-06-07T21:07:29.955277358Z" - Spec: - Name: "ingress" - Labels: - com.docker.swarm.internal: "true" - DriverConfiguration: {} - IPAMOptions: - Driver: {} - Configs: - - Subnet: "10.255.0.0/16" - Gateway: "10.255.0.1" - DriverState: - Name: "overlay" - Options: - com.docker.network.driver.overlay.vxlanid_list: "256" - IPAMOptions: - Driver: - Name: "default" - Configs: - - Subnet: "10.255.0.0/16" - Gateway: "10.255.0.1" - Addresses: - - "10.255.0.10/16" - - ID: "1yljwbmlr8er2waf8orvqpwms" - Version: - Index: 30 - CreatedAt: "2016-06-07T21:07:30.019104782Z" - UpdatedAt: "2016-06-07T21:07:30.231958098Z" - Name: "hopeful_cori" - Spec: - ContainerSpec: - Image: "redis" - Resources: - Limits: {} - Reservations: {} - RestartPolicy: - Condition: "any" - MaxAttempts: 0 - Placement: {} - ServiceID: "9mnpnzenvg8p8tdbtq4wvbkcz" - Slot: 1 - NodeID: "60gvrl6tm78dmak4yl7srz94v" - Status: - Timestamp: "2016-06-07T21:07:30.202183143Z" - State: "shutdown" - Message: "shutdown" - ContainerStatus: - ContainerID: "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" - DesiredState: "shutdown" - NetworksAttachments: - - Network: - ID: "4qvuz4ko70xaltuqbt8956gd1" - Version: - Index: 18 - CreatedAt: "2016-06-07T20:31:11.912919752Z" - UpdatedAt: "2016-06-07T21:07:29.955277358Z" - Spec: - Name: "ingress" - Labels: - com.docker.swarm.internal: "true" - DriverConfiguration: {} - IPAMOptions: - Driver: {} - Configs: - - Subnet: "10.255.0.0/16" - Gateway: "10.255.0.1" - DriverState: - Name: "overlay" - Options: - com.docker.network.driver.overlay.vxlanid_list: "256" - IPAMOptions: - Driver: - Name: "default" - Configs: - - Subnet: "10.255.0.0/16" - Gateway: "10.255.0.1" - Addresses: - - "10.255.0.5/16" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "filters" - in: "query" - type: "string" - description: | - A JSON encoded value of the filters (a `map[string][]string`) to - process on the tasks list. - - Available filters: - - - `desired-state=(running | shutdown | accepted)` - - `id=` - - `label=key` or `label="key=value"` - - `name=` - - `node=` - - `service=` - tags: ["Task"] - /tasks/{id}: - get: - summary: "Inspect a task" - operationId: "TaskInspect" - produces: - - "application/json" - responses: - 200: - description: "no error" - schema: - $ref: "#/definitions/Task" - 404: - description: "no such task" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - description: "ID of the task" - required: true - type: "string" - tags: ["Task"] - /tasks/{id}/logs: - get: - summary: "Get task logs" - description: | - Get `stdout` and `stderr` logs from a task. - See also [`/containers/{id}/logs`](#operation/ContainerLogs). - - **Note**: This endpoint works only for services with the `local`, - `json-file` or `journald` logging drivers. - operationId: "TaskLogs" - produces: - - "application/vnd.docker.raw-stream" - - "application/vnd.docker.multiplexed-stream" - responses: - 200: - description: "logs returned as a stream in response body" - schema: - type: "string" - format: "binary" - 404: - description: "no such task" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such task: c2ada9df5af8" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - description: "ID of the task" - type: "string" - - name: "details" - in: "query" - description: "Show task context and extra details provided to logs." - type: "boolean" - default: false - - name: "follow" - in: "query" - description: "Keep connection after returning logs." - type: "boolean" - default: false - - name: "stdout" - in: "query" - description: "Return logs from `stdout`" - type: "boolean" - default: false - - name: "stderr" - in: "query" - description: "Return logs from `stderr`" - type: "boolean" - default: false - - name: "since" - in: "query" - description: "Only return logs since this time, as a UNIX timestamp" - type: "integer" - default: 0 - - name: "timestamps" - in: "query" - description: "Add timestamps to every log line" - type: "boolean" - default: false - - name: "tail" - in: "query" - description: | - Only return this number of log lines from the end of the logs. - Specify as an integer or `all` to output all log lines. - type: "string" - default: "all" - tags: ["Task"] - /secrets: - get: - summary: "List secrets" - operationId: "SecretList" - produces: - - "application/json" - responses: - 200: - description: "no error" - schema: - type: "array" - items: - $ref: "#/definitions/Secret" - example: - - ID: "blt1owaxmitz71s9v5zh81zun" - Version: - Index: 85 - CreatedAt: "2017-07-20T13:55:28.678958722Z" - UpdatedAt: "2017-07-20T13:55:28.678958722Z" - Spec: - Name: "mysql-passwd" - Labels: - some.label: "some.value" - Driver: - Name: "secret-bucket" - Options: - OptionA: "value for driver option A" - OptionB: "value for driver option B" - - ID: "ktnbjxoalbkvbvedmg1urrz8h" - Version: - Index: 11 - CreatedAt: "2016-11-05T01:20:17.327670065Z" - UpdatedAt: "2016-11-05T01:20:17.327670065Z" - Spec: - Name: "app-dev.crt" - Labels: - foo: "bar" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "filters" - in: "query" - type: "string" - description: | - A JSON encoded value of the filters (a `map[string][]string`) to - process on the secrets list. - - Available filters: - - - `id=` - - `label= or label==value` - - `name=` - - `names=` - tags: ["Secret"] - /secrets/create: - post: - summary: "Create a secret" - operationId: "SecretCreate" - consumes: - - "application/json" - produces: - - "application/json" - responses: - 201: - description: "no error" - schema: - $ref: "#/definitions/IDResponse" - 409: - description: "name conflicts with an existing object" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "body" - in: "body" - schema: - allOf: - - $ref: "#/definitions/SecretSpec" - - type: "object" - example: - Name: "app-key.crt" - Labels: - foo: "bar" - Data: "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" - Driver: - Name: "secret-bucket" - Options: - OptionA: "value for driver option A" - OptionB: "value for driver option B" - tags: ["Secret"] - /secrets/{id}: - get: - summary: "Inspect a secret" - operationId: "SecretInspect" - produces: - - "application/json" - responses: - 200: - description: "no error" - schema: - $ref: "#/definitions/Secret" - examples: - application/json: - ID: "ktnbjxoalbkvbvedmg1urrz8h" - Version: - Index: 11 - CreatedAt: "2016-11-05T01:20:17.327670065Z" - UpdatedAt: "2016-11-05T01:20:17.327670065Z" - Spec: - Name: "app-dev.crt" - Labels: - foo: "bar" - Driver: - Name: "secret-bucket" - Options: - OptionA: "value for driver option A" - OptionB: "value for driver option B" - - 404: - description: "secret not found" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - description: "ID of the secret" - tags: ["Secret"] - delete: - summary: "Delete a secret" - operationId: "SecretDelete" - produces: - - "application/json" - responses: - 204: - description: "no error" - 404: - description: "secret not found" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - description: "ID of the secret" - tags: ["Secret"] - /secrets/{id}/update: - post: - summary: "Update a Secret" - operationId: "SecretUpdate" - responses: - 200: - description: "no error" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "no such secret" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - description: "The ID or name of the secret" - type: "string" - required: true - - name: "body" - in: "body" - schema: - $ref: "#/definitions/SecretSpec" - description: | - The spec of the secret to update. Currently, only the Labels field - can be updated. All other fields must remain unchanged from the - [SecretInspect endpoint](#operation/SecretInspect) response values. - - name: "version" - in: "query" - description: | - The version number of the secret object being updated. This is - required to avoid conflicting writes. - type: "integer" - format: "int64" - required: true - tags: ["Secret"] - /configs: - get: - summary: "List configs" - operationId: "ConfigList" - produces: - - "application/json" - responses: - 200: - description: "no error" - schema: - type: "array" - items: - $ref: "#/definitions/Config" - example: - - ID: "ktnbjxoalbkvbvedmg1urrz8h" - Version: - Index: 11 - CreatedAt: "2016-11-05T01:20:17.327670065Z" - UpdatedAt: "2016-11-05T01:20:17.327670065Z" - Spec: - Name: "server.conf" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "filters" - in: "query" - type: "string" - description: | - A JSON encoded value of the filters (a `map[string][]string`) to - process on the configs list. - - Available filters: - - - `id=` - - `label= or label==value` - - `name=` - - `names=` - tags: ["Config"] - /configs/create: - post: - summary: "Create a config" - operationId: "ConfigCreate" - consumes: - - "application/json" - produces: - - "application/json" - responses: - 201: - description: "no error" - schema: - $ref: "#/definitions/IDResponse" - 409: - description: "name conflicts with an existing object" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "body" - in: "body" - schema: - allOf: - - $ref: "#/definitions/ConfigSpec" - - type: "object" - example: - Name: "server.conf" - Labels: - foo: "bar" - Data: "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==" - tags: ["Config"] - /configs/{id}: - get: - summary: "Inspect a config" - operationId: "ConfigInspect" - produces: - - "application/json" - responses: - 200: - description: "no error" - schema: - $ref: "#/definitions/Config" - examples: - application/json: - ID: "ktnbjxoalbkvbvedmg1urrz8h" - Version: - Index: 11 - CreatedAt: "2016-11-05T01:20:17.327670065Z" - UpdatedAt: "2016-11-05T01:20:17.327670065Z" - Spec: - Name: "app-dev.crt" - 404: - description: "config not found" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - description: "ID of the config" - tags: ["Config"] - delete: - summary: "Delete a config" - operationId: "ConfigDelete" - produces: - - "application/json" - responses: - 204: - description: "no error" - 404: - description: "config not found" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - required: true - type: "string" - description: "ID of the config" - tags: ["Config"] - /configs/{id}/update: - post: - summary: "Update a Config" - operationId: "ConfigUpdate" - responses: - 200: - description: "no error" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 404: - description: "no such config" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - 503: - description: "node is not part of a swarm" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "id" - in: "path" - description: "The ID or name of the config" - type: "string" - required: true - - name: "body" - in: "body" - schema: - $ref: "#/definitions/ConfigSpec" - description: | - The spec of the config to update. Currently, only the Labels field - can be updated. All other fields must remain unchanged from the - [ConfigInspect endpoint](#operation/ConfigInspect) response values. - - name: "version" - in: "query" - description: | - The version number of the config object being updated. This is - required to avoid conflicting writes. - type: "integer" - format: "int64" - required: true - tags: ["Config"] - /distribution/{name}/json: - get: - summary: "Get image information from the registry" - description: | - Return image digest and platform information by contacting the registry. - operationId: "DistributionInspect" - produces: - - "application/json" - responses: - 200: - description: "descriptor and platform information" - schema: - $ref: "#/definitions/DistributionInspect" - 401: - description: "Failed authentication or no image found" - schema: - $ref: "#/definitions/ErrorResponse" - examples: - application/json: - message: "No such image: someimage (tag: latest)" - 500: - description: "Server error" - schema: - $ref: "#/definitions/ErrorResponse" - parameters: - - name: "name" - in: "path" - description: "Image name or id" - type: "string" - required: true - tags: ["Distribution"] - /session: - post: - summary: "Initialize interactive session" - description: | - Start a new interactive session with a server. Session allows server to - call back to the client for advanced capabilities. - - ### Hijacking - - This endpoint hijacks the HTTP connection to HTTP2 transport that allows - the client to expose gPRC services on that connection. - - For example, the client sends this request to upgrade the connection: - - ``` - POST /session HTTP/1.1 - Upgrade: h2c - Connection: Upgrade - ``` - - The Docker daemon responds with a `101 UPGRADED` response follow with - the raw stream: - - ``` - HTTP/1.1 101 UPGRADED - Connection: Upgrade - Upgrade: h2c - ``` - operationId: "Session" - produces: - - "application/vnd.docker.raw-stream" - responses: - 101: - description: "no error, hijacking successful" - 400: - description: "bad parameter" - schema: - $ref: "#/definitions/ErrorResponse" - 500: - description: "server error" - schema: - $ref: "#/definitions/ErrorResponse" - tags: ["Session"] diff --git a/vendor/github.com/docker/docker/api/types/blkiodev/blkio.go b/vendor/github.com/docker/docker/api/types/blkiodev/blkio.go deleted file mode 100644 index 931ae10a..00000000 --- a/vendor/github.com/docker/docker/api/types/blkiodev/blkio.go +++ /dev/null @@ -1,23 +0,0 @@ -package blkiodev - -import "fmt" - -// WeightDevice is a structure that holds device:weight pair -type WeightDevice struct { - Path string - Weight uint16 -} - -func (w *WeightDevice) String() string { - return fmt.Sprintf("%s:%d", w.Path, w.Weight) -} - -// ThrottleDevice is a structure that holds device:rate_per_second pair -type ThrottleDevice struct { - Path string - Rate uint64 -} - -func (t *ThrottleDevice) String() string { - return fmt.Sprintf("%s:%d", t.Path, t.Rate) -} diff --git a/vendor/github.com/docker/docker/api/types/build/build.go b/vendor/github.com/docker/docker/api/types/build/build.go deleted file mode 100644 index c43a0e21..00000000 --- a/vendor/github.com/docker/docker/api/types/build/build.go +++ /dev/null @@ -1,91 +0,0 @@ -package build - -import ( - "io" - - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/registry" -) - -// BuilderVersion sets the version of underlying builder to use -type BuilderVersion string - -const ( - // BuilderV1 is the first generation builder in docker daemon - BuilderV1 BuilderVersion = "1" - // BuilderBuildKit is builder based on moby/buildkit project - BuilderBuildKit BuilderVersion = "2" -) - -// Result contains the image id of a successful build. -type Result struct { - ID string -} - -// ImageBuildOptions holds the information -// necessary to build images. -type ImageBuildOptions struct { - Tags []string - SuppressOutput bool - RemoteContext string - NoCache bool - Remove bool - ForceRemove bool - PullParent bool - Isolation container.Isolation - CPUSetCPUs string - CPUSetMems string - CPUShares int64 - CPUQuota int64 - CPUPeriod int64 - Memory int64 - MemorySwap int64 - CgroupParent string - NetworkMode string - ShmSize int64 - Dockerfile string - Ulimits []*container.Ulimit - // BuildArgs needs to be a *string instead of just a string so that - // we can tell the difference between "" (empty string) and no value - // at all (nil). See the parsing of buildArgs in - // api/server/router/build/build_routes.go for even more info. - BuildArgs map[string]*string - AuthConfigs map[string]registry.AuthConfig - Context io.Reader - Labels map[string]string - // squash the resulting image's layers to the parent - // preserves the original image and creates a new one from the parent with all - // the changes applied to a single layer - Squash bool - // CacheFrom specifies images that are used for matching cache. Images - // specified here do not need to have a valid parent chain to match cache. - CacheFrom []string - SecurityOpt []string - ExtraHosts []string // List of extra hosts - Target string - SessionID string - Platform string - // Version specifies the version of the underlying builder to use - Version BuilderVersion - // BuildID is an optional identifier that can be passed together with the - // build request. The same identifier can be used to gracefully cancel the - // build with the cancel request. - BuildID string - // Outputs defines configurations for exporting build results. Only supported - // in BuildKit mode - Outputs []ImageBuildOutput -} - -// ImageBuildOutput defines configuration for exporting a build result -type ImageBuildOutput struct { - Type string - Attrs map[string]string -} - -// ImageBuildResponse holds information -// returned by a server after building -// an image. -type ImageBuildResponse struct { - Body io.ReadCloser - OSType string -} diff --git a/vendor/github.com/docker/docker/api/types/build/cache.go b/vendor/github.com/docker/docker/api/types/build/cache.go deleted file mode 100644 index 42c84045..00000000 --- a/vendor/github.com/docker/docker/api/types/build/cache.go +++ /dev/null @@ -1,52 +0,0 @@ -package build - -import ( - "time" - - "github.com/docker/docker/api/types/filters" -) - -// CacheRecord contains information about a build cache record. -type CacheRecord struct { - // ID is the unique ID of the build cache record. - ID string - // Parent is the ID of the parent build cache record. - // - // Deprecated: deprecated in API v1.42 and up, as it was deprecated in BuildKit; use Parents instead. - Parent string `json:"Parent,omitempty"` - // Parents is the list of parent build cache record IDs. - Parents []string `json:" Parents,omitempty"` - // Type is the cache record type. - Type string - // Description is a description of the build-step that produced the build cache. - Description string - // InUse indicates if the build cache is in use. - InUse bool - // Shared indicates if the build cache is shared. - Shared bool - // Size is the amount of disk space used by the build cache (in bytes). - Size int64 - // CreatedAt is the date and time at which the build cache was created. - CreatedAt time.Time - // LastUsedAt is the date and time at which the build cache was last used. - LastUsedAt *time.Time - UsageCount int -} - -// CachePruneOptions hold parameters to prune the build cache. -type CachePruneOptions struct { - All bool - ReservedSpace int64 - MaxUsedSpace int64 - MinFreeSpace int64 - Filters filters.Args - - KeepStorage int64 // Deprecated: deprecated in API 1.48. -} - -// CachePruneReport contains the response for Engine API: -// POST "/build/prune" -type CachePruneReport struct { - CachesDeleted []string - SpaceReclaimed uint64 -} diff --git a/vendor/github.com/docker/docker/api/types/build/disk_usage.go b/vendor/github.com/docker/docker/api/types/build/disk_usage.go deleted file mode 100644 index cfd73332..00000000 --- a/vendor/github.com/docker/docker/api/types/build/disk_usage.go +++ /dev/null @@ -1,10 +0,0 @@ -package build - -// CacheDiskUsage contains disk usage for the build cache. -// -// Deprecated: this type is no longer used and will be removed in the next release. -type CacheDiskUsage struct { - TotalSize int64 - Reclaimable int64 - Items []*CacheRecord -} diff --git a/vendor/github.com/docker/docker/api/types/checkpoint/list.go b/vendor/github.com/docker/docker/api/types/checkpoint/list.go deleted file mode 100644 index 94a9c0a4..00000000 --- a/vendor/github.com/docker/docker/api/types/checkpoint/list.go +++ /dev/null @@ -1,7 +0,0 @@ -package checkpoint - -// Summary represents the details of a checkpoint when listing endpoints. -type Summary struct { - // Name is the name of the checkpoint. - Name string -} diff --git a/vendor/github.com/docker/docker/api/types/checkpoint/options.go b/vendor/github.com/docker/docker/api/types/checkpoint/options.go deleted file mode 100644 index 9477458c..00000000 --- a/vendor/github.com/docker/docker/api/types/checkpoint/options.go +++ /dev/null @@ -1,19 +0,0 @@ -package checkpoint - -// CreateOptions holds parameters to create a checkpoint from a container. -type CreateOptions struct { - CheckpointID string - CheckpointDir string - Exit bool -} - -// ListOptions holds parameters to list checkpoints for a container. -type ListOptions struct { - CheckpointDir string -} - -// DeleteOptions holds parameters to delete a checkpoint from a container. -type DeleteOptions struct { - CheckpointID string - CheckpointDir string -} diff --git a/vendor/github.com/docker/docker/api/types/client.go b/vendor/github.com/docker/docker/api/types/client.go deleted file mode 100644 index 42fe03ec..00000000 --- a/vendor/github.com/docker/docker/api/types/client.go +++ /dev/null @@ -1,85 +0,0 @@ -package types - -import ( - "bufio" - "context" - "net" -) - -// NewHijackedResponse initializes a [HijackedResponse] type. -func NewHijackedResponse(conn net.Conn, mediaType string) HijackedResponse { - return HijackedResponse{Conn: conn, Reader: bufio.NewReader(conn), mediaType: mediaType} -} - -// HijackedResponse holds connection information for a hijacked request. -type HijackedResponse struct { - mediaType string - Conn net.Conn - Reader *bufio.Reader -} - -// Close closes the hijacked connection and reader. -func (h *HijackedResponse) Close() { - h.Conn.Close() -} - -// MediaType let client know if HijackedResponse hold a raw or multiplexed stream. -// returns false if HTTP Content-Type is not relevant, and container must be inspected -func (h *HijackedResponse) MediaType() (string, bool) { - if h.mediaType == "" { - return "", false - } - return h.mediaType, true -} - -// CloseWriter is an interface that implements structs -// that close input streams to prevent from writing. -type CloseWriter interface { - CloseWrite() error -} - -// CloseWrite closes a readWriter for writing. -func (h *HijackedResponse) CloseWrite() error { - if conn, ok := h.Conn.(CloseWriter); ok { - return conn.CloseWrite() - } - return nil -} - -// PluginRemoveOptions holds parameters to remove plugins. -type PluginRemoveOptions struct { - Force bool -} - -// PluginEnableOptions holds parameters to enable plugins. -type PluginEnableOptions struct { - Timeout int -} - -// PluginDisableOptions holds parameters to disable plugins. -type PluginDisableOptions struct { - Force bool -} - -// PluginInstallOptions holds parameters to install a plugin. -type PluginInstallOptions struct { - Disabled bool - AcceptAllPermissions bool - RegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry - RemoteRef string // RemoteRef is the plugin name on the registry - - // PrivilegeFunc is a function that clients can supply to retry operations - // after getting an authorization error. This function returns the registry - // authentication header value in base64 encoded format, or an error if the - // privilege request fails. - // - // For details, refer to [github.com/docker/docker/api/types/registry.RequestAuthConfig]. - PrivilegeFunc func(context.Context) (string, error) - AcceptPermissionsFunc func(context.Context, PluginPrivileges) (bool, error) - Args []string -} - -// PluginCreateOptions hold all options to plugin create. -type PluginCreateOptions struct { - RepoName string -} diff --git a/vendor/github.com/docker/docker/api/types/common/id_response.go b/vendor/github.com/docker/docker/api/types/common/id_response.go deleted file mode 100644 index 22e8c60a..00000000 --- a/vendor/github.com/docker/docker/api/types/common/id_response.go +++ /dev/null @@ -1,13 +0,0 @@ -package common - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// IDResponse Response to an API call that returns just an Id -// swagger:model IDResponse -type IDResponse struct { - - // The id of the newly created object. - // Required: true - ID string `json:"Id"` -} diff --git a/vendor/github.com/docker/docker/api/types/container/change_type.go b/vendor/github.com/docker/docker/api/types/container/change_type.go deleted file mode 100644 index fe8d6d36..00000000 --- a/vendor/github.com/docker/docker/api/types/container/change_type.go +++ /dev/null @@ -1,15 +0,0 @@ -package container - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// ChangeType Kind of change -// -// Can be one of: -// -// - `0`: Modified ("C") -// - `1`: Added ("A") -// - `2`: Deleted ("D") -// -// swagger:model ChangeType -type ChangeType uint8 diff --git a/vendor/github.com/docker/docker/api/types/container/change_types.go b/vendor/github.com/docker/docker/api/types/container/change_types.go deleted file mode 100644 index 3a3a8386..00000000 --- a/vendor/github.com/docker/docker/api/types/container/change_types.go +++ /dev/null @@ -1,23 +0,0 @@ -package container - -const ( - // ChangeModify represents the modify operation. - ChangeModify ChangeType = 0 - // ChangeAdd represents the add operation. - ChangeAdd ChangeType = 1 - // ChangeDelete represents the delete operation. - ChangeDelete ChangeType = 2 -) - -func (ct ChangeType) String() string { - switch ct { - case ChangeModify: - return "C" - case ChangeAdd: - return "A" - case ChangeDelete: - return "D" - default: - return "" - } -} diff --git a/vendor/github.com/docker/docker/api/types/container/commit.go b/vendor/github.com/docker/docker/api/types/container/commit.go deleted file mode 100644 index 6fd1b0ea..00000000 --- a/vendor/github.com/docker/docker/api/types/container/commit.go +++ /dev/null @@ -1,7 +0,0 @@ -package container - -import "github.com/docker/docker/api/types/common" - -// CommitResponse response for the commit API call, containing the ID of the -// image that was produced. -type CommitResponse = common.IDResponse diff --git a/vendor/github.com/docker/docker/api/types/container/config.go b/vendor/github.com/docker/docker/api/types/container/config.go deleted file mode 100644 index 05554165..00000000 --- a/vendor/github.com/docker/docker/api/types/container/config.go +++ /dev/null @@ -1,73 +0,0 @@ -package container - -import ( - "time" - - "github.com/docker/docker/api/types/strslice" - "github.com/docker/go-connections/nat" - dockerspec "github.com/moby/docker-image-spec/specs-go/v1" -) - -// MinimumDuration puts a minimum on user configured duration. -// This is to prevent API error on time unit. For example, API may -// set 3 as healthcheck interval with intention of 3 seconds, but -// Docker interprets it as 3 nanoseconds. -const MinimumDuration = 1 * time.Millisecond - -// StopOptions holds the options to stop or restart a container. -type StopOptions struct { - // Signal (optional) is the signal to send to the container to (gracefully) - // stop it before forcibly terminating the container with SIGKILL after the - // timeout expires. If not value is set, the default (SIGTERM) is used. - Signal string `json:",omitempty"` - - // Timeout (optional) is the timeout (in seconds) to wait for the container - // to stop gracefully before forcibly terminating it with SIGKILL. - // - // - Use nil to use the default timeout (10 seconds). - // - Use '-1' to wait indefinitely. - // - Use '0' to not wait for the container to exit gracefully, and - // immediately proceeds to forcibly terminating the container. - // - Other positive values are used as timeout (in seconds). - Timeout *int `json:",omitempty"` -} - -// HealthConfig holds configuration settings for the HEALTHCHECK feature. -type HealthConfig = dockerspec.HealthcheckConfig - -// Config contains the configuration data about a container. -// It should hold only portable information about the container. -// Here, "portable" means "independent from the host we are running on". -// Non-portable information *should* appear in HostConfig. -// All fields added to this struct must be marked `omitempty` to keep getting -// predictable hashes from the old `v1Compatibility` configuration. -type Config struct { - Hostname string // Hostname - Domainname string // Domainname - User string // User that will run the command(s) inside the container, also support user:group - AttachStdin bool // Attach the standard input, makes possible user interaction - AttachStdout bool // Attach the standard output - AttachStderr bool // Attach the standard error - ExposedPorts nat.PortSet `json:",omitempty"` // List of exposed ports - Tty bool // Attach standard streams to a tty, including stdin if it is not closed. - OpenStdin bool // Open stdin - StdinOnce bool // If true, close stdin after the 1 attached client disconnects. - Env []string // List of environment variable to set in the container - Cmd strslice.StrSlice // Command to run when starting the container - Healthcheck *HealthConfig `json:",omitempty"` // Healthcheck describes how to check the container is healthy - ArgsEscaped bool `json:",omitempty"` // True if command is already escaped (meaning treat as a command line) (Windows specific). - Image string // Name of the image as it was passed by the operator (e.g. could be symbolic) - Volumes map[string]struct{} // List of volumes (mounts) used for the container - WorkingDir string // Current directory (PWD) in the command will be launched - Entrypoint strslice.StrSlice // Entrypoint to run when starting the container - NetworkDisabled bool `json:",omitempty"` // Is network disabled - // Mac Address of the container. - // - // Deprecated: this field is deprecated since API v1.44. Use EndpointSettings.MacAddress instead. - MacAddress string `json:",omitempty"` - OnBuild []string // ONBUILD metadata that were defined on the image Dockerfile - Labels map[string]string // List of labels set to this container - StopSignal string `json:",omitempty"` // Signal to stop a container - StopTimeout *int `json:",omitempty"` // Timeout (in seconds) to stop a container - Shell strslice.StrSlice `json:",omitempty"` // Shell for shell-form of RUN, CMD, ENTRYPOINT -} diff --git a/vendor/github.com/docker/docker/api/types/container/container.go b/vendor/github.com/docker/docker/api/types/container/container.go deleted file mode 100644 index a191ca8b..00000000 --- a/vendor/github.com/docker/docker/api/types/container/container.go +++ /dev/null @@ -1,188 +0,0 @@ -package container - -import ( - "io" - "os" - "time" - - "github.com/docker/docker/api/types/mount" - "github.com/docker/docker/api/types/storage" - ocispec "github.com/opencontainers/image-spec/specs-go/v1" -) - -// ContainerUpdateOKBody OK response to ContainerUpdate operation -// -// Deprecated: use [UpdateResponse]. This alias will be removed in the next release. -type ContainerUpdateOKBody = UpdateResponse - -// ContainerTopOKBody OK response to ContainerTop operation -// -// Deprecated: use [TopResponse]. This alias will be removed in the next release. -type ContainerTopOKBody = TopResponse - -// PruneReport contains the response for Engine API: -// POST "/containers/prune" -type PruneReport struct { - ContainersDeleted []string - SpaceReclaimed uint64 -} - -// PathStat is used to encode the header from -// GET "/containers/{name:.*}/archive" -// "Name" is the file or directory name. -type PathStat struct { - Name string `json:"name"` - Size int64 `json:"size"` - Mode os.FileMode `json:"mode"` - Mtime time.Time `json:"mtime"` - LinkTarget string `json:"linkTarget"` -} - -// CopyToContainerOptions holds information -// about files to copy into a container -type CopyToContainerOptions struct { - AllowOverwriteDirWithFile bool - CopyUIDGID bool -} - -// StatsResponseReader wraps an io.ReadCloser to read (a stream of) stats -// for a container, as produced by the GET "/stats" endpoint. -// -// The OSType field is set to the server's platform to allow -// platform-specific handling of the response. -// -// TODO(thaJeztah): remove this wrapper, and make OSType part of [StatsResponse]. -type StatsResponseReader struct { - Body io.ReadCloser `json:"body"` - OSType string `json:"ostype"` -} - -// MountPoint represents a mount point configuration inside the container. -// This is used for reporting the mountpoints in use by a container. -type MountPoint struct { - // Type is the type of mount, see `Type` definitions in - // github.com/docker/docker/api/types/mount.Type - Type mount.Type `json:",omitempty"` - - // Name is the name reference to the underlying data defined by `Source` - // e.g., the volume name. - Name string `json:",omitempty"` - - // Source is the source location of the mount. - // - // For volumes, this contains the storage location of the volume (within - // `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains - // the source (host) part of the bind-mount. For `tmpfs` mount points, this - // field is empty. - Source string - - // Destination is the path relative to the container root (`/`) where the - // Source is mounted inside the container. - Destination string - - // Driver is the volume driver used to create the volume (if it is a volume). - Driver string `json:",omitempty"` - - // Mode is a comma separated list of options supplied by the user when - // creating the bind/volume mount. - // - // The default is platform-specific (`"z"` on Linux, empty on Windows). - Mode string - - // RW indicates whether the mount is mounted writable (read-write). - RW bool - - // Propagation describes how mounts are propagated from the host into the - // mount point, and vice-versa. Refer to the Linux kernel documentation - // for details: - // https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt - // - // This field is not used on Windows. - Propagation mount.Propagation -} - -// State stores container's running state -// it's part of ContainerJSONBase and returned by "inspect" command -type State struct { - Status ContainerState // String representation of the container state. Can be one of "created", "running", "paused", "restarting", "removing", "exited", or "dead" - Running bool - Paused bool - Restarting bool - OOMKilled bool - Dead bool - Pid int - ExitCode int - Error string - StartedAt string - FinishedAt string - Health *Health `json:",omitempty"` -} - -// Summary contains response of Engine API: -// GET "/containers/json" -type Summary struct { - ID string `json:"Id"` - Names []string - Image string - ImageID string - ImageManifestDescriptor *ocispec.Descriptor `json:"ImageManifestDescriptor,omitempty"` - Command string - Created int64 - Ports []Port - SizeRw int64 `json:",omitempty"` - SizeRootFs int64 `json:",omitempty"` - Labels map[string]string - State ContainerState - Status string - HostConfig struct { - NetworkMode string `json:",omitempty"` - Annotations map[string]string `json:",omitempty"` - } - NetworkSettings *NetworkSettingsSummary - Mounts []MountPoint -} - -// ContainerJSONBase contains response of Engine API GET "/containers/{name:.*}/json" -// for API version 1.18 and older. -// -// TODO(thaJeztah): combine ContainerJSONBase and InspectResponse into a single struct. -// The split between ContainerJSONBase (ContainerJSONBase) and InspectResponse (InspectResponse) -// was done in commit 6deaa58ba5f051039643cedceee97c8695e2af74 (https://github.com/moby/moby/pull/13675). -// ContainerJSONBase contained all fields for API < 1.19, and InspectResponse -// held fields that were added in API 1.19 and up. Given that the minimum -// supported API version is now 1.24, we no longer use the separate type. -type ContainerJSONBase struct { - ID string `json:"Id"` - Created string - Path string - Args []string - State *State - Image string - ResolvConfPath string - HostnamePath string - HostsPath string - LogPath string - Name string - RestartCount int - Driver string - Platform string - MountLabel string - ProcessLabel string - AppArmorProfile string - ExecIDs []string - HostConfig *HostConfig - GraphDriver storage.DriverData - SizeRw *int64 `json:",omitempty"` - SizeRootFs *int64 `json:",omitempty"` -} - -// InspectResponse is the response for the GET "/containers/{name:.*}/json" -// endpoint. -type InspectResponse struct { - *ContainerJSONBase - Mounts []MountPoint - Config *Config - NetworkSettings *NetworkSettings - // ImageManifestDescriptor is the descriptor of a platform-specific manifest of the image used to create the container. - ImageManifestDescriptor *ocispec.Descriptor `json:"ImageManifestDescriptor,omitempty"` -} diff --git a/vendor/github.com/docker/docker/api/types/container/create_request.go b/vendor/github.com/docker/docker/api/types/container/create_request.go deleted file mode 100644 index e98dd6ad..00000000 --- a/vendor/github.com/docker/docker/api/types/container/create_request.go +++ /dev/null @@ -1,13 +0,0 @@ -package container - -import "github.com/docker/docker/api/types/network" - -// CreateRequest is the request message sent to the server for container -// create calls. It is a config wrapper that holds the container [Config] -// (portable) and the corresponding [HostConfig] (non-portable) and -// [network.NetworkingConfig]. -type CreateRequest struct { - *Config - HostConfig *HostConfig `json:"HostConfig,omitempty"` - NetworkingConfig *network.NetworkingConfig `json:"NetworkingConfig,omitempty"` -} diff --git a/vendor/github.com/docker/docker/api/types/container/create_response.go b/vendor/github.com/docker/docker/api/types/container/create_response.go deleted file mode 100644 index aa0e7f7d..00000000 --- a/vendor/github.com/docker/docker/api/types/container/create_response.go +++ /dev/null @@ -1,19 +0,0 @@ -package container - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// CreateResponse ContainerCreateResponse -// -// OK response to ContainerCreate operation -// swagger:model CreateResponse -type CreateResponse struct { - - // The ID of the created container - // Required: true - ID string `json:"Id"` - - // Warnings encountered when creating the container - // Required: true - Warnings []string `json:"Warnings"` -} diff --git a/vendor/github.com/docker/docker/api/types/container/disk_usage.go b/vendor/github.com/docker/docker/api/types/container/disk_usage.go deleted file mode 100644 index d77538c2..00000000 --- a/vendor/github.com/docker/docker/api/types/container/disk_usage.go +++ /dev/null @@ -1,10 +0,0 @@ -package container - -// DiskUsage contains disk usage for containers. -// -// Deprecated: this type is no longer used and will be removed in the next release. -type DiskUsage struct { - TotalSize int64 - Reclaimable int64 - Items []*Summary -} diff --git a/vendor/github.com/docker/docker/api/types/container/errors.go b/vendor/github.com/docker/docker/api/types/container/errors.go deleted file mode 100644 index 32c97803..00000000 --- a/vendor/github.com/docker/docker/api/types/container/errors.go +++ /dev/null @@ -1,9 +0,0 @@ -package container - -type errInvalidParameter struct{ error } - -func (e *errInvalidParameter) InvalidParameter() {} - -func (e *errInvalidParameter) Unwrap() error { - return e.error -} diff --git a/vendor/github.com/docker/docker/api/types/container/exec.go b/vendor/github.com/docker/docker/api/types/container/exec.go deleted file mode 100644 index e455cd27..00000000 --- a/vendor/github.com/docker/docker/api/types/container/exec.go +++ /dev/null @@ -1,53 +0,0 @@ -package container - -import "github.com/docker/docker/api/types/common" - -// ExecCreateResponse is the response for a successful exec-create request. -// It holds the ID of the exec that was created. -// -// TODO(thaJeztah): make this a distinct type. -type ExecCreateResponse = common.IDResponse - -// ExecOptions is a small subset of the Config struct that holds the configuration -// for the exec feature of docker. -type ExecOptions struct { - User string // User that will run the command - Privileged bool // Is the container in privileged mode - Tty bool // Attach standard streams to a tty. - ConsoleSize *[2]uint `json:",omitempty"` // Initial console size [height, width] - AttachStdin bool // Attach the standard input, makes possible user interaction - AttachStderr bool // Attach the standard error - AttachStdout bool // Attach the standard output - DetachKeys string // Escape keys for detach - Env []string // Environment variables - WorkingDir string // Working directory - Cmd []string // Execution commands and args - - // Deprecated: the Detach field is not used, and will be removed in a future release. - Detach bool -} - -// ExecStartOptions is a temp struct used by execStart -// Config fields is part of ExecConfig in runconfig package -type ExecStartOptions struct { - // ExecStart will first check if it's detached - Detach bool - // Check if there's a tty - Tty bool - // Terminal size [height, width], unused if Tty == false - ConsoleSize *[2]uint `json:",omitempty"` -} - -// ExecAttachOptions is a temp struct used by execAttach. -// -// TODO(thaJeztah): make this a separate type; ContainerExecAttach does not use the Detach option, and cannot run detached. -type ExecAttachOptions = ExecStartOptions - -// ExecInspect holds information returned by exec inspect. -type ExecInspect struct { - ExecID string `json:"ID"` - ContainerID string - Running bool - ExitCode int - Pid int -} diff --git a/vendor/github.com/docker/docker/api/types/container/filesystem_change.go b/vendor/github.com/docker/docker/api/types/container/filesystem_change.go deleted file mode 100644 index 9e9c2ad1..00000000 --- a/vendor/github.com/docker/docker/api/types/container/filesystem_change.go +++ /dev/null @@ -1,19 +0,0 @@ -package container - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// FilesystemChange Change in the container's filesystem. -// -// swagger:model FilesystemChange -type FilesystemChange struct { - - // kind - // Required: true - Kind ChangeType `json:"Kind"` - - // Path to file or directory that has changed. - // - // Required: true - Path string `json:"Path"` -} diff --git a/vendor/github.com/docker/docker/api/types/container/health.go b/vendor/github.com/docker/docker/api/types/container/health.go deleted file mode 100644 index 96e91cc8..00000000 --- a/vendor/github.com/docker/docker/api/types/container/health.go +++ /dev/null @@ -1,50 +0,0 @@ -package container - -import ( - "fmt" - "strings" - "time" -) - -// HealthStatus is a string representation of the container's health. -// -// It currently is an alias for string, but may become a distinct type in future. -type HealthStatus = string - -// Health states -const ( - NoHealthcheck HealthStatus = "none" // Indicates there is no healthcheck - Starting HealthStatus = "starting" // Starting indicates that the container is not yet ready - Healthy HealthStatus = "healthy" // Healthy indicates that the container is running correctly - Unhealthy HealthStatus = "unhealthy" // Unhealthy indicates that the container has a problem -) - -// Health stores information about the container's healthcheck results -type Health struct { - Status HealthStatus // Status is one of [Starting], [Healthy] or [Unhealthy]. - FailingStreak int // FailingStreak is the number of consecutive failures - Log []*HealthcheckResult // Log contains the last few results (oldest first) -} - -// HealthcheckResult stores information about a single run of a healthcheck probe -type HealthcheckResult struct { - Start time.Time // Start is the time this check started - End time.Time // End is the time this check ended - ExitCode int // ExitCode meanings: 0=healthy, 1=unhealthy, 2=reserved (considered unhealthy), else=error running probe - Output string // Output from last check -} - -var validHealths = []string{ - NoHealthcheck, Starting, Healthy, Unhealthy, -} - -// ValidateHealthStatus checks if the provided string is a valid -// container [HealthStatus]. -func ValidateHealthStatus(s HealthStatus) error { - switch s { - case NoHealthcheck, Starting, Healthy, Unhealthy: - return nil - default: - return errInvalidParameter{error: fmt.Errorf("invalid value for health (%s): must be one of %s", s, strings.Join(validHealths, ", "))} - } -} diff --git a/vendor/github.com/docker/docker/api/types/container/hostconfig.go b/vendor/github.com/docker/docker/api/types/container/hostconfig.go deleted file mode 100644 index 7a41436c..00000000 --- a/vendor/github.com/docker/docker/api/types/container/hostconfig.go +++ /dev/null @@ -1,506 +0,0 @@ -package container - -import ( - "errors" - "fmt" - "strings" - - "github.com/docker/docker/api/types/blkiodev" - "github.com/docker/docker/api/types/mount" - "github.com/docker/docker/api/types/network" - "github.com/docker/docker/api/types/strslice" - "github.com/docker/go-connections/nat" - "github.com/docker/go-units" -) - -// CgroupnsMode represents the cgroup namespace mode of the container -type CgroupnsMode string - -// cgroup namespace modes for containers -const ( - CgroupnsModeEmpty CgroupnsMode = "" - CgroupnsModePrivate CgroupnsMode = "private" - CgroupnsModeHost CgroupnsMode = "host" -) - -// IsPrivate indicates whether the container uses its own private cgroup namespace -func (c CgroupnsMode) IsPrivate() bool { - return c == CgroupnsModePrivate -} - -// IsHost indicates whether the container shares the host's cgroup namespace -func (c CgroupnsMode) IsHost() bool { - return c == CgroupnsModeHost -} - -// IsEmpty indicates whether the container cgroup namespace mode is unset -func (c CgroupnsMode) IsEmpty() bool { - return c == CgroupnsModeEmpty -} - -// Valid indicates whether the cgroup namespace mode is valid -func (c CgroupnsMode) Valid() bool { - return c.IsEmpty() || c.IsPrivate() || c.IsHost() -} - -// Isolation represents the isolation technology of a container. The supported -// values are platform specific -type Isolation string - -// Isolation modes for containers -const ( - IsolationEmpty Isolation = "" // IsolationEmpty is unspecified (same behavior as default) - IsolationDefault Isolation = "default" // IsolationDefault is the default isolation mode on current daemon - IsolationProcess Isolation = "process" // IsolationProcess is process isolation mode - IsolationHyperV Isolation = "hyperv" // IsolationHyperV is HyperV isolation mode -) - -// IsDefault indicates the default isolation technology of a container. On Linux this -// is the native driver. On Windows, this is a Windows Server Container. -func (i Isolation) IsDefault() bool { - // TODO consider making isolation-mode strict (case-sensitive) - v := Isolation(strings.ToLower(string(i))) - return v == IsolationDefault || v == IsolationEmpty -} - -// IsHyperV indicates the use of a Hyper-V partition for isolation -func (i Isolation) IsHyperV() bool { - // TODO consider making isolation-mode strict (case-sensitive) - return Isolation(strings.ToLower(string(i))) == IsolationHyperV -} - -// IsProcess indicates the use of process isolation -func (i Isolation) IsProcess() bool { - // TODO consider making isolation-mode strict (case-sensitive) - return Isolation(strings.ToLower(string(i))) == IsolationProcess -} - -// IpcMode represents the container ipc stack. -type IpcMode string - -// IpcMode constants -const ( - IPCModeNone IpcMode = "none" - IPCModeHost IpcMode = "host" - IPCModeContainer IpcMode = "container" - IPCModePrivate IpcMode = "private" - IPCModeShareable IpcMode = "shareable" -) - -// IsPrivate indicates whether the container uses its own private ipc namespace which can not be shared. -func (n IpcMode) IsPrivate() bool { - return n == IPCModePrivate -} - -// IsHost indicates whether the container shares the host's ipc namespace. -func (n IpcMode) IsHost() bool { - return n == IPCModeHost -} - -// IsShareable indicates whether the container's ipc namespace can be shared with another container. -func (n IpcMode) IsShareable() bool { - return n == IPCModeShareable -} - -// IsContainer indicates whether the container uses another container's ipc namespace. -func (n IpcMode) IsContainer() bool { - _, ok := containerID(string(n)) - return ok -} - -// IsNone indicates whether container IpcMode is set to "none". -func (n IpcMode) IsNone() bool { - return n == IPCModeNone -} - -// IsEmpty indicates whether container IpcMode is empty -func (n IpcMode) IsEmpty() bool { - return n == "" -} - -// Valid indicates whether the ipc mode is valid. -func (n IpcMode) Valid() bool { - // TODO(thaJeztah): align with PidMode, and consider container-mode without a container name/ID to be invalid. - return n.IsEmpty() || n.IsNone() || n.IsPrivate() || n.IsHost() || n.IsShareable() || n.IsContainer() -} - -// Container returns the name of the container ipc stack is going to be used. -func (n IpcMode) Container() (idOrName string) { - idOrName, _ = containerID(string(n)) - return idOrName -} - -// NetworkMode represents the container network stack. -type NetworkMode string - -// IsNone indicates whether container isn't using a network stack. -func (n NetworkMode) IsNone() bool { - return n == network.NetworkNone -} - -// IsDefault indicates whether container uses the default network stack. -func (n NetworkMode) IsDefault() bool { - return n == network.NetworkDefault -} - -// IsPrivate indicates whether container uses its private network stack. -func (n NetworkMode) IsPrivate() bool { - return !n.IsHost() && !n.IsContainer() -} - -// IsContainer indicates whether container uses a container network stack. -func (n NetworkMode) IsContainer() bool { - _, ok := containerID(string(n)) - return ok -} - -// ConnectedContainer is the id of the container which network this container is connected to. -func (n NetworkMode) ConnectedContainer() (idOrName string) { - idOrName, _ = containerID(string(n)) - return idOrName -} - -// UserDefined indicates user-created network -func (n NetworkMode) UserDefined() string { - if n.IsUserDefined() { - return string(n) - } - return "" -} - -// UsernsMode represents userns mode in the container. -type UsernsMode string - -// IsHost indicates whether the container uses the host's userns. -func (n UsernsMode) IsHost() bool { - return n == "host" -} - -// IsPrivate indicates whether the container uses the a private userns. -func (n UsernsMode) IsPrivate() bool { - return !n.IsHost() -} - -// Valid indicates whether the userns is valid. -func (n UsernsMode) Valid() bool { - return n == "" || n.IsHost() -} - -// CgroupSpec represents the cgroup to use for the container. -type CgroupSpec string - -// IsContainer indicates whether the container is using another container cgroup -func (c CgroupSpec) IsContainer() bool { - _, ok := containerID(string(c)) - return ok -} - -// Valid indicates whether the cgroup spec is valid. -func (c CgroupSpec) Valid() bool { - // TODO(thaJeztah): align with PidMode, and consider container-mode without a container name/ID to be invalid. - return c == "" || c.IsContainer() -} - -// Container returns the ID or name of the container whose cgroup will be used. -func (c CgroupSpec) Container() (idOrName string) { - idOrName, _ = containerID(string(c)) - return idOrName -} - -// UTSMode represents the UTS namespace of the container. -type UTSMode string - -// IsPrivate indicates whether the container uses its private UTS namespace. -func (n UTSMode) IsPrivate() bool { - return !n.IsHost() -} - -// IsHost indicates whether the container uses the host's UTS namespace. -func (n UTSMode) IsHost() bool { - return n == "host" -} - -// Valid indicates whether the UTS namespace is valid. -func (n UTSMode) Valid() bool { - return n == "" || n.IsHost() -} - -// PidMode represents the pid namespace of the container. -type PidMode string - -// IsPrivate indicates whether the container uses its own new pid namespace. -func (n PidMode) IsPrivate() bool { - return !n.IsHost() && !n.IsContainer() -} - -// IsHost indicates whether the container uses the host's pid namespace. -func (n PidMode) IsHost() bool { - return n == "host" -} - -// IsContainer indicates whether the container uses a container's pid namespace. -func (n PidMode) IsContainer() bool { - _, ok := containerID(string(n)) - return ok -} - -// Valid indicates whether the pid namespace is valid. -func (n PidMode) Valid() bool { - return n == "" || n.IsHost() || validContainer(string(n)) -} - -// Container returns the name of the container whose pid namespace is going to be used. -func (n PidMode) Container() (idOrName string) { - idOrName, _ = containerID(string(n)) - return idOrName -} - -// DeviceRequest represents a request for devices from a device driver. -// Used by GPU device drivers. -type DeviceRequest struct { - Driver string // Name of device driver - Count int // Number of devices to request (-1 = All) - DeviceIDs []string // List of device IDs as recognizable by the device driver - Capabilities [][]string // An OR list of AND lists of device capabilities (e.g. "gpu") - Options map[string]string // Options to pass onto the device driver -} - -// DeviceMapping represents the device mapping between the host and the container. -type DeviceMapping struct { - PathOnHost string - PathInContainer string - CgroupPermissions string -} - -// RestartPolicy represents the restart policies of the container. -type RestartPolicy struct { - Name RestartPolicyMode - MaximumRetryCount int -} - -type RestartPolicyMode string - -const ( - RestartPolicyDisabled RestartPolicyMode = "no" - RestartPolicyAlways RestartPolicyMode = "always" - RestartPolicyOnFailure RestartPolicyMode = "on-failure" - RestartPolicyUnlessStopped RestartPolicyMode = "unless-stopped" -) - -// IsNone indicates whether the container has the "no" restart policy. -// This means the container will not automatically restart when exiting. -func (rp *RestartPolicy) IsNone() bool { - return rp.Name == RestartPolicyDisabled || rp.Name == "" -} - -// IsAlways indicates whether the container has the "always" restart policy. -// This means the container will automatically restart regardless of the exit status. -func (rp *RestartPolicy) IsAlways() bool { - return rp.Name == RestartPolicyAlways -} - -// IsOnFailure indicates whether the container has the "on-failure" restart policy. -// This means the container will automatically restart of exiting with a non-zero exit status. -func (rp *RestartPolicy) IsOnFailure() bool { - return rp.Name == RestartPolicyOnFailure -} - -// IsUnlessStopped indicates whether the container has the -// "unless-stopped" restart policy. This means the container will -// automatically restart unless user has put it to stopped state. -func (rp *RestartPolicy) IsUnlessStopped() bool { - return rp.Name == RestartPolicyUnlessStopped -} - -// IsSame compares two RestartPolicy to see if they are the same -func (rp *RestartPolicy) IsSame(tp *RestartPolicy) bool { - return rp.Name == tp.Name && rp.MaximumRetryCount == tp.MaximumRetryCount -} - -// ValidateRestartPolicy validates the given RestartPolicy. -func ValidateRestartPolicy(policy RestartPolicy) error { - switch policy.Name { - case RestartPolicyAlways, RestartPolicyUnlessStopped, RestartPolicyDisabled: - if policy.MaximumRetryCount != 0 { - msg := "invalid restart policy: maximum retry count can only be used with 'on-failure'" - if policy.MaximumRetryCount < 0 { - msg += " and cannot be negative" - } - return &errInvalidParameter{errors.New(msg)} - } - return nil - case RestartPolicyOnFailure: - if policy.MaximumRetryCount < 0 { - return &errInvalidParameter{errors.New("invalid restart policy: maximum retry count cannot be negative")} - } - return nil - case "": - // Versions before v25.0.0 created an empty restart-policy "name" as - // default. Allow an empty name with "any" MaximumRetryCount for - // backward-compatibility. - return nil - default: - return &errInvalidParameter{fmt.Errorf("invalid restart policy: unknown policy '%s'; use one of '%s', '%s', '%s', or '%s'", policy.Name, RestartPolicyDisabled, RestartPolicyAlways, RestartPolicyOnFailure, RestartPolicyUnlessStopped)} - } -} - -// LogMode is a type to define the available modes for logging -// These modes affect how logs are handled when log messages start piling up. -type LogMode string - -// Available logging modes -const ( - LogModeUnset LogMode = "" - LogModeBlocking LogMode = "blocking" - LogModeNonBlock LogMode = "non-blocking" -) - -// LogConfig represents the logging configuration of the container. -type LogConfig struct { - Type string - Config map[string]string -} - -// Ulimit is an alias for [units.Ulimit], which may be moving to a different -// location or become a local type. This alias is to help transitioning. -// -// Users are recommended to use this alias instead of using [units.Ulimit] directly. -type Ulimit = units.Ulimit - -// Resources contains container's resources (cgroups config, ulimits...) -type Resources struct { - // Applicable to all platforms - CPUShares int64 `json:"CpuShares"` // CPU shares (relative weight vs. other containers) - Memory int64 // Memory limit (in bytes) - NanoCPUs int64 `json:"NanoCpus"` // CPU quota in units of 10-9 CPUs. - - // Applicable to UNIX platforms - CgroupParent string // Parent cgroup. - BlkioWeight uint16 // Block IO weight (relative weight vs. other containers) - BlkioWeightDevice []*blkiodev.WeightDevice - BlkioDeviceReadBps []*blkiodev.ThrottleDevice - BlkioDeviceWriteBps []*blkiodev.ThrottleDevice - BlkioDeviceReadIOps []*blkiodev.ThrottleDevice - BlkioDeviceWriteIOps []*blkiodev.ThrottleDevice - CPUPeriod int64 `json:"CpuPeriod"` // CPU CFS (Completely Fair Scheduler) period - CPUQuota int64 `json:"CpuQuota"` // CPU CFS (Completely Fair Scheduler) quota - CPURealtimePeriod int64 `json:"CpuRealtimePeriod"` // CPU real-time period - CPURealtimeRuntime int64 `json:"CpuRealtimeRuntime"` // CPU real-time runtime - CpusetCpus string // CpusetCpus 0-2, 0,1 - CpusetMems string // CpusetMems 0-2, 0,1 - Devices []DeviceMapping // List of devices to map inside the container - DeviceCgroupRules []string // List of rule to be added to the device cgroup - DeviceRequests []DeviceRequest // List of device requests for device drivers - - // KernelMemory specifies the kernel memory limit (in bytes) for the container. - // Deprecated: kernel 5.4 deprecated kmem.limit_in_bytes. - KernelMemory int64 `json:",omitempty"` - // Hard limit for kernel TCP buffer memory (in bytes). - // - // Deprecated: This field is deprecated and will be removed in the next release. - // Starting with 6.12, the kernel has deprecated kernel memory tcp accounting - // for cgroups v1. - KernelMemoryTCP int64 `json:",omitempty"` // Hard limit for kernel TCP buffer memory (in bytes) - MemoryReservation int64 // Memory soft limit (in bytes) - MemorySwap int64 // Total memory usage (memory + swap); set `-1` to enable unlimited swap - MemorySwappiness *int64 // Tuning container memory swappiness behaviour - OomKillDisable *bool // Whether to disable OOM Killer or not - PidsLimit *int64 // Setting PIDs limit for a container; Set `0` or `-1` for unlimited, or `null` to not change. - Ulimits []*Ulimit // List of ulimits to be set in the container - - // Applicable to Windows - CPUCount int64 `json:"CpuCount"` // CPU count - CPUPercent int64 `json:"CpuPercent"` // CPU percent - IOMaximumIOps uint64 // Maximum IOps for the container system drive - IOMaximumBandwidth uint64 // Maximum IO in bytes per second for the container system drive -} - -// UpdateConfig holds the mutable attributes of a Container. -// Those attributes can be updated at runtime. -type UpdateConfig struct { - // Contains container's resources (cgroups, ulimits) - Resources - RestartPolicy RestartPolicy -} - -// HostConfig the non-portable Config structure of a container. -// Here, "non-portable" means "dependent of the host we are running on". -// Portable information *should* appear in Config. -type HostConfig struct { - // Applicable to all platforms - Binds []string // List of volume bindings for this container - ContainerIDFile string // File (path) where the containerId is written - LogConfig LogConfig // Configuration of the logs for this container - NetworkMode NetworkMode // Network mode to use for the container - PortBindings nat.PortMap // Port mapping between the exposed port (container) and the host - RestartPolicy RestartPolicy // Restart policy to be used for the container - AutoRemove bool // Automatically remove container when it exits - VolumeDriver string // Name of the volume driver used to mount volumes - VolumesFrom []string // List of volumes to take from other container - ConsoleSize [2]uint // Initial console size (height,width) - Annotations map[string]string `json:",omitempty"` // Arbitrary non-identifying metadata attached to container and provided to the runtime - - // Applicable to UNIX platforms - CapAdd strslice.StrSlice // List of kernel capabilities to add to the container - CapDrop strslice.StrSlice // List of kernel capabilities to remove from the container - CgroupnsMode CgroupnsMode // Cgroup namespace mode to use for the container - DNS []string `json:"Dns"` // List of DNS server to lookup - DNSOptions []string `json:"DnsOptions"` // List of DNSOption to look for - DNSSearch []string `json:"DnsSearch"` // List of DNSSearch to look for - ExtraHosts []string // List of extra hosts - GroupAdd []string // List of additional groups that the container process will run as - IpcMode IpcMode // IPC namespace to use for the container - Cgroup CgroupSpec // Cgroup to use for the container - Links []string // List of links (in the name:alias form) - OomScoreAdj int // Container preference for OOM-killing - PidMode PidMode // PID namespace to use for the container - Privileged bool // Is the container in privileged mode - PublishAllPorts bool // Should docker publish all exposed port for the container - ReadonlyRootfs bool // Is the container root filesystem in read-only - SecurityOpt []string // List of string values to customize labels for MLS systems, such as SELinux. - StorageOpt map[string]string `json:",omitempty"` // Storage driver options per container. - Tmpfs map[string]string `json:",omitempty"` // List of tmpfs (mounts) used for the container - UTSMode UTSMode // UTS namespace to use for the container - UsernsMode UsernsMode // The user namespace to use for the container - ShmSize int64 // Total shm memory usage - Sysctls map[string]string `json:",omitempty"` // List of Namespaced sysctls used for the container - Runtime string `json:",omitempty"` // Runtime to use with this container - - // Applicable to Windows - Isolation Isolation // Isolation technology of the container (e.g. default, hyperv) - - // Contains container's resources (cgroups, ulimits) - Resources - - // Mounts specs used by the container - Mounts []mount.Mount `json:",omitempty"` - - // MaskedPaths is the list of paths to be masked inside the container (this overrides the default set of paths) - MaskedPaths []string - - // ReadonlyPaths is the list of paths to be set as read-only inside the container (this overrides the default set of paths) - ReadonlyPaths []string - - // Run a custom init inside the container, if null, use the daemon's configured settings - Init *bool `json:",omitempty"` -} - -// containerID splits "container:" values. It returns the container -// ID or name, and whether an ID/name was found. It returns an empty string and -// a "false" if the value does not have a "container:" prefix. Further validation -// of the returned, including checking if the value is empty, should be handled -// by the caller. -func containerID(val string) (idOrName string, ok bool) { - k, v, hasSep := strings.Cut(val, ":") - if !hasSep || k != "container" { - return "", false - } - return v, true -} - -// validContainer checks if the given value is a "container:" mode with -// a non-empty name/ID. -func validContainer(val string) bool { - id, ok := containerID(val) - return ok && id != "" -} diff --git a/vendor/github.com/docker/docker/api/types/container/hostconfig_unix.go b/vendor/github.com/docker/docker/api/types/container/hostconfig_unix.go deleted file mode 100644 index cd6a7a9b..00000000 --- a/vendor/github.com/docker/docker/api/types/container/hostconfig_unix.go +++ /dev/null @@ -1,45 +0,0 @@ -//go:build !windows - -package container - -import "github.com/docker/docker/api/types/network" - -// IsValid indicates if an isolation technology is valid -func (i Isolation) IsValid() bool { - return i.IsDefault() -} - -// IsBridge indicates whether container uses the bridge network stack -func (n NetworkMode) IsBridge() bool { - return n == network.NetworkBridge -} - -// IsHost indicates whether container uses the host network stack. -func (n NetworkMode) IsHost() bool { - return n == network.NetworkHost -} - -// IsUserDefined indicates user-created network -func (n NetworkMode) IsUserDefined() bool { - return !n.IsDefault() && !n.IsBridge() && !n.IsHost() && !n.IsNone() && !n.IsContainer() -} - -// NetworkName returns the name of the network stack. -func (n NetworkMode) NetworkName() string { - switch { - case n.IsDefault(): - return network.NetworkDefault - case n.IsBridge(): - return network.NetworkBridge - case n.IsHost(): - return network.NetworkHost - case n.IsNone(): - return network.NetworkNone - case n.IsContainer(): - return "container" - case n.IsUserDefined(): - return n.UserDefined() - default: - return "" - } -} diff --git a/vendor/github.com/docker/docker/api/types/container/hostconfig_windows.go b/vendor/github.com/docker/docker/api/types/container/hostconfig_windows.go deleted file mode 100644 index db63e190..00000000 --- a/vendor/github.com/docker/docker/api/types/container/hostconfig_windows.go +++ /dev/null @@ -1,47 +0,0 @@ -package container - -import "github.com/docker/docker/api/types/network" - -// IsValid indicates if an isolation technology is valid -func (i Isolation) IsValid() bool { - return i.IsDefault() || i.IsHyperV() || i.IsProcess() -} - -// IsBridge indicates whether container uses the bridge network stack -// in windows it is given the name NAT -func (n NetworkMode) IsBridge() bool { - return n == network.NetworkNat -} - -// IsHost indicates whether container uses the host network stack. -// returns false as this is not supported by windows -func (n NetworkMode) IsHost() bool { - return false -} - -// IsUserDefined indicates user-created network -func (n NetworkMode) IsUserDefined() bool { - return !n.IsDefault() && !n.IsNone() && !n.IsBridge() && !n.IsContainer() -} - -// NetworkName returns the name of the network stack. -func (n NetworkMode) NetworkName() string { - switch { - case n.IsDefault(): - return network.NetworkDefault - case n.IsBridge(): - return network.NetworkNat - case n.IsHost(): - // Windows currently doesn't support host network-mode, so - // this would currently never happen.. - return network.NetworkHost - case n.IsNone(): - return network.NetworkNone - case n.IsContainer(): - return "container" - case n.IsUserDefined(): - return n.UserDefined() - default: - return "" - } -} diff --git a/vendor/github.com/docker/docker/api/types/container/network_settings.go b/vendor/github.com/docker/docker/api/types/container/network_settings.go deleted file mode 100644 index 687145f2..00000000 --- a/vendor/github.com/docker/docker/api/types/container/network_settings.go +++ /dev/null @@ -1,85 +0,0 @@ -package container - -import ( - "github.com/docker/docker/api/types/network" - "github.com/docker/go-connections/nat" -) - -// NetworkSettings exposes the network settings in the api -type NetworkSettings struct { - NetworkSettingsBase - DefaultNetworkSettings - Networks map[string]*network.EndpointSettings -} - -// NetworkSettingsBase holds networking state for a container when inspecting it. -// -// Deprecated: Most fields in NetworkSettingsBase are deprecated. Fields which aren't deprecated will move to -// NetworkSettings in v29.0, and this struct will be removed. -type NetworkSettingsBase struct { - Bridge string // Deprecated: This field is only set when the daemon is started with the --bridge flag specified. - SandboxID string // SandboxID uniquely represents a container's network stack - SandboxKey string // SandboxKey identifies the sandbox - Ports nat.PortMap // Ports is a collection of PortBinding indexed by Port - - // HairpinMode specifies if hairpin NAT should be enabled on the virtual interface - // - // Deprecated: This field is never set and will be removed in a future release. - HairpinMode bool - // LinkLocalIPv6Address is an IPv6 unicast address using the link-local prefix - // - // Deprecated: This field is never set and will be removed in a future release. - LinkLocalIPv6Address string - // LinkLocalIPv6PrefixLen is the prefix length of an IPv6 unicast address - // - // Deprecated: This field is never set and will be removed in a future release. - LinkLocalIPv6PrefixLen int - SecondaryIPAddresses []network.Address // Deprecated: This field is never set and will be removed in a future release. - SecondaryIPv6Addresses []network.Address // Deprecated: This field is never set and will be removed in a future release. -} - -// DefaultNetworkSettings holds the networking state for the default bridge, if the container is connected to that -// network. -// -// Deprecated: this struct is deprecated since Docker v1.11 and will be removed in v29. You should look for the default -// network in NetworkSettings.Networks instead. -type DefaultNetworkSettings struct { - // EndpointID uniquely represents a service endpoint in a Sandbox - // - // Deprecated: This field will be removed in v29. You should look for the default network in NetworkSettings.Networks instead. - EndpointID string - // Gateway holds the gateway address for the network - // - // Deprecated: This field will be removed in v29. You should look for the default network in NetworkSettings.Networks instead. - Gateway string - // GlobalIPv6Address holds network's global IPv6 address - // - // Deprecated: This field will be removed in v29. You should look for the default network in NetworkSettings.Networks instead. - GlobalIPv6Address string - // GlobalIPv6PrefixLen represents mask length of network's global IPv6 address - // - // Deprecated: This field will be removed in v29. You should look for the default network in NetworkSettings.Networks instead. - GlobalIPv6PrefixLen int - // IPAddress holds the IPv4 address for the network - // - // Deprecated: This field will be removed in v29. You should look for the default network in NetworkSettings.Networks instead. - IPAddress string - // IPPrefixLen represents mask length of network's IPv4 address - // - // Deprecated: This field will be removed in v29. You should look for the default network in NetworkSettings.Networks instead. - IPPrefixLen int - // IPv6Gateway holds gateway address specific for IPv6 - // - // Deprecated: This field will be removed in v29. You should look for the default network in NetworkSettings.Networks instead. - IPv6Gateway string - // MacAddress holds the MAC address for the network - // - // Deprecated: This field will be removed in v29. You should look for the default network in NetworkSettings.Networks instead. - MacAddress string -} - -// NetworkSettingsSummary provides a summary of container's networks -// in /containers/json -type NetworkSettingsSummary struct { - Networks map[string]*network.EndpointSettings -} diff --git a/vendor/github.com/docker/docker/api/types/container/options.go b/vendor/github.com/docker/docker/api/types/container/options.go deleted file mode 100644 index 7a230057..00000000 --- a/vendor/github.com/docker/docker/api/types/container/options.go +++ /dev/null @@ -1,67 +0,0 @@ -package container - -import "github.com/docker/docker/api/types/filters" - -// ResizeOptions holds parameters to resize a TTY. -// It can be used to resize container TTYs and -// exec process TTYs too. -type ResizeOptions struct { - Height uint - Width uint -} - -// AttachOptions holds parameters to attach to a container. -type AttachOptions struct { - Stream bool - Stdin bool - Stdout bool - Stderr bool - DetachKeys string - Logs bool -} - -// CommitOptions holds parameters to commit changes into a container. -type CommitOptions struct { - Reference string - Comment string - Author string - Changes []string - Pause bool - Config *Config -} - -// RemoveOptions holds parameters to remove containers. -type RemoveOptions struct { - RemoveVolumes bool - RemoveLinks bool - Force bool -} - -// StartOptions holds parameters to start containers. -type StartOptions struct { - CheckpointID string - CheckpointDir string -} - -// ListOptions holds parameters to list containers with. -type ListOptions struct { - Size bool - All bool - Latest bool - Since string - Before string - Limit int - Filters filters.Args -} - -// LogsOptions holds parameters to filter logs with. -type LogsOptions struct { - ShowStdout bool - ShowStderr bool - Since string - Until string - Timestamps bool - Follow bool - Tail string - Details bool -} diff --git a/vendor/github.com/docker/docker/api/types/container/port.go b/vendor/github.com/docker/docker/api/types/container/port.go deleted file mode 100644 index 895043cf..00000000 --- a/vendor/github.com/docker/docker/api/types/container/port.go +++ /dev/null @@ -1,23 +0,0 @@ -package container - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// Port An open port on a container -// swagger:model Port -type Port struct { - - // Host IP address that the container's port is mapped to - IP string `json:"IP,omitempty"` - - // Port on the container - // Required: true - PrivatePort uint16 `json:"PrivatePort"` - - // Port exposed on the host - PublicPort uint16 `json:"PublicPort,omitempty"` - - // type - // Required: true - Type string `json:"Type"` -} diff --git a/vendor/github.com/docker/docker/api/types/container/state.go b/vendor/github.com/docker/docker/api/types/container/state.go deleted file mode 100644 index 78d5c4fe..00000000 --- a/vendor/github.com/docker/docker/api/types/container/state.go +++ /dev/null @@ -1,64 +0,0 @@ -package container - -import ( - "fmt" - "strings" -) - -// ContainerState is a string representation of the container's current state. -// -// It currently is an alias for string, but may become a distinct type in the future. -type ContainerState = string - -const ( - StateCreated ContainerState = "created" // StateCreated indicates the container is created, but not (yet) started. - StateRunning ContainerState = "running" // StateRunning indicates that the container is running. - StatePaused ContainerState = "paused" // StatePaused indicates that the container's current state is paused. - StateRestarting ContainerState = "restarting" // StateRestarting indicates that the container is currently restarting. - StateRemoving ContainerState = "removing" // StateRemoving indicates that the container is being removed. - StateExited ContainerState = "exited" // StateExited indicates that the container exited. - StateDead ContainerState = "dead" // StateDead indicates that the container failed to be deleted. Containers in this state are attempted to be cleaned up when the daemon restarts. -) - -var validStates = []ContainerState{ - StateCreated, StateRunning, StatePaused, StateRestarting, StateRemoving, StateExited, StateDead, -} - -// ValidateContainerState checks if the provided string is a valid -// container [ContainerState]. -func ValidateContainerState(s ContainerState) error { - switch s { - case StateCreated, StateRunning, StatePaused, StateRestarting, StateRemoving, StateExited, StateDead: - return nil - default: - return errInvalidParameter{error: fmt.Errorf("invalid value for state (%s): must be one of %s", s, strings.Join(validStates, ", "))} - } -} - -// StateStatus is used to return container wait results. -// Implements exec.ExitCode interface. -// This type is needed as State include a sync.Mutex field which make -// copying it unsafe. -type StateStatus struct { - exitCode int - err error -} - -// ExitCode returns current exitcode for the state. -func (s StateStatus) ExitCode() int { - return s.exitCode -} - -// Err returns current error for the state. Returns nil if the container had -// exited on its own. -func (s StateStatus) Err() error { - return s.err -} - -// NewStateStatus returns a new StateStatus with the given exit code and error. -func NewStateStatus(exitCode int, err error) StateStatus { - return StateStatus{ - exitCode: exitCode, - err: err, - } -} diff --git a/vendor/github.com/docker/docker/api/types/container/stats.go b/vendor/github.com/docker/docker/api/types/container/stats.go deleted file mode 100644 index 3bfeb484..00000000 --- a/vendor/github.com/docker/docker/api/types/container/stats.go +++ /dev/null @@ -1,177 +0,0 @@ -package container - -import "time" - -// ThrottlingData stores CPU throttling stats of one running container. -// Not used on Windows. -type ThrottlingData struct { - // Number of periods with throttling active - Periods uint64 `json:"periods"` - // Number of periods when the container hits its throttling limit. - ThrottledPeriods uint64 `json:"throttled_periods"` - // Aggregate time the container was throttled for in nanoseconds. - ThrottledTime uint64 `json:"throttled_time"` -} - -// CPUUsage stores All CPU stats aggregated since container inception. -type CPUUsage struct { - // Total CPU time consumed. - // Units: nanoseconds (Linux) - // Units: 100's of nanoseconds (Windows) - TotalUsage uint64 `json:"total_usage"` - - // Total CPU time consumed per core (Linux). Not used on Windows. - // Units: nanoseconds. - PercpuUsage []uint64 `json:"percpu_usage,omitempty"` - - // Time spent by tasks of the cgroup in kernel mode (Linux). - // Time spent by all container processes in kernel mode (Windows). - // Units: nanoseconds (Linux). - // Units: 100's of nanoseconds (Windows). Not populated for Hyper-V Containers. - UsageInKernelmode uint64 `json:"usage_in_kernelmode"` - - // Time spent by tasks of the cgroup in user mode (Linux). - // Time spent by all container processes in user mode (Windows). - // Units: nanoseconds (Linux). - // Units: 100's of nanoseconds (Windows). Not populated for Hyper-V Containers - UsageInUsermode uint64 `json:"usage_in_usermode"` -} - -// CPUStats aggregates and wraps all CPU related info of container -type CPUStats struct { - // CPU Usage. Linux and Windows. - CPUUsage CPUUsage `json:"cpu_usage"` - - // System Usage. Linux only. - SystemUsage uint64 `json:"system_cpu_usage,omitempty"` - - // Online CPUs. Linux only. - OnlineCPUs uint32 `json:"online_cpus,omitempty"` - - // Throttling Data. Linux only. - ThrottlingData ThrottlingData `json:"throttling_data,omitempty"` -} - -// MemoryStats aggregates all memory stats since container inception on Linux. -// Windows returns stats for commit and private working set only. -type MemoryStats struct { - // Linux Memory Stats - - // current res_counter usage for memory - Usage uint64 `json:"usage,omitempty"` - // maximum usage ever recorded. - MaxUsage uint64 `json:"max_usage,omitempty"` - // TODO(vishh): Export these as stronger types. - // all the stats exported via memory.stat. - Stats map[string]uint64 `json:"stats,omitempty"` - // number of times memory usage hits limits. - Failcnt uint64 `json:"failcnt,omitempty"` - Limit uint64 `json:"limit,omitempty"` - - // Windows Memory Stats - // See https://technet.microsoft.com/en-us/magazine/ff382715.aspx - - // committed bytes - Commit uint64 `json:"commitbytes,omitempty"` - // peak committed bytes - CommitPeak uint64 `json:"commitpeakbytes,omitempty"` - // private working set - PrivateWorkingSet uint64 `json:"privateworkingset,omitempty"` -} - -// BlkioStatEntry is one small entity to store a piece of Blkio stats -// Not used on Windows. -type BlkioStatEntry struct { - Major uint64 `json:"major"` - Minor uint64 `json:"minor"` - Op string `json:"op"` - Value uint64 `json:"value"` -} - -// BlkioStats stores All IO service stats for data read and write. -// This is a Linux specific structure as the differences between expressing -// block I/O on Windows and Linux are sufficiently significant to make -// little sense attempting to morph into a combined structure. -type BlkioStats struct { - // number of bytes transferred to and from the block device - IoServiceBytesRecursive []BlkioStatEntry `json:"io_service_bytes_recursive"` - IoServicedRecursive []BlkioStatEntry `json:"io_serviced_recursive"` - IoQueuedRecursive []BlkioStatEntry `json:"io_queue_recursive"` - IoServiceTimeRecursive []BlkioStatEntry `json:"io_service_time_recursive"` - IoWaitTimeRecursive []BlkioStatEntry `json:"io_wait_time_recursive"` - IoMergedRecursive []BlkioStatEntry `json:"io_merged_recursive"` - IoTimeRecursive []BlkioStatEntry `json:"io_time_recursive"` - SectorsRecursive []BlkioStatEntry `json:"sectors_recursive"` -} - -// StorageStats is the disk I/O stats for read/write on Windows. -type StorageStats struct { - ReadCountNormalized uint64 `json:"read_count_normalized,omitempty"` - ReadSizeBytes uint64 `json:"read_size_bytes,omitempty"` - WriteCountNormalized uint64 `json:"write_count_normalized,omitempty"` - WriteSizeBytes uint64 `json:"write_size_bytes,omitempty"` -} - -// NetworkStats aggregates the network stats of one container -type NetworkStats struct { - // Bytes received. Windows and Linux. - RxBytes uint64 `json:"rx_bytes"` - // Packets received. Windows and Linux. - RxPackets uint64 `json:"rx_packets"` - // Received errors. Not used on Windows. Note that we don't `omitempty` this - // field as it is expected in the >=v1.21 API stats structure. - RxErrors uint64 `json:"rx_errors"` - // Incoming packets dropped. Windows and Linux. - RxDropped uint64 `json:"rx_dropped"` - // Bytes sent. Windows and Linux. - TxBytes uint64 `json:"tx_bytes"` - // Packets sent. Windows and Linux. - TxPackets uint64 `json:"tx_packets"` - // Sent errors. Not used on Windows. Note that we don't `omitempty` this - // field as it is expected in the >=v1.21 API stats structure. - TxErrors uint64 `json:"tx_errors"` - // Outgoing packets dropped. Windows and Linux. - TxDropped uint64 `json:"tx_dropped"` - // Endpoint ID. Not used on Linux. - EndpointID string `json:"endpoint_id,omitempty"` - // Instance ID. Not used on Linux. - InstanceID string `json:"instance_id,omitempty"` -} - -// PidsStats contains the stats of a container's pids -type PidsStats struct { - // Current is the number of pids in the cgroup - Current uint64 `json:"current,omitempty"` - // Limit is the hard limit on the number of pids in the cgroup. - // A "Limit" of 0 means that there is no limit. - Limit uint64 `json:"limit,omitempty"` -} - -// Stats is Ultimate struct aggregating all types of stats of one container -// -// Deprecated: use [StatsResponse] instead. This type will be removed in the next release. -type Stats = StatsResponse - -// StatsResponse aggregates all types of stats of one container. -type StatsResponse struct { - Name string `json:"name,omitempty"` - ID string `json:"id,omitempty"` - - // Common stats - Read time.Time `json:"read"` - PreRead time.Time `json:"preread"` - - // Linux specific stats, not populated on Windows. - PidsStats PidsStats `json:"pids_stats,omitempty"` - BlkioStats BlkioStats `json:"blkio_stats,omitempty"` - - // Windows specific stats, not populated on Linux. - NumProcs uint32 `json:"num_procs"` - StorageStats StorageStats `json:"storage_stats,omitempty"` - - // Shared stats - CPUStats CPUStats `json:"cpu_stats,omitempty"` - PreCPUStats CPUStats `json:"precpu_stats,omitempty"` // "Pre"="Previous" - MemoryStats MemoryStats `json:"memory_stats,omitempty"` - Networks map[string]NetworkStats `json:"networks,omitempty"` -} diff --git a/vendor/github.com/docker/docker/api/types/container/top_response.go b/vendor/github.com/docker/docker/api/types/container/top_response.go deleted file mode 100644 index b4bae5ef..00000000 --- a/vendor/github.com/docker/docker/api/types/container/top_response.go +++ /dev/null @@ -1,18 +0,0 @@ -package container - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// TopResponse ContainerTopResponse -// -// Container "top" response. -// swagger:model TopResponse -type TopResponse struct { - - // Each process running in the container, where each process - // is an array of values corresponding to the titles. - Processes [][]string `json:"Processes"` - - // The ps column titles - Titles []string `json:"Titles"` -} diff --git a/vendor/github.com/docker/docker/api/types/container/update_response.go b/vendor/github.com/docker/docker/api/types/container/update_response.go deleted file mode 100644 index e2b5bf5a..00000000 --- a/vendor/github.com/docker/docker/api/types/container/update_response.go +++ /dev/null @@ -1,14 +0,0 @@ -package container - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// UpdateResponse ContainerUpdateResponse -// -// Response for a successful container-update. -// swagger:model UpdateResponse -type UpdateResponse struct { - - // Warnings encountered when updating the container. - Warnings []string `json:"Warnings"` -} diff --git a/vendor/github.com/docker/docker/api/types/container/wait_exit_error.go b/vendor/github.com/docker/docker/api/types/container/wait_exit_error.go deleted file mode 100644 index ab56d4ee..00000000 --- a/vendor/github.com/docker/docker/api/types/container/wait_exit_error.go +++ /dev/null @@ -1,12 +0,0 @@ -package container - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// WaitExitError container waiting error, if any -// swagger:model WaitExitError -type WaitExitError struct { - - // Details of an error - Message string `json:"Message,omitempty"` -} diff --git a/vendor/github.com/docker/docker/api/types/container/wait_response.go b/vendor/github.com/docker/docker/api/types/container/wait_response.go deleted file mode 100644 index 84fc6afd..00000000 --- a/vendor/github.com/docker/docker/api/types/container/wait_response.go +++ /dev/null @@ -1,18 +0,0 @@ -package container - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// WaitResponse ContainerWaitResponse -// -// OK response to ContainerWait operation -// swagger:model WaitResponse -type WaitResponse struct { - - // error - Error *WaitExitError `json:"Error,omitempty"` - - // Exit code of the container - // Required: true - StatusCode int64 `json:"StatusCode"` -} diff --git a/vendor/github.com/docker/docker/api/types/container/waitcondition.go b/vendor/github.com/docker/docker/api/types/container/waitcondition.go deleted file mode 100644 index 64820fe3..00000000 --- a/vendor/github.com/docker/docker/api/types/container/waitcondition.go +++ /dev/null @@ -1,22 +0,0 @@ -package container - -// WaitCondition is a type used to specify a container state for which -// to wait. -type WaitCondition string - -// Possible WaitCondition Values. -// -// WaitConditionNotRunning (default) is used to wait for any of the non-running -// states: "created", "exited", "dead", "removing", or "removed". -// -// WaitConditionNextExit is used to wait for the next time the state changes -// to a non-running state. If the state is currently "created" or "exited", -// this would cause Wait() to block until either the container runs and exits -// or is removed. -// -// WaitConditionRemoved is used to wait for the container to be removed. -const ( - WaitConditionNotRunning WaitCondition = "not-running" - WaitConditionNextExit WaitCondition = "next-exit" - WaitConditionRemoved WaitCondition = "removed" -) diff --git a/vendor/github.com/docker/docker/api/types/error_response.go b/vendor/github.com/docker/docker/api/types/error_response.go deleted file mode 100644 index dc942d9d..00000000 --- a/vendor/github.com/docker/docker/api/types/error_response.go +++ /dev/null @@ -1,13 +0,0 @@ -package types - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// ErrorResponse Represents an error. -// swagger:model ErrorResponse -type ErrorResponse struct { - - // The error message. - // Required: true - Message string `json:"message"` -} diff --git a/vendor/github.com/docker/docker/api/types/error_response_ext.go b/vendor/github.com/docker/docker/api/types/error_response_ext.go deleted file mode 100644 index f84f034c..00000000 --- a/vendor/github.com/docker/docker/api/types/error_response_ext.go +++ /dev/null @@ -1,6 +0,0 @@ -package types - -// Error returns the error message -func (e ErrorResponse) Error() string { - return e.Message -} diff --git a/vendor/github.com/docker/docker/api/types/events/events.go b/vendor/github.com/docker/docker/api/types/events/events.go deleted file mode 100644 index 952c0ff2..00000000 --- a/vendor/github.com/docker/docker/api/types/events/events.go +++ /dev/null @@ -1,139 +0,0 @@ -package events - -import "github.com/docker/docker/api/types/filters" - -// Type is used for event-types. -type Type string - -// List of known event types. -const ( - BuilderEventType Type = "builder" // BuilderEventType is the event type that the builder generates. - ConfigEventType Type = "config" // ConfigEventType is the event type that configs generate. - ContainerEventType Type = "container" // ContainerEventType is the event type that containers generate. - DaemonEventType Type = "daemon" // DaemonEventType is the event type that daemon generate. - ImageEventType Type = "image" // ImageEventType is the event type that images generate. - NetworkEventType Type = "network" // NetworkEventType is the event type that networks generate. - NodeEventType Type = "node" // NodeEventType is the event type that nodes generate. - PluginEventType Type = "plugin" // PluginEventType is the event type that plugins generate. - SecretEventType Type = "secret" // SecretEventType is the event type that secrets generate. - ServiceEventType Type = "service" // ServiceEventType is the event type that services generate. - VolumeEventType Type = "volume" // VolumeEventType is the event type that volumes generate. -) - -// Action is used for event-actions. -type Action string - -const ( - ActionCreate Action = "create" - ActionStart Action = "start" - ActionRestart Action = "restart" - ActionStop Action = "stop" - ActionCheckpoint Action = "checkpoint" - ActionPause Action = "pause" - ActionUnPause Action = "unpause" - ActionAttach Action = "attach" - ActionDetach Action = "detach" - ActionResize Action = "resize" - ActionUpdate Action = "update" - ActionRename Action = "rename" - ActionKill Action = "kill" - ActionDie Action = "die" - ActionOOM Action = "oom" - ActionDestroy Action = "destroy" - ActionRemove Action = "remove" - ActionCommit Action = "commit" - ActionTop Action = "top" - ActionCopy Action = "copy" - ActionArchivePath Action = "archive-path" - ActionExtractToDir Action = "extract-to-dir" - ActionExport Action = "export" - ActionImport Action = "import" - ActionSave Action = "save" - ActionLoad Action = "load" - ActionTag Action = "tag" - ActionUnTag Action = "untag" - ActionPush Action = "push" - ActionPull Action = "pull" - ActionPrune Action = "prune" - ActionDelete Action = "delete" - ActionEnable Action = "enable" - ActionDisable Action = "disable" - ActionConnect Action = "connect" - ActionDisconnect Action = "disconnect" - ActionReload Action = "reload" - ActionMount Action = "mount" - ActionUnmount Action = "unmount" - - // ActionExecCreate is the prefix used for exec_create events. These - // event-actions are commonly followed by a colon and space (": "), - // and the command that's defined for the exec, for example: - // - // exec_create: /bin/sh -c 'echo hello' - // - // This is far from ideal; it's a compromise to allow filtering and - // to preserve backward-compatibility. - ActionExecCreate Action = "exec_create" - // ActionExecStart is the prefix used for exec_create events. These - // event-actions are commonly followed by a colon and space (": "), - // and the command that's defined for the exec, for example: - // - // exec_start: /bin/sh -c 'echo hello' - // - // This is far from ideal; it's a compromise to allow filtering and - // to preserve backward-compatibility. - ActionExecStart Action = "exec_start" - ActionExecDie Action = "exec_die" - ActionExecDetach Action = "exec_detach" - - // ActionHealthStatus is the prefix to use for health_status events. - // - // Health-status events can either have a pre-defined status, in which - // case the "health_status" action is followed by a colon, or can be - // "free-form", in which case they're followed by the output of the - // health-check output. - // - // This is far form ideal, and a compromise to allow filtering, and - // to preserve backward-compatibility. - ActionHealthStatus Action = "health_status" - ActionHealthStatusRunning Action = "health_status: running" - ActionHealthStatusHealthy Action = "health_status: healthy" - ActionHealthStatusUnhealthy Action = "health_status: unhealthy" -) - -// Actor describes something that generates events, -// like a container, or a network, or a volume. -// It has a defined name and a set of attributes. -// The container attributes are its labels, other actors -// can generate these attributes from other properties. -type Actor struct { - ID string - Attributes map[string]string -} - -// Message represents the information an event contains -type Message struct { - // Deprecated: use Action instead. - // Information from JSONMessage. - // With data only in container events. - Status string `json:"status,omitempty"` - // Deprecated: use Actor.ID instead. - ID string `json:"id,omitempty"` - // Deprecated: use Actor.Attributes["image"] instead. - From string `json:"from,omitempty"` - - Type Type - Action Action - Actor Actor - // Engine events are local scope. Cluster events are swarm scope. - Scope string `json:"scope,omitempty"` - - Time int64 `json:"time,omitempty"` - TimeNano int64 `json:"timeNano,omitempty"` -} - -// ListOptions holds parameters to filter events with. -type ListOptions struct { - Since string - Until string - Filters filters.Args -} diff --git a/vendor/github.com/docker/docker/api/types/filters/errors.go b/vendor/github.com/docker/docker/api/types/filters/errors.go deleted file mode 100644 index b8a690d6..00000000 --- a/vendor/github.com/docker/docker/api/types/filters/errors.go +++ /dev/null @@ -1,24 +0,0 @@ -package filters - -import "fmt" - -// invalidFilter indicates that the provided filter or its value is invalid -type invalidFilter struct { - Filter string - Value []string -} - -func (e invalidFilter) Error() string { - msg := "invalid filter" - if e.Filter != "" { - msg += " '" + e.Filter - if e.Value != nil { - msg = fmt.Sprintf("%s=%s", msg, e.Value) - } - msg += "'" - } - return msg -} - -// InvalidParameter marks this error as ErrInvalidParameter -func (e invalidFilter) InvalidParameter() {} diff --git a/vendor/github.com/docker/docker/api/types/filters/filters_deprecated.go b/vendor/github.com/docker/docker/api/types/filters/filters_deprecated.go deleted file mode 100644 index 4504cd7a..00000000 --- a/vendor/github.com/docker/docker/api/types/filters/filters_deprecated.go +++ /dev/null @@ -1,61 +0,0 @@ -package filters - -import ( - "encoding/json" - - "github.com/docker/docker/api/types/versions" -) - -// ToParamWithVersion encodes Args as a JSON string. If version is less than 1.22 -// then the encoded format will use an older legacy format where the values are a -// list of strings, instead of a set. -// -// Deprecated: do not use in any new code; use ToJSON instead -func ToParamWithVersion(version string, a Args) (string, error) { - out, err := ToJSON(a) - if out == "" || err != nil { - return "", nil - } - if version != "" && versions.LessThan(version, "1.22") { - return encodeLegacyFilters(out) - } - return out, nil -} - -// encodeLegacyFilters encodes Args in the legacy format as used in API v1.21 and older. -// where values are a list of strings, instead of a set. -// -// Don't use in any new code; use [filters.ToJSON]] instead. -func encodeLegacyFilters(currentFormat string) (string, error) { - // The Args.fields field is not exported, but used to marshal JSON, - // so we'll marshal to the new format, then unmarshal to get the - // fields, and marshal again. - // - // This is far from optimal, but this code is only used for deprecated - // API versions, so should not be hit commonly. - var argsFields map[string]map[string]bool - err := json.Unmarshal([]byte(currentFormat), &argsFields) - if err != nil { - return "", err - } - - buf, err := json.Marshal(convertArgsToSlice(argsFields)) - if err != nil { - return "", err - } - return string(buf), nil -} - -func convertArgsToSlice(f map[string]map[string]bool) map[string][]string { - m := map[string][]string{} - for k, v := range f { - values := []string{} - for kk := range v { - if v[kk] { - values = append(values, kk) - } - } - m[k] = values - } - return m -} diff --git a/vendor/github.com/docker/docker/api/types/filters/parse.go b/vendor/github.com/docker/docker/api/types/filters/parse.go deleted file mode 100644 index 396657bb..00000000 --- a/vendor/github.com/docker/docker/api/types/filters/parse.go +++ /dev/null @@ -1,302 +0,0 @@ -/* -Package filters provides tools for encoding a mapping of keys to a set of -multiple values. -*/ -package filters - -import ( - "encoding/json" - "regexp" - "strings" -) - -// Args stores a mapping of keys to a set of multiple values. -type Args struct { - fields map[string]map[string]bool -} - -// KeyValuePair are used to initialize a new Args -type KeyValuePair struct { - Key string - Value string -} - -// Arg creates a new KeyValuePair for initializing Args -func Arg(key, value string) KeyValuePair { - return KeyValuePair{Key: key, Value: value} -} - -// NewArgs returns a new Args populated with the initial args -func NewArgs(initialArgs ...KeyValuePair) Args { - args := Args{fields: map[string]map[string]bool{}} - for _, arg := range initialArgs { - args.Add(arg.Key, arg.Value) - } - return args -} - -// Keys returns all the keys in list of Args -func (args Args) Keys() []string { - keys := make([]string, 0, len(args.fields)) - for k := range args.fields { - keys = append(keys, k) - } - return keys -} - -// MarshalJSON returns a JSON byte representation of the Args -func (args Args) MarshalJSON() ([]byte, error) { - if len(args.fields) == 0 { - return []byte("{}"), nil - } - return json.Marshal(args.fields) -} - -// ToJSON returns the Args as a JSON encoded string -func ToJSON(a Args) (string, error) { - if a.Len() == 0 { - return "", nil - } - buf, err := json.Marshal(a) - return string(buf), err -} - -// FromJSON decodes a JSON encoded string into Args -func FromJSON(p string) (Args, error) { - args := NewArgs() - - if p == "" { - return args, nil - } - - raw := []byte(p) - err := json.Unmarshal(raw, &args) - if err == nil { - return args, nil - } - - // Fallback to parsing arguments in the legacy slice format - deprecated := map[string][]string{} - if legacyErr := json.Unmarshal(raw, &deprecated); legacyErr != nil { - return args, &invalidFilter{} - } - - args.fields = deprecatedArgs(deprecated) - return args, nil -} - -// UnmarshalJSON populates the Args from JSON encode bytes -func (args Args) UnmarshalJSON(raw []byte) error { - return json.Unmarshal(raw, &args.fields) -} - -// Get returns the list of values associated with the key -func (args Args) Get(key string) []string { - values := args.fields[key] - if values == nil { - return make([]string, 0) - } - slice := make([]string, 0, len(values)) - for key := range values { - slice = append(slice, key) - } - return slice -} - -// Add a new value to the set of values -func (args Args) Add(key, value string) { - if _, ok := args.fields[key]; ok { - args.fields[key][value] = true - } else { - args.fields[key] = map[string]bool{value: true} - } -} - -// Del removes a value from the set -func (args Args) Del(key, value string) { - if _, ok := args.fields[key]; ok { - delete(args.fields[key], value) - if len(args.fields[key]) == 0 { - delete(args.fields, key) - } - } -} - -// Len returns the number of keys in the mapping -func (args Args) Len() int { - return len(args.fields) -} - -// MatchKVList returns true if all the pairs in sources exist as key=value -// pairs in the mapping at key, or if there are no values at key. -func (args Args) MatchKVList(key string, sources map[string]string) bool { - fieldValues := args.fields[key] - - // do not filter if there is no filter set or cannot determine filter - if len(fieldValues) == 0 { - return true - } - - if len(sources) == 0 { - return false - } - - for value := range fieldValues { - testK, testV, hasValue := strings.Cut(value, "=") - - v, ok := sources[testK] - if !ok { - return false - } - if hasValue && testV != v { - return false - } - } - - return true -} - -// Match returns true if any of the values at key match the source string -func (args Args) Match(field, source string) bool { - if args.ExactMatch(field, source) { - return true - } - - fieldValues := args.fields[field] - for name2match := range fieldValues { - match, err := regexp.MatchString(name2match, source) - if err != nil { - continue - } - if match { - return true - } - } - return false -} - -// GetBoolOrDefault returns a boolean value of the key if the key is present -// and is interpretable as a boolean value. Otherwise the default value is returned. -// Error is not nil only if the filter values are not valid boolean or are conflicting. -func (args Args) GetBoolOrDefault(key string, defaultValue bool) (bool, error) { - fieldValues, ok := args.fields[key] - if !ok { - return defaultValue, nil - } - - if len(fieldValues) == 0 { - return defaultValue, &invalidFilter{key, nil} - } - - isFalse := fieldValues["0"] || fieldValues["false"] - isTrue := fieldValues["1"] || fieldValues["true"] - if isFalse == isTrue { - // Either no or conflicting truthy/falsy value were provided - return defaultValue, &invalidFilter{key, args.Get(key)} - } - return isTrue, nil -} - -// ExactMatch returns true if the source matches exactly one of the values. -func (args Args) ExactMatch(key, source string) bool { - fieldValues, ok := args.fields[key] - // do not filter if there is no filter set or cannot determine filter - if !ok || len(fieldValues) == 0 { - return true - } - - // try to match full name value to avoid O(N) regular expression matching - return fieldValues[source] -} - -// UniqueExactMatch returns true if there is only one value and the source -// matches exactly the value. -func (args Args) UniqueExactMatch(key, source string) bool { - fieldValues := args.fields[key] - // do not filter if there is no filter set or cannot determine filter - if len(fieldValues) == 0 { - return true - } - if len(args.fields[key]) != 1 { - return false - } - - // try to match full name value to avoid O(N) regular expression matching - return fieldValues[source] -} - -// FuzzyMatch returns true if the source matches exactly one value, or the -// source has one of the values as a prefix. -func (args Args) FuzzyMatch(key, source string) bool { - if args.ExactMatch(key, source) { - return true - } - - fieldValues := args.fields[key] - for prefix := range fieldValues { - if strings.HasPrefix(source, prefix) { - return true - } - } - return false -} - -// Contains returns true if the key exists in the mapping -func (args Args) Contains(field string) bool { - _, ok := args.fields[field] - return ok -} - -// Validate compared the set of accepted keys against the keys in the mapping. -// An error is returned if any mapping keys are not in the accepted set. -func (args Args) Validate(accepted map[string]bool) error { - for name := range args.fields { - if !accepted[name] { - return &invalidFilter{name, nil} - } - } - return nil -} - -// WalkValues iterates over the list of values for a key in the mapping and calls -// op() for each value. If op returns an error the iteration stops and the -// error is returned. -func (args Args) WalkValues(field string, op func(value string) error) error { - if _, ok := args.fields[field]; !ok { - return nil - } - for v := range args.fields[field] { - if err := op(v); err != nil { - return err - } - } - return nil -} - -// Clone returns a copy of args. -func (args Args) Clone() (newArgs Args) { - newArgs.fields = make(map[string]map[string]bool, len(args.fields)) - for k, m := range args.fields { - var mm map[string]bool - if m != nil { - mm = make(map[string]bool, len(m)) - for kk, v := range m { - mm[kk] = v - } - } - newArgs.fields[k] = mm - } - return newArgs -} - -func deprecatedArgs(d map[string][]string) map[string]map[string]bool { - m := map[string]map[string]bool{} - for k, v := range d { - values := map[string]bool{} - for _, vv := range v { - values[vv] = true - } - m[k] = values - } - return m -} diff --git a/vendor/github.com/docker/docker/api/types/image/delete_response.go b/vendor/github.com/docker/docker/api/types/image/delete_response.go deleted file mode 100644 index 998620dc..00000000 --- a/vendor/github.com/docker/docker/api/types/image/delete_response.go +++ /dev/null @@ -1,15 +0,0 @@ -package image - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// DeleteResponse delete response -// swagger:model DeleteResponse -type DeleteResponse struct { - - // The image ID of an image that was deleted - Deleted string `json:"Deleted,omitempty"` - - // The image ID of an image that was untagged - Untagged string `json:"Untagged,omitempty"` -} diff --git a/vendor/github.com/docker/docker/api/types/image/disk_usage.go b/vendor/github.com/docker/docker/api/types/image/disk_usage.go deleted file mode 100644 index e847386a..00000000 --- a/vendor/github.com/docker/docker/api/types/image/disk_usage.go +++ /dev/null @@ -1,10 +0,0 @@ -package image - -// DiskUsage contains disk usage for images. -// -// Deprecated: this type is no longer used and will be removed in the next release. -type DiskUsage struct { - TotalSize int64 - Reclaimable int64 - Items []*Summary -} diff --git a/vendor/github.com/docker/docker/api/types/image/image.go b/vendor/github.com/docker/docker/api/types/image/image.go deleted file mode 100644 index abb7ffd8..00000000 --- a/vendor/github.com/docker/docker/api/types/image/image.go +++ /dev/null @@ -1,47 +0,0 @@ -package image - -import ( - "io" - "time" -) - -// Metadata contains engine-local data about the image. -type Metadata struct { - // LastTagTime is the date and time at which the image was last tagged. - LastTagTime time.Time `json:",omitempty"` -} - -// PruneReport contains the response for Engine API: -// POST "/images/prune" -type PruneReport struct { - ImagesDeleted []DeleteResponse - SpaceReclaimed uint64 -} - -// LoadResponse returns information to the client about a load process. -// -// TODO(thaJeztah): remove this type, and just use an io.ReadCloser -// -// This type was added in https://github.com/moby/moby/pull/18878, related -// to https://github.com/moby/moby/issues/19177; -// -// Make docker load to output json when the response content type is json -// Swarm hijacks the response from docker load and returns JSON rather -// than plain text like the Engine does. This makes the API library to return -// information to figure that out. -// -// However the "load" endpoint unconditionally returns JSON; -// https://github.com/moby/moby/blob/7b9d2ef6e5518a3d3f3cc418459f8df786cfbbd1/api/server/router/image/image_routes.go#L248-L255 -// -// PR https://github.com/moby/moby/pull/21959 made the response-type depend -// on whether "quiet" was set, but this logic got changed in a follow-up -// https://github.com/moby/moby/pull/25557, which made the JSON response-type -// unconditionally, but the output produced depend on whether"quiet" was set. -// -// We should deprecated the "quiet" option, as it's really a client -// responsibility. -type LoadResponse struct { - // Body must be closed to avoid a resource leak - Body io.ReadCloser - JSON bool -} diff --git a/vendor/github.com/docker/docker/api/types/image/image_history.go b/vendor/github.com/docker/docker/api/types/image/image_history.go deleted file mode 100644 index a6cdab84..00000000 --- a/vendor/github.com/docker/docker/api/types/image/image_history.go +++ /dev/null @@ -1,36 +0,0 @@ -package image - -// ---------------------------------------------------------------------------- -// Code generated by `swagger generate operation`. DO NOT EDIT. -// -// See hack/generate-swagger-api.sh -// ---------------------------------------------------------------------------- - -// HistoryResponseItem individual image layer information in response to ImageHistory operation -// swagger:model HistoryResponseItem -type HistoryResponseItem struct { - - // comment - // Required: true - Comment string `json:"Comment"` - - // created - // Required: true - Created int64 `json:"Created"` - - // created by - // Required: true - CreatedBy string `json:"CreatedBy"` - - // Id - // Required: true - ID string `json:"Id"` - - // size - // Required: true - Size int64 `json:"Size"` - - // tags - // Required: true - Tags []string `json:"Tags"` -} diff --git a/vendor/github.com/docker/docker/api/types/image/image_inspect.go b/vendor/github.com/docker/docker/api/types/image/image_inspect.go deleted file mode 100644 index 1bec0b72..00000000 --- a/vendor/github.com/docker/docker/api/types/image/image_inspect.go +++ /dev/null @@ -1,146 +0,0 @@ -package image - -import ( - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/storage" - dockerspec "github.com/moby/docker-image-spec/specs-go/v1" - ocispec "github.com/opencontainers/image-spec/specs-go/v1" -) - -// RootFS returns Image's RootFS description including the layer IDs. -type RootFS struct { - Type string `json:",omitempty"` - Layers []string `json:",omitempty"` -} - -// InspectResponse contains response of Engine API: -// GET "/images/{name:.*}/json" -type InspectResponse struct { - // ID is the content-addressable ID of an image. - // - // This identifier is a content-addressable digest calculated from the - // image's configuration (which includes the digests of layers used by - // the image). - // - // Note that this digest differs from the `RepoDigests` below, which - // holds digests of image manifests that reference the image. - ID string `json:"Id"` - - // RepoTags is a list of image names/tags in the local image cache that - // reference this image. - // - // Multiple image tags can refer to the same image, and this list may be - // empty if no tags reference the image, in which case the image is - // "untagged", in which case it can still be referenced by its ID. - RepoTags []string - - // RepoDigests is a list of content-addressable digests of locally available - // image manifests that the image is referenced from. Multiple manifests can - // refer to the same image. - // - // These digests are usually only available if the image was either pulled - // from a registry, or if the image was pushed to a registry, which is when - // the manifest is generated and its digest calculated. - RepoDigests []string - - // Parent is the ID of the parent image. - // - // Depending on how the image was created, this field may be empty and - // is only set for images that were built/created locally. This field - // is empty if the image was pulled from an image registry. - // - // Deprecated: this field is deprecated, and will be removed in the next release. - Parent string - - // Comment is an optional message that can be set when committing or - // importing the image. - Comment string - - // Created is the date and time at which the image was created, formatted in - // RFC 3339 nano-seconds (time.RFC3339Nano). - // - // This information is only available if present in the image, - // and omitted otherwise. - Created string `json:",omitempty"` - - // Container is the ID of the container that was used to create the image. - // - // Depending on how the image was created, this field may be empty. - // - // Deprecated: this field is omitted in API v1.45, but kept for backward compatibility. - Container string `json:",omitempty"` - - // ContainerConfig is an optional field containing the configuration of the - // container that was last committed when creating the image. - // - // Previous versions of Docker builder used this field to store build cache, - // and it is not in active use anymore. - // - // Deprecated: this field is omitted in API v1.45, but kept for backward compatibility. - ContainerConfig *container.Config `json:",omitempty"` - - // DockerVersion is the version of Docker that was used to build the image. - // - // Depending on how the image was created, this field may be empty. - // - // Deprecated: this field is deprecated, and will be removed in the next release. - DockerVersion string - - // Author is the name of the author that was specified when committing the - // image, or as specified through MAINTAINER (deprecated) in the Dockerfile. - Author string - Config *dockerspec.DockerOCIImageConfig - - // Architecture is the hardware CPU architecture that the image runs on. - Architecture string - - // Variant is the CPU architecture variant (presently ARM-only). - Variant string `json:",omitempty"` - - // OS is the Operating System the image is built to run on. - Os string - - // OsVersion is the version of the Operating System the image is built to - // run on (especially for Windows). - OsVersion string `json:",omitempty"` - - // Size is the total size of the image including all layers it is composed of. - Size int64 - - // VirtualSize is the total size of the image including all layers it is - // composed of. - // - // Deprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead. - VirtualSize int64 `json:"VirtualSize,omitempty"` - - // GraphDriver holds information about the storage driver used to store the - // container's and image's filesystem. - GraphDriver storage.DriverData - - // RootFS contains information about the image's RootFS, including the - // layer IDs. - RootFS RootFS - - // Metadata of the image in the local cache. - // - // This information is local to the daemon, and not part of the image itself. - Metadata Metadata - - // Descriptor is the OCI descriptor of the image target. - // It's only set if the daemon provides a multi-platform image store. - // - // WARNING: This is experimental and may change at any time without any backward - // compatibility. - Descriptor *ocispec.Descriptor `json:"Descriptor,omitempty"` - - // Manifests is a list of image manifests available in this image. It - // provides a more detailed view of the platform-specific image manifests or - // other image-attached data like build attestations. - // - // Only available if the daemon provides a multi-platform image store, the client - // requests manifests AND does not request a specific platform. - // - // WARNING: This is experimental and may change at any time without any backward - // compatibility. - Manifests []ManifestSummary `json:"Manifests,omitempty"` -} diff --git a/vendor/github.com/docker/docker/api/types/image/manifest.go b/vendor/github.com/docker/docker/api/types/image/manifest.go deleted file mode 100644 index db8a0083..00000000 --- a/vendor/github.com/docker/docker/api/types/image/manifest.go +++ /dev/null @@ -1,99 +0,0 @@ -package image - -import ( - "github.com/opencontainers/go-digest" - ocispec "github.com/opencontainers/image-spec/specs-go/v1" -) - -type ManifestKind string - -const ( - ManifestKindImage ManifestKind = "image" - ManifestKindAttestation ManifestKind = "attestation" - ManifestKindUnknown ManifestKind = "unknown" -) - -type ManifestSummary struct { - // ID is the content-addressable ID of an image and is the same as the - // digest of the image manifest. - // - // Required: true - ID string `json:"ID"` - - // Descriptor is the OCI descriptor of the image. - // - // Required: true - Descriptor ocispec.Descriptor `json:"Descriptor"` - - // Indicates whether all the child content (image config, layers) is - // fully available locally - // - // Required: true - Available bool `json:"Available"` - - // Size is the size information of the content related to this manifest. - // Note: These sizes only take the locally available content into account. - // - // Required: true - Size struct { - // Content is the size (in bytes) of all the locally present - // content in the content store (e.g. image config, layers) - // referenced by this manifest and its children. - // This only includes blobs in the content store. - Content int64 `json:"Content"` - - // Total is the total size (in bytes) of all the locally present - // data (both distributable and non-distributable) that's related to - // this manifest and its children. - // This equal to the sum of [Content] size AND all the sizes in the - // [Size] struct present in the Kind-specific data struct. - // For example, for an image kind (Kind == ManifestKindImage), - // this would include the size of the image content and unpacked - // image snapshots ([Size.Content] + [ImageData.Size.Unpacked]). - Total int64 `json:"Total"` - } `json:"Size"` - - // Kind is the kind of the image manifest. - // - // Required: true - Kind ManifestKind `json:"Kind"` - - // Fields below are specific to the kind of the image manifest. - - // Present only if Kind == ManifestKindImage. - ImageData *ImageProperties `json:"ImageData,omitempty"` - - // Present only if Kind == ManifestKindAttestation. - AttestationData *AttestationProperties `json:"AttestationData,omitempty"` -} - -type ImageProperties struct { - // Platform is the OCI platform object describing the platform of the image. - // - // Required: true - Platform ocispec.Platform `json:"Platform"` - - Size struct { - // Unpacked is the size (in bytes) of the locally unpacked - // (uncompressed) image content that's directly usable by the containers - // running this image. - // It's independent of the distributable content - e.g. - // the image might still have an unpacked data that's still used by - // some container even when the distributable/compressed content is - // already gone. - // - // Required: true - Unpacked int64 `json:"Unpacked"` - } - - // Containers is an array containing the IDs of the containers that are - // using this image. - // - // Required: true - Containers []string `json:"Containers"` -} - -type AttestationProperties struct { - // For is the digest of the image manifest that this attestation is for. - For digest.Digest `json:"For"` -} diff --git a/vendor/github.com/docker/docker/api/types/image/opts.go b/vendor/github.com/docker/docker/api/types/image/opts.go deleted file mode 100644 index 9e33a42f..00000000 --- a/vendor/github.com/docker/docker/api/types/image/opts.go +++ /dev/null @@ -1,124 +0,0 @@ -package image - -import ( - "context" - "io" - - "github.com/docker/docker/api/types/filters" - ocispec "github.com/opencontainers/image-spec/specs-go/v1" -) - -// ImportSource holds source information for ImageImport -type ImportSource struct { - Source io.Reader // Source is the data to send to the server to create this image from. You must set SourceName to "-" to leverage this. - SourceName string // SourceName is the name of the image to pull. Set to "-" to leverage the Source attribute. -} - -// ImportOptions holds information to import images from the client host. -type ImportOptions struct { - Tag string // Tag is the name to tag this image with. This attribute is deprecated. - Message string // Message is the message to tag the image with - Changes []string // Changes are the raw changes to apply to this image - Platform string // Platform is the target platform of the image -} - -// CreateOptions holds information to create images. -type CreateOptions struct { - RegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry. - Platform string // Platform is the target platform of the image if it needs to be pulled from the registry. -} - -// PullOptions holds information to pull images. -type PullOptions struct { - All bool - RegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry - - // PrivilegeFunc is a function that clients can supply to retry operations - // after getting an authorization error. This function returns the registry - // authentication header value in base64 encoded format, or an error if the - // privilege request fails. - // - // For details, refer to [github.com/docker/docker/api/types/registry.RequestAuthConfig]. - PrivilegeFunc func(context.Context) (string, error) - Platform string -} - -// PushOptions holds information to push images. -type PushOptions struct { - All bool - RegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry - - // PrivilegeFunc is a function that clients can supply to retry operations - // after getting an authorization error. This function returns the registry - // authentication header value in base64 encoded format, or an error if the - // privilege request fails. - // - // For details, refer to [github.com/docker/docker/api/types/registry.RequestAuthConfig]. - PrivilegeFunc func(context.Context) (string, error) - - // Platform is an optional field that selects a specific platform to push - // when the image is a multi-platform image. - // Using this will only push a single platform-specific manifest. - Platform *ocispec.Platform `json:",omitempty"` -} - -// ListOptions holds parameters to list images with. -type ListOptions struct { - // All controls whether all images in the graph are filtered, or just - // the heads. - All bool - - // Filters is a JSON-encoded set of filter arguments. - Filters filters.Args - - // SharedSize indicates whether the shared size of images should be computed. - SharedSize bool - - // ContainerCount indicates whether container count should be computed. - // - // Deprecated: This field has been unused and is no longer required and will be removed in a future version. - ContainerCount bool - - // Manifests indicates whether the image manifests should be returned. - Manifests bool -} - -// RemoveOptions holds parameters to remove images. -type RemoveOptions struct { - Platforms []ocispec.Platform - Force bool - PruneChildren bool -} - -// HistoryOptions holds parameters to get image history. -type HistoryOptions struct { - // Platform from the manifest list to use for history. - Platform *ocispec.Platform -} - -// LoadOptions holds parameters to load images. -type LoadOptions struct { - // Quiet suppresses progress output - Quiet bool - - // Platforms selects the platforms to load if the image is a - // multi-platform image and has multiple variants. - Platforms []ocispec.Platform -} - -type InspectOptions struct { - // Manifests returns the image manifests. - Manifests bool - - // Platform selects the specific platform of a multi-platform image to inspect. - // - // This option is only available for API version 1.49 and up. - Platform *ocispec.Platform -} - -// SaveOptions holds parameters to save images. -type SaveOptions struct { - // Platforms selects the platforms to save if the image is a - // multi-platform image and has multiple variants. - Platforms []ocispec.Platform -} diff --git a/vendor/github.com/docker/docker/api/types/image/summary.go b/vendor/github.com/docker/docker/api/types/image/summary.go deleted file mode 100644 index c5ae6ab9..00000000 --- a/vendor/github.com/docker/docker/api/types/image/summary.go +++ /dev/null @@ -1,101 +0,0 @@ -package image - -import ocispec "github.com/opencontainers/image-spec/specs-go/v1" - -type Summary struct { - - // Number of containers using this image. Includes both stopped and running - // containers. - // - // This size is not calculated by default, and depends on which API endpoint - // is used. `-1` indicates that the value has not been set / calculated. - // - // Required: true - Containers int64 `json:"Containers"` - - // Date and time at which the image was created as a Unix timestamp - // (number of seconds since EPOCH). - // - // Required: true - Created int64 `json:"Created"` - - // ID is the content-addressable ID of an image. - // - // This identifier is a content-addressable digest calculated from the - // image's configuration (which includes the digests of layers used by - // the image). - // - // Note that this digest differs from the `RepoDigests` below, which - // holds digests of image manifests that reference the image. - // - // Required: true - ID string `json:"Id"` - - // User-defined key/value metadata. - // Required: true - Labels map[string]string `json:"Labels"` - - // ID of the parent image. - // - // Depending on how the image was created, this field may be empty and - // is only set for images that were built/created locally. This field - // is empty if the image was pulled from an image registry. - // - // Required: true - ParentID string `json:"ParentId"` - - // Descriptor is the OCI descriptor of the image target. - // It's only set if the daemon provides a multi-platform image store. - // - // WARNING: This is experimental and may change at any time without any backward - // compatibility. - Descriptor *ocispec.Descriptor `json:"Descriptor,omitempty"` - - // Manifests is a list of image manifests available in this image. It - // provides a more detailed view of the platform-specific image manifests or - // other image-attached data like build attestations. - // - // WARNING: This is experimental and may change at any time without any backward - // compatibility. - Manifests []ManifestSummary `json:"Manifests,omitempty"` - - // List of content-addressable digests of locally available image manifests - // that the image is referenced from. Multiple manifests can refer to the - // same image. - // - // These digests are usually only available if the image was either pulled - // from a registry, or if the image was pushed to a registry, which is when - // the manifest is generated and its digest calculated. - // - // Required: true - RepoDigests []string `json:"RepoDigests"` - - // List of image names/tags in the local image cache that reference this - // image. - // - // Multiple image tags can refer to the same image, and this list may be - // empty if no tags reference the image, in which case the image is - // "untagged", in which case it can still be referenced by its ID. - // - // Required: true - RepoTags []string `json:"RepoTags"` - - // Total size of image layers that are shared between this image and other - // images. - // - // This size is not calculated by default. `-1` indicates that the value - // has not been set / calculated. - // - // Required: true - SharedSize int64 `json:"SharedSize"` - - // Total size of the image including all layers it is composed of. - // - // Required: true - Size int64 `json:"Size"` - - // Total size of the image including all layers it is composed of. - // - // Deprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead. - VirtualSize int64 `json:"VirtualSize,omitempty"` -} diff --git a/vendor/github.com/docker/docker/api/types/mount/mount.go b/vendor/github.com/docker/docker/api/types/mount/mount.go deleted file mode 100644 index 090d436c..00000000 --- a/vendor/github.com/docker/docker/api/types/mount/mount.go +++ /dev/null @@ -1,157 +0,0 @@ -package mount - -import ( - "os" -) - -// Type represents the type of a mount. -type Type string - -// Type constants -const ( - // TypeBind is the type for mounting host dir - TypeBind Type = "bind" - // TypeVolume is the type for remote storage volumes - TypeVolume Type = "volume" - // TypeTmpfs is the type for mounting tmpfs - TypeTmpfs Type = "tmpfs" - // TypeNamedPipe is the type for mounting Windows named pipes - TypeNamedPipe Type = "npipe" - // TypeCluster is the type for Swarm Cluster Volumes. - TypeCluster Type = "cluster" - // TypeImage is the type for mounting another image's filesystem - TypeImage Type = "image" -) - -// Mount represents a mount (volume). -type Mount struct { - Type Type `json:",omitempty"` - // Source specifies the name of the mount. Depending on mount type, this - // may be a volume name or a host path, or even ignored. - // Source is not supported for tmpfs (must be an empty value) - Source string `json:",omitempty"` - Target string `json:",omitempty"` - ReadOnly bool `json:",omitempty"` // attempts recursive read-only if possible - Consistency Consistency `json:",omitempty"` - - BindOptions *BindOptions `json:",omitempty"` - VolumeOptions *VolumeOptions `json:",omitempty"` - ImageOptions *ImageOptions `json:",omitempty"` - TmpfsOptions *TmpfsOptions `json:",omitempty"` - ClusterOptions *ClusterOptions `json:",omitempty"` -} - -// Propagation represents the propagation of a mount. -type Propagation string - -const ( - // PropagationRPrivate RPRIVATE - PropagationRPrivate Propagation = "rprivate" - // PropagationPrivate PRIVATE - PropagationPrivate Propagation = "private" - // PropagationRShared RSHARED - PropagationRShared Propagation = "rshared" - // PropagationShared SHARED - PropagationShared Propagation = "shared" - // PropagationRSlave RSLAVE - PropagationRSlave Propagation = "rslave" - // PropagationSlave SLAVE - PropagationSlave Propagation = "slave" -) - -// Propagations is the list of all valid mount propagations -var Propagations = []Propagation{ - PropagationRPrivate, - PropagationPrivate, - PropagationRShared, - PropagationShared, - PropagationRSlave, - PropagationSlave, -} - -// Consistency represents the consistency requirements of a mount. -type Consistency string - -const ( - // ConsistencyFull guarantees bind mount-like consistency - ConsistencyFull Consistency = "consistent" - // ConsistencyCached mounts can cache read data and FS structure - ConsistencyCached Consistency = "cached" - // ConsistencyDelegated mounts can cache read and written data and structure - ConsistencyDelegated Consistency = "delegated" - // ConsistencyDefault provides "consistent" behavior unless overridden - ConsistencyDefault Consistency = "default" -) - -// BindOptions defines options specific to mounts of type "bind". -type BindOptions struct { - Propagation Propagation `json:",omitempty"` - NonRecursive bool `json:",omitempty"` - CreateMountpoint bool `json:",omitempty"` - // ReadOnlyNonRecursive makes the mount non-recursively read-only, but still leaves the mount recursive - // (unless NonRecursive is set to true in conjunction). - ReadOnlyNonRecursive bool `json:",omitempty"` - // ReadOnlyForceRecursive raises an error if the mount cannot be made recursively read-only. - ReadOnlyForceRecursive bool `json:",omitempty"` -} - -// VolumeOptions represents the options for a mount of type volume. -type VolumeOptions struct { - NoCopy bool `json:",omitempty"` - Labels map[string]string `json:",omitempty"` - Subpath string `json:",omitempty"` - DriverConfig *Driver `json:",omitempty"` -} - -type ImageOptions struct { - Subpath string `json:",omitempty"` -} - -// Driver represents a volume driver. -type Driver struct { - Name string `json:",omitempty"` - Options map[string]string `json:",omitempty"` -} - -// TmpfsOptions defines options specific to mounts of type "tmpfs". -type TmpfsOptions struct { - // Size sets the size of the tmpfs, in bytes. - // - // This will be converted to an operating system specific value - // depending on the host. For example, on linux, it will be converted to - // use a 'k', 'm' or 'g' syntax. BSD, though not widely supported with - // docker, uses a straight byte value. - // - // Percentages are not supported. - SizeBytes int64 `json:",omitempty"` - // Mode of the tmpfs upon creation - Mode os.FileMode `json:",omitempty"` - // Options to be passed to the tmpfs mount. An array of arrays. Flag - // options should be provided as 1-length arrays. Other types should be - // provided as 2-length arrays, where the first item is the key and the - // second the value. - Options [][]string `json:",omitempty"` - // TODO(stevvooe): There are several more tmpfs flags, specified in the - // daemon, that are accepted. Only the most basic are added for now. - // - // From https://github.com/moby/sys/blob/mount/v0.1.1/mount/flags.go#L47-L56 - // - // var validFlags = map[string]bool{ - // "": true, - // "size": true, X - // "mode": true, X - // "uid": true, - // "gid": true, - // "nr_inodes": true, - // "nr_blocks": true, - // "mpol": true, - // } - // - // Some of these may be straightforward to add, but others, such as - // uid/gid have implications in a clustered system. -} - -// ClusterOptions specifies options for a Cluster volume. -type ClusterOptions struct { - // intentionally empty -} diff --git a/vendor/github.com/docker/docker/api/types/network/create_response.go b/vendor/github.com/docker/docker/api/types/network/create_response.go deleted file mode 100644 index c32b35bf..00000000 --- a/vendor/github.com/docker/docker/api/types/network/create_response.go +++ /dev/null @@ -1,19 +0,0 @@ -package network - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// CreateResponse NetworkCreateResponse -// -// OK response to NetworkCreate operation -// swagger:model CreateResponse -type CreateResponse struct { - - // The ID of the created network. - // Required: true - ID string `json:"Id"` - - // Warnings encountered when creating the container - // Required: true - Warning string `json:"Warning"` -} diff --git a/vendor/github.com/docker/docker/api/types/network/endpoint.go b/vendor/github.com/docker/docker/api/types/network/endpoint.go deleted file mode 100644 index cdc06c6c..00000000 --- a/vendor/github.com/docker/docker/api/types/network/endpoint.go +++ /dev/null @@ -1,151 +0,0 @@ -package network - -import ( - "errors" - "fmt" - "net" -) - -// EndpointSettings stores the network endpoint details -type EndpointSettings struct { - // Configurations - IPAMConfig *EndpointIPAMConfig - Links []string - Aliases []string // Aliases holds the list of extra, user-specified DNS names for this endpoint. - // MacAddress may be used to specify a MAC address when the container is created. - // Once the container is running, it becomes operational data (it may contain a - // generated address). - MacAddress string - DriverOpts map[string]string - - // GwPriority determines which endpoint will provide the default gateway - // for the container. The endpoint with the highest priority will be used. - // If multiple endpoints have the same priority, they are lexicographically - // sorted based on their network name, and the one that sorts first is picked. - GwPriority int - // Operational data - NetworkID string - EndpointID string - Gateway string - IPAddress string - IPPrefixLen int - IPv6Gateway string - GlobalIPv6Address string - GlobalIPv6PrefixLen int - // DNSNames holds all the (non fully qualified) DNS names associated to this endpoint. First entry is used to - // generate PTR records. - DNSNames []string -} - -// Copy makes a deep copy of `EndpointSettings` -func (es *EndpointSettings) Copy() *EndpointSettings { - epCopy := *es - if es.IPAMConfig != nil { - epCopy.IPAMConfig = es.IPAMConfig.Copy() - } - - if es.Links != nil { - links := make([]string, 0, len(es.Links)) - epCopy.Links = append(links, es.Links...) - } - - if es.Aliases != nil { - aliases := make([]string, 0, len(es.Aliases)) - epCopy.Aliases = append(aliases, es.Aliases...) - } - - if len(es.DNSNames) > 0 { - epCopy.DNSNames = make([]string, len(es.DNSNames)) - copy(epCopy.DNSNames, es.DNSNames) - } - - return &epCopy -} - -// EndpointIPAMConfig represents IPAM configurations for the endpoint -type EndpointIPAMConfig struct { - IPv4Address string `json:",omitempty"` - IPv6Address string `json:",omitempty"` - LinkLocalIPs []string `json:",omitempty"` -} - -// Copy makes a copy of the endpoint ipam config -func (cfg *EndpointIPAMConfig) Copy() *EndpointIPAMConfig { - cfgCopy := *cfg - cfgCopy.LinkLocalIPs = make([]string, 0, len(cfg.LinkLocalIPs)) - cfgCopy.LinkLocalIPs = append(cfgCopy.LinkLocalIPs, cfg.LinkLocalIPs...) - return &cfgCopy -} - -// NetworkSubnet describes a user-defined subnet for a specific network. It's only used to validate if an -// EndpointIPAMConfig is valid for a specific network. -type NetworkSubnet interface { - // Contains checks whether the NetworkSubnet contains [addr]. - Contains(addr net.IP) bool - // IsStatic checks whether the subnet was statically allocated (ie. user-defined). - IsStatic() bool -} - -// IsInRange checks whether static IP addresses are valid in a specific network. -func (cfg *EndpointIPAMConfig) IsInRange(v4Subnets []NetworkSubnet, v6Subnets []NetworkSubnet) error { - var errs []error - - if err := validateEndpointIPAddress(cfg.IPv4Address, v4Subnets); err != nil { - errs = append(errs, err) - } - if err := validateEndpointIPAddress(cfg.IPv6Address, v6Subnets); err != nil { - errs = append(errs, err) - } - - return errJoin(errs...) -} - -func validateEndpointIPAddress(epAddr string, ipamSubnets []NetworkSubnet) error { - if epAddr == "" { - return nil - } - - var staticSubnet bool - parsedAddr := net.ParseIP(epAddr) - for _, subnet := range ipamSubnets { - if subnet.IsStatic() { - staticSubnet = true - if subnet.Contains(parsedAddr) { - return nil - } - } - } - - if staticSubnet { - return fmt.Errorf("no configured subnet or ip-range contain the IP address %s", epAddr) - } - - return errors.New("user specified IP address is supported only when connecting to networks with user configured subnets") -} - -// Validate checks whether cfg is valid. -func (cfg *EndpointIPAMConfig) Validate() error { - if cfg == nil { - return nil - } - - var errs []error - - if cfg.IPv4Address != "" { - if addr := net.ParseIP(cfg.IPv4Address); addr == nil || addr.To4() == nil || addr.IsUnspecified() { - errs = append(errs, fmt.Errorf("invalid IPv4 address: %s", cfg.IPv4Address)) - } - } - if cfg.IPv6Address != "" { - if addr := net.ParseIP(cfg.IPv6Address); addr == nil || addr.To4() != nil || addr.IsUnspecified() { - errs = append(errs, fmt.Errorf("invalid IPv6 address: %s", cfg.IPv6Address)) - } - } - for _, addr := range cfg.LinkLocalIPs { - if parsed := net.ParseIP(addr); parsed == nil || parsed.IsUnspecified() { - errs = append(errs, fmt.Errorf("invalid link-local IP address: %s", addr)) - } - } - - return errJoin(errs...) -} diff --git a/vendor/github.com/docker/docker/api/types/network/ipam.go b/vendor/github.com/docker/docker/api/types/network/ipam.go deleted file mode 100644 index f9a9ff9b..00000000 --- a/vendor/github.com/docker/docker/api/types/network/ipam.go +++ /dev/null @@ -1,173 +0,0 @@ -package network - -import ( - "errors" - "fmt" - "net/netip" - "strings" -) - -// IPAM represents IP Address Management -type IPAM struct { - Driver string - Options map[string]string // Per network IPAM driver options - Config []IPAMConfig -} - -// IPAMConfig represents IPAM configurations -type IPAMConfig struct { - Subnet string `json:",omitempty"` - IPRange string `json:",omitempty"` - Gateway string `json:",omitempty"` - AuxAddress map[string]string `json:"AuxiliaryAddresses,omitempty"` -} - -type ipFamily string - -const ( - ip4 ipFamily = "IPv4" - ip6 ipFamily = "IPv6" -) - -// ValidateIPAM checks whether the network's IPAM passed as argument is valid. It returns a joinError of the list of -// errors found. -func ValidateIPAM(ipam *IPAM, enableIPv6 bool) error { - if ipam == nil { - return nil - } - - var errs []error - for _, cfg := range ipam.Config { - subnet, err := netip.ParsePrefix(cfg.Subnet) - if err != nil { - errs = append(errs, fmt.Errorf("invalid subnet %s: invalid CIDR block notation", cfg.Subnet)) - continue - } - subnetFamily := ip4 - if subnet.Addr().Is6() { - subnetFamily = ip6 - } - - if !enableIPv6 && subnetFamily == ip6 { - continue - } - - if subnet != subnet.Masked() { - errs = append(errs, fmt.Errorf("invalid subnet %s: it should be %s", subnet, subnet.Masked())) - } - - if ipRangeErrs := validateIPRange(cfg.IPRange, subnet, subnetFamily); len(ipRangeErrs) > 0 { - errs = append(errs, ipRangeErrs...) - } - - if err := validateAddress(cfg.Gateway, subnet, subnetFamily); err != nil { - errs = append(errs, fmt.Errorf("invalid gateway %s: %w", cfg.Gateway, err)) - } - - for auxName, aux := range cfg.AuxAddress { - if err := validateAddress(aux, subnet, subnetFamily); err != nil { - errs = append(errs, fmt.Errorf("invalid auxiliary address %s: %w", auxName, err)) - } - } - } - - if err := errJoin(errs...); err != nil { - return fmt.Errorf("invalid network config:\n%w", err) - } - - return nil -} - -func validateIPRange(ipRange string, subnet netip.Prefix, subnetFamily ipFamily) []error { - if ipRange == "" { - return nil - } - prefix, err := netip.ParsePrefix(ipRange) - if err != nil { - return []error{fmt.Errorf("invalid ip-range %s: invalid CIDR block notation", ipRange)} - } - family := ip4 - if prefix.Addr().Is6() { - family = ip6 - } - - if family != subnetFamily { - return []error{fmt.Errorf("invalid ip-range %s: parent subnet is an %s block", ipRange, subnetFamily)} - } - - var errs []error - if prefix.Bits() < subnet.Bits() { - errs = append(errs, fmt.Errorf("invalid ip-range %s: CIDR block is bigger than its parent subnet %s", ipRange, subnet)) - } - if prefix != prefix.Masked() { - errs = append(errs, fmt.Errorf("invalid ip-range %s: it should be %s", prefix, prefix.Masked())) - } - if !subnet.Overlaps(prefix) { - errs = append(errs, fmt.Errorf("invalid ip-range %s: parent subnet %s doesn't contain ip-range", ipRange, subnet)) - } - - return errs -} - -func validateAddress(address string, subnet netip.Prefix, subnetFamily ipFamily) error { - if address == "" { - return nil - } - addr, err := netip.ParseAddr(address) - if err != nil { - return errors.New("invalid address") - } - family := ip4 - if addr.Is6() { - family = ip6 - } - - if family != subnetFamily { - return fmt.Errorf("parent subnet is an %s block", subnetFamily) - } - if !subnet.Contains(addr) { - return fmt.Errorf("parent subnet %s doesn't contain this address", subnet) - } - - return nil -} - -func errJoin(errs ...error) error { - n := 0 - for _, err := range errs { - if err != nil { - n++ - } - } - if n == 0 { - return nil - } - e := &joinError{ - errs: make([]error, 0, n), - } - for _, err := range errs { - if err != nil { - e.errs = append(e.errs, err) - } - } - return e -} - -type joinError struct { - errs []error -} - -func (e *joinError) Error() string { - if len(e.errs) == 1 { - return strings.TrimSpace(e.errs[0].Error()) - } - stringErrs := make([]string, 0, len(e.errs)) - for _, subErr := range e.errs { - stringErrs = append(stringErrs, strings.ReplaceAll(subErr.Error(), "\n", "\n\t")) - } - return "* " + strings.Join(stringErrs, "\n* ") -} - -func (e *joinError) Unwrap() []error { - return e.errs -} diff --git a/vendor/github.com/docker/docker/api/types/network/network.go b/vendor/github.com/docker/docker/api/types/network/network.go deleted file mode 100644 index 4a0cb479..00000000 --- a/vendor/github.com/docker/docker/api/types/network/network.go +++ /dev/null @@ -1,168 +0,0 @@ -package network - -import ( - "time" - - "github.com/docker/docker/api/types/filters" -) - -const ( - // NetworkDefault is a platform-independent alias to choose the platform-specific default network stack. - NetworkDefault = "default" - // NetworkHost is the name of the predefined network used when the NetworkMode host is selected (only available on Linux) - NetworkHost = "host" - // NetworkNone is the name of the predefined network used when the NetworkMode none is selected (available on both Linux and Windows) - NetworkNone = "none" - // NetworkBridge is the name of the default network on Linux - NetworkBridge = "bridge" - // NetworkNat is the name of the default network on Windows - NetworkNat = "nat" -) - -// CreateRequest is the request message sent to the server for network create call. -type CreateRequest struct { - CreateOptions - Name string // Name is the requested name of the network. - - // Deprecated: CheckDuplicate is deprecated since API v1.44, but it defaults to true when sent by the client - // package to older daemons. - CheckDuplicate *bool `json:",omitempty"` -} - -// CreateOptions holds options to create a network. -type CreateOptions struct { - Driver string // Driver is the driver-name used to create the network (e.g. `bridge`, `overlay`) - Scope string // Scope describes the level at which the network exists (e.g. `swarm` for cluster-wide or `local` for machine level). - EnableIPv4 *bool `json:",omitempty"` // EnableIPv4 represents whether to enable IPv4. - EnableIPv6 *bool `json:",omitempty"` // EnableIPv6 represents whether to enable IPv6. - IPAM *IPAM // IPAM is the network's IP Address Management. - Internal bool // Internal represents if the network is used internal only. - Attachable bool // Attachable represents if the global scope is manually attachable by regular containers from workers in swarm mode. - Ingress bool // Ingress indicates the network is providing the routing-mesh for the swarm cluster. - ConfigOnly bool // ConfigOnly creates a config-only network. Config-only networks are place-holder networks for network configurations to be used by other networks. ConfigOnly networks cannot be used directly to run containers or services. - ConfigFrom *ConfigReference // ConfigFrom specifies the source which will provide the configuration for this network. The specified network must be a config-only network; see [CreateOptions.ConfigOnly]. - Options map[string]string // Options specifies the network-specific options to use for when creating the network. - Labels map[string]string // Labels holds metadata specific to the network being created. -} - -// ListOptions holds parameters to filter the list of networks with. -type ListOptions struct { - Filters filters.Args -} - -// InspectOptions holds parameters to inspect network. -type InspectOptions struct { - Scope string - Verbose bool -} - -// ConnectOptions represents the data to be used to connect a container to the -// network. -type ConnectOptions struct { - Container string - EndpointConfig *EndpointSettings `json:",omitempty"` -} - -// DisconnectOptions represents the data to be used to disconnect a container -// from the network. -type DisconnectOptions struct { - Container string - Force bool -} - -// Inspect is the body of the "get network" http response message. -type Inspect struct { - Name string // Name is the name of the network - ID string `json:"Id"` // ID uniquely identifies a network on a single machine - Created time.Time // Created is the time the network created - Scope string // Scope describes the level at which the network exists (e.g. `swarm` for cluster-wide or `local` for machine level) - Driver string // Driver is the Driver name used to create the network (e.g. `bridge`, `overlay`) - EnableIPv4 bool // EnableIPv4 represents whether IPv4 is enabled - EnableIPv6 bool // EnableIPv6 represents whether IPv6 is enabled - IPAM IPAM // IPAM is the network's IP Address Management - Internal bool // Internal represents if the network is used internal only - Attachable bool // Attachable represents if the global scope is manually attachable by regular containers from workers in swarm mode. - Ingress bool // Ingress indicates the network is providing the routing-mesh for the swarm cluster. - ConfigFrom ConfigReference // ConfigFrom specifies the source which will provide the configuration for this network. - ConfigOnly bool // ConfigOnly networks are place-holder networks for network configurations to be used by other networks. ConfigOnly networks cannot be used directly to run containers or services. - Containers map[string]EndpointResource // Containers contains endpoints belonging to the network - Options map[string]string // Options holds the network specific options to use for when creating the network - Labels map[string]string // Labels holds metadata specific to the network being created - Peers []PeerInfo `json:",omitempty"` // List of peer nodes for an overlay network - Services map[string]ServiceInfo `json:",omitempty"` -} - -// Summary is used as response when listing networks. It currently is an alias -// for [Inspect], but may diverge in the future, as not all information may -// be included when listing networks. -type Summary = Inspect - -// Address represents an IP address -type Address struct { - Addr string - PrefixLen int -} - -// PeerInfo represents one peer of an overlay network -type PeerInfo struct { - Name string - IP string -} - -// Task carries the information about one backend task -type Task struct { - Name string - EndpointID string - EndpointIP string - Info map[string]string -} - -// ServiceInfo represents service parameters with the list of service's tasks -type ServiceInfo struct { - VIP string - Ports []string - LocalLBIndex int - Tasks []Task -} - -// EndpointResource contains network resources allocated and used for a -// container in a network. -type EndpointResource struct { - Name string - EndpointID string - MacAddress string - IPv4Address string - IPv6Address string -} - -// NetworkingConfig represents the container's networking configuration for each of its interfaces -// Carries the networking configs specified in the `docker run` and `docker network connect` commands -type NetworkingConfig struct { - EndpointsConfig map[string]*EndpointSettings // Endpoint configs for each connecting network -} - -// ConfigReference specifies the source which provides a network's configuration -type ConfigReference struct { - Network string -} - -var acceptedFilters = map[string]bool{ - "dangling": true, - "driver": true, - "id": true, - "label": true, - "name": true, - "scope": true, - "type": true, -} - -// ValidateFilters validates the list of filter args with the available filters. -func ValidateFilters(filter filters.Args) error { - return filter.Validate(acceptedFilters) -} - -// PruneReport contains the response for Engine API: -// POST "/networks/prune" -type PruneReport struct { - NetworksDeleted []string -} diff --git a/vendor/github.com/docker/docker/api/types/plugin.go b/vendor/github.com/docker/docker/api/types/plugin.go deleted file mode 100644 index a9eff28a..00000000 --- a/vendor/github.com/docker/docker/api/types/plugin.go +++ /dev/null @@ -1,207 +0,0 @@ -package types - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// Plugin A plugin for the Engine API -// swagger:model Plugin -type Plugin struct { - - // config - // Required: true - Config PluginConfig `json:"Config"` - - // True if the plugin is running. False if the plugin is not running, only installed. - // Required: true - Enabled bool `json:"Enabled"` - - // Id - ID string `json:"Id,omitempty"` - - // name - // Required: true - Name string `json:"Name"` - - // plugin remote reference used to push/pull the plugin - PluginReference string `json:"PluginReference,omitempty"` - - // settings - // Required: true - Settings PluginSettings `json:"Settings"` -} - -// PluginConfig The config of a plugin. -// swagger:model PluginConfig -type PluginConfig struct { - - // args - // Required: true - Args PluginConfigArgs `json:"Args"` - - // description - // Required: true - Description string `json:"Description"` - - // Docker Version used to create the plugin. - // - // Depending on how the plugin was created, this field may be empty or omitted. - // - // Deprecated: this field is no longer set, and will be removed in the next API version. - DockerVersion string `json:"DockerVersion,omitempty"` - - // documentation - // Required: true - Documentation string `json:"Documentation"` - - // entrypoint - // Required: true - Entrypoint []string `json:"Entrypoint"` - - // env - // Required: true - Env []PluginEnv `json:"Env"` - - // interface - // Required: true - Interface PluginConfigInterface `json:"Interface"` - - // ipc host - // Required: true - IpcHost bool `json:"IpcHost"` - - // linux - // Required: true - Linux PluginConfigLinux `json:"Linux"` - - // mounts - // Required: true - Mounts []PluginMount `json:"Mounts"` - - // network - // Required: true - Network PluginConfigNetwork `json:"Network"` - - // pid host - // Required: true - PidHost bool `json:"PidHost"` - - // propagated mount - // Required: true - PropagatedMount string `json:"PropagatedMount"` - - // user - User PluginConfigUser `json:"User,omitempty"` - - // work dir - // Required: true - WorkDir string `json:"WorkDir"` - - // rootfs - Rootfs *PluginConfigRootfs `json:"rootfs,omitempty"` -} - -// PluginConfigArgs plugin config args -// swagger:model PluginConfigArgs -type PluginConfigArgs struct { - - // description - // Required: true - Description string `json:"Description"` - - // name - // Required: true - Name string `json:"Name"` - - // settable - // Required: true - Settable []string `json:"Settable"` - - // value - // Required: true - Value []string `json:"Value"` -} - -// PluginConfigInterface The interface between Docker and the plugin -// swagger:model PluginConfigInterface -type PluginConfigInterface struct { - - // Protocol to use for clients connecting to the plugin. - ProtocolScheme string `json:"ProtocolScheme,omitempty"` - - // socket - // Required: true - Socket string `json:"Socket"` - - // types - // Required: true - Types []PluginInterfaceType `json:"Types"` -} - -// PluginConfigLinux plugin config linux -// swagger:model PluginConfigLinux -type PluginConfigLinux struct { - - // allow all devices - // Required: true - AllowAllDevices bool `json:"AllowAllDevices"` - - // capabilities - // Required: true - Capabilities []string `json:"Capabilities"` - - // devices - // Required: true - Devices []PluginDevice `json:"Devices"` -} - -// PluginConfigNetwork plugin config network -// swagger:model PluginConfigNetwork -type PluginConfigNetwork struct { - - // type - // Required: true - Type string `json:"Type"` -} - -// PluginConfigRootfs plugin config rootfs -// swagger:model PluginConfigRootfs -type PluginConfigRootfs struct { - - // diff ids - DiffIds []string `json:"diff_ids"` - - // type - Type string `json:"type,omitempty"` -} - -// PluginConfigUser plugin config user -// swagger:model PluginConfigUser -type PluginConfigUser struct { - - // g ID - GID uint32 `json:"GID,omitempty"` - - // UID - UID uint32 `json:"UID,omitempty"` -} - -// PluginSettings Settings that can be modified by users. -// swagger:model PluginSettings -type PluginSettings struct { - - // args - // Required: true - Args []string `json:"Args"` - - // devices - // Required: true - Devices []PluginDevice `json:"Devices"` - - // env - // Required: true - Env []string `json:"Env"` - - // mounts - // Required: true - Mounts []PluginMount `json:"Mounts"` -} diff --git a/vendor/github.com/docker/docker/api/types/plugin_device.go b/vendor/github.com/docker/docker/api/types/plugin_device.go deleted file mode 100644 index 56990106..00000000 --- a/vendor/github.com/docker/docker/api/types/plugin_device.go +++ /dev/null @@ -1,25 +0,0 @@ -package types - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// PluginDevice plugin device -// swagger:model PluginDevice -type PluginDevice struct { - - // description - // Required: true - Description string `json:"Description"` - - // name - // Required: true - Name string `json:"Name"` - - // path - // Required: true - Path *string `json:"Path"` - - // settable - // Required: true - Settable []string `json:"Settable"` -} diff --git a/vendor/github.com/docker/docker/api/types/plugin_env.go b/vendor/github.com/docker/docker/api/types/plugin_env.go deleted file mode 100644 index 32962dc2..00000000 --- a/vendor/github.com/docker/docker/api/types/plugin_env.go +++ /dev/null @@ -1,25 +0,0 @@ -package types - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// PluginEnv plugin env -// swagger:model PluginEnv -type PluginEnv struct { - - // description - // Required: true - Description string `json:"Description"` - - // name - // Required: true - Name string `json:"Name"` - - // settable - // Required: true - Settable []string `json:"Settable"` - - // value - // Required: true - Value *string `json:"Value"` -} diff --git a/vendor/github.com/docker/docker/api/types/plugin_interface_type.go b/vendor/github.com/docker/docker/api/types/plugin_interface_type.go deleted file mode 100644 index c82f204e..00000000 --- a/vendor/github.com/docker/docker/api/types/plugin_interface_type.go +++ /dev/null @@ -1,21 +0,0 @@ -package types - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// PluginInterfaceType plugin interface type -// swagger:model PluginInterfaceType -type PluginInterfaceType struct { - - // capability - // Required: true - Capability string `json:"Capability"` - - // prefix - // Required: true - Prefix string `json:"Prefix"` - - // version - // Required: true - Version string `json:"Version"` -} diff --git a/vendor/github.com/docker/docker/api/types/plugin_mount.go b/vendor/github.com/docker/docker/api/types/plugin_mount.go deleted file mode 100644 index 5c031cf8..00000000 --- a/vendor/github.com/docker/docker/api/types/plugin_mount.go +++ /dev/null @@ -1,37 +0,0 @@ -package types - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// PluginMount plugin mount -// swagger:model PluginMount -type PluginMount struct { - - // description - // Required: true - Description string `json:"Description"` - - // destination - // Required: true - Destination string `json:"Destination"` - - // name - // Required: true - Name string `json:"Name"` - - // options - // Required: true - Options []string `json:"Options"` - - // settable - // Required: true - Settable []string `json:"Settable"` - - // source - // Required: true - Source *string `json:"Source"` - - // type - // Required: true - Type string `json:"Type"` -} diff --git a/vendor/github.com/docker/docker/api/types/plugin_responses.go b/vendor/github.com/docker/docker/api/types/plugin_responses.go deleted file mode 100644 index 18f743fc..00000000 --- a/vendor/github.com/docker/docker/api/types/plugin_responses.go +++ /dev/null @@ -1,71 +0,0 @@ -package types - -import ( - "encoding/json" - "fmt" - "sort" -) - -// PluginsListResponse contains the response for the Engine API -type PluginsListResponse []*Plugin - -// UnmarshalJSON implements json.Unmarshaler for PluginInterfaceType -func (t *PluginInterfaceType) UnmarshalJSON(p []byte) error { - versionIndex := len(p) - prefixIndex := 0 - if len(p) < 2 || p[0] != '"' || p[len(p)-1] != '"' { - return fmt.Errorf("%q is not a plugin interface type", p) - } - p = p[1 : len(p)-1] -loop: - for i, b := range p { - switch b { - case '.': - prefixIndex = i - case '/': - versionIndex = i - break loop - } - } - t.Prefix = string(p[:prefixIndex]) - t.Capability = string(p[prefixIndex+1 : versionIndex]) - if versionIndex < len(p) { - t.Version = string(p[versionIndex+1:]) - } - return nil -} - -// MarshalJSON implements json.Marshaler for PluginInterfaceType -func (t *PluginInterfaceType) MarshalJSON() ([]byte, error) { - return json.Marshal(t.String()) -} - -// String implements fmt.Stringer for PluginInterfaceType -func (t PluginInterfaceType) String() string { - return fmt.Sprintf("%s.%s/%s", t.Prefix, t.Capability, t.Version) -} - -// PluginPrivilege describes a permission the user has to accept -// upon installing a plugin. -type PluginPrivilege struct { - Name string - Description string - Value []string -} - -// PluginPrivileges is a list of PluginPrivilege -type PluginPrivileges []PluginPrivilege - -func (s PluginPrivileges) Len() int { - return len(s) -} - -func (s PluginPrivileges) Less(i, j int) bool { - return s[i].Name < s[j].Name -} - -func (s PluginPrivileges) Swap(i, j int) { - sort.Strings(s[i].Value) - sort.Strings(s[j].Value) - s[i], s[j] = s[j], s[i] -} diff --git a/vendor/github.com/docker/docker/api/types/registry/authconfig.go b/vendor/github.com/docker/docker/api/types/registry/authconfig.go deleted file mode 100644 index 4c6d7ab2..00000000 --- a/vendor/github.com/docker/docker/api/types/registry/authconfig.go +++ /dev/null @@ -1,112 +0,0 @@ -package registry - -import ( - "context" - "encoding/base64" - "encoding/json" - "fmt" - "io" - "strings" -) - -// AuthHeader is the name of the header used to send encoded registry -// authorization credentials for registry operations (push/pull). -const AuthHeader = "X-Registry-Auth" - -// RequestAuthConfig is a function interface that clients can supply -// to retry operations after getting an authorization error. -// -// The function must return the [AuthHeader] value ([AuthConfig]), encoded -// in base64url format ([RFC4648, section 5]), which can be decoded by -// [DecodeAuthConfig]. -// -// It must return an error if the privilege request fails. -// -// [RFC4648, section 5]: https://tools.ietf.org/html/rfc4648#section-5 -type RequestAuthConfig func(context.Context) (string, error) - -// AuthConfig contains authorization information for connecting to a Registry. -type AuthConfig struct { - Username string `json:"username,omitempty"` - Password string `json:"password,omitempty"` - Auth string `json:"auth,omitempty"` - - // Email is an optional value associated with the username. - // - // Deprecated: This field is deprecated since docker 1.11 (API v1.23) and will be removed in the next release. - Email string `json:"email,omitempty"` - - ServerAddress string `json:"serveraddress,omitempty"` - - // IdentityToken is used to authenticate the user and get - // an access token for the registry. - IdentityToken string `json:"identitytoken,omitempty"` - - // RegistryToken is a bearer token to be sent to a registry - RegistryToken string `json:"registrytoken,omitempty"` -} - -// EncodeAuthConfig serializes the auth configuration as a base64url encoded -// ([RFC4648, section 5]) JSON string for sending through the X-Registry-Auth header. -// -// [RFC4648, section 5]: https://tools.ietf.org/html/rfc4648#section-5 -func EncodeAuthConfig(authConfig AuthConfig) (string, error) { - buf, err := json.Marshal(authConfig) - if err != nil { - return "", errInvalidParameter{err} - } - return base64.URLEncoding.EncodeToString(buf), nil -} - -// DecodeAuthConfig decodes base64url encoded ([RFC4648, section 5]) JSON -// authentication information as sent through the X-Registry-Auth header. -// -// This function always returns an [AuthConfig], even if an error occurs. It is up -// to the caller to decide if authentication is required, and if the error can -// be ignored. -// -// [RFC4648, section 5]: https://tools.ietf.org/html/rfc4648#section-5 -func DecodeAuthConfig(authEncoded string) (*AuthConfig, error) { - if authEncoded == "" { - return &AuthConfig{}, nil - } - - authJSON := base64.NewDecoder(base64.URLEncoding, strings.NewReader(authEncoded)) - return decodeAuthConfigFromReader(authJSON) -} - -// DecodeAuthConfigBody decodes authentication information as sent as JSON in the -// body of a request. This function is to provide backward compatibility with old -// clients and API versions. Current clients and API versions expect authentication -// to be provided through the X-Registry-Auth header. -// -// Like [DecodeAuthConfig], this function always returns an [AuthConfig], even if an -// error occurs. It is up to the caller to decide if authentication is required, -// and if the error can be ignored. -// -// Deprecated: this function is no longer used and will be removed in the next release. -func DecodeAuthConfigBody(rdr io.ReadCloser) (*AuthConfig, error) { - return decodeAuthConfigFromReader(rdr) -} - -func decodeAuthConfigFromReader(rdr io.Reader) (*AuthConfig, error) { - authConfig := &AuthConfig{} - if err := json.NewDecoder(rdr).Decode(authConfig); err != nil { - // always return an (empty) AuthConfig to increase compatibility with - // the existing API. - return &AuthConfig{}, invalid(err) - } - return authConfig, nil -} - -func invalid(err error) error { - return errInvalidParameter{fmt.Errorf("invalid X-Registry-Auth header: %w", err)} -} - -type errInvalidParameter struct{ error } - -func (errInvalidParameter) InvalidParameter() {} - -func (e errInvalidParameter) Cause() error { return e.error } - -func (e errInvalidParameter) Unwrap() error { return e.error } diff --git a/vendor/github.com/docker/docker/api/types/registry/authenticate.go b/vendor/github.com/docker/docker/api/types/registry/authenticate.go deleted file mode 100644 index 42cac443..00000000 --- a/vendor/github.com/docker/docker/api/types/registry/authenticate.go +++ /dev/null @@ -1,21 +0,0 @@ -package registry - -// ---------------------------------------------------------------------------- -// DO NOT EDIT THIS FILE -// This file was generated by `swagger generate operation` -// -// See hack/generate-swagger-api.sh -// ---------------------------------------------------------------------------- - -// AuthenticateOKBody authenticate o k body -// swagger:model AuthenticateOKBody -type AuthenticateOKBody struct { - - // An opaque token used to authenticate a user after a successful login - // Required: true - IdentityToken string `json:"IdentityToken"` - - // The status of the authentication - // Required: true - Status string `json:"Status"` -} diff --git a/vendor/github.com/docker/docker/api/types/registry/registry.go b/vendor/github.com/docker/docker/api/types/registry/registry.go deleted file mode 100644 index 9319c964..00000000 --- a/vendor/github.com/docker/docker/api/types/registry/registry.go +++ /dev/null @@ -1,122 +0,0 @@ -// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16: -//go:build go1.23 - -package registry - -import ( - "encoding/json" - "net" - - ocispec "github.com/opencontainers/image-spec/specs-go/v1" -) - -// ServiceConfig stores daemon registry services configuration. -type ServiceConfig struct { - AllowNondistributableArtifactsCIDRs []*NetIPNet `json:"AllowNondistributableArtifactsCIDRs,omitempty"` // Deprecated: non-distributable artifacts are deprecated and enabled by default. This field will be removed in the next release. - AllowNondistributableArtifactsHostnames []string `json:"AllowNondistributableArtifactsHostnames,omitempty"` // Deprecated: non-distributable artifacts are deprecated and enabled by default. This field will be removed in the next release. - - InsecureRegistryCIDRs []*NetIPNet `json:"InsecureRegistryCIDRs"` - IndexConfigs map[string]*IndexInfo `json:"IndexConfigs"` - Mirrors []string - - // ExtraFields is for internal use to include deprecated fields on older API versions. - ExtraFields map[string]any `json:"-"` -} - -// MarshalJSON implements a custom marshaler to include legacy fields -// in API responses. -func (sc *ServiceConfig) MarshalJSON() ([]byte, error) { - type tmp ServiceConfig - base, err := json.Marshal((*tmp)(sc)) - if err != nil { - return nil, err - } - var merged map[string]any - _ = json.Unmarshal(base, &merged) - - for k, v := range sc.ExtraFields { - merged[k] = v - } - return json.Marshal(merged) -} - -// NetIPNet is the net.IPNet type, which can be marshalled and -// unmarshalled to JSON -type NetIPNet net.IPNet - -// String returns the CIDR notation of ipnet -func (ipnet *NetIPNet) String() string { - return (*net.IPNet)(ipnet).String() -} - -// MarshalJSON returns the JSON representation of the IPNet -func (ipnet *NetIPNet) MarshalJSON() ([]byte, error) { - return json.Marshal((*net.IPNet)(ipnet).String()) -} - -// UnmarshalJSON sets the IPNet from a byte array of JSON -func (ipnet *NetIPNet) UnmarshalJSON(b []byte) error { - var ipnetStr string - if err := json.Unmarshal(b, &ipnetStr); err != nil { - return err - } - _, cidr, err := net.ParseCIDR(ipnetStr) - if err != nil { - return err - } - *ipnet = NetIPNet(*cidr) - return nil -} - -// IndexInfo contains information about a registry -// -// RepositoryInfo Examples: -// -// { -// "Index" : { -// "Name" : "docker.io", -// "Mirrors" : ["https://registry-2.docker.io/v1/", "https://registry-3.docker.io/v1/"], -// "Secure" : true, -// "Official" : true, -// }, -// "RemoteName" : "library/debian", -// "LocalName" : "debian", -// "CanonicalName" : "docker.io/debian" -// "Official" : true, -// } -// -// { -// "Index" : { -// "Name" : "127.0.0.1:5000", -// "Mirrors" : [], -// "Secure" : false, -// "Official" : false, -// }, -// "RemoteName" : "user/repo", -// "LocalName" : "127.0.0.1:5000/user/repo", -// "CanonicalName" : "127.0.0.1:5000/user/repo", -// "Official" : false, -// } -type IndexInfo struct { - // Name is the name of the registry, such as "docker.io" - Name string - // Mirrors is a list of mirrors, expressed as URIs - Mirrors []string - // Secure is set to false if the registry is part of the list of - // insecure registries. Insecure registries accept HTTP and/or accept - // HTTPS with certificates from unknown CAs. - Secure bool - // Official indicates whether this is an official registry - Official bool -} - -// DistributionInspect describes the result obtained from contacting the -// registry to retrieve image metadata -type DistributionInspect struct { - // Descriptor contains information about the manifest, including - // the content addressable digest - Descriptor ocispec.Descriptor - // Platforms contains the list of platforms supported by the image, - // obtained by parsing the manifest - Platforms []ocispec.Platform -} diff --git a/vendor/github.com/docker/docker/api/types/registry/search.go b/vendor/github.com/docker/docker/api/types/registry/search.go deleted file mode 100644 index 994ca4c6..00000000 --- a/vendor/github.com/docker/docker/api/types/registry/search.go +++ /dev/null @@ -1,48 +0,0 @@ -package registry - -import ( - "context" - - "github.com/docker/docker/api/types/filters" -) - -// SearchOptions holds parameters to search images with. -type SearchOptions struct { - RegistryAuth string - - // PrivilegeFunc is a function that clients can supply to retry operations - // after getting an authorization error. This function returns the registry - // authentication header value in base64 encoded format, or an error if the - // privilege request fails. - // - // For details, refer to [github.com/docker/docker/api/types/registry.RequestAuthConfig]. - PrivilegeFunc func(context.Context) (string, error) - Filters filters.Args - Limit int -} - -// SearchResult describes a search result returned from a registry -type SearchResult struct { - // StarCount indicates the number of stars this repository has - StarCount int `json:"star_count"` - // IsOfficial is true if the result is from an official repository. - IsOfficial bool `json:"is_official"` - // Name is the name of the repository - Name string `json:"name"` - // IsAutomated indicates whether the result is automated. - // - // Deprecated: the "is_automated" field is deprecated and will always be "false". - IsAutomated bool `json:"is_automated"` - // Description is a textual description of the repository - Description string `json:"description"` -} - -// SearchResults lists a collection search results returned from a registry -type SearchResults struct { - // Query contains the query string that generated the search results - Query string `json:"query"` - // NumResults indicates the number of results the query returned - NumResults int `json:"num_results"` - // Results is a slice containing the actual results for the search - Results []SearchResult `json:"results"` -} diff --git a/vendor/github.com/docker/docker/api/types/storage/driver_data.go b/vendor/github.com/docker/docker/api/types/storage/driver_data.go deleted file mode 100644 index 009e2130..00000000 --- a/vendor/github.com/docker/docker/api/types/storage/driver_data.go +++ /dev/null @@ -1,23 +0,0 @@ -package storage - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// DriverData Information about the storage driver used to store the container's and -// image's filesystem. -// -// swagger:model DriverData -type DriverData struct { - - // Low-level storage metadata, provided as key/value pairs. - // - // This information is driver-specific, and depends on the storage-driver - // in use, and should be used for informational purposes only. - // - // Required: true - Data map[string]string `json:"Data"` - - // Name of the storage driver. - // Required: true - Name string `json:"Name"` -} diff --git a/vendor/github.com/docker/docker/api/types/strslice/strslice.go b/vendor/github.com/docker/docker/api/types/strslice/strslice.go deleted file mode 100644 index bad493fb..00000000 --- a/vendor/github.com/docker/docker/api/types/strslice/strslice.go +++ /dev/null @@ -1,30 +0,0 @@ -package strslice - -import "encoding/json" - -// StrSlice represents a string or an array of strings. -// We need to override the json decoder to accept both options. -type StrSlice []string - -// UnmarshalJSON decodes the byte slice whether it's a string or an array of -// strings. This method is needed to implement json.Unmarshaler. -func (e *StrSlice) UnmarshalJSON(b []byte) error { - if len(b) == 0 { - // With no input, we preserve the existing value by returning nil and - // leaving the target alone. This allows defining default values for - // the type. - return nil - } - - p := make([]string, 0, 1) - if err := json.Unmarshal(b, &p); err != nil { - var s string - if err := json.Unmarshal(b, &s); err != nil { - return err - } - p = append(p, s) - } - - *e = p - return nil -} diff --git a/vendor/github.com/docker/docker/api/types/swarm/common.go b/vendor/github.com/docker/docker/api/types/swarm/common.go deleted file mode 100644 index b42812e0..00000000 --- a/vendor/github.com/docker/docker/api/types/swarm/common.go +++ /dev/null @@ -1,48 +0,0 @@ -package swarm - -import ( - "strconv" - "time" -) - -// Version represents the internal object version. -type Version struct { - Index uint64 `json:",omitempty"` -} - -// String implements fmt.Stringer interface. -func (v Version) String() string { - return strconv.FormatUint(v.Index, 10) -} - -// Meta is a base object inherited by most of the other once. -type Meta struct { - Version Version `json:",omitempty"` - CreatedAt time.Time `json:",omitempty"` - UpdatedAt time.Time `json:",omitempty"` -} - -// Annotations represents how to describe an object. -type Annotations struct { - Name string `json:",omitempty"` - Labels map[string]string `json:"Labels"` -} - -// Driver represents a driver (network, logging, secrets backend). -type Driver struct { - Name string `json:",omitempty"` - Options map[string]string `json:",omitempty"` -} - -// TLSInfo represents the TLS information about what CA certificate is trusted, -// and who the issuer for a TLS certificate is -type TLSInfo struct { - // TrustRoot is the trusted CA root certificate in PEM format - TrustRoot string `json:",omitempty"` - - // CertIssuer is the raw subject bytes of the issuer - CertIssuerSubject []byte `json:",omitempty"` - - // CertIssuerPublicKey is the raw public key bytes of the issuer - CertIssuerPublicKey []byte `json:",omitempty"` -} diff --git a/vendor/github.com/docker/docker/api/types/swarm/config.go b/vendor/github.com/docker/docker/api/types/swarm/config.go deleted file mode 100644 index 80a6ffdb..00000000 --- a/vendor/github.com/docker/docker/api/types/swarm/config.go +++ /dev/null @@ -1,62 +0,0 @@ -package swarm - -import ( - "os" - - "github.com/docker/docker/api/types/filters" -) - -// Config represents a config. -type Config struct { - ID string - Meta - Spec ConfigSpec -} - -// ConfigSpec represents a config specification from a config in swarm -type ConfigSpec struct { - Annotations - - // Data is the data to store as a config. - // - // The maximum allowed size is 1000KB, as defined in [MaxConfigSize]. - // - // [MaxConfigSize]: https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/manager/controlapi#MaxConfigSize - Data []byte `json:",omitempty"` - - // Templating controls whether and how to evaluate the config payload as - // a template. If it is not set, no templating is used. - Templating *Driver `json:",omitempty"` -} - -// ConfigReferenceFileTarget is a file target in a config reference -type ConfigReferenceFileTarget struct { - Name string - UID string - GID string - Mode os.FileMode -} - -// ConfigReferenceRuntimeTarget is a target for a config specifying that it -// isn't mounted into the container but instead has some other purpose. -type ConfigReferenceRuntimeTarget struct{} - -// ConfigReference is a reference to a config in swarm -type ConfigReference struct { - File *ConfigReferenceFileTarget `json:",omitempty"` - Runtime *ConfigReferenceRuntimeTarget `json:",omitempty"` - ConfigID string - ConfigName string -} - -// ConfigCreateResponse contains the information returned to a client -// on the creation of a new config. -type ConfigCreateResponse struct { - // ID is the id of the created config. - ID string -} - -// ConfigListOptions holds parameters to list configs -type ConfigListOptions struct { - Filters filters.Args -} diff --git a/vendor/github.com/docker/docker/api/types/swarm/container.go b/vendor/github.com/docker/docker/api/types/swarm/container.go deleted file mode 100644 index f9416bac..00000000 --- a/vendor/github.com/docker/docker/api/types/swarm/container.go +++ /dev/null @@ -1,119 +0,0 @@ -package swarm - -import ( - "time" - - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/mount" -) - -// DNSConfig specifies DNS related configurations in resolver configuration file (resolv.conf) -// Detailed documentation is available in: -// http://man7.org/linux/man-pages/man5/resolv.conf.5.html -// `nameserver`, `search`, `options` have been supported. -// TODO: `domain` is not supported yet. -type DNSConfig struct { - // Nameservers specifies the IP addresses of the name servers - Nameservers []string `json:",omitempty"` - // Search specifies the search list for host-name lookup - Search []string `json:",omitempty"` - // Options allows certain internal resolver variables to be modified - Options []string `json:",omitempty"` -} - -// SELinuxContext contains the SELinux labels of the container. -type SELinuxContext struct { - Disable bool - - User string - Role string - Type string - Level string -} - -// SeccompMode is the type used for the enumeration of possible seccomp modes -// in SeccompOpts -type SeccompMode string - -const ( - SeccompModeDefault SeccompMode = "default" - SeccompModeUnconfined SeccompMode = "unconfined" - SeccompModeCustom SeccompMode = "custom" -) - -// SeccompOpts defines the options for configuring seccomp on a swarm-managed -// container. -type SeccompOpts struct { - // Mode is the SeccompMode used for the container. - Mode SeccompMode `json:",omitempty"` - // Profile is the custom seccomp profile as a json object to be used with - // the container. Mode should be set to SeccompModeCustom when using a - // custom profile in this manner. - Profile []byte `json:",omitempty"` -} - -// AppArmorMode is type used for the enumeration of possible AppArmor modes in -// AppArmorOpts -type AppArmorMode string - -const ( - AppArmorModeDefault AppArmorMode = "default" - AppArmorModeDisabled AppArmorMode = "disabled" -) - -// AppArmorOpts defines the options for configuring AppArmor on a swarm-managed -// container. Currently, custom AppArmor profiles are not supported. -type AppArmorOpts struct { - Mode AppArmorMode `json:",omitempty"` -} - -// CredentialSpec for managed service account (Windows only) -type CredentialSpec struct { - Config string - File string - Registry string -} - -// Privileges defines the security options for the container. -type Privileges struct { - CredentialSpec *CredentialSpec - SELinuxContext *SELinuxContext - Seccomp *SeccompOpts `json:",omitempty"` - AppArmor *AppArmorOpts `json:",omitempty"` - NoNewPrivileges bool -} - -// ContainerSpec represents the spec of a container. -type ContainerSpec struct { - Image string `json:",omitempty"` - Labels map[string]string `json:",omitempty"` - Command []string `json:",omitempty"` - Args []string `json:",omitempty"` - Hostname string `json:",omitempty"` - Env []string `json:",omitempty"` - Dir string `json:",omitempty"` - User string `json:",omitempty"` - Groups []string `json:",omitempty"` - Privileges *Privileges `json:",omitempty"` - Init *bool `json:",omitempty"` - StopSignal string `json:",omitempty"` - TTY bool `json:",omitempty"` - OpenStdin bool `json:",omitempty"` - ReadOnly bool `json:",omitempty"` - Mounts []mount.Mount `json:",omitempty"` - StopGracePeriod *time.Duration `json:",omitempty"` - Healthcheck *container.HealthConfig `json:",omitempty"` - // The format of extra hosts on swarmkit is specified in: - // http://man7.org/linux/man-pages/man5/hosts.5.html - // IP_address canonical_hostname [aliases...] - Hosts []string `json:",omitempty"` - DNSConfig *DNSConfig `json:",omitempty"` - Secrets []*SecretReference `json:",omitempty"` - Configs []*ConfigReference `json:",omitempty"` - Isolation container.Isolation `json:",omitempty"` - Sysctls map[string]string `json:",omitempty"` - CapabilityAdd []string `json:",omitempty"` - CapabilityDrop []string `json:",omitempty"` - Ulimits []*container.Ulimit `json:",omitempty"` - OomScoreAdj int64 `json:",omitempty"` -} diff --git a/vendor/github.com/docker/docker/api/types/swarm/network.go b/vendor/github.com/docker/docker/api/types/swarm/network.go deleted file mode 100644 index 4b880723..00000000 --- a/vendor/github.com/docker/docker/api/types/swarm/network.go +++ /dev/null @@ -1,121 +0,0 @@ -package swarm - -import ( - "github.com/docker/docker/api/types/network" -) - -// Endpoint represents an endpoint. -type Endpoint struct { - Spec EndpointSpec `json:",omitempty"` - Ports []PortConfig `json:",omitempty"` - VirtualIPs []EndpointVirtualIP `json:",omitempty"` -} - -// EndpointSpec represents the spec of an endpoint. -type EndpointSpec struct { - Mode ResolutionMode `json:",omitempty"` - Ports []PortConfig `json:",omitempty"` -} - -// ResolutionMode represents a resolution mode. -type ResolutionMode string - -const ( - // ResolutionModeVIP VIP - ResolutionModeVIP ResolutionMode = "vip" - // ResolutionModeDNSRR DNSRR - ResolutionModeDNSRR ResolutionMode = "dnsrr" -) - -// PortConfig represents the config of a port. -type PortConfig struct { - Name string `json:",omitempty"` - Protocol PortConfigProtocol `json:",omitempty"` - // TargetPort is the port inside the container - TargetPort uint32 `json:",omitempty"` - // PublishedPort is the port on the swarm hosts - PublishedPort uint32 `json:",omitempty"` - // PublishMode is the mode in which port is published - PublishMode PortConfigPublishMode `json:",omitempty"` -} - -// PortConfigPublishMode represents the mode in which the port is to -// be published. -type PortConfigPublishMode string - -const ( - // PortConfigPublishModeIngress is used for ports published - // for ingress load balancing using routing mesh. - PortConfigPublishModeIngress PortConfigPublishMode = "ingress" - // PortConfigPublishModeHost is used for ports published - // for direct host level access on the host where the task is running. - PortConfigPublishModeHost PortConfigPublishMode = "host" -) - -// PortConfigProtocol represents the protocol of a port. -type PortConfigProtocol string - -const ( - // TODO(stevvooe): These should be used generally, not just for PortConfig. - - // PortConfigProtocolTCP TCP - PortConfigProtocolTCP PortConfigProtocol = "tcp" - // PortConfigProtocolUDP UDP - PortConfigProtocolUDP PortConfigProtocol = "udp" - // PortConfigProtocolSCTP SCTP - PortConfigProtocolSCTP PortConfigProtocol = "sctp" -) - -// EndpointVirtualIP represents the virtual ip of a port. -type EndpointVirtualIP struct { - NetworkID string `json:",omitempty"` - Addr string `json:",omitempty"` -} - -// Network represents a network. -type Network struct { - ID string - Meta - Spec NetworkSpec `json:",omitempty"` - DriverState Driver `json:",omitempty"` - IPAMOptions *IPAMOptions `json:",omitempty"` -} - -// NetworkSpec represents the spec of a network. -type NetworkSpec struct { - Annotations - DriverConfiguration *Driver `json:",omitempty"` - IPv6Enabled bool `json:",omitempty"` - Internal bool `json:",omitempty"` - Attachable bool `json:",omitempty"` - Ingress bool `json:",omitempty"` - IPAMOptions *IPAMOptions `json:",omitempty"` - ConfigFrom *network.ConfigReference `json:",omitempty"` - Scope string `json:",omitempty"` -} - -// NetworkAttachmentConfig represents the configuration of a network attachment. -type NetworkAttachmentConfig struct { - Target string `json:",omitempty"` - Aliases []string `json:",omitempty"` - DriverOpts map[string]string `json:",omitempty"` -} - -// NetworkAttachment represents a network attachment. -type NetworkAttachment struct { - Network Network `json:",omitempty"` - Addresses []string `json:",omitempty"` -} - -// IPAMOptions represents ipam options. -type IPAMOptions struct { - Driver Driver `json:",omitempty"` - Configs []IPAMConfig `json:",omitempty"` -} - -// IPAMConfig represents ipam configuration. -type IPAMConfig struct { - Subnet string `json:",omitempty"` - Range string `json:",omitempty"` - Gateway string `json:",omitempty"` -} diff --git a/vendor/github.com/docker/docker/api/types/swarm/node.go b/vendor/github.com/docker/docker/api/types/swarm/node.go deleted file mode 100644 index 2018a031..00000000 --- a/vendor/github.com/docker/docker/api/types/swarm/node.go +++ /dev/null @@ -1,151 +0,0 @@ -package swarm - -import "github.com/docker/docker/api/types/filters" - -// Node represents a node. -type Node struct { - ID string - Meta - // Spec defines the desired state of the node as specified by the user. - // The system will honor this and will *never* modify it. - Spec NodeSpec `json:",omitempty"` - // Description encapsulates the properties of the Node as reported by the - // agent. - Description NodeDescription `json:",omitempty"` - // Status provides the current status of the node, as seen by the manager. - Status NodeStatus `json:",omitempty"` - // ManagerStatus provides the current status of the node's manager - // component, if the node is a manager. - ManagerStatus *ManagerStatus `json:",omitempty"` -} - -// NodeSpec represents the spec of a node. -type NodeSpec struct { - Annotations - Role NodeRole `json:",omitempty"` - Availability NodeAvailability `json:",omitempty"` -} - -// NodeRole represents the role of a node. -type NodeRole string - -const ( - // NodeRoleWorker WORKER - NodeRoleWorker NodeRole = "worker" - // NodeRoleManager MANAGER - NodeRoleManager NodeRole = "manager" -) - -// NodeAvailability represents the availability of a node. -type NodeAvailability string - -const ( - // NodeAvailabilityActive ACTIVE - NodeAvailabilityActive NodeAvailability = "active" - // NodeAvailabilityPause PAUSE - NodeAvailabilityPause NodeAvailability = "pause" - // NodeAvailabilityDrain DRAIN - NodeAvailabilityDrain NodeAvailability = "drain" -) - -// NodeDescription represents the description of a node. -type NodeDescription struct { - Hostname string `json:",omitempty"` - Platform Platform `json:",omitempty"` - Resources Resources `json:",omitempty"` - Engine EngineDescription `json:",omitempty"` - TLSInfo TLSInfo `json:",omitempty"` - CSIInfo []NodeCSIInfo `json:",omitempty"` -} - -// Platform represents the platform (Arch/OS). -type Platform struct { - Architecture string `json:",omitempty"` - OS string `json:",omitempty"` -} - -// EngineDescription represents the description of an engine. -type EngineDescription struct { - EngineVersion string `json:",omitempty"` - Labels map[string]string `json:",omitempty"` - Plugins []PluginDescription `json:",omitempty"` -} - -// NodeCSIInfo represents information about a CSI plugin available on the node -type NodeCSIInfo struct { - // PluginName is the name of the CSI plugin. - PluginName string `json:",omitempty"` - // NodeID is the ID of the node as reported by the CSI plugin. This is - // different from the swarm node ID. - NodeID string `json:",omitempty"` - // MaxVolumesPerNode is the maximum number of volumes that may be published - // to this node - MaxVolumesPerNode int64 `json:",omitempty"` - // AccessibleTopology indicates the location of this node in the CSI - // plugin's topology - AccessibleTopology *Topology `json:",omitempty"` -} - -// PluginDescription represents the description of an engine plugin. -type PluginDescription struct { - Type string `json:",omitempty"` - Name string `json:",omitempty"` -} - -// NodeStatus represents the status of a node. -type NodeStatus struct { - State NodeState `json:",omitempty"` - Message string `json:",omitempty"` - Addr string `json:",omitempty"` -} - -// Reachability represents the reachability of a node. -type Reachability string - -const ( - // ReachabilityUnknown UNKNOWN - ReachabilityUnknown Reachability = "unknown" - // ReachabilityUnreachable UNREACHABLE - ReachabilityUnreachable Reachability = "unreachable" - // ReachabilityReachable REACHABLE - ReachabilityReachable Reachability = "reachable" -) - -// ManagerStatus represents the status of a manager. -type ManagerStatus struct { - Leader bool `json:",omitempty"` - Reachability Reachability `json:",omitempty"` - Addr string `json:",omitempty"` -} - -// NodeState represents the state of a node. -type NodeState string - -const ( - // NodeStateUnknown UNKNOWN - NodeStateUnknown NodeState = "unknown" - // NodeStateDown DOWN - NodeStateDown NodeState = "down" - // NodeStateReady READY - NodeStateReady NodeState = "ready" - // NodeStateDisconnected DISCONNECTED - NodeStateDisconnected NodeState = "disconnected" -) - -// Topology defines the CSI topology of this node. This type is a duplicate of -// github.com/docker/docker/api/types.Topology. Because the type definition -// is so simple and to avoid complicated structure or circular imports, we just -// duplicate it here. See that type for full documentation -type Topology struct { - Segments map[string]string `json:",omitempty"` -} - -// NodeListOptions holds parameters to list nodes with. -type NodeListOptions struct { - Filters filters.Args -} - -// NodeRemoveOptions holds parameters to remove nodes with. -type NodeRemoveOptions struct { - Force bool -} diff --git a/vendor/github.com/docker/docker/api/types/swarm/runtime.go b/vendor/github.com/docker/docker/api/types/swarm/runtime.go deleted file mode 100644 index 3fda4ca6..00000000 --- a/vendor/github.com/docker/docker/api/types/swarm/runtime.go +++ /dev/null @@ -1,37 +0,0 @@ -package swarm - -import "github.com/docker/docker/api/types/swarm/runtime" - -// RuntimeType is the type of runtime used for the TaskSpec -type RuntimeType string - -// RuntimeURL is the proto type url -type RuntimeURL string - -const ( - // RuntimeContainer is the container based runtime - RuntimeContainer RuntimeType = "container" - // RuntimePlugin is the plugin based runtime - RuntimePlugin RuntimeType = "plugin" - // RuntimeNetworkAttachment is the network attachment runtime - RuntimeNetworkAttachment RuntimeType = "attachment" - - // RuntimeURLContainer is the proto url for the container type - RuntimeURLContainer RuntimeURL = "types.docker.com/RuntimeContainer" - // RuntimeURLPlugin is the proto url for the plugin type - RuntimeURLPlugin RuntimeURL = "types.docker.com/RuntimePlugin" -) - -// NetworkAttachmentSpec represents the runtime spec type for network -// attachment tasks -type NetworkAttachmentSpec struct { - ContainerID string -} - -// RuntimeSpec defines the base payload which clients can specify for creating -// a service with the plugin runtime. -type RuntimeSpec = runtime.PluginSpec - -// RuntimePrivilege describes a permission the user has to accept -// upon installing a plugin. -type RuntimePrivilege = runtime.PluginPrivilege diff --git a/vendor/github.com/docker/docker/api/types/swarm/runtime/runtime.go b/vendor/github.com/docker/docker/api/types/swarm/runtime/runtime.go deleted file mode 100644 index 95176b26..00000000 --- a/vendor/github.com/docker/docker/api/types/swarm/runtime/runtime.go +++ /dev/null @@ -1,27 +0,0 @@ -package runtime - -import "fmt" - -// PluginSpec defines the base payload which clients can specify for creating -// a service with the plugin runtime. -type PluginSpec struct { - Name string `json:"name,omitempty"` - Remote string `json:"remote,omitempty"` - Privileges []*PluginPrivilege `json:"privileges,omitempty"` - Disabled bool `json:"disabled,omitempty"` - Env []string `json:"env,omitempty"` -} - -// PluginPrivilege describes a permission the user has to accept -// upon installing a plugin. -type PluginPrivilege struct { - Name string `json:"name,omitempty"` - Description string `json:"description,omitempty"` - Value []string `json:"value,omitempty"` -} - -var ( - ErrInvalidLengthPlugin = fmt.Errorf("proto: negative length found during unmarshaling") // Deprecated: this error was only used internally and is no longer used. - ErrIntOverflowPlugin = fmt.Errorf("proto: integer overflow") // Deprecated: this error was only used internally and is no longer used. - ErrUnexpectedEndOfGroupPlugin = fmt.Errorf("proto: unexpected end of group") // Deprecated: this error was only used internally and is no longer used. -) diff --git a/vendor/github.com/docker/docker/api/types/swarm/secret.go b/vendor/github.com/docker/docker/api/types/swarm/secret.go deleted file mode 100644 index d9482ab5..00000000 --- a/vendor/github.com/docker/docker/api/types/swarm/secret.go +++ /dev/null @@ -1,66 +0,0 @@ -package swarm - -import ( - "os" - - "github.com/docker/docker/api/types/filters" -) - -// Secret represents a secret. -type Secret struct { - ID string - Meta - Spec SecretSpec -} - -// SecretSpec represents a secret specification from a secret in swarm -type SecretSpec struct { - Annotations - - // Data is the data to store as a secret. It must be empty if a - // [Driver] is used, in which case the data is loaded from an external - // secret store. The maximum allowed size is 500KB, as defined in - // [MaxSecretSize]. - // - // This field is only used to create the secret, and is not returned - // by other endpoints. - // - // [MaxSecretSize]: https://pkg.go.dev/github.com/moby/swarmkit/v2@v2.0.0-20250103191802-8c1959736554/api/validation#MaxSecretSize - Data []byte `json:",omitempty"` - - // Driver is the name of the secrets driver used to fetch the secret's - // value from an external secret store. If not set, the default built-in - // store is used. - Driver *Driver `json:",omitempty"` - - // Templating controls whether and how to evaluate the secret payload as - // a template. If it is not set, no templating is used. - Templating *Driver `json:",omitempty"` -} - -// SecretReferenceFileTarget is a file target in a secret reference -type SecretReferenceFileTarget struct { - Name string - UID string - GID string - Mode os.FileMode -} - -// SecretReference is a reference to a secret in swarm -type SecretReference struct { - File *SecretReferenceFileTarget - SecretID string - SecretName string -} - -// SecretCreateResponse contains the information returned to a client -// on the creation of a new secret. -type SecretCreateResponse struct { - // ID is the id of the created secret. - ID string -} - -// SecretListOptions holds parameters to list secrets -type SecretListOptions struct { - Filters filters.Args -} diff --git a/vendor/github.com/docker/docker/api/types/swarm/service.go b/vendor/github.com/docker/docker/api/types/swarm/service.go deleted file mode 100644 index 56c660c1..00000000 --- a/vendor/github.com/docker/docker/api/types/swarm/service.go +++ /dev/null @@ -1,272 +0,0 @@ -package swarm - -import ( - "time" - - "github.com/docker/docker/api/types/filters" -) - -// Service represents a service. -type Service struct { - ID string - Meta - Spec ServiceSpec `json:",omitempty"` - PreviousSpec *ServiceSpec `json:",omitempty"` - Endpoint Endpoint `json:",omitempty"` - UpdateStatus *UpdateStatus `json:",omitempty"` - - // ServiceStatus is an optional, extra field indicating the number of - // desired and running tasks. It is provided primarily as a shortcut to - // calculating these values client-side, which otherwise would require - // listing all tasks for a service, an operation that could be - // computation and network expensive. - ServiceStatus *ServiceStatus `json:",omitempty"` - - // JobStatus is the status of a Service which is in one of ReplicatedJob or - // GlobalJob modes. It is absent on Replicated and Global services. - JobStatus *JobStatus `json:",omitempty"` -} - -// ServiceSpec represents the spec of a service. -type ServiceSpec struct { - Annotations - - // TaskTemplate defines how the service should construct new tasks when - // orchestrating this service. - TaskTemplate TaskSpec `json:",omitempty"` - Mode ServiceMode `json:",omitempty"` - UpdateConfig *UpdateConfig `json:",omitempty"` - RollbackConfig *UpdateConfig `json:",omitempty"` - - // Networks specifies which networks the service should attach to. - // - // Deprecated: This field is deprecated since v1.44. The Networks field in TaskSpec should be used instead. - Networks []NetworkAttachmentConfig `json:",omitempty"` - EndpointSpec *EndpointSpec `json:",omitempty"` -} - -// ServiceMode represents the mode of a service. -type ServiceMode struct { - Replicated *ReplicatedService `json:",omitempty"` - Global *GlobalService `json:",omitempty"` - ReplicatedJob *ReplicatedJob `json:",omitempty"` - GlobalJob *GlobalJob `json:",omitempty"` -} - -// UpdateState is the state of a service update. -type UpdateState string - -const ( - // UpdateStateUpdating is the updating state. - UpdateStateUpdating UpdateState = "updating" - // UpdateStatePaused is the paused state. - UpdateStatePaused UpdateState = "paused" - // UpdateStateCompleted is the completed state. - UpdateStateCompleted UpdateState = "completed" - // UpdateStateRollbackStarted is the state with a rollback in progress. - UpdateStateRollbackStarted UpdateState = "rollback_started" - // UpdateStateRollbackPaused is the state with a rollback in progress. - UpdateStateRollbackPaused UpdateState = "rollback_paused" - // UpdateStateRollbackCompleted is the state with a rollback in progress. - UpdateStateRollbackCompleted UpdateState = "rollback_completed" -) - -// UpdateStatus reports the status of a service update. -type UpdateStatus struct { - State UpdateState `json:",omitempty"` - StartedAt *time.Time `json:",omitempty"` - CompletedAt *time.Time `json:",omitempty"` - Message string `json:",omitempty"` -} - -// ReplicatedService is a kind of ServiceMode. -type ReplicatedService struct { - Replicas *uint64 `json:",omitempty"` -} - -// GlobalService is a kind of ServiceMode. -type GlobalService struct{} - -// ReplicatedJob is the a type of Service which executes a defined Tasks -// in parallel until the specified number of Tasks have succeeded. -type ReplicatedJob struct { - // MaxConcurrent indicates the maximum number of Tasks that should be - // executing simultaneously for this job at any given time. There may be - // fewer Tasks that MaxConcurrent executing simultaneously; for example, if - // there are fewer than MaxConcurrent tasks needed to reach - // TotalCompletions. - // - // If this field is empty, it will default to a max concurrency of 1. - MaxConcurrent *uint64 `json:",omitempty"` - - // TotalCompletions is the total number of Tasks desired to run to - // completion. - // - // If this field is empty, the value of MaxConcurrent will be used. - TotalCompletions *uint64 `json:",omitempty"` -} - -// GlobalJob is the type of a Service which executes a Task on every Node -// matching the Service's placement constraints. These tasks run to completion -// and then exit. -// -// This type is deliberately empty. -type GlobalJob struct{} - -const ( - // UpdateFailureActionPause PAUSE - UpdateFailureActionPause = "pause" - // UpdateFailureActionContinue CONTINUE - UpdateFailureActionContinue = "continue" - // UpdateFailureActionRollback ROLLBACK - UpdateFailureActionRollback = "rollback" - - // UpdateOrderStopFirst STOP_FIRST - UpdateOrderStopFirst = "stop-first" - // UpdateOrderStartFirst START_FIRST - UpdateOrderStartFirst = "start-first" -) - -// UpdateConfig represents the update configuration. -type UpdateConfig struct { - // Maximum number of tasks to be updated in one iteration. - // 0 means unlimited parallelism. - Parallelism uint64 - - // Amount of time between updates. - Delay time.Duration `json:",omitempty"` - - // FailureAction is the action to take when an update failures. - FailureAction string `json:",omitempty"` - - // Monitor indicates how long to monitor a task for failure after it is - // created. If the task fails by ending up in one of the states - // REJECTED, COMPLETED, or FAILED, within Monitor from its creation, - // this counts as a failure. If it fails after Monitor, it does not - // count as a failure. If Monitor is unspecified, a default value will - // be used. - Monitor time.Duration `json:",omitempty"` - - // MaxFailureRatio is the fraction of tasks that may fail during - // an update before the failure action is invoked. Any task created by - // the current update which ends up in one of the states REJECTED, - // COMPLETED or FAILED within Monitor from its creation counts as a - // failure. The number of failures is divided by the number of tasks - // being updated, and if this fraction is greater than - // MaxFailureRatio, the failure action is invoked. - // - // If the failure action is CONTINUE, there is no effect. - // If the failure action is PAUSE, no more tasks will be updated until - // another update is started. - MaxFailureRatio float32 - - // Order indicates the order of operations when rolling out an updated - // task. Either the old task is shut down before the new task is - // started, or the new task is started before the old task is shut down. - Order string -} - -// ServiceStatus represents the number of running tasks in a service and the -// number of tasks desired to be running. -type ServiceStatus struct { - // RunningTasks is the number of tasks for the service actually in the - // Running state - RunningTasks uint64 - - // DesiredTasks is the number of tasks desired to be running by the - // service. For replicated services, this is the replica count. For global - // services, this is computed by taking the number of tasks with desired - // state of not-Shutdown. - DesiredTasks uint64 - - // CompletedTasks is the number of tasks in the state Completed, if this - // service is in ReplicatedJob or GlobalJob mode. This field must be - // cross-referenced with the service type, because the default value of 0 - // may mean that a service is not in a job mode, or it may mean that the - // job has yet to complete any tasks. - CompletedTasks uint64 -} - -// JobStatus is the status of a job-type service. -type JobStatus struct { - // JobIteration is a value increased each time a Job is executed, - // successfully or otherwise. "Executed", in this case, means the job as a - // whole has been started, not that an individual Task has been launched. A - // job is "Executed" when its ServiceSpec is updated. JobIteration can be - // used to disambiguate Tasks belonging to different executions of a job. - // - // Though JobIteration will increase with each subsequent execution, it may - // not necessarily increase by 1, and so JobIteration should not be used to - // keep track of the number of times a job has been executed. - JobIteration Version - - // LastExecution is the time that the job was last executed, as observed by - // Swarm manager. - LastExecution time.Time `json:",omitempty"` -} - -// ServiceCreateOptions contains the options to use when creating a service. -type ServiceCreateOptions struct { - // EncodedRegistryAuth is the encoded registry authorization credentials to - // use when updating the service. - // - // This field follows the format of the X-Registry-Auth header. - EncodedRegistryAuth string - - // QueryRegistry indicates whether the service update requires - // contacting a registry. A registry may be contacted to retrieve - // the image digest and manifest, which in turn can be used to update - // platform or other information about the service. - QueryRegistry bool -} - -// Values for RegistryAuthFrom in ServiceUpdateOptions -const ( - RegistryAuthFromSpec = "spec" - RegistryAuthFromPreviousSpec = "previous-spec" -) - -// ServiceUpdateOptions contains the options to be used for updating services. -type ServiceUpdateOptions struct { - // EncodedRegistryAuth is the encoded registry authorization credentials to - // use when updating the service. - // - // This field follows the format of the X-Registry-Auth header. - EncodedRegistryAuth string - - // TODO(stevvooe): Consider moving the version parameter of ServiceUpdate - // into this field. While it does open API users up to racy writes, most - // users may not need that level of consistency in practice. - - // RegistryAuthFrom specifies where to find the registry authorization - // credentials if they are not given in EncodedRegistryAuth. Valid - // values are "spec" and "previous-spec". - RegistryAuthFrom string - - // Rollback indicates whether a server-side rollback should be - // performed. When this is set, the provided spec will be ignored. - // The valid values are "previous" and "none". An empty value is the - // same as "none". - Rollback string - - // QueryRegistry indicates whether the service update requires - // contacting a registry. A registry may be contacted to retrieve - // the image digest and manifest, which in turn can be used to update - // platform or other information about the service. - QueryRegistry bool -} - -// ServiceListOptions holds parameters to list services with. -type ServiceListOptions struct { - Filters filters.Args - - // Status indicates whether the server should include the service task - // count of running and desired tasks. - Status bool -} - -// ServiceInspectOptions holds parameters related to the "service inspect" -// operation. -type ServiceInspectOptions struct { - InsertDefaults bool -} diff --git a/vendor/github.com/docker/docker/api/types/swarm/service_create_response.go b/vendor/github.com/docker/docker/api/types/swarm/service_create_response.go deleted file mode 100644 index 9a268ff1..00000000 --- a/vendor/github.com/docker/docker/api/types/swarm/service_create_response.go +++ /dev/null @@ -1,20 +0,0 @@ -package swarm - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// ServiceCreateResponse contains the information returned to a client on the -// creation of a new service. -// -// swagger:model ServiceCreateResponse -type ServiceCreateResponse struct { - - // The ID of the created service. - ID string `json:"ID,omitempty"` - - // Optional warning message. - // - // FIXME(thaJeztah): this should have "omitempty" in the generated type. - // - Warnings []string `json:"Warnings"` -} diff --git a/vendor/github.com/docker/docker/api/types/swarm/service_update_response.go b/vendor/github.com/docker/docker/api/types/swarm/service_update_response.go deleted file mode 100644 index 0417467d..00000000 --- a/vendor/github.com/docker/docker/api/types/swarm/service_update_response.go +++ /dev/null @@ -1,12 +0,0 @@ -package swarm - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// ServiceUpdateResponse service update response -// swagger:model ServiceUpdateResponse -type ServiceUpdateResponse struct { - - // Optional warning messages - Warnings []string `json:"Warnings"` -} diff --git a/vendor/github.com/docker/docker/api/types/swarm/swarm.go b/vendor/github.com/docker/docker/api/types/swarm/swarm.go deleted file mode 100644 index 38f3e666..00000000 --- a/vendor/github.com/docker/docker/api/types/swarm/swarm.go +++ /dev/null @@ -1,244 +0,0 @@ -package swarm - -import ( - "time" -) - -// ClusterInfo represents info about the cluster for outputting in "info" -// it contains the same information as "Swarm", but without the JoinTokens -type ClusterInfo struct { - ID string - Meta - Spec Spec - TLSInfo TLSInfo - RootRotationInProgress bool - DefaultAddrPool []string - SubnetSize uint32 - DataPathPort uint32 -} - -// Swarm represents a swarm. -type Swarm struct { - ClusterInfo - JoinTokens JoinTokens -} - -// JoinTokens contains the tokens workers and managers need to join the swarm. -type JoinTokens struct { - // Worker is the join token workers may use to join the swarm. - Worker string - // Manager is the join token managers may use to join the swarm. - Manager string -} - -// Spec represents the spec of a swarm. -type Spec struct { - Annotations - - Orchestration OrchestrationConfig `json:",omitempty"` - Raft RaftConfig `json:",omitempty"` - Dispatcher DispatcherConfig `json:",omitempty"` - CAConfig CAConfig `json:",omitempty"` - TaskDefaults TaskDefaults `json:",omitempty"` - EncryptionConfig EncryptionConfig `json:",omitempty"` -} - -// OrchestrationConfig represents orchestration configuration. -type OrchestrationConfig struct { - // TaskHistoryRetentionLimit is the number of historic tasks to keep per instance or - // node. If negative, never remove completed or failed tasks. - TaskHistoryRetentionLimit *int64 `json:",omitempty"` -} - -// TaskDefaults parameterizes cluster-level task creation with default values. -type TaskDefaults struct { - // LogDriver selects the log driver to use for tasks created in the - // orchestrator if unspecified by a service. - // - // Updating this value will only have an affect on new tasks. Old tasks - // will continue use their previously configured log driver until - // recreated. - LogDriver *Driver `json:",omitempty"` -} - -// EncryptionConfig controls at-rest encryption of data and keys. -type EncryptionConfig struct { - // AutoLockManagers specifies whether or not managers TLS keys and raft data - // should be encrypted at rest in such a way that they must be unlocked - // before the manager node starts up again. - AutoLockManagers bool -} - -// RaftConfig represents raft configuration. -type RaftConfig struct { - // SnapshotInterval is the number of log entries between snapshots. - SnapshotInterval uint64 `json:",omitempty"` - - // KeepOldSnapshots is the number of snapshots to keep beyond the - // current snapshot. - KeepOldSnapshots *uint64 `json:",omitempty"` - - // LogEntriesForSlowFollowers is the number of log entries to keep - // around to sync up slow followers after a snapshot is created. - LogEntriesForSlowFollowers uint64 `json:",omitempty"` - - // ElectionTick is the number of ticks that a follower will wait for a message - // from the leader before becoming a candidate and starting an election. - // ElectionTick must be greater than HeartbeatTick. - // - // A tick currently defaults to one second, so these translate directly to - // seconds currently, but this is NOT guaranteed. - ElectionTick int - - // HeartbeatTick is the number of ticks between heartbeats. Every - // HeartbeatTick ticks, the leader will send a heartbeat to the - // followers. - // - // A tick currently defaults to one second, so these translate directly to - // seconds currently, but this is NOT guaranteed. - HeartbeatTick int -} - -// DispatcherConfig represents dispatcher configuration. -type DispatcherConfig struct { - // HeartbeatPeriod defines how often agent should send heartbeats to - // dispatcher. - HeartbeatPeriod time.Duration `json:",omitempty"` -} - -// CAConfig represents CA configuration. -type CAConfig struct { - // NodeCertExpiry is the duration certificates should be issued for - NodeCertExpiry time.Duration `json:",omitempty"` - - // ExternalCAs is a list of CAs to which a manager node will make - // certificate signing requests for node certificates. - ExternalCAs []*ExternalCA `json:",omitempty"` - - // SigningCACert and SigningCAKey specify the desired signing root CA and - // root CA key for the swarm. When inspecting the cluster, the key will - // be redacted. - SigningCACert string `json:",omitempty"` - SigningCAKey string `json:",omitempty"` - - // If this value changes, and there is no specified signing cert and key, - // then the swarm is forced to generate a new root certificate and key. - ForceRotate uint64 `json:",omitempty"` -} - -// ExternalCAProtocol represents type of external CA. -type ExternalCAProtocol string - -// ExternalCAProtocolCFSSL CFSSL -const ExternalCAProtocolCFSSL ExternalCAProtocol = "cfssl" - -// ExternalCA defines external CA to be used by the cluster. -type ExternalCA struct { - // Protocol is the protocol used by this external CA. - Protocol ExternalCAProtocol - - // URL is the URL where the external CA can be reached. - URL string - - // Options is a set of additional key/value pairs whose interpretation - // depends on the specified CA type. - Options map[string]string `json:",omitempty"` - - // CACert specifies which root CA is used by this external CA. This certificate must - // be in PEM format. - CACert string -} - -// InitRequest is the request used to init a swarm. -type InitRequest struct { - ListenAddr string - AdvertiseAddr string - DataPathAddr string - DataPathPort uint32 - ForceNewCluster bool - Spec Spec - AutoLockManagers bool - Availability NodeAvailability - DefaultAddrPool []string - SubnetSize uint32 -} - -// JoinRequest is the request used to join a swarm. -type JoinRequest struct { - ListenAddr string - AdvertiseAddr string - DataPathAddr string - RemoteAddrs []string - JoinToken string // accept by secret - Availability NodeAvailability -} - -// UnlockRequest is the request used to unlock a swarm. -type UnlockRequest struct { - // UnlockKey is the unlock key in ASCII-armored format. - UnlockKey string -} - -// LocalNodeState represents the state of the local node. -type LocalNodeState string - -const ( - // LocalNodeStateInactive INACTIVE - LocalNodeStateInactive LocalNodeState = "inactive" - // LocalNodeStatePending PENDING - LocalNodeStatePending LocalNodeState = "pending" - // LocalNodeStateActive ACTIVE - LocalNodeStateActive LocalNodeState = "active" - // LocalNodeStateError ERROR - LocalNodeStateError LocalNodeState = "error" - // LocalNodeStateLocked LOCKED - LocalNodeStateLocked LocalNodeState = "locked" -) - -// Info represents generic information about swarm. -type Info struct { - NodeID string - NodeAddr string - - LocalNodeState LocalNodeState - ControlAvailable bool - Error string - - RemoteManagers []Peer - Nodes int `json:",omitempty"` - Managers int `json:",omitempty"` - - Cluster *ClusterInfo `json:",omitempty"` - - Warnings []string `json:",omitempty"` -} - -// Status provides information about the current swarm status and role, -// obtained from the "Swarm" header in the API response. -type Status struct { - // NodeState represents the state of the node. - NodeState LocalNodeState - - // ControlAvailable indicates if the node is a swarm manager. - ControlAvailable bool -} - -// Peer represents a peer. -type Peer struct { - NodeID string - Addr string -} - -// UpdateFlags contains flags for SwarmUpdate. -type UpdateFlags struct { - RotateWorkerToken bool - RotateManagerToken bool - RotateManagerUnlockKey bool -} - -// UnlockKeyResponse contains the response for Engine API: -// GET /swarm/unlockkey -type UnlockKeyResponse struct { - // UnlockKey is the unlock key in ASCII-armored format. - UnlockKey string -} diff --git a/vendor/github.com/docker/docker/api/types/swarm/task.go b/vendor/github.com/docker/docker/api/types/swarm/task.go deleted file mode 100644 index e143f844..00000000 --- a/vendor/github.com/docker/docker/api/types/swarm/task.go +++ /dev/null @@ -1,230 +0,0 @@ -package swarm - -import ( - "time" - - "github.com/docker/docker/api/types/filters" -) - -// TaskState represents the state of a task. -type TaskState string - -const ( - // TaskStateNew NEW - TaskStateNew TaskState = "new" - // TaskStateAllocated ALLOCATED - TaskStateAllocated TaskState = "allocated" - // TaskStatePending PENDING - TaskStatePending TaskState = "pending" - // TaskStateAssigned ASSIGNED - TaskStateAssigned TaskState = "assigned" - // TaskStateAccepted ACCEPTED - TaskStateAccepted TaskState = "accepted" - // TaskStatePreparing PREPARING - TaskStatePreparing TaskState = "preparing" - // TaskStateReady READY - TaskStateReady TaskState = "ready" - // TaskStateStarting STARTING - TaskStateStarting TaskState = "starting" - // TaskStateRunning RUNNING - TaskStateRunning TaskState = "running" - // TaskStateComplete COMPLETE - TaskStateComplete TaskState = "complete" - // TaskStateShutdown SHUTDOWN - TaskStateShutdown TaskState = "shutdown" - // TaskStateFailed FAILED - TaskStateFailed TaskState = "failed" - // TaskStateRejected REJECTED - TaskStateRejected TaskState = "rejected" - // TaskStateRemove REMOVE - TaskStateRemove TaskState = "remove" - // TaskStateOrphaned ORPHANED - TaskStateOrphaned TaskState = "orphaned" -) - -// Task represents a task. -type Task struct { - ID string - Meta - Annotations - - Spec TaskSpec `json:",omitempty"` - ServiceID string `json:",omitempty"` - Slot int `json:",omitempty"` - NodeID string `json:",omitempty"` - Status TaskStatus `json:",omitempty"` - DesiredState TaskState `json:",omitempty"` - NetworksAttachments []NetworkAttachment `json:",omitempty"` - GenericResources []GenericResource `json:",omitempty"` - - // JobIteration is the JobIteration of the Service that this Task was - // spawned from, if the Service is a ReplicatedJob or GlobalJob. This is - // used to determine which Tasks belong to which run of the job. This field - // is absent if the Service mode is Replicated or Global. - JobIteration *Version `json:",omitempty"` - - // Volumes is the list of VolumeAttachments for this task. It specifies - // which particular volumes are to be used by this particular task, and - // fulfilling what mounts in the spec. - Volumes []VolumeAttachment -} - -// TaskSpec represents the spec of a task. -type TaskSpec struct { - // ContainerSpec, NetworkAttachmentSpec, and PluginSpec are mutually exclusive. - // PluginSpec is only used when the `Runtime` field is set to `plugin` - // NetworkAttachmentSpec is used if the `Runtime` field is set to - // `attachment`. - ContainerSpec *ContainerSpec `json:",omitempty"` - PluginSpec *RuntimeSpec `json:",omitempty"` - NetworkAttachmentSpec *NetworkAttachmentSpec `json:",omitempty"` - - Resources *ResourceRequirements `json:",omitempty"` - RestartPolicy *RestartPolicy `json:",omitempty"` - Placement *Placement `json:",omitempty"` - Networks []NetworkAttachmentConfig `json:",omitempty"` - - // LogDriver specifies the LogDriver to use for tasks created from this - // spec. If not present, the one on cluster default on swarm.Spec will be - // used, finally falling back to the engine default if not specified. - LogDriver *Driver `json:",omitempty"` - - // ForceUpdate is a counter that triggers an update even if no relevant - // parameters have been changed. - ForceUpdate uint64 - - Runtime RuntimeType `json:",omitempty"` -} - -// Resources represents resources (CPU/Memory) which can be advertised by a -// node and requested to be reserved for a task. -type Resources struct { - NanoCPUs int64 `json:",omitempty"` - MemoryBytes int64 `json:",omitempty"` - GenericResources []GenericResource `json:",omitempty"` -} - -// Limit describes limits on resources which can be requested by a task. -type Limit struct { - NanoCPUs int64 `json:",omitempty"` - MemoryBytes int64 `json:",omitempty"` - Pids int64 `json:",omitempty"` -} - -// GenericResource represents a "user defined" resource which can -// be either an integer (e.g: SSD=3) or a string (e.g: SSD=sda1) -type GenericResource struct { - NamedResourceSpec *NamedGenericResource `json:",omitempty"` - DiscreteResourceSpec *DiscreteGenericResource `json:",omitempty"` -} - -// NamedGenericResource represents a "user defined" resource which is defined -// as a string. -// "Kind" is used to describe the Kind of a resource (e.g: "GPU", "FPGA", "SSD", ...) -// Value is used to identify the resource (GPU="UUID-1", FPGA="/dev/sdb5", ...) -type NamedGenericResource struct { - Kind string `json:",omitempty"` - Value string `json:",omitempty"` -} - -// DiscreteGenericResource represents a "user defined" resource which is defined -// as an integer -// "Kind" is used to describe the Kind of a resource (e.g: "GPU", "FPGA", "SSD", ...) -// Value is used to count the resource (SSD=5, HDD=3, ...) -type DiscreteGenericResource struct { - Kind string `json:",omitempty"` - Value int64 `json:",omitempty"` -} - -// ResourceRequirements represents resources requirements. -type ResourceRequirements struct { - Limits *Limit `json:",omitempty"` - Reservations *Resources `json:",omitempty"` -} - -// Placement represents orchestration parameters. -type Placement struct { - Constraints []string `json:",omitempty"` - Preferences []PlacementPreference `json:",omitempty"` - MaxReplicas uint64 `json:",omitempty"` - - // Platforms stores all the platforms that the image can run on. - // This field is used in the platform filter for scheduling. If empty, - // then the platform filter is off, meaning there are no scheduling restrictions. - Platforms []Platform `json:",omitempty"` -} - -// PlacementPreference provides a way to make the scheduler aware of factors -// such as topology. -type PlacementPreference struct { - Spread *SpreadOver -} - -// SpreadOver is a scheduling preference that instructs the scheduler to spread -// tasks evenly over groups of nodes identified by labels. -type SpreadOver struct { - // label descriptor, such as engine.labels.az - SpreadDescriptor string -} - -// RestartPolicy represents the restart policy. -type RestartPolicy struct { - Condition RestartPolicyCondition `json:",omitempty"` - Delay *time.Duration `json:",omitempty"` - MaxAttempts *uint64 `json:",omitempty"` - Window *time.Duration `json:",omitempty"` -} - -// RestartPolicyCondition represents when to restart. -type RestartPolicyCondition string - -const ( - // RestartPolicyConditionNone NONE - RestartPolicyConditionNone RestartPolicyCondition = "none" - // RestartPolicyConditionOnFailure ON_FAILURE - RestartPolicyConditionOnFailure RestartPolicyCondition = "on-failure" - // RestartPolicyConditionAny ANY - RestartPolicyConditionAny RestartPolicyCondition = "any" -) - -// TaskStatus represents the status of a task. -type TaskStatus struct { - Timestamp time.Time `json:",omitempty"` - State TaskState `json:",omitempty"` - Message string `json:",omitempty"` - Err string `json:",omitempty"` - ContainerStatus *ContainerStatus `json:",omitempty"` - PortStatus PortStatus `json:",omitempty"` -} - -// ContainerStatus represents the status of a container. -type ContainerStatus struct { - ContainerID string - PID int - ExitCode int -} - -// PortStatus represents the port status of a task's host ports whose -// service has published host ports -type PortStatus struct { - Ports []PortConfig `json:",omitempty"` -} - -// VolumeAttachment contains the associating a Volume to a Task. -type VolumeAttachment struct { - // ID is the Swarmkit ID of the Volume. This is not the CSI VolumeId. - ID string `json:",omitempty"` - - // Source, together with Target, indicates the Mount, as specified in the - // ContainerSpec, that this volume fulfills. - Source string `json:",omitempty"` - - // Target, together with Source, indicates the Mount, as specified - // in the ContainerSpec, that this volume fulfills. - Target string `json:",omitempty"` -} - -// TaskListOptions holds parameters to list tasks with. -type TaskListOptions struct { - Filters filters.Args -} diff --git a/vendor/github.com/docker/docker/api/types/system/info.go b/vendor/github.com/docker/docker/api/types/system/info.go deleted file mode 100644 index 0f39099d..00000000 --- a/vendor/github.com/docker/docker/api/types/system/info.go +++ /dev/null @@ -1,174 +0,0 @@ -package system - -import ( - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/registry" - "github.com/docker/docker/api/types/swarm" -) - -// Info contains response of Engine API: -// GET "/info" -type Info struct { - ID string - Containers int - ContainersRunning int - ContainersPaused int - ContainersStopped int - Images int - Driver string - DriverStatus [][2]string - SystemStatus [][2]string `json:",omitempty"` // SystemStatus is only propagated by the Swarm standalone API - Plugins PluginsInfo - MemoryLimit bool - SwapLimit bool - KernelMemory bool `json:",omitempty"` // Deprecated: kernel 5.4 deprecated kmem.limit_in_bytes - // KernelMemoryLimit is not supported on cgroups v2. - // - // Deprecated: This field is deprecated and will be removed in the next release. - // Starting with kernel 6.12, the kernel has deprecated kernel memory tcp accounting - KernelMemoryTCP bool `json:",omitempty"` // KernelMemoryTCP is not supported on cgroups v2. - CPUCfsPeriod bool `json:"CpuCfsPeriod"` - CPUCfsQuota bool `json:"CpuCfsQuota"` - CPUShares bool - CPUSet bool - PidsLimit bool - IPv4Forwarding bool - Debug bool - NFd int - OomKillDisable bool - NGoroutines int - SystemTime string - LoggingDriver string - CgroupDriver string - CgroupVersion string `json:",omitempty"` - NEventsListener int - KernelVersion string - OperatingSystem string - OSVersion string - OSType string - Architecture string - IndexServerAddress string - RegistryConfig *registry.ServiceConfig - NCPU int - MemTotal int64 - GenericResources []swarm.GenericResource - DockerRootDir string - HTTPProxy string `json:"HttpProxy"` - HTTPSProxy string `json:"HttpsProxy"` - NoProxy string - Name string - Labels []string - ExperimentalBuild bool - ServerVersion string - Runtimes map[string]RuntimeWithStatus - DefaultRuntime string - Swarm swarm.Info - // LiveRestoreEnabled determines whether containers should be kept - // running when the daemon is shutdown or upon daemon start if - // running containers are detected - LiveRestoreEnabled bool - Isolation container.Isolation - InitBinary string - ContainerdCommit Commit - RuncCommit Commit - InitCommit Commit - SecurityOptions []string - ProductLicense string `json:",omitempty"` - DefaultAddressPools []NetworkAddressPool `json:",omitempty"` - FirewallBackend *FirewallInfo `json:"FirewallBackend,omitempty"` - CDISpecDirs []string - DiscoveredDevices []DeviceInfo `json:",omitempty"` - - Containerd *ContainerdInfo `json:",omitempty"` - - // Warnings contains a slice of warnings that occurred while collecting - // system information. These warnings are intended to be informational - // messages for the user, and are not intended to be parsed / used for - // other purposes, as they do not have a fixed format. - Warnings []string -} - -// ContainerdInfo holds information about the containerd instance used by the daemon. -type ContainerdInfo struct { - // Address is the path to the containerd socket. - Address string `json:",omitempty"` - // Namespaces is the containerd namespaces used by the daemon. - Namespaces ContainerdNamespaces -} - -// ContainerdNamespaces reflects the containerd namespaces used by the daemon. -// -// These namespaces can be configured in the daemon configuration, and are -// considered to be used exclusively by the daemon, -// -// As these namespaces are considered to be exclusively accessed -// by the daemon, it is not recommended to change these values, -// or to change them to a value that is used by other systems, -// such as cri-containerd. -type ContainerdNamespaces struct { - // Containers holds the default containerd namespace used for - // containers managed by the daemon. - // - // The default namespace for containers is "moby", but will be - // suffixed with the `.` of the remapped `root` if - // user-namespaces are enabled and the containerd image-store - // is used. - Containers string - - // Plugins holds the default containerd namespace used for - // plugins managed by the daemon. - // - // The default namespace for plugins is "moby", but will be - // suffixed with the `.` of the remapped `root` if - // user-namespaces are enabled and the containerd image-store - // is used. - Plugins string -} - -// PluginsInfo is a temp struct holding Plugins name -// registered with docker daemon. It is used by [Info] struct -type PluginsInfo struct { - // List of Volume plugins registered - Volume []string - // List of Network plugins registered - Network []string - // List of Authorization plugins registered - Authorization []string - // List of Log plugins registered - Log []string -} - -// Commit holds the Git-commit (SHA1) that a binary was built from, as reported -// in the version-string of external tools, such as containerd, or runC. -type Commit struct { - // ID is the actual commit ID or version of external tool. - ID string - - // Expected is the commit ID of external tool expected by dockerd as set at build time. - // - // Deprecated: this field is no longer used in API v1.49, but kept for backward-compatibility with older API versions. - Expected string `json:",omitempty"` -} - -// NetworkAddressPool is a temp struct used by [Info] struct. -type NetworkAddressPool struct { - Base string - Size int -} - -// FirewallInfo describes the firewall backend. -type FirewallInfo struct { - // Driver is the name of the firewall backend driver. - Driver string `json:"Driver"` - // Info is a list of label/value pairs, containing information related to the firewall. - Info [][2]string `json:"Info,omitempty"` -} - -// DeviceInfo represents a discoverable device from a device driver. -type DeviceInfo struct { - // Source indicates the origin device driver. - Source string `json:"Source"` - // ID is the unique identifier for the device. - // Example: CDI FQDN like "vendor.com/gpu=0", or other driver-specific device ID - ID string `json:"ID"` -} diff --git a/vendor/github.com/docker/docker/api/types/system/runtime.go b/vendor/github.com/docker/docker/api/types/system/runtime.go deleted file mode 100644 index d077295a..00000000 --- a/vendor/github.com/docker/docker/api/types/system/runtime.go +++ /dev/null @@ -1,20 +0,0 @@ -package system - -// Runtime describes an OCI runtime -type Runtime struct { - // "Legacy" runtime configuration for runc-compatible runtimes. - - Path string `json:"path,omitempty"` - Args []string `json:"runtimeArgs,omitempty"` - - // Shimv2 runtime configuration. Mutually exclusive with the legacy config above. - - Type string `json:"runtimeType,omitempty"` - Options map[string]interface{} `json:"options,omitempty"` -} - -// RuntimeWithStatus extends [Runtime] to hold [RuntimeStatus]. -type RuntimeWithStatus struct { - Runtime - Status map[string]string `json:"status,omitempty"` -} diff --git a/vendor/github.com/docker/docker/api/types/system/security_opts.go b/vendor/github.com/docker/docker/api/types/system/security_opts.go deleted file mode 100644 index edff3eb1..00000000 --- a/vendor/github.com/docker/docker/api/types/system/security_opts.go +++ /dev/null @@ -1,48 +0,0 @@ -package system - -import ( - "errors" - "fmt" - "strings" -) - -// SecurityOpt contains the name and options of a security option -type SecurityOpt struct { - Name string - Options []KeyValue -} - -// DecodeSecurityOptions decodes a security options string slice to a -// type-safe [SecurityOpt]. -func DecodeSecurityOptions(opts []string) ([]SecurityOpt, error) { - so := []SecurityOpt{} - for _, opt := range opts { - // support output from a < 1.13 docker daemon - if !strings.Contains(opt, "=") { - so = append(so, SecurityOpt{Name: opt}) - continue - } - secopt := SecurityOpt{} - for _, s := range strings.Split(opt, ",") { - k, v, ok := strings.Cut(s, "=") - if !ok { - return nil, fmt.Errorf("invalid security option %q", s) - } - if k == "" || v == "" { - return nil, errors.New("invalid empty security option") - } - if k == "name" { - secopt.Name = v - continue - } - secopt.Options = append(secopt.Options, KeyValue{Key: k, Value: v}) - } - so = append(so, secopt) - } - return so, nil -} - -// KeyValue holds a key/value pair. -type KeyValue struct { - Key, Value string -} diff --git a/vendor/github.com/docker/docker/api/types/time/timestamp.go b/vendor/github.com/docker/docker/api/types/time/timestamp.go deleted file mode 100644 index 0e1df38a..00000000 --- a/vendor/github.com/docker/docker/api/types/time/timestamp.go +++ /dev/null @@ -1,131 +0,0 @@ -package time - -import ( - "fmt" - "math" - "strconv" - "strings" - "time" -) - -// These are additional predefined layouts for use in Time.Format and Time.Parse -// with --since and --until parameters for `docker logs` and `docker events` -const ( - rFC3339Local = "2006-01-02T15:04:05" // RFC3339 with local timezone - rFC3339NanoLocal = "2006-01-02T15:04:05.999999999" // RFC3339Nano with local timezone - dateWithZone = "2006-01-02Z07:00" // RFC3339 with time at 00:00:00 - dateLocal = "2006-01-02" // RFC3339 with local timezone and time at 00:00:00 -) - -// GetTimestamp tries to parse given string as golang duration, -// then RFC3339 time and finally as a Unix timestamp. If -// any of these were successful, it returns a Unix timestamp -// as string otherwise returns the given value back. -// In case of duration input, the returned timestamp is computed -// as the given reference time minus the amount of the duration. -func GetTimestamp(value string, reference time.Time) (string, error) { - if d, err := time.ParseDuration(value); value != "0" && err == nil { - return strconv.FormatInt(reference.Add(-d).Unix(), 10), nil - } - - var format string - // if the string has a Z or a + or three dashes use parse otherwise use parseinlocation - parseInLocation := !strings.ContainsAny(value, "zZ+") && strings.Count(value, "-") != 3 - - if strings.Contains(value, ".") { - if parseInLocation { - format = rFC3339NanoLocal - } else { - format = time.RFC3339Nano - } - } else if strings.Contains(value, "T") { - // we want the number of colons in the T portion of the timestamp - tcolons := strings.Count(value, ":") - // if parseInLocation is off and we have a +/- zone offset (not Z) then - // there will be an extra colon in the input for the tz offset subtract that - // colon from the tcolons count - if !parseInLocation && !strings.ContainsAny(value, "zZ") && tcolons > 0 { - tcolons-- - } - if parseInLocation { - switch tcolons { - case 0: - format = "2006-01-02T15" - case 1: - format = "2006-01-02T15:04" - default: - format = rFC3339Local - } - } else { - switch tcolons { - case 0: - format = "2006-01-02T15Z07:00" - case 1: - format = "2006-01-02T15:04Z07:00" - default: - format = time.RFC3339 - } - } - } else if parseInLocation { - format = dateLocal - } else { - format = dateWithZone - } - - var t time.Time - var err error - - if parseInLocation { - t, err = time.ParseInLocation(format, value, time.FixedZone(reference.Zone())) - } else { - t, err = time.Parse(format, value) - } - - if err != nil { - // if there is a `-` then it's an RFC3339 like timestamp - if strings.Contains(value, "-") { - return "", err // was probably an RFC3339 like timestamp but the parser failed with an error - } - if _, _, err := parseTimestamp(value); err != nil { - return "", fmt.Errorf("failed to parse value as time or duration: %q", value) - } - return value, nil // unix timestamp in and out case (meaning: the value passed at the command line is already in the right format for passing to the server) - } - - return fmt.Sprintf("%d.%09d", t.Unix(), int64(t.Nanosecond())), nil -} - -// ParseTimestamps returns seconds and nanoseconds from a timestamp that has -// the format ("%d.%09d", time.Unix(), int64(time.Nanosecond())). -// If the incoming nanosecond portion is longer than 9 digits it is truncated. -// The expectation is that the seconds and nanoseconds will be used to create a -// time variable. For example: -// -// seconds, nanoseconds, _ := ParseTimestamp("1136073600.000000001",0) -// since := time.Unix(seconds, nanoseconds) -// -// returns seconds as defaultSeconds if value == "" -func ParseTimestamps(value string, defaultSeconds int64) (seconds int64, nanoseconds int64, _ error) { - if value == "" { - return defaultSeconds, 0, nil - } - return parseTimestamp(value) -} - -func parseTimestamp(value string) (seconds int64, nanoseconds int64, _ error) { - s, n, ok := strings.Cut(value, ".") - sec, err := strconv.ParseInt(s, 10, 64) - if err != nil { - return sec, 0, err - } - if !ok { - return sec, 0, nil - } - nsec, err := strconv.ParseInt(n, 10, 64) - if err != nil { - return sec, nsec, err - } - // should already be in nanoseconds but just in case convert n to nanoseconds - nsec = int64(float64(nsec) * math.Pow(float64(10), float64(9-len(n)))) - return sec, nsec, nil -} diff --git a/vendor/github.com/docker/docker/api/types/types.go b/vendor/github.com/docker/docker/api/types/types.go deleted file mode 100644 index 8bbadeb2..00000000 --- a/vendor/github.com/docker/docker/api/types/types.go +++ /dev/null @@ -1,103 +0,0 @@ -package types - -import ( - "github.com/docker/docker/api/types/build" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/image" - "github.com/docker/docker/api/types/swarm" - "github.com/docker/docker/api/types/volume" -) - -const ( - // MediaTypeRawStream is vendor specific MIME-Type set for raw TTY streams - MediaTypeRawStream = "application/vnd.docker.raw-stream" - - // MediaTypeMultiplexedStream is vendor specific MIME-Type set for stdin/stdout/stderr multiplexed streams - MediaTypeMultiplexedStream = "application/vnd.docker.multiplexed-stream" -) - -// Ping contains response of Engine API: -// GET "/_ping" -type Ping struct { - APIVersion string - OSType string - Experimental bool - BuilderVersion build.BuilderVersion - - // SwarmStatus provides information about the current swarm status of the - // engine, obtained from the "Swarm" header in the API response. - // - // It can be a nil struct if the API version does not provide this header - // in the ping response, or if an error occurred, in which case the client - // should use other ways to get the current swarm status, such as the /swarm - // endpoint. - SwarmStatus *swarm.Status -} - -// ComponentVersion describes the version information for a specific component. -type ComponentVersion struct { - Name string - Version string - Details map[string]string `json:",omitempty"` -} - -// Version contains response of Engine API: -// GET "/version" -type Version struct { - Platform struct{ Name string } `json:",omitempty"` - Components []ComponentVersion `json:",omitempty"` - - // The following fields are deprecated, they relate to the Engine component and are kept for backwards compatibility - - Version string - APIVersion string `json:"ApiVersion"` - MinAPIVersion string `json:"MinAPIVersion,omitempty"` - GitCommit string - GoVersion string - Os string - Arch string - KernelVersion string `json:",omitempty"` - Experimental bool `json:",omitempty"` - BuildTime string `json:",omitempty"` -} - -// DiskUsageObject represents an object type used for disk usage query filtering. -type DiskUsageObject string - -const ( - // ContainerObject represents a container DiskUsageObject. - ContainerObject DiskUsageObject = "container" - // ImageObject represents an image DiskUsageObject. - ImageObject DiskUsageObject = "image" - // VolumeObject represents a volume DiskUsageObject. - VolumeObject DiskUsageObject = "volume" - // BuildCacheObject represents a build-cache DiskUsageObject. - BuildCacheObject DiskUsageObject = "build-cache" -) - -// DiskUsageOptions holds parameters for system disk usage query. -type DiskUsageOptions struct { - // Types specifies what object types to include in the response. If empty, - // all object types are returned. - Types []DiskUsageObject -} - -// DiskUsage contains response of Engine API: -// GET "/system/df" -type DiskUsage struct { - LayersSize int64 - Images []*image.Summary - Containers []*container.Summary - Volumes []*volume.Volume - BuildCache []*build.CacheRecord - BuilderSize int64 `json:",omitempty"` // Deprecated: deprecated in API 1.38, and no longer used since API 1.40. -} - -// PushResult contains the tag, manifest digest, and manifest size from the -// push. It's used to signal this information to the trust code in the client -// so it can sign the manifest if necessary. -type PushResult struct { - Tag string - Digest string - Size int -} diff --git a/vendor/github.com/docker/docker/api/types/types_deprecated.go b/vendor/github.com/docker/docker/api/types/types_deprecated.go deleted file mode 100644 index c9c20b87..00000000 --- a/vendor/github.com/docker/docker/api/types/types_deprecated.go +++ /dev/null @@ -1,242 +0,0 @@ -package types - -import ( - "context" - - "github.com/docker/docker/api/types/build" - "github.com/docker/docker/api/types/common" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/image" - "github.com/docker/docker/api/types/storage" - "github.com/docker/docker/api/types/swarm" -) - -// IDResponse Response to an API call that returns just an Id. -// -// Deprecated: use either [container.CommitResponse] or [container.ExecCreateResponse]. It will be removed in the next release. -type IDResponse = common.IDResponse - -// ContainerJSONBase contains response of Engine API GET "/containers/{name:.*}/json" -// for API version 1.18 and older. -// -// Deprecated: use [container.InspectResponse] or [container.ContainerJSONBase]. It will be removed in the next release. -type ContainerJSONBase = container.ContainerJSONBase - -// ContainerJSON is the response for the GET "/containers/{name:.*}/json" -// endpoint. -// -// Deprecated: use [container.InspectResponse]. It will be removed in the next release. -type ContainerJSON = container.InspectResponse - -// Container contains response of Engine API: -// GET "/containers/json" -// -// Deprecated: use [container.Summary]. -type Container = container.Summary - -// ContainerState stores container's running state -// -// Deprecated: use [container.State]. -type ContainerState = container.State - -// NetworkSettings exposes the network settings in the api. -// -// Deprecated: use [container.NetworkSettings]. -type NetworkSettings = container.NetworkSettings - -// NetworkSettingsBase holds networking state for a container when inspecting it. -// -// Deprecated: [container.NetworkSettingsBase] will be removed in v29. Prefer -// accessing the fields it contains through [container.NetworkSettings]. -type NetworkSettingsBase = container.NetworkSettingsBase //nolint:staticcheck // ignore SA1019: NetworkSettingsBase is deprecated in v28.4. - -// DefaultNetworkSettings holds network information -// during the 2 release deprecation period. -// It will be removed in Docker 1.11. -// -// Deprecated: use [container.DefaultNetworkSettings]. -type DefaultNetworkSettings = container.DefaultNetworkSettings //nolint:staticcheck // ignore SA1019: DefaultNetworkSettings is deprecated in v28.4. - -// SummaryNetworkSettings provides a summary of container's networks -// in /containers/json. -// -// Deprecated: use [container.NetworkSettingsSummary]. -type SummaryNetworkSettings = container.NetworkSettingsSummary - -// Health states -const ( - NoHealthcheck = container.NoHealthcheck // Deprecated: use [container.NoHealthcheck]. - Starting = container.Starting // Deprecated: use [container.Starting]. - Healthy = container.Healthy // Deprecated: use [container.Healthy]. - Unhealthy = container.Unhealthy // Deprecated: use [container.Unhealthy]. -) - -// Health stores information about the container's healthcheck results. -// -// Deprecated: use [container.Health]. -type Health = container.Health - -// HealthcheckResult stores information about a single run of a healthcheck probe. -// -// Deprecated: use [container.HealthcheckResult]. -type HealthcheckResult = container.HealthcheckResult - -// MountPoint represents a mount point configuration inside the container. -// This is used for reporting the mountpoints in use by a container. -// -// Deprecated: use [container.MountPoint]. -type MountPoint = container.MountPoint - -// Port An open port on a container -// -// Deprecated: use [container.Port]. -type Port = container.Port - -// GraphDriverData Information about the storage driver used to store the container's and -// image's filesystem. -// -// Deprecated: use [storage.DriverData]. -type GraphDriverData = storage.DriverData - -// RootFS returns Image's RootFS description including the layer IDs. -// -// Deprecated: use [image.RootFS]. -type RootFS = image.RootFS - -// ImageInspect contains response of Engine API: -// GET "/images/{name:.*}/json" -// -// Deprecated: use [image.InspectResponse]. -type ImageInspect = image.InspectResponse - -// RequestPrivilegeFunc is a function interface that clients can supply to -// retry operations after getting an authorization error. -// This function returns the registry authentication header value in base64 -// format, or an error if the privilege request fails. -// -// Deprecated: moved to [github.com/docker/docker/api/types/registry.RequestAuthConfig]. -type RequestPrivilegeFunc func(context.Context) (string, error) - -// SecretCreateResponse contains the information returned to a client -// on the creation of a new secret. -// -// Deprecated: use [swarm.SecretCreateResponse]. -type SecretCreateResponse = swarm.SecretCreateResponse - -// SecretListOptions holds parameters to list secrets -// -// Deprecated: use [swarm.SecretListOptions]. -type SecretListOptions = swarm.SecretListOptions - -// ConfigCreateResponse contains the information returned to a client -// on the creation of a new config. -// -// Deprecated: use [swarm.ConfigCreateResponse]. -type ConfigCreateResponse = swarm.ConfigCreateResponse - -// ConfigListOptions holds parameters to list configs -// -// Deprecated: use [swarm.ConfigListOptions]. -type ConfigListOptions = swarm.ConfigListOptions - -// NodeListOptions holds parameters to list nodes with. -// -// Deprecated: use [swarm.NodeListOptions]. -type NodeListOptions = swarm.NodeListOptions - -// NodeRemoveOptions holds parameters to remove nodes with. -// -// Deprecated: use [swarm.NodeRemoveOptions]. -type NodeRemoveOptions = swarm.NodeRemoveOptions - -// TaskListOptions holds parameters to list tasks with. -// -// Deprecated: use [swarm.TaskListOptions]. -type TaskListOptions = swarm.TaskListOptions - -// ServiceCreateOptions contains the options to use when creating a service. -// -// Deprecated: use [swarm.ServiceCreateOptions]. -type ServiceCreateOptions = swarm.ServiceCreateOptions - -// ServiceUpdateOptions contains the options to be used for updating services. -// -// Deprecated: use [swarm.ServiceCreateOptions]. -type ServiceUpdateOptions = swarm.ServiceUpdateOptions - -const ( - RegistryAuthFromSpec = swarm.RegistryAuthFromSpec // Deprecated: use [swarm.RegistryAuthFromSpec]. - RegistryAuthFromPreviousSpec = swarm.RegistryAuthFromPreviousSpec // Deprecated: use [swarm.RegistryAuthFromPreviousSpec]. -) - -// ServiceListOptions holds parameters to list services with. -// -// Deprecated: use [swarm.ServiceListOptions]. -type ServiceListOptions = swarm.ServiceListOptions - -// ServiceInspectOptions holds parameters related to the "service inspect" -// operation. -// -// Deprecated: use [swarm.ServiceInspectOptions]. -type ServiceInspectOptions = swarm.ServiceInspectOptions - -// SwarmUnlockKeyResponse contains the response for Engine API: -// GET /swarm/unlockkey -// -// Deprecated: use [swarm.UnlockKeyResponse]. -type SwarmUnlockKeyResponse = swarm.UnlockKeyResponse - -// BuildCache contains information about a build cache record. -// -// Deprecated: deprecated in API 1.49. Use [build.CacheRecord] instead. -type BuildCache = build.CacheRecord - -// BuildCachePruneOptions hold parameters to prune the build cache -// -// Deprecated: use [build.CachePruneOptions]. -type BuildCachePruneOptions = build.CachePruneOptions - -// BuildCachePruneReport contains the response for Engine API: -// POST "/build/prune" -// -// Deprecated: use [build.CachePruneReport]. -type BuildCachePruneReport = build.CachePruneReport - -// BuildResult contains the image id of a successful build/ -// -// Deprecated: use [build.Result]. -type BuildResult = build.Result - -// ImageBuildOptions holds the information -// necessary to build images. -// -// Deprecated: use [build.ImageBuildOptions]. -type ImageBuildOptions = build.ImageBuildOptions - -// ImageBuildOutput defines configuration for exporting a build result -// -// Deprecated: use [build.ImageBuildOutput]. -type ImageBuildOutput = build.ImageBuildOutput - -// ImageBuildResponse holds information -// returned by a server after building -// an image. -// -// Deprecated: use [build.ImageBuildResponse]. -type ImageBuildResponse = build.ImageBuildResponse - -// BuilderVersion sets the version of underlying builder to use -// -// Deprecated: use [build.BuilderVersion]. -type BuilderVersion = build.BuilderVersion - -const ( - // BuilderV1 is the first generation builder in docker daemon - // - // Deprecated: use [build.BuilderV1]. - BuilderV1 = build.BuilderV1 - // BuilderBuildKit is builder based on moby/buildkit project - // - // Deprecated: use [build.BuilderBuildKit]. - BuilderBuildKit = build.BuilderBuildKit -) diff --git a/vendor/github.com/docker/docker/api/types/versions/compare.go b/vendor/github.com/docker/docker/api/types/versions/compare.go deleted file mode 100644 index 1a0325c7..00000000 --- a/vendor/github.com/docker/docker/api/types/versions/compare.go +++ /dev/null @@ -1,65 +0,0 @@ -package versions - -import ( - "strconv" - "strings" -) - -// compare compares two version strings -// returns -1 if v1 < v2, 1 if v1 > v2, 0 otherwise. -func compare(v1, v2 string) int { - if v1 == v2 { - return 0 - } - var ( - currTab = strings.Split(v1, ".") - otherTab = strings.Split(v2, ".") - ) - - maxVer := len(currTab) - if len(otherTab) > maxVer { - maxVer = len(otherTab) - } - for i := 0; i < maxVer; i++ { - var currInt, otherInt int - - if len(currTab) > i { - currInt, _ = strconv.Atoi(currTab[i]) - } - if len(otherTab) > i { - otherInt, _ = strconv.Atoi(otherTab[i]) - } - if currInt > otherInt { - return 1 - } - if otherInt > currInt { - return -1 - } - } - return 0 -} - -// LessThan checks if a version is less than another -func LessThan(v, other string) bool { - return compare(v, other) == -1 -} - -// LessThanOrEqualTo checks if a version is less than or equal to another -func LessThanOrEqualTo(v, other string) bool { - return compare(v, other) <= 0 -} - -// GreaterThan checks if a version is greater than another -func GreaterThan(v, other string) bool { - return compare(v, other) == 1 -} - -// GreaterThanOrEqualTo checks if a version is greater than or equal to another -func GreaterThanOrEqualTo(v, other string) bool { - return compare(v, other) >= 0 -} - -// Equal checks if a version is equal to another -func Equal(v, other string) bool { - return compare(v, other) == 0 -} diff --git a/vendor/github.com/docker/docker/api/types/volume/cluster_volume.go b/vendor/github.com/docker/docker/api/types/volume/cluster_volume.go deleted file mode 100644 index 618a4816..00000000 --- a/vendor/github.com/docker/docker/api/types/volume/cluster_volume.go +++ /dev/null @@ -1,420 +0,0 @@ -package volume - -import ( - "github.com/docker/docker/api/types/swarm" -) - -// ClusterVolume contains options and information specific to, and only present -// on, Swarm CSI cluster volumes. -type ClusterVolume struct { - // ID is the Swarm ID of the volume. Because cluster volumes are Swarm - // objects, they have an ID, unlike non-cluster volumes, which only have a - // Name. This ID can be used to refer to the cluster volume. - ID string - - // Meta is the swarm metadata about this volume. - swarm.Meta - - // Spec is the cluster-specific options from which this volume is derived. - Spec ClusterVolumeSpec - - // PublishStatus contains the status of the volume as it pertains to its - // publishing on Nodes. - PublishStatus []*PublishStatus `json:",omitempty"` - - // Info is information about the global status of the volume. - Info *Info `json:",omitempty"` -} - -// ClusterVolumeSpec contains the spec used to create this volume. -type ClusterVolumeSpec struct { - // Group defines the volume group of this volume. Volumes belonging to the - // same group can be referred to by group name when creating Services. - // Referring to a volume by group instructs swarm to treat volumes in that - // group interchangeably for the purpose of scheduling. Volumes with an - // empty string for a group technically all belong to the same, emptystring - // group. - Group string `json:",omitempty"` - - // AccessMode defines how the volume is used by tasks. - AccessMode *AccessMode `json:",omitempty"` - - // AccessibilityRequirements specifies where in the cluster a volume must - // be accessible from. - // - // This field must be empty if the plugin does not support - // VOLUME_ACCESSIBILITY_CONSTRAINTS capabilities. If it is present but the - // plugin does not support it, volume will not be created. - // - // If AccessibilityRequirements is empty, but the plugin does support - // VOLUME_ACCESSIBILITY_CONSTRAINTS, then Swarmkit will assume the entire - // cluster is a valid target for the volume. - AccessibilityRequirements *TopologyRequirement `json:",omitempty"` - - // CapacityRange defines the desired capacity that the volume should be - // created with. If nil, the plugin will decide the capacity. - CapacityRange *CapacityRange `json:",omitempty"` - - // Secrets defines Swarm Secrets that are passed to the CSI storage plugin - // when operating on this volume. - Secrets []Secret `json:",omitempty"` - - // Availability is the Volume's desired availability. Analogous to Node - // Availability, this allows the user to take volumes offline in order to - // update or delete them. - Availability Availability `json:",omitempty"` -} - -// Availability specifies the availability of the volume. -type Availability string - -const ( - // AvailabilityActive indicates that the volume is active and fully - // schedulable on the cluster. - AvailabilityActive Availability = "active" - - // AvailabilityPause indicates that no new workloads should use the - // volume, but existing workloads can continue to use it. - AvailabilityPause Availability = "pause" - - // AvailabilityDrain indicates that all workloads using this volume - // should be rescheduled, and the volume unpublished from all nodes. - AvailabilityDrain Availability = "drain" -) - -// AccessMode defines the access mode of a volume. -type AccessMode struct { - // Scope defines the set of nodes this volume can be used on at one time. - Scope Scope `json:",omitempty"` - - // Sharing defines the number and way that different tasks can use this - // volume at one time. - Sharing SharingMode `json:",omitempty"` - - // MountVolume defines options for using this volume as a Mount-type - // volume. - // - // Either BlockVolume or MountVolume, but not both, must be present. - MountVolume *TypeMount `json:",omitempty"` - - // BlockVolume defines options for using this volume as a Block-type - // volume. - // - // Either BlockVolume or MountVolume, but not both, must be present. - BlockVolume *TypeBlock `json:",omitempty"` -} - -// Scope defines the Scope of a Cluster Volume. This is how many nodes a -// Volume can be accessed simultaneously on. -type Scope string - -const ( - // ScopeSingleNode indicates the volume can be used on one node at a - // time. - ScopeSingleNode Scope = "single" - - // ScopeMultiNode indicates the volume can be used on many nodes at - // the same time. - ScopeMultiNode Scope = "multi" -) - -// SharingMode defines the Sharing of a Cluster Volume. This is how Tasks using a -// Volume at the same time can use it. -type SharingMode string - -const ( - // SharingNone indicates that only one Task may use the Volume at a - // time. - SharingNone SharingMode = "none" - - // SharingReadOnly indicates that the Volume may be shared by any - // number of Tasks, but they must be read-only. - SharingReadOnly SharingMode = "readonly" - - // SharingOneWriter indicates that the Volume may be shared by any - // number of Tasks, but all after the first must be read-only. - SharingOneWriter SharingMode = "onewriter" - - // SharingAll means that the Volume may be shared by any number of - // Tasks, as readers or writers. - SharingAll SharingMode = "all" -) - -// TypeBlock defines options for using a volume as a block-type volume. -// -// Intentionally empty. -type TypeBlock struct{} - -// TypeMount contains options for using a volume as a Mount-type -// volume. -type TypeMount struct { - // FsType specifies the filesystem type for the mount volume. Optional. - FsType string `json:",omitempty"` - - // MountFlags defines flags to pass when mounting the volume. Optional. - MountFlags []string `json:",omitempty"` -} - -// TopologyRequirement expresses the user's requirements for a volume's -// accessible topology. -type TopologyRequirement struct { - // Requisite specifies a list of Topologies, at least one of which the - // volume must be accessible from. - // - // Taken verbatim from the CSI Spec: - // - // Specifies the list of topologies the provisioned volume MUST be - // accessible from. - // This field is OPTIONAL. If TopologyRequirement is specified either - // requisite or preferred or both MUST be specified. - // - // If requisite is specified, the provisioned volume MUST be - // accessible from at least one of the requisite topologies. - // - // Given - // x = number of topologies provisioned volume is accessible from - // n = number of requisite topologies - // The CO MUST ensure n >= 1. The SP MUST ensure x >= 1 - // If x==n, then the SP MUST make the provisioned volume available to - // all topologies from the list of requisite topologies. If it is - // unable to do so, the SP MUST fail the CreateVolume call. - // For example, if a volume should be accessible from a single zone, - // and requisite = - // {"region": "R1", "zone": "Z2"} - // then the provisioned volume MUST be accessible from the "region" - // "R1" and the "zone" "Z2". - // Similarly, if a volume should be accessible from two zones, and - // requisite = - // {"region": "R1", "zone": "Z2"}, - // {"region": "R1", "zone": "Z3"} - // then the provisioned volume MUST be accessible from the "region" - // "R1" and both "zone" "Z2" and "zone" "Z3". - // - // If xn, then the SP MUST make the provisioned volume available from - // all topologies from the list of requisite topologies and MAY choose - // the remaining x-n unique topologies from the list of all possible - // topologies. If it is unable to do so, the SP MUST fail the - // CreateVolume call. - // For example, if a volume should be accessible from two zones, and - // requisite = - // {"region": "R1", "zone": "Z2"} - // then the provisioned volume MUST be accessible from the "region" - // "R1" and the "zone" "Z2" and the SP may select the second zone - // independently, e.g. "R1/Z4". - Requisite []Topology `json:",omitempty"` - - // Preferred is a list of Topologies that the volume should attempt to be - // provisioned in. - // - // Taken from the CSI spec: - // - // Specifies the list of topologies the CO would prefer the volume to - // be provisioned in. - // - // This field is OPTIONAL. If TopologyRequirement is specified either - // requisite or preferred or both MUST be specified. - // - // An SP MUST attempt to make the provisioned volume available using - // the preferred topologies in order from first to last. - // - // If requisite is specified, all topologies in preferred list MUST - // also be present in the list of requisite topologies. - // - // If the SP is unable to make the provisioned volume available - // from any of the preferred topologies, the SP MAY choose a topology - // from the list of requisite topologies. - // If the list of requisite topologies is not specified, then the SP - // MAY choose from the list of all possible topologies. - // If the list of requisite topologies is specified and the SP is - // unable to make the provisioned volume available from any of the - // requisite topologies it MUST fail the CreateVolume call. - // - // Example 1: - // Given a volume should be accessible from a single zone, and - // requisite = - // {"region": "R1", "zone": "Z2"}, - // {"region": "R1", "zone": "Z3"} - // preferred = - // {"region": "R1", "zone": "Z3"} - // then the SP SHOULD first attempt to make the provisioned volume - // available from "zone" "Z3" in the "region" "R1" and fall back to - // "zone" "Z2" in the "region" "R1" if that is not possible. - // - // Example 2: - // Given a volume should be accessible from a single zone, and - // requisite = - // {"region": "R1", "zone": "Z2"}, - // {"region": "R1", "zone": "Z3"}, - // {"region": "R1", "zone": "Z4"}, - // {"region": "R1", "zone": "Z5"} - // preferred = - // {"region": "R1", "zone": "Z4"}, - // {"region": "R1", "zone": "Z2"} - // then the SP SHOULD first attempt to make the provisioned volume - // accessible from "zone" "Z4" in the "region" "R1" and fall back to - // "zone" "Z2" in the "region" "R1" if that is not possible. If that - // is not possible, the SP may choose between either the "zone" - // "Z3" or "Z5" in the "region" "R1". - // - // Example 3: - // Given a volume should be accessible from TWO zones (because an - // opaque parameter in CreateVolumeRequest, for example, specifies - // the volume is accessible from two zones, aka synchronously - // replicated), and - // requisite = - // {"region": "R1", "zone": "Z2"}, - // {"region": "R1", "zone": "Z3"}, - // {"region": "R1", "zone": "Z4"}, - // {"region": "R1", "zone": "Z5"} - // preferred = - // {"region": "R1", "zone": "Z5"}, - // {"region": "R1", "zone": "Z3"} - // then the SP SHOULD first attempt to make the provisioned volume - // accessible from the combination of the two "zones" "Z5" and "Z3" in - // the "region" "R1". If that's not possible, it should fall back to - // a combination of "Z5" and other possibilities from the list of - // requisite. If that's not possible, it should fall back to a - // combination of "Z3" and other possibilities from the list of - // requisite. If that's not possible, it should fall back to a - // combination of other possibilities from the list of requisite. - Preferred []Topology `json:",omitempty"` -} - -// Topology is a map of topological domains to topological segments. -// -// This description is taken verbatim from the CSI Spec: -// -// A topological domain is a sub-division of a cluster, like "region", -// "zone", "rack", etc. -// A topological segment is a specific instance of a topological domain, -// like "zone3", "rack3", etc. -// For example {"com.company/zone": "Z1", "com.company/rack": "R3"} -// Valid keys have two segments: an OPTIONAL prefix and name, separated -// by a slash (/), for example: "com.company.example/zone". -// The key name segment is REQUIRED. The prefix is OPTIONAL. -// The key name MUST be 63 characters or less, begin and end with an -// alphanumeric character ([a-z0-9A-Z]), and contain only dashes (-), -// underscores (_), dots (.), or alphanumerics in between, for example -// "zone". -// The key prefix MUST be 63 characters or less, begin and end with a -// lower-case alphanumeric character ([a-z0-9]), contain only -// dashes (-), dots (.), or lower-case alphanumerics in between, and -// follow domain name notation format -// (https://tools.ietf.org/html/rfc1035#section-2.3.1). -// The key prefix SHOULD include the plugin's host company name and/or -// the plugin name, to minimize the possibility of collisions with keys -// from other plugins. -// If a key prefix is specified, it MUST be identical across all -// topology keys returned by the SP (across all RPCs). -// Keys MUST be case-insensitive. Meaning the keys "Zone" and "zone" -// MUST not both exist. -// Each value (topological segment) MUST contain 1 or more strings. -// Each string MUST be 63 characters or less and begin and end with an -// alphanumeric character with '-', '_', '.', or alphanumerics in -// between. -type Topology struct { - Segments map[string]string `json:",omitempty"` -} - -// CapacityRange describes the minimum and maximum capacity a volume should be -// created with -type CapacityRange struct { - // RequiredBytes specifies that a volume must be at least this big. The - // value of 0 indicates an unspecified minimum. - RequiredBytes int64 - - // LimitBytes specifies that a volume must not be bigger than this. The - // value of 0 indicates an unspecified maximum - LimitBytes int64 -} - -// Secret represents a Swarm Secret value that must be passed to the CSI -// storage plugin when operating on this Volume. It represents one key-value -// pair of possibly many. -type Secret struct { - // Key is the name of the key of the key-value pair passed to the plugin. - Key string - - // Secret is the swarm Secret object from which to read data. This can be a - // Secret name or ID. The Secret data is retrieved by Swarm and used as the - // value of the key-value pair passed to the plugin. - Secret string -} - -// PublishState represents the state of a Volume as it pertains to its -// use on a particular Node. -type PublishState string - -const ( - // StatePending indicates that the volume should be published on - // this node, but the call to ControllerPublishVolume has not been - // successfully completed yet and the result recorded by swarmkit. - StatePending PublishState = "pending-publish" - - // StatePublished means the volume is published successfully to the node. - StatePublished PublishState = "published" - - // StatePendingNodeUnpublish indicates that the Volume should be - // unpublished on the Node, and we're waiting for confirmation that it has - // done so. After the Node has confirmed that the Volume has been - // unpublished, the state will move to StatePendingUnpublish. - StatePendingNodeUnpublish PublishState = "pending-node-unpublish" - - // StatePendingUnpublish means the volume is still published to the node - // by the controller, awaiting the operation to unpublish it. - StatePendingUnpublish PublishState = "pending-controller-unpublish" -) - -// PublishStatus represents the status of the volume as published to an -// individual node -type PublishStatus struct { - // NodeID is the ID of the swarm node this Volume is published to. - NodeID string `json:",omitempty"` - - // State is the publish state of the volume. - State PublishState `json:",omitempty"` - - // PublishContext is the PublishContext returned by the CSI plugin when - // a volume is published. - PublishContext map[string]string `json:",omitempty"` -} - -// Info contains information about the Volume as a whole as provided by -// the CSI storage plugin. -type Info struct { - // CapacityBytes is the capacity of the volume in bytes. A value of 0 - // indicates that the capacity is unknown. - CapacityBytes int64 `json:",omitempty"` - - // VolumeContext is the context originating from the CSI storage plugin - // when the Volume is created. - VolumeContext map[string]string `json:",omitempty"` - - // VolumeID is the ID of the Volume as seen by the CSI storage plugin. This - // is distinct from the Volume's Swarm ID, which is the ID used by all of - // the Docker Engine to refer to the Volume. If this field is blank, then - // the Volume has not been successfully created yet. - VolumeID string `json:",omitempty"` - - // AccessibleTopology is the topology this volume is actually accessible - // from. - AccessibleTopology []Topology `json:",omitempty"` -} diff --git a/vendor/github.com/docker/docker/api/types/volume/create_options.go b/vendor/github.com/docker/docker/api/types/volume/create_options.go deleted file mode 100644 index 37c41a60..00000000 --- a/vendor/github.com/docker/docker/api/types/volume/create_options.go +++ /dev/null @@ -1,29 +0,0 @@ -package volume - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// CreateOptions VolumeConfig -// -// Volume configuration -// swagger:model CreateOptions -type CreateOptions struct { - - // cluster volume spec - ClusterVolumeSpec *ClusterVolumeSpec `json:"ClusterVolumeSpec,omitempty"` - - // Name of the volume driver to use. - Driver string `json:"Driver,omitempty"` - - // A mapping of driver options and values. These options are - // passed directly to the driver and are driver specific. - // - DriverOpts map[string]string `json:"DriverOpts,omitempty"` - - // User-defined key/value metadata. - Labels map[string]string `json:"Labels,omitempty"` - - // The new volume's name. If not specified, Docker generates a name. - // - Name string `json:"Name,omitempty"` -} diff --git a/vendor/github.com/docker/docker/api/types/volume/disk_usage.go b/vendor/github.com/docker/docker/api/types/volume/disk_usage.go deleted file mode 100644 index 88974303..00000000 --- a/vendor/github.com/docker/docker/api/types/volume/disk_usage.go +++ /dev/null @@ -1,10 +0,0 @@ -package volume - -// DiskUsage contains disk usage for volumes. -// -// Deprecated: this type is no longer used and will be removed in the next release. -type DiskUsage struct { - TotalSize int64 - Reclaimable int64 - Items []*Volume -} diff --git a/vendor/github.com/docker/docker/api/types/volume/list_response.go b/vendor/github.com/docker/docker/api/types/volume/list_response.go deleted file mode 100644 index ca5192a2..00000000 --- a/vendor/github.com/docker/docker/api/types/volume/list_response.go +++ /dev/null @@ -1,18 +0,0 @@ -package volume - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// ListResponse VolumeListResponse -// -// Volume list response -// swagger:model ListResponse -type ListResponse struct { - - // List of volumes - Volumes []*Volume `json:"Volumes"` - - // Warnings that occurred when fetching the list of volumes. - // - Warnings []string `json:"Warnings"` -} diff --git a/vendor/github.com/docker/docker/api/types/volume/options.go b/vendor/github.com/docker/docker/api/types/volume/options.go deleted file mode 100644 index 875524fb..00000000 --- a/vendor/github.com/docker/docker/api/types/volume/options.go +++ /dev/null @@ -1,15 +0,0 @@ -package volume - -import "github.com/docker/docker/api/types/filters" - -// ListOptions holds parameters to list volumes. -type ListOptions struct { - Filters filters.Args -} - -// PruneReport contains the response for Engine API: -// POST "/volumes/prune" -type PruneReport struct { - VolumesDeleted []string - SpaceReclaimed uint64 -} diff --git a/vendor/github.com/docker/docker/api/types/volume/volume.go b/vendor/github.com/docker/docker/api/types/volume/volume.go deleted file mode 100644 index ea7d555e..00000000 --- a/vendor/github.com/docker/docker/api/types/volume/volume.go +++ /dev/null @@ -1,75 +0,0 @@ -package volume - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -// Volume volume -// swagger:model Volume -type Volume struct { - - // cluster volume - ClusterVolume *ClusterVolume `json:"ClusterVolume,omitempty"` - - // Date/Time the volume was created. - CreatedAt string `json:"CreatedAt,omitempty"` - - // Name of the volume driver used by the volume. - // Required: true - Driver string `json:"Driver"` - - // User-defined key/value metadata. - // Required: true - Labels map[string]string `json:"Labels"` - - // Mount path of the volume on the host. - // Required: true - Mountpoint string `json:"Mountpoint"` - - // Name of the volume. - // Required: true - Name string `json:"Name"` - - // The driver specific options used when creating the volume. - // - // Required: true - Options map[string]string `json:"Options"` - - // The level at which the volume exists. Either `global` for cluster-wide, - // or `local` for machine level. - // - // Required: true - Scope string `json:"Scope"` - - // Low-level details about the volume, provided by the volume driver. - // Details are returned as a map with key/value pairs: - // `{"key":"value","key2":"value2"}`. - // - // The `Status` field is optional, and is omitted if the volume driver - // does not support this feature. - // - Status map[string]interface{} `json:"Status,omitempty"` - - // usage data - UsageData *UsageData `json:"UsageData,omitempty"` -} - -// UsageData Usage details about the volume. This information is used by the -// `GET /system/df` endpoint, and omitted in other endpoints. -// -// swagger:model UsageData -type UsageData struct { - - // The number of containers referencing this volume. This field - // is set to `-1` if the reference-count is not available. - // - // Required: true - RefCount int64 `json:"RefCount"` - - // Amount of disk space used by the volume (in bytes). This information - // is only available for volumes created with the `"local"` volume - // driver. For volumes created with other volume drivers, this field - // is set to `-1` ("not available") - // - // Required: true - Size int64 `json:"Size"` -} diff --git a/vendor/github.com/docker/docker/api/types/volume/volume_update.go b/vendor/github.com/docker/docker/api/types/volume/volume_update.go deleted file mode 100644 index c26ed44c..00000000 --- a/vendor/github.com/docker/docker/api/types/volume/volume_update.go +++ /dev/null @@ -1,7 +0,0 @@ -package volume - -// UpdateOptions is configuration to update a Volume with. -type UpdateOptions struct { - // Spec is the ClusterVolumeSpec to update the volume to. - Spec *ClusterVolumeSpec `json:"Spec,omitempty"` -} diff --git a/vendor/github.com/docker/docker/client/README.md b/vendor/github.com/docker/docker/client/README.md deleted file mode 100644 index f8af3ab9..00000000 --- a/vendor/github.com/docker/docker/client/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# Go client for the Docker Engine API - -The `docker` command uses this package to communicate with the daemon. It can -also be used by your own Go applications to do anything the command-line -interface does – running containers, pulling images, managing swarms, etc. - -For example, to list all containers (the equivalent of `docker ps --all`): - -```go -package main - -import ( - "context" - "fmt" - - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/client" -) - -func main() { - apiClient, err := client.NewClientWithOpts(client.FromEnv) - if err != nil { - panic(err) - } - defer apiClient.Close() - - containers, err := apiClient.ContainerList(context.Background(), container.ListOptions{All: true}) - if err != nil { - panic(err) - } - - for _, ctr := range containers { - fmt.Printf("%s %s (status: %s)\n", ctr.ID, ctr.Image, ctr.Status) - } -} -``` - -[Full documentation is available on pkg.go.dev.](https://pkg.go.dev/github.com/docker/docker/client) diff --git a/vendor/github.com/docker/docker/client/build_cancel.go b/vendor/github.com/docker/docker/client/build_cancel.go deleted file mode 100644 index a5eeb817..00000000 --- a/vendor/github.com/docker/docker/client/build_cancel.go +++ /dev/null @@ -1,16 +0,0 @@ -package client - -import ( - "context" - "net/url" -) - -// BuildCancel requests the daemon to cancel the ongoing build request. -func (cli *Client) BuildCancel(ctx context.Context, id string) error { - query := url.Values{} - query.Set("id", id) - - resp, err := cli.post(ctx, "/build/cancel", query, nil, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/build_prune.go b/vendor/github.com/docker/docker/client/build_prune.go deleted file mode 100644 index 6f0f59e3..00000000 --- a/vendor/github.com/docker/docker/client/build_prune.go +++ /dev/null @@ -1,56 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/url" - "strconv" - - "github.com/docker/docker/api/types/build" - "github.com/docker/docker/api/types/filters" - "github.com/pkg/errors" -) - -// BuildCachePrune requests the daemon to delete unused cache data -func (cli *Client) BuildCachePrune(ctx context.Context, opts build.CachePruneOptions) (*build.CachePruneReport, error) { - if err := cli.NewVersionError(ctx, "1.31", "build prune"); err != nil { - return nil, err - } - - query := url.Values{} - if opts.All { - query.Set("all", "1") - } - - if opts.KeepStorage != 0 { - query.Set("keep-storage", strconv.Itoa(int(opts.KeepStorage))) - } - if opts.ReservedSpace != 0 { - query.Set("reserved-space", strconv.Itoa(int(opts.ReservedSpace))) - } - if opts.MaxUsedSpace != 0 { - query.Set("max-used-space", strconv.Itoa(int(opts.MaxUsedSpace))) - } - if opts.MinFreeSpace != 0 { - query.Set("min-free-space", strconv.Itoa(int(opts.MinFreeSpace))) - } - f, err := filters.ToJSON(opts.Filters) - if err != nil { - return nil, errors.Wrap(err, "prune could not marshal filters option") - } - query.Set("filters", f) - - resp, err := cli.post(ctx, "/build/prune", query, nil, nil) - defer ensureReaderClosed(resp) - - if err != nil { - return nil, err - } - - report := build.CachePruneReport{} - if err := json.NewDecoder(resp.Body).Decode(&report); err != nil { - return nil, errors.Wrap(err, "error retrieving disk usage") - } - - return &report, nil -} diff --git a/vendor/github.com/docker/docker/client/checkpoint.go b/vendor/github.com/docker/docker/client/checkpoint.go deleted file mode 100644 index d020574c..00000000 --- a/vendor/github.com/docker/docker/client/checkpoint.go +++ /dev/null @@ -1,18 +0,0 @@ -package client - -import ( - "context" - - "github.com/docker/docker/api/types/checkpoint" -) - -// CheckpointAPIClient defines API client methods for the checkpoints. -// -// Experimental: checkpoint and restore is still an experimental feature, -// and only available if the daemon is running with experimental features -// enabled. -type CheckpointAPIClient interface { - CheckpointCreate(ctx context.Context, container string, options checkpoint.CreateOptions) error - CheckpointDelete(ctx context.Context, container string, options checkpoint.DeleteOptions) error - CheckpointList(ctx context.Context, container string, options checkpoint.ListOptions) ([]checkpoint.Summary, error) -} diff --git a/vendor/github.com/docker/docker/client/checkpoint_create.go b/vendor/github.com/docker/docker/client/checkpoint_create.go deleted file mode 100644 index 961a5fe6..00000000 --- a/vendor/github.com/docker/docker/client/checkpoint_create.go +++ /dev/null @@ -1,19 +0,0 @@ -package client - -import ( - "context" - - "github.com/docker/docker/api/types/checkpoint" -) - -// CheckpointCreate creates a checkpoint from the given container with the given name -func (cli *Client) CheckpointCreate(ctx context.Context, containerID string, options checkpoint.CreateOptions) error { - containerID, err := trimID("container", containerID) - if err != nil { - return err - } - - resp, err := cli.post(ctx, "/containers/"+containerID+"/checkpoints", nil, options, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/checkpoint_delete.go b/vendor/github.com/docker/docker/client/checkpoint_delete.go deleted file mode 100644 index 4c51b25f..00000000 --- a/vendor/github.com/docker/docker/client/checkpoint_delete.go +++ /dev/null @@ -1,25 +0,0 @@ -package client - -import ( - "context" - "net/url" - - "github.com/docker/docker/api/types/checkpoint" -) - -// CheckpointDelete deletes the checkpoint with the given name from the given container -func (cli *Client) CheckpointDelete(ctx context.Context, containerID string, options checkpoint.DeleteOptions) error { - containerID, err := trimID("container", containerID) - if err != nil { - return err - } - - query := url.Values{} - if options.CheckpointDir != "" { - query.Set("dir", options.CheckpointDir) - } - - resp, err := cli.delete(ctx, "/containers/"+containerID+"/checkpoints/"+options.CheckpointID, query, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/checkpoint_list.go b/vendor/github.com/docker/docker/client/checkpoint_list.go deleted file mode 100644 index 8164c766..00000000 --- a/vendor/github.com/docker/docker/client/checkpoint_list.go +++ /dev/null @@ -1,28 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/url" - - "github.com/docker/docker/api/types/checkpoint" -) - -// CheckpointList returns the checkpoints of the given container in the docker host -func (cli *Client) CheckpointList(ctx context.Context, container string, options checkpoint.ListOptions) ([]checkpoint.Summary, error) { - var checkpoints []checkpoint.Summary - - query := url.Values{} - if options.CheckpointDir != "" { - query.Set("dir", options.CheckpointDir) - } - - resp, err := cli.get(ctx, "/containers/"+container+"/checkpoints", query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return checkpoints, err - } - - err = json.NewDecoder(resp.Body).Decode(&checkpoints) - return checkpoints, err -} diff --git a/vendor/github.com/docker/docker/client/client.go b/vendor/github.com/docker/docker/client/client.go deleted file mode 100644 index 8acfb7f4..00000000 --- a/vendor/github.com/docker/docker/client/client.go +++ /dev/null @@ -1,476 +0,0 @@ -/* -Package client is a Go client for the Docker Engine API. - -For more information about the Engine API, see the documentation: -https://docs.docker.com/reference/api/engine/ - -# Usage - -You use the library by constructing a client object using [NewClientWithOpts] -and calling methods on it. The client can be configured from environment -variables by passing the [FromEnv] option, or configured manually by passing any -of the other available [Opts]. - -For example, to list running containers (the equivalent of "docker ps"): - - package main - - import ( - "context" - "fmt" - - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/client" - ) - - func main() { - cli, err := client.NewClientWithOpts(client.FromEnv) - if err != nil { - panic(err) - } - - containers, err := cli.ContainerList(context.Background(), container.ListOptions{}) - if err != nil { - panic(err) - } - - for _, ctr := range containers { - fmt.Printf("%s %s\n", ctr.ID, ctr.Image) - } - } -*/ -package client - -import ( - "context" - "crypto/tls" - "net" - "net/http" - "net/url" - "path" - "strings" - "sync" - "sync/atomic" - "time" - - "github.com/docker/docker/api" - "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/versions" - "github.com/docker/go-connections/sockets" - "github.com/pkg/errors" - "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" -) - -// DummyHost is a hostname used for local communication. -// -// It acts as a valid formatted hostname for local connections (such as "unix://" -// or "npipe://") which do not require a hostname. It should never be resolved, -// but uses the special-purpose ".localhost" TLD (as defined in [RFC 2606, Section 2] -// and [RFC 6761, Section 6.3]). -// -// [RFC 7230, Section 5.4] defines that an empty header must be used for such -// cases: -// -// If the authority component is missing or undefined for the target URI, -// then a client MUST send a Host header field with an empty field-value. -// -// However, [Go stdlib] enforces the semantics of HTTP(S) over TCP, does not -// allow an empty header to be used, and requires req.URL.Scheme to be either -// "http" or "https". -// -// For further details, refer to: -// -// - https://github.com/docker/engine-api/issues/189 -// - https://github.com/golang/go/issues/13624 -// - https://github.com/golang/go/issues/61076 -// - https://github.com/moby/moby/issues/45935 -// -// [RFC 2606, Section 2]: https://www.rfc-editor.org/rfc/rfc2606.html#section-2 -// [RFC 6761, Section 6.3]: https://www.rfc-editor.org/rfc/rfc6761#section-6.3 -// [RFC 7230, Section 5.4]: https://datatracker.ietf.org/doc/html/rfc7230#section-5.4 -// [Go stdlib]: https://github.com/golang/go/blob/6244b1946bc2101b01955468f1be502dbadd6807/src/net/http/transport.go#L558-L569 -const DummyHost = "api.moby.localhost" - -// fallbackAPIVersion is the version to fallback to if API-version negotiation -// fails. This version is the highest version of the API before API-version -// negotiation was introduced. If negotiation fails (or no API version was -// included in the API response), we assume the API server uses the most -// recent version before negotiation was introduced. -const fallbackAPIVersion = "1.24" - -// Ensure that Client always implements APIClient. -var _ APIClient = &Client{} - -// Client is the API client that performs all operations -// against a docker server. -type Client struct { - // scheme sets the scheme for the client - scheme string - // host holds the server address to connect to - host string - // proto holds the client protocol i.e. unix. - proto string - // addr holds the client address. - addr string - // basePath holds the path to prepend to the requests. - basePath string - // client used to send and receive http requests. - client *http.Client - // version of the server to talk to. - version string - // userAgent is the User-Agent header to use for HTTP requests. It takes - // precedence over User-Agent headers set in customHTTPHeaders, and other - // header variables. When set to an empty string, the User-Agent header - // is removed, and no header is sent. - userAgent *string - // custom HTTP headers configured by users. - customHTTPHeaders map[string]string - // manualOverride is set to true when the version was set by users. - manualOverride bool - - // negotiateVersion indicates if the client should automatically negotiate - // the API version to use when making requests. API version negotiation is - // performed on the first request, after which negotiated is set to "true" - // so that subsequent requests do not re-negotiate. - negotiateVersion bool - - // negotiated indicates that API version negotiation took place - negotiated atomic.Bool - - // negotiateLock is used to single-flight the version negotiation process - negotiateLock sync.Mutex - - traceOpts []otelhttp.Option - - // When the client transport is an *http.Transport (default) we need to do some extra things (like closing idle connections). - // Store the original transport as the http.Client transport will be wrapped with tracing libs. - baseTransport *http.Transport -} - -// ErrRedirect is the error returned by checkRedirect when the request is non-GET. -var ErrRedirect = errors.New("unexpected redirect in response") - -// CheckRedirect specifies the policy for dealing with redirect responses. It -// can be set on [http.Client.CheckRedirect] to prevent HTTP redirects for -// non-GET requests. It returns an [ErrRedirect] for non-GET request, otherwise -// returns a [http.ErrUseLastResponse], which is special-cased by http.Client -// to use the last response. -// -// Go 1.8 changed behavior for HTTP redirects (specifically 301, 307, and 308) -// in the client. The client (and by extension API client) can be made to send -// a request like "POST /containers//start" where what would normally be in the -// name section of the URL is empty. This triggers an HTTP 301 from the daemon. -// -// In go 1.8 this 301 is converted to a GET request, and ends up getting -// a 404 from the daemon. This behavior change manifests in the client in that -// before, the 301 was not followed and the client did not generate an error, -// but now results in a message like "Error response from daemon: page not found". -func CheckRedirect(_ *http.Request, via []*http.Request) error { - if via[0].Method == http.MethodGet { - return http.ErrUseLastResponse - } - return ErrRedirect -} - -// NewClientWithOpts initializes a new API client with a default HTTPClient, and -// default API host and version. It also initializes the custom HTTP headers to -// add to each request. -// -// It takes an optional list of [Opt] functional arguments, which are applied in -// the order they're provided, which allows modifying the defaults when creating -// the client. For example, the following initializes a client that configures -// itself with values from environment variables ([FromEnv]), and has automatic -// API version negotiation enabled ([WithAPIVersionNegotiation]). -// -// cli, err := client.NewClientWithOpts( -// client.FromEnv, -// client.WithAPIVersionNegotiation(), -// ) -func NewClientWithOpts(ops ...Opt) (*Client, error) { - hostURL, err := ParseHostURL(DefaultDockerHost) - if err != nil { - return nil, err - } - - client, err := defaultHTTPClient(hostURL) - if err != nil { - return nil, err - } - c := &Client{ - host: DefaultDockerHost, - version: api.DefaultVersion, - client: client, - proto: hostURL.Scheme, - addr: hostURL.Host, - - traceOpts: []otelhttp.Option{ - otelhttp.WithSpanNameFormatter(func(_ string, req *http.Request) string { - return req.Method + " " + req.URL.Path - }), - }, - } - - for _, op := range ops { - if err := op(c); err != nil { - return nil, err - } - } - - if tr, ok := c.client.Transport.(*http.Transport); ok { - // Store the base transport before we wrap it in tracing libs below - // This is used, as an example, to close idle connections when the client is closed - c.baseTransport = tr - } - - if c.scheme == "" { - // TODO(stevvooe): This isn't really the right way to write clients in Go. - // `NewClient` should probably only take an `*http.Client` and work from there. - // Unfortunately, the model of having a host-ish/url-thingy as the connection - // string has us confusing protocol and transport layers. We continue doing - // this to avoid breaking existing clients but this should be addressed. - if c.tlsConfig() != nil { - c.scheme = "https" - } else { - c.scheme = "http" - } - } - - c.client.Transport = otelhttp.NewTransport(c.client.Transport, c.traceOpts...) - - return c, nil -} - -func (cli *Client) tlsConfig() *tls.Config { - if cli.baseTransport == nil { - return nil - } - return cli.baseTransport.TLSClientConfig -} - -func defaultHTTPClient(hostURL *url.URL) (*http.Client, error) { - transport := &http.Transport{} - // Necessary to prevent long-lived processes using the - // client from leaking connections due to idle connections - // not being released. - // TODO: see if we can also address this from the server side, - // or in go-connections. - // see: https://github.com/moby/moby/issues/45539 - transport.MaxIdleConns = 6 - transport.IdleConnTimeout = 30 * time.Second - err := sockets.ConfigureTransport(transport, hostURL.Scheme, hostURL.Host) - if err != nil { - return nil, err - } - return &http.Client{ - Transport: transport, - CheckRedirect: CheckRedirect, - }, nil -} - -// Close the transport used by the client -func (cli *Client) Close() error { - if cli.baseTransport != nil { - cli.baseTransport.CloseIdleConnections() - return nil - } - return nil -} - -// checkVersion manually triggers API version negotiation (if configured). -// This allows for version-dependent code to use the same version as will -// be negotiated when making the actual requests, and for which cases -// we cannot do the negotiation lazily. -func (cli *Client) checkVersion(ctx context.Context) error { - if !cli.manualOverride && cli.negotiateVersion && !cli.negotiated.Load() { - // Ensure exclusive write access to version and negotiated fields - cli.negotiateLock.Lock() - defer cli.negotiateLock.Unlock() - - // May have been set during last execution of critical zone - if cli.negotiated.Load() { - return nil - } - - ping, err := cli.Ping(ctx) - if err != nil { - return err - } - cli.negotiateAPIVersionPing(ping) - } - return nil -} - -// getAPIPath returns the versioned request path to call the API. -// It appends the query parameters to the path if they are not empty. -func (cli *Client) getAPIPath(ctx context.Context, p string, query url.Values) string { - var apiPath string - _ = cli.checkVersion(ctx) - if cli.version != "" { - apiPath = path.Join(cli.basePath, "/v"+strings.TrimPrefix(cli.version, "v"), p) - } else { - apiPath = path.Join(cli.basePath, p) - } - return (&url.URL{Path: apiPath, RawQuery: query.Encode()}).String() -} - -// ClientVersion returns the API version used by this client. -func (cli *Client) ClientVersion() string { - return cli.version -} - -// NegotiateAPIVersion queries the API and updates the version to match the API -// version. NegotiateAPIVersion downgrades the client's API version to match the -// APIVersion if the ping version is lower than the default version. If the API -// version reported by the server is higher than the maximum version supported -// by the client, it uses the client's maximum version. -// -// If a manual override is in place, either through the "DOCKER_API_VERSION" -// ([EnvOverrideAPIVersion]) environment variable, or if the client is initialized -// with a fixed version ([WithVersion]), no negotiation is performed. -// -// If the API server's ping response does not contain an API version, or if the -// client did not get a successful ping response, it assumes it is connected with -// an old daemon that does not support API version negotiation, in which case it -// downgrades to the latest version of the API before version negotiation was -// added (1.24). -func (cli *Client) NegotiateAPIVersion(ctx context.Context) { - if !cli.manualOverride { - // Avoid concurrent modification of version-related fields - cli.negotiateLock.Lock() - defer cli.negotiateLock.Unlock() - - ping, err := cli.Ping(ctx) - if err != nil { - // FIXME(thaJeztah): Ping returns an error when failing to connect to the API; we should not swallow the error here, and instead returning it. - return - } - cli.negotiateAPIVersionPing(ping) - } -} - -// NegotiateAPIVersionPing downgrades the client's API version to match the -// APIVersion in the ping response. If the API version in pingResponse is higher -// than the maximum version supported by the client, it uses the client's maximum -// version. -// -// If a manual override is in place, either through the "DOCKER_API_VERSION" -// ([EnvOverrideAPIVersion]) environment variable, or if the client is initialized -// with a fixed version ([WithVersion]), no negotiation is performed. -// -// If the API server's ping response does not contain an API version, we assume -// we are connected with an old daemon without API version negotiation support, -// and downgrade to the latest version of the API before version negotiation was -// added (1.24). -func (cli *Client) NegotiateAPIVersionPing(pingResponse types.Ping) { - if !cli.manualOverride { - // Avoid concurrent modification of version-related fields - cli.negotiateLock.Lock() - defer cli.negotiateLock.Unlock() - - cli.negotiateAPIVersionPing(pingResponse) - } -} - -// negotiateAPIVersionPing queries the API and updates the version to match the -// API version from the ping response. -func (cli *Client) negotiateAPIVersionPing(pingResponse types.Ping) { - // default to the latest version before versioning headers existed - if pingResponse.APIVersion == "" { - pingResponse.APIVersion = fallbackAPIVersion - } - - // if the client is not initialized with a version, start with the latest supported version - if cli.version == "" { - cli.version = api.DefaultVersion - } - - // if server version is lower than the client version, downgrade - if versions.LessThan(pingResponse.APIVersion, cli.version) { - cli.version = pingResponse.APIVersion - } - - // Store the results, so that automatic API version negotiation (if enabled) - // won't be performed on the next request. - if cli.negotiateVersion { - cli.negotiated.Store(true) - } -} - -// DaemonHost returns the host address used by the client -func (cli *Client) DaemonHost() string { - return cli.host -} - -// HTTPClient returns a copy of the HTTP client bound to the server -func (cli *Client) HTTPClient() *http.Client { - c := *cli.client - return &c -} - -// ParseHostURL parses a url string, validates the string is a host url, and -// returns the parsed URL -func ParseHostURL(host string) (*url.URL, error) { - proto, addr, ok := strings.Cut(host, "://") - if !ok || addr == "" { - return nil, errors.Errorf("unable to parse docker host `%s`", host) - } - - var basePath string - if proto == "tcp" { - parsed, err := url.Parse("tcp://" + addr) - if err != nil { - return nil, err - } - addr = parsed.Host - basePath = parsed.Path - } - return &url.URL{ - Scheme: proto, - Host: addr, - Path: basePath, - }, nil -} - -func (cli *Client) dialerFromTransport() func(context.Context, string, string) (net.Conn, error) { - if cli.baseTransport == nil || cli.baseTransport.DialContext == nil { - return nil - } - - if cli.baseTransport.TLSClientConfig != nil { - // When using a tls config we don't use the configured dialer but instead a fallback dialer... - // Note: It seems like this should use the normal dialer and wrap the returned net.Conn in a tls.Conn - // I honestly don't know why it doesn't do that, but it doesn't and such a change is entirely unrelated to the change in this commit. - return nil - } - return cli.baseTransport.DialContext -} - -// Dialer returns a dialer for a raw stream connection, with an HTTP/1.1 header, -// that can be used for proxying the daemon connection. It is used by -// ["docker dial-stdio"]. -// -// ["docker dial-stdio"]: https://github.com/docker/cli/pull/1014 -func (cli *Client) Dialer() func(context.Context) (net.Conn, error) { - return cli.dialer() -} - -func (cli *Client) dialer() func(context.Context) (net.Conn, error) { - return func(ctx context.Context) (net.Conn, error) { - if dialFn := cli.dialerFromTransport(); dialFn != nil { - return dialFn(ctx, cli.proto, cli.addr) - } - switch cli.proto { - case "unix": - return net.Dial(cli.proto, cli.addr) - case "npipe": - ctx, cancel := context.WithTimeout(ctx, 32*time.Second) - defer cancel() - return dialPipeContext(ctx, cli.addr) - default: - if tlsConfig := cli.tlsConfig(); tlsConfig != nil { - return tls.Dial(cli.proto, cli.addr, tlsConfig) - } - return net.Dial(cli.proto, cli.addr) - } - } -} diff --git a/vendor/github.com/docker/docker/client/client_deprecated.go b/vendor/github.com/docker/docker/client/client_deprecated.go deleted file mode 100644 index 9e366ce2..00000000 --- a/vendor/github.com/docker/docker/client/client_deprecated.go +++ /dev/null @@ -1,27 +0,0 @@ -package client - -import "net/http" - -// NewClient initializes a new API client for the given host and API version. -// It uses the given http client as transport. -// It also initializes the custom http headers to add to each request. -// -// It won't send any version information if the version number is empty. It is -// highly recommended that you set a version or your client may break if the -// server is upgraded. -// -// Deprecated: use [NewClientWithOpts] passing the [WithHost], [WithVersion], -// [WithHTTPClient] and [WithHTTPHeaders] options. We recommend enabling API -// version negotiation by passing the [WithAPIVersionNegotiation] option instead -// of WithVersion. -func NewClient(host string, version string, client *http.Client, httpHeaders map[string]string) (*Client, error) { - return NewClientWithOpts(WithHost(host), WithVersion(version), WithHTTPClient(client), WithHTTPHeaders(httpHeaders)) -} - -// NewEnvClient initializes a new API client based on environment variables. -// See FromEnv for a list of support environment variables. -// -// Deprecated: use [NewClientWithOpts] passing the [FromEnv] option. -func NewEnvClient() (*Client, error) { - return NewClientWithOpts(FromEnv) -} diff --git a/vendor/github.com/docker/docker/client/client_interfaces.go b/vendor/github.com/docker/docker/client/client_interfaces.go deleted file mode 100644 index df7aad43..00000000 --- a/vendor/github.com/docker/docker/client/client_interfaces.go +++ /dev/null @@ -1,237 +0,0 @@ -package client - -import ( - "context" - "io" - "net" - "net/http" - - "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/build" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/events" - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/image" - "github.com/docker/docker/api/types/network" - "github.com/docker/docker/api/types/registry" - "github.com/docker/docker/api/types/swarm" - "github.com/docker/docker/api/types/system" - "github.com/docker/docker/api/types/volume" - ocispec "github.com/opencontainers/image-spec/specs-go/v1" -) - -// CommonAPIClient is the common methods between stable and experimental versions of APIClient. -// -// Deprecated: use [APIClient] instead. This type will be an alias for [APIClient] in the next release, and removed after. -type CommonAPIClient = stableAPIClient - -// APIClient is an interface that clients that talk with a docker server must implement. -type APIClient interface { - stableAPIClient - CheckpointAPIClient // CheckpointAPIClient is still experimental. -} - -type stableAPIClient interface { - ConfigAPIClient - ContainerAPIClient - DistributionAPIClient - ImageAPIClient - NetworkAPIClient - PluginAPIClient - SystemAPIClient - VolumeAPIClient - ClientVersion() string - DaemonHost() string - HTTPClient() *http.Client - ServerVersion(ctx context.Context) (types.Version, error) - NegotiateAPIVersion(ctx context.Context) - NegotiateAPIVersionPing(types.Ping) - HijackDialer - Dialer() func(context.Context) (net.Conn, error) - Close() error - SwarmManagementAPIClient -} - -// SwarmManagementAPIClient defines all methods for managing Swarm-specific -// objects. -type SwarmManagementAPIClient interface { - SwarmAPIClient - NodeAPIClient - ServiceAPIClient - SecretAPIClient - ConfigAPIClient -} - -// HijackDialer defines methods for a hijack dialer. -type HijackDialer interface { - DialHijack(ctx context.Context, url, proto string, meta map[string][]string) (net.Conn, error) -} - -// ContainerAPIClient defines API client methods for the containers -type ContainerAPIClient interface { - ContainerAttach(ctx context.Context, container string, options container.AttachOptions) (types.HijackedResponse, error) - ContainerCommit(ctx context.Context, container string, options container.CommitOptions) (container.CommitResponse, error) - ContainerCreate(ctx context.Context, config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig, platform *ocispec.Platform, containerName string) (container.CreateResponse, error) - ContainerDiff(ctx context.Context, container string) ([]container.FilesystemChange, error) - ContainerExecAttach(ctx context.Context, execID string, options container.ExecAttachOptions) (types.HijackedResponse, error) - ContainerExecCreate(ctx context.Context, container string, options container.ExecOptions) (container.ExecCreateResponse, error) - ContainerExecInspect(ctx context.Context, execID string) (container.ExecInspect, error) - ContainerExecResize(ctx context.Context, execID string, options container.ResizeOptions) error - ContainerExecStart(ctx context.Context, execID string, options container.ExecStartOptions) error - ContainerExport(ctx context.Context, container string) (io.ReadCloser, error) - ContainerInspect(ctx context.Context, container string) (container.InspectResponse, error) - ContainerInspectWithRaw(ctx context.Context, container string, getSize bool) (container.InspectResponse, []byte, error) - ContainerKill(ctx context.Context, container, signal string) error - ContainerList(ctx context.Context, options container.ListOptions) ([]container.Summary, error) - ContainerLogs(ctx context.Context, container string, options container.LogsOptions) (io.ReadCloser, error) - ContainerPause(ctx context.Context, container string) error - ContainerRemove(ctx context.Context, container string, options container.RemoveOptions) error - ContainerRename(ctx context.Context, container, newContainerName string) error - ContainerResize(ctx context.Context, container string, options container.ResizeOptions) error - ContainerRestart(ctx context.Context, container string, options container.StopOptions) error - ContainerStatPath(ctx context.Context, container, path string) (container.PathStat, error) - ContainerStats(ctx context.Context, container string, stream bool) (container.StatsResponseReader, error) - ContainerStatsOneShot(ctx context.Context, container string) (container.StatsResponseReader, error) - ContainerStart(ctx context.Context, container string, options container.StartOptions) error - ContainerStop(ctx context.Context, container string, options container.StopOptions) error - ContainerTop(ctx context.Context, container string, arguments []string) (container.TopResponse, error) - ContainerUnpause(ctx context.Context, container string) error - ContainerUpdate(ctx context.Context, container string, updateConfig container.UpdateConfig) (container.UpdateResponse, error) - ContainerWait(ctx context.Context, container string, condition container.WaitCondition) (<-chan container.WaitResponse, <-chan error) - CopyFromContainer(ctx context.Context, container, srcPath string) (io.ReadCloser, container.PathStat, error) - CopyToContainer(ctx context.Context, container, path string, content io.Reader, options container.CopyToContainerOptions) error - ContainersPrune(ctx context.Context, pruneFilters filters.Args) (container.PruneReport, error) -} - -// DistributionAPIClient defines API client methods for the registry -type DistributionAPIClient interface { - DistributionInspect(ctx context.Context, image, encodedRegistryAuth string) (registry.DistributionInspect, error) -} - -// ImageAPIClient defines API client methods for the images -type ImageAPIClient interface { - ImageBuild(ctx context.Context, context io.Reader, options build.ImageBuildOptions) (build.ImageBuildResponse, error) - BuildCachePrune(ctx context.Context, opts build.CachePruneOptions) (*build.CachePruneReport, error) - BuildCancel(ctx context.Context, id string) error - ImageCreate(ctx context.Context, parentReference string, options image.CreateOptions) (io.ReadCloser, error) - ImageImport(ctx context.Context, source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) - - ImageList(ctx context.Context, options image.ListOptions) ([]image.Summary, error) - ImagePull(ctx context.Context, ref string, options image.PullOptions) (io.ReadCloser, error) - ImagePush(ctx context.Context, ref string, options image.PushOptions) (io.ReadCloser, error) - ImageRemove(ctx context.Context, image string, options image.RemoveOptions) ([]image.DeleteResponse, error) - ImageSearch(ctx context.Context, term string, options registry.SearchOptions) ([]registry.SearchResult, error) - ImageTag(ctx context.Context, image, ref string) error - ImagesPrune(ctx context.Context, pruneFilter filters.Args) (image.PruneReport, error) - - ImageInspect(ctx context.Context, image string, _ ...ImageInspectOption) (image.InspectResponse, error) - ImageHistory(ctx context.Context, image string, _ ...ImageHistoryOption) ([]image.HistoryResponseItem, error) - ImageLoad(ctx context.Context, input io.Reader, _ ...ImageLoadOption) (image.LoadResponse, error) - ImageSave(ctx context.Context, images []string, _ ...ImageSaveOption) (io.ReadCloser, error) - - ImageAPIClientDeprecated -} - -// ImageAPIClientDeprecated defines deprecated methods of the ImageAPIClient. -type ImageAPIClientDeprecated interface { - // ImageInspectWithRaw returns the image information and its raw representation. - // - // Deprecated: Use [Client.ImageInspect] instead. Raw response can be obtained using the [ImageInspectWithRawResponse] option. - ImageInspectWithRaw(ctx context.Context, image string) (image.InspectResponse, []byte, error) -} - -// NetworkAPIClient defines API client methods for the networks -type NetworkAPIClient interface { - NetworkConnect(ctx context.Context, network, container string, config *network.EndpointSettings) error - NetworkCreate(ctx context.Context, name string, options network.CreateOptions) (network.CreateResponse, error) - NetworkDisconnect(ctx context.Context, network, container string, force bool) error - NetworkInspect(ctx context.Context, network string, options network.InspectOptions) (network.Inspect, error) - NetworkInspectWithRaw(ctx context.Context, network string, options network.InspectOptions) (network.Inspect, []byte, error) - NetworkList(ctx context.Context, options network.ListOptions) ([]network.Summary, error) - NetworkRemove(ctx context.Context, network string) error - NetworksPrune(ctx context.Context, pruneFilter filters.Args) (network.PruneReport, error) -} - -// NodeAPIClient defines API client methods for the nodes -type NodeAPIClient interface { - NodeInspectWithRaw(ctx context.Context, nodeID string) (swarm.Node, []byte, error) - NodeList(ctx context.Context, options swarm.NodeListOptions) ([]swarm.Node, error) - NodeRemove(ctx context.Context, nodeID string, options swarm.NodeRemoveOptions) error - NodeUpdate(ctx context.Context, nodeID string, version swarm.Version, node swarm.NodeSpec) error -} - -// PluginAPIClient defines API client methods for the plugins -type PluginAPIClient interface { - PluginList(ctx context.Context, filter filters.Args) (types.PluginsListResponse, error) - PluginRemove(ctx context.Context, name string, options types.PluginRemoveOptions) error - PluginEnable(ctx context.Context, name string, options types.PluginEnableOptions) error - PluginDisable(ctx context.Context, name string, options types.PluginDisableOptions) error - PluginInstall(ctx context.Context, name string, options types.PluginInstallOptions) (io.ReadCloser, error) - PluginUpgrade(ctx context.Context, name string, options types.PluginInstallOptions) (io.ReadCloser, error) - PluginPush(ctx context.Context, name string, registryAuth string) (io.ReadCloser, error) - PluginSet(ctx context.Context, name string, args []string) error - PluginInspectWithRaw(ctx context.Context, name string) (*types.Plugin, []byte, error) - PluginCreate(ctx context.Context, createContext io.Reader, options types.PluginCreateOptions) error -} - -// ServiceAPIClient defines API client methods for the services -type ServiceAPIClient interface { - ServiceCreate(ctx context.Context, service swarm.ServiceSpec, options swarm.ServiceCreateOptions) (swarm.ServiceCreateResponse, error) - ServiceInspectWithRaw(ctx context.Context, serviceID string, options swarm.ServiceInspectOptions) (swarm.Service, []byte, error) - ServiceList(ctx context.Context, options swarm.ServiceListOptions) ([]swarm.Service, error) - ServiceRemove(ctx context.Context, serviceID string) error - ServiceUpdate(ctx context.Context, serviceID string, version swarm.Version, service swarm.ServiceSpec, options swarm.ServiceUpdateOptions) (swarm.ServiceUpdateResponse, error) - ServiceLogs(ctx context.Context, serviceID string, options container.LogsOptions) (io.ReadCloser, error) - TaskLogs(ctx context.Context, taskID string, options container.LogsOptions) (io.ReadCloser, error) - TaskInspectWithRaw(ctx context.Context, taskID string) (swarm.Task, []byte, error) - TaskList(ctx context.Context, options swarm.TaskListOptions) ([]swarm.Task, error) -} - -// SwarmAPIClient defines API client methods for the swarm -type SwarmAPIClient interface { - SwarmInit(ctx context.Context, req swarm.InitRequest) (string, error) - SwarmJoin(ctx context.Context, req swarm.JoinRequest) error - SwarmGetUnlockKey(ctx context.Context) (swarm.UnlockKeyResponse, error) - SwarmUnlock(ctx context.Context, req swarm.UnlockRequest) error - SwarmLeave(ctx context.Context, force bool) error - SwarmInspect(ctx context.Context) (swarm.Swarm, error) - SwarmUpdate(ctx context.Context, version swarm.Version, swarm swarm.Spec, flags swarm.UpdateFlags) error -} - -// SystemAPIClient defines API client methods for the system -type SystemAPIClient interface { - Events(ctx context.Context, options events.ListOptions) (<-chan events.Message, <-chan error) - Info(ctx context.Context) (system.Info, error) - RegistryLogin(ctx context.Context, auth registry.AuthConfig) (registry.AuthenticateOKBody, error) - DiskUsage(ctx context.Context, options types.DiskUsageOptions) (types.DiskUsage, error) - Ping(ctx context.Context) (types.Ping, error) -} - -// VolumeAPIClient defines API client methods for the volumes -type VolumeAPIClient interface { - VolumeCreate(ctx context.Context, options volume.CreateOptions) (volume.Volume, error) - VolumeInspect(ctx context.Context, volumeID string) (volume.Volume, error) - VolumeInspectWithRaw(ctx context.Context, volumeID string) (volume.Volume, []byte, error) - VolumeList(ctx context.Context, options volume.ListOptions) (volume.ListResponse, error) - VolumeRemove(ctx context.Context, volumeID string, force bool) error - VolumesPrune(ctx context.Context, pruneFilter filters.Args) (volume.PruneReport, error) - VolumeUpdate(ctx context.Context, volumeID string, version swarm.Version, options volume.UpdateOptions) error -} - -// SecretAPIClient defines API client methods for secrets -type SecretAPIClient interface { - SecretList(ctx context.Context, options swarm.SecretListOptions) ([]swarm.Secret, error) - SecretCreate(ctx context.Context, secret swarm.SecretSpec) (swarm.SecretCreateResponse, error) - SecretRemove(ctx context.Context, id string) error - SecretInspectWithRaw(ctx context.Context, name string) (swarm.Secret, []byte, error) - SecretUpdate(ctx context.Context, id string, version swarm.Version, secret swarm.SecretSpec) error -} - -// ConfigAPIClient defines API client methods for configs -type ConfigAPIClient interface { - ConfigList(ctx context.Context, options swarm.ConfigListOptions) ([]swarm.Config, error) - ConfigCreate(ctx context.Context, config swarm.ConfigSpec) (swarm.ConfigCreateResponse, error) - ConfigRemove(ctx context.Context, id string) error - ConfigInspectWithRaw(ctx context.Context, name string) (swarm.Config, []byte, error) - ConfigUpdate(ctx context.Context, id string, version swarm.Version, config swarm.ConfigSpec) error -} diff --git a/vendor/github.com/docker/docker/client/client_unix.go b/vendor/github.com/docker/docker/client/client_unix.go deleted file mode 100644 index 1fb9fbfb..00000000 --- a/vendor/github.com/docker/docker/client/client_unix.go +++ /dev/null @@ -1,18 +0,0 @@ -//go:build !windows - -package client - -import ( - "context" - "net" - "syscall" -) - -// DefaultDockerHost defines OS-specific default host if the DOCKER_HOST -// (EnvOverrideHost) environment variable is unset or empty. -const DefaultDockerHost = "unix:///var/run/docker.sock" - -// dialPipeContext connects to a Windows named pipe. It is not supported on non-Windows. -func dialPipeContext(_ context.Context, _ string) (net.Conn, error) { - return nil, syscall.EAFNOSUPPORT -} diff --git a/vendor/github.com/docker/docker/client/client_windows.go b/vendor/github.com/docker/docker/client/client_windows.go deleted file mode 100644 index b471c061..00000000 --- a/vendor/github.com/docker/docker/client/client_windows.go +++ /dev/null @@ -1,17 +0,0 @@ -package client - -import ( - "context" - "net" - - "github.com/Microsoft/go-winio" -) - -// DefaultDockerHost defines OS-specific default host if the DOCKER_HOST -// (EnvOverrideHost) environment variable is unset or empty. -const DefaultDockerHost = "npipe:////./pipe/docker_engine" - -// dialPipeContext connects to a Windows named pipe. It is not supported on non-Windows. -func dialPipeContext(ctx context.Context, addr string) (net.Conn, error) { - return winio.DialPipeContext(ctx, addr) -} diff --git a/vendor/github.com/docker/docker/client/config_create.go b/vendor/github.com/docker/docker/client/config_create.go deleted file mode 100644 index a39168e2..00000000 --- a/vendor/github.com/docker/docker/client/config_create.go +++ /dev/null @@ -1,24 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - - "github.com/docker/docker/api/types/swarm" -) - -// ConfigCreate creates a new config. -func (cli *Client) ConfigCreate(ctx context.Context, config swarm.ConfigSpec) (swarm.ConfigCreateResponse, error) { - var response swarm.ConfigCreateResponse - if err := cli.NewVersionError(ctx, "1.30", "config create"); err != nil { - return response, err - } - resp, err := cli.post(ctx, "/configs/create", nil, config, nil) - defer ensureReaderClosed(resp) - if err != nil { - return response, err - } - - err = json.NewDecoder(resp.Body).Decode(&response) - return response, err -} diff --git a/vendor/github.com/docker/docker/client/config_inspect.go b/vendor/github.com/docker/docker/client/config_inspect.go deleted file mode 100644 index a9f0a8b0..00000000 --- a/vendor/github.com/docker/docker/client/config_inspect.go +++ /dev/null @@ -1,37 +0,0 @@ -package client - -import ( - "bytes" - "context" - "encoding/json" - "io" - - "github.com/docker/docker/api/types/swarm" -) - -// ConfigInspectWithRaw returns the config information with raw data -func (cli *Client) ConfigInspectWithRaw(ctx context.Context, id string) (swarm.Config, []byte, error) { - id, err := trimID("contig", id) - if err != nil { - return swarm.Config{}, nil, err - } - if err := cli.NewVersionError(ctx, "1.30", "config inspect"); err != nil { - return swarm.Config{}, nil, err - } - resp, err := cli.get(ctx, "/configs/"+id, nil, nil) - defer ensureReaderClosed(resp) - if err != nil { - return swarm.Config{}, nil, err - } - - body, err := io.ReadAll(resp.Body) - if err != nil { - return swarm.Config{}, nil, err - } - - var config swarm.Config - rdr := bytes.NewReader(body) - err = json.NewDecoder(rdr).Decode(&config) - - return config, body, err -} diff --git a/vendor/github.com/docker/docker/client/config_list.go b/vendor/github.com/docker/docker/client/config_list.go deleted file mode 100644 index 6f8a1c21..00000000 --- a/vendor/github.com/docker/docker/client/config_list.go +++ /dev/null @@ -1,37 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/url" - - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/swarm" -) - -// ConfigList returns the list of configs. -func (cli *Client) ConfigList(ctx context.Context, options swarm.ConfigListOptions) ([]swarm.Config, error) { - if err := cli.NewVersionError(ctx, "1.30", "config list"); err != nil { - return nil, err - } - query := url.Values{} - - if options.Filters.Len() > 0 { - filterJSON, err := filters.ToJSON(options.Filters) - if err != nil { - return nil, err - } - - query.Set("filters", filterJSON) - } - - resp, err := cli.get(ctx, "/configs", query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return nil, err - } - - var configs []swarm.Config - err = json.NewDecoder(resp.Body).Decode(&configs) - return configs, err -} diff --git a/vendor/github.com/docker/docker/client/config_remove.go b/vendor/github.com/docker/docker/client/config_remove.go deleted file mode 100644 index 99d33b1c..00000000 --- a/vendor/github.com/docker/docker/client/config_remove.go +++ /dev/null @@ -1,17 +0,0 @@ -package client - -import "context" - -// ConfigRemove removes a config. -func (cli *Client) ConfigRemove(ctx context.Context, id string) error { - id, err := trimID("config", id) - if err != nil { - return err - } - if err := cli.NewVersionError(ctx, "1.30", "config remove"); err != nil { - return err - } - resp, err := cli.delete(ctx, "/configs/"+id, nil, nil) - defer ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/config_update.go b/vendor/github.com/docker/docker/client/config_update.go deleted file mode 100644 index 9bc137f7..00000000 --- a/vendor/github.com/docker/docker/client/config_update.go +++ /dev/null @@ -1,24 +0,0 @@ -package client - -import ( - "context" - "net/url" - - "github.com/docker/docker/api/types/swarm" -) - -// ConfigUpdate attempts to update a config -func (cli *Client) ConfigUpdate(ctx context.Context, id string, version swarm.Version, config swarm.ConfigSpec) error { - id, err := trimID("config", id) - if err != nil { - return err - } - if err := cli.NewVersionError(ctx, "1.30", "config update"); err != nil { - return err - } - query := url.Values{} - query.Set("version", version.String()) - resp, err := cli.post(ctx, "/configs/"+id+"/update", query, config, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/container_attach.go b/vendor/github.com/docker/docker/client/container_attach.go deleted file mode 100644 index 1fb3493e..00000000 --- a/vendor/github.com/docker/docker/client/container_attach.go +++ /dev/null @@ -1,65 +0,0 @@ -package client - -import ( - "context" - "net/http" - "net/url" - - "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/container" -) - -// ContainerAttach attaches a connection to a container in the server. -// It returns a types.HijackedConnection with the hijacked connection -// and the a reader to get output. It's up to the called to close -// the hijacked connection by calling types.HijackedResponse.Close. -// -// The stream format on the response will be in one of two formats: -// -// If the container is using a TTY, there is only a single stream (stdout), and -// data is copied directly from the container output stream, no extra -// multiplexing or headers. -// -// If the container is *not* using a TTY, streams for stdout and stderr are -// multiplexed. -// The format of the multiplexed stream is as follows: -// -// [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}[]byte{OUTPUT} -// -// STREAM_TYPE can be 1 for stdout and 2 for stderr -// -// SIZE1, SIZE2, SIZE3, and SIZE4 are four bytes of uint32 encoded as big endian. -// This is the size of OUTPUT. -// -// You can use github.com/docker/docker/pkg/stdcopy.StdCopy to demultiplex this -// stream. -func (cli *Client) ContainerAttach(ctx context.Context, containerID string, options container.AttachOptions) (types.HijackedResponse, error) { - containerID, err := trimID("container", containerID) - if err != nil { - return types.HijackedResponse{}, err - } - - query := url.Values{} - if options.Stream { - query.Set("stream", "1") - } - if options.Stdin { - query.Set("stdin", "1") - } - if options.Stdout { - query.Set("stdout", "1") - } - if options.Stderr { - query.Set("stderr", "1") - } - if options.DetachKeys != "" { - query.Set("detachKeys", options.DetachKeys) - } - if options.Logs { - query.Set("logs", "1") - } - - return cli.postHijacked(ctx, "/containers/"+containerID+"/attach", query, nil, http.Header{ - "Content-Type": {"text/plain"}, - }) -} diff --git a/vendor/github.com/docker/docker/client/container_commit.go b/vendor/github.com/docker/docker/client/container_commit.go deleted file mode 100644 index 2b5b9852..00000000 --- a/vendor/github.com/docker/docker/client/container_commit.go +++ /dev/null @@ -1,60 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "errors" - "net/url" - - "github.com/distribution/reference" - "github.com/docker/docker/api/types/container" -) - -// ContainerCommit applies changes to a container and creates a new tagged image. -func (cli *Client) ContainerCommit(ctx context.Context, containerID string, options container.CommitOptions) (container.CommitResponse, error) { - containerID, err := trimID("container", containerID) - if err != nil { - return container.CommitResponse{}, err - } - - var repository, tag string - if options.Reference != "" { - ref, err := reference.ParseNormalizedNamed(options.Reference) - if err != nil { - return container.CommitResponse{}, err - } - - if _, isCanonical := ref.(reference.Canonical); isCanonical { - return container.CommitResponse{}, errors.New("refusing to create a tag with a digest reference") - } - ref = reference.TagNameOnly(ref) - - if tagged, ok := ref.(reference.Tagged); ok { - tag = tagged.Tag() - } - repository = ref.Name() - } - - query := url.Values{} - query.Set("container", containerID) - query.Set("repo", repository) - query.Set("tag", tag) - query.Set("comment", options.Comment) - query.Set("author", options.Author) - for _, change := range options.Changes { - query.Add("changes", change) - } - if !options.Pause { - query.Set("pause", "0") - } - - var response container.CommitResponse - resp, err := cli.post(ctx, "/commit", query, options.Config, nil) - defer ensureReaderClosed(resp) - if err != nil { - return response, err - } - - err = json.NewDecoder(resp.Body).Decode(&response) - return response, err -} diff --git a/vendor/github.com/docker/docker/client/container_copy.go b/vendor/github.com/docker/docker/client/container_copy.go deleted file mode 100644 index 7c4130dc..00000000 --- a/vendor/github.com/docker/docker/client/container_copy.go +++ /dev/null @@ -1,104 +0,0 @@ -package client - -import ( - "context" - "encoding/base64" - "encoding/json" - "fmt" - "io" - "net/http" - "net/url" - "path/filepath" - "strings" - - "github.com/docker/docker/api/types/container" -) - -// ContainerStatPath returns stat information about a path inside the container filesystem. -func (cli *Client) ContainerStatPath(ctx context.Context, containerID, path string) (container.PathStat, error) { - containerID, err := trimID("container", containerID) - if err != nil { - return container.PathStat{}, err - } - - query := url.Values{} - query.Set("path", filepath.ToSlash(path)) // Normalize the paths used in the API. - - resp, err := cli.head(ctx, "/containers/"+containerID+"/archive", query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return container.PathStat{}, err - } - return getContainerPathStatFromHeader(resp.Header) -} - -// CopyToContainer copies content into the container filesystem. -// Note that `content` must be a Reader for a TAR archive -func (cli *Client) CopyToContainer(ctx context.Context, containerID, dstPath string, content io.Reader, options container.CopyToContainerOptions) error { - containerID, err := trimID("container", containerID) - if err != nil { - return err - } - - query := url.Values{} - query.Set("path", filepath.ToSlash(dstPath)) // Normalize the paths used in the API. - // Do not allow for an existing directory to be overwritten by a non-directory and vice versa. - if !options.AllowOverwriteDirWithFile { - query.Set("noOverwriteDirNonDir", "true") - } - - if options.CopyUIDGID { - query.Set("copyUIDGID", "true") - } - - response, err := cli.putRaw(ctx, "/containers/"+containerID+"/archive", query, content, nil) - defer ensureReaderClosed(response) - if err != nil { - return err - } - - return nil -} - -// CopyFromContainer gets the content from the container and returns it as a Reader -// for a TAR archive to manipulate it in the host. It's up to the caller to close the reader. -func (cli *Client) CopyFromContainer(ctx context.Context, containerID, srcPath string) (io.ReadCloser, container.PathStat, error) { - containerID, err := trimID("container", containerID) - if err != nil { - return nil, container.PathStat{}, err - } - - query := make(url.Values, 1) - query.Set("path", filepath.ToSlash(srcPath)) // Normalize the paths used in the API. - - resp, err := cli.get(ctx, "/containers/"+containerID+"/archive", query, nil) - if err != nil { - return nil, container.PathStat{}, err - } - - // In order to get the copy behavior right, we need to know information - // about both the source and the destination. The response headers include - // stat info about the source that we can use in deciding exactly how to - // copy it locally. Along with the stat info about the local destination, - // we have everything we need to handle the multiple possibilities there - // can be when copying a file/dir from one location to another file/dir. - stat, err := getContainerPathStatFromHeader(resp.Header) - if err != nil { - return nil, stat, fmt.Errorf("unable to get resource stat from response: %s", err) - } - return resp.Body, stat, err -} - -func getContainerPathStatFromHeader(header http.Header) (container.PathStat, error) { - var stat container.PathStat - - encodedStat := header.Get("X-Docker-Container-Path-Stat") - statDecoder := base64.NewDecoder(base64.StdEncoding, strings.NewReader(encodedStat)) - - err := json.NewDecoder(statDecoder).Decode(&stat) - if err != nil { - err = fmt.Errorf("unable to decode container path stat header: %s", err) - } - - return stat, err -} diff --git a/vendor/github.com/docker/docker/client/container_create.go b/vendor/github.com/docker/docker/client/container_create.go deleted file mode 100644 index 0625cb12..00000000 --- a/vendor/github.com/docker/docker/client/container_create.go +++ /dev/null @@ -1,168 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "errors" - "net/url" - "path" - "sort" - "strings" - - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/network" - "github.com/docker/docker/api/types/versions" - ocispec "github.com/opencontainers/image-spec/specs-go/v1" -) - -// ContainerCreate creates a new container based on the given configuration. -// It can be associated with a name, but it's not mandatory. -func (cli *Client) ContainerCreate(ctx context.Context, config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig, platform *ocispec.Platform, containerName string) (container.CreateResponse, error) { - var response container.CreateResponse - - // Make sure we negotiated (if the client is configured to do so), - // as code below contains API-version specific handling of options. - // - // Normally, version-negotiation (if enabled) would not happen until - // the API request is made. - if err := cli.checkVersion(ctx); err != nil { - return response, err - } - - if err := cli.NewVersionError(ctx, "1.25", "stop timeout"); config != nil && config.StopTimeout != nil && err != nil { - return response, err - } - if err := cli.NewVersionError(ctx, "1.41", "specify container image platform"); platform != nil && err != nil { - return response, err - } - if err := cli.NewVersionError(ctx, "1.44", "specify health-check start interval"); config != nil && config.Healthcheck != nil && config.Healthcheck.StartInterval != 0 && err != nil { - return response, err - } - if err := cli.NewVersionError(ctx, "1.44", "specify mac-address per network"); hasEndpointSpecificMacAddress(networkingConfig) && err != nil { - return response, err - } - - if hostConfig != nil { - if versions.LessThan(cli.ClientVersion(), "1.25") { - // When using API 1.24 and under, the client is responsible for removing the container - hostConfig.AutoRemove = false - } - if versions.GreaterThanOrEqualTo(cli.ClientVersion(), "1.42") || versions.LessThan(cli.ClientVersion(), "1.40") { - // KernelMemory was added in API 1.40, and deprecated in API 1.42 - hostConfig.KernelMemory = 0 - } - if platform != nil && platform.OS == "linux" && versions.LessThan(cli.ClientVersion(), "1.42") { - // When using API under 1.42, the Linux daemon doesn't respect the ConsoleSize - hostConfig.ConsoleSize = [2]uint{0, 0} - } - if versions.LessThan(cli.ClientVersion(), "1.44") { - for _, m := range hostConfig.Mounts { - if m.BindOptions != nil { - // ReadOnlyNonRecursive can be safely ignored when API < 1.44 - if m.BindOptions.ReadOnlyForceRecursive { - return response, errors.New("bind-recursive=readonly requires API v1.44 or later") - } - if m.BindOptions.NonRecursive && versions.LessThan(cli.ClientVersion(), "1.40") { - return response, errors.New("bind-recursive=disabled requires API v1.40 or later") - } - } - } - } - - hostConfig.CapAdd = normalizeCapabilities(hostConfig.CapAdd) - hostConfig.CapDrop = normalizeCapabilities(hostConfig.CapDrop) - } - - // Since API 1.44, the container-wide MacAddress is deprecated and will trigger a WARNING if it's specified. - if versions.GreaterThanOrEqualTo(cli.ClientVersion(), "1.44") { - config.MacAddress = "" //nolint:staticcheck // ignore SA1019: field is deprecated, but still used on API < v1.44. - } - - query := url.Values{} - if p := formatPlatform(platform); p != "" { - query.Set("platform", p) - } - - if containerName != "" { - query.Set("name", containerName) - } - - body := container.CreateRequest{ - Config: config, - HostConfig: hostConfig, - NetworkingConfig: networkingConfig, - } - - resp, err := cli.post(ctx, "/containers/create", query, body, nil) - defer ensureReaderClosed(resp) - if err != nil { - return response, err - } - - err = json.NewDecoder(resp.Body).Decode(&response) - return response, err -} - -// formatPlatform returns a formatted string representing platform (e.g. linux/arm/v7). -// -// Similar to containerd's platforms.Format(), but does allow components to be -// omitted (e.g. pass "architecture" only, without "os": -// https://github.com/containerd/containerd/blob/v1.5.2/platforms/platforms.go#L243-L263 -func formatPlatform(platform *ocispec.Platform) string { - if platform == nil { - return "" - } - return path.Join(platform.OS, platform.Architecture, platform.Variant) -} - -// hasEndpointSpecificMacAddress checks whether one of the endpoint in networkingConfig has a MacAddress defined. -func hasEndpointSpecificMacAddress(networkingConfig *network.NetworkingConfig) bool { - if networkingConfig == nil { - return false - } - for _, endpoint := range networkingConfig.EndpointsConfig { - if endpoint.MacAddress != "" { - return true - } - } - return false -} - -// allCapabilities is a magic value for "all capabilities" -const allCapabilities = "ALL" - -// normalizeCapabilities normalizes capabilities to their canonical form, -// removes duplicates, and sorts the results. -// -// It is similar to [github.com/docker/docker/oci/caps.NormalizeLegacyCapabilities], -// but performs no validation based on supported capabilities. -func normalizeCapabilities(caps []string) []string { - var normalized []string - - unique := make(map[string]struct{}) - for _, c := range caps { - c = normalizeCap(c) - if _, ok := unique[c]; ok { - continue - } - unique[c] = struct{}{} - normalized = append(normalized, c) - } - - sort.Strings(normalized) - return normalized -} - -// normalizeCap normalizes a capability to its canonical format by upper-casing -// and adding a "CAP_" prefix (if not yet present). It also accepts the "ALL" -// magic-value. -func normalizeCap(cap string) string { - cap = strings.ToUpper(cap) - if cap == allCapabilities { - return cap - } - if !strings.HasPrefix(cap, "CAP_") { - cap = "CAP_" + cap - } - return cap -} diff --git a/vendor/github.com/docker/docker/client/container_diff.go b/vendor/github.com/docker/docker/client/container_diff.go deleted file mode 100644 index 3848e311..00000000 --- a/vendor/github.com/docker/docker/client/container_diff.go +++ /dev/null @@ -1,30 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/url" - - "github.com/docker/docker/api/types/container" -) - -// ContainerDiff shows differences in a container filesystem since it was started. -func (cli *Client) ContainerDiff(ctx context.Context, containerID string) ([]container.FilesystemChange, error) { - containerID, err := trimID("container", containerID) - if err != nil { - return nil, err - } - - resp, err := cli.get(ctx, "/containers/"+containerID+"/changes", url.Values{}, nil) - defer ensureReaderClosed(resp) - if err != nil { - return nil, err - } - - var changes []container.FilesystemChange - err = json.NewDecoder(resp.Body).Decode(&changes) - if err != nil { - return nil, err - } - return changes, err -} diff --git a/vendor/github.com/docker/docker/client/container_exec.go b/vendor/github.com/docker/docker/client/container_exec.go deleted file mode 100644 index 8abbf892..00000000 --- a/vendor/github.com/docker/docker/client/container_exec.go +++ /dev/null @@ -1,81 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/http" - - "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/versions" -) - -// ContainerExecCreate creates a new exec configuration to run an exec process. -func (cli *Client) ContainerExecCreate(ctx context.Context, containerID string, options container.ExecOptions) (container.ExecCreateResponse, error) { - containerID, err := trimID("container", containerID) - if err != nil { - return container.ExecCreateResponse{}, err - } - - // Make sure we negotiated (if the client is configured to do so), - // as code below contains API-version specific handling of options. - // - // Normally, version-negotiation (if enabled) would not happen until - // the API request is made. - if err := cli.checkVersion(ctx); err != nil { - return container.ExecCreateResponse{}, err - } - - if err := cli.NewVersionError(ctx, "1.25", "env"); len(options.Env) != 0 && err != nil { - return container.ExecCreateResponse{}, err - } - if versions.LessThan(cli.ClientVersion(), "1.42") { - options.ConsoleSize = nil - } - - resp, err := cli.post(ctx, "/containers/"+containerID+"/exec", nil, options, nil) - defer ensureReaderClosed(resp) - if err != nil { - return container.ExecCreateResponse{}, err - } - - var response container.ExecCreateResponse - err = json.NewDecoder(resp.Body).Decode(&response) - return response, err -} - -// ContainerExecStart starts an exec process already created in the docker host. -func (cli *Client) ContainerExecStart(ctx context.Context, execID string, config container.ExecStartOptions) error { - if versions.LessThan(cli.ClientVersion(), "1.42") { - config.ConsoleSize = nil - } - resp, err := cli.post(ctx, "/exec/"+execID+"/start", nil, config, nil) - ensureReaderClosed(resp) - return err -} - -// ContainerExecAttach attaches a connection to an exec process in the server. -// It returns a types.HijackedConnection with the hijacked connection -// and the a reader to get output. It's up to the called to close -// the hijacked connection by calling types.HijackedResponse.Close. -func (cli *Client) ContainerExecAttach(ctx context.Context, execID string, config container.ExecAttachOptions) (types.HijackedResponse, error) { - if versions.LessThan(cli.ClientVersion(), "1.42") { - config.ConsoleSize = nil - } - return cli.postHijacked(ctx, "/exec/"+execID+"/start", nil, config, http.Header{ - "Content-Type": {"application/json"}, - }) -} - -// ContainerExecInspect returns information about a specific exec process on the docker host. -func (cli *Client) ContainerExecInspect(ctx context.Context, execID string) (container.ExecInspect, error) { - var response container.ExecInspect - resp, err := cli.get(ctx, "/exec/"+execID+"/json", nil, nil) - if err != nil { - return response, err - } - - err = json.NewDecoder(resp.Body).Decode(&response) - ensureReaderClosed(resp) - return response, err -} diff --git a/vendor/github.com/docker/docker/client/container_export.go b/vendor/github.com/docker/docker/client/container_export.go deleted file mode 100644 index 3fc4d570..00000000 --- a/vendor/github.com/docker/docker/client/container_export.go +++ /dev/null @@ -1,24 +0,0 @@ -package client - -import ( - "context" - "io" - "net/url" -) - -// ContainerExport retrieves the raw contents of a container -// and returns them as an io.ReadCloser. It's up to the caller -// to close the stream. -func (cli *Client) ContainerExport(ctx context.Context, containerID string) (io.ReadCloser, error) { - containerID, err := trimID("container", containerID) - if err != nil { - return nil, err - } - - resp, err := cli.get(ctx, "/containers/"+containerID+"/export", url.Values{}, nil) - if err != nil { - return nil, err - } - - return resp.Body, nil -} diff --git a/vendor/github.com/docker/docker/client/container_inspect.go b/vendor/github.com/docker/docker/client/container_inspect.go deleted file mode 100644 index 18ccdf23..00000000 --- a/vendor/github.com/docker/docker/client/container_inspect.go +++ /dev/null @@ -1,57 +0,0 @@ -package client - -import ( - "bytes" - "context" - "encoding/json" - "io" - "net/url" - - "github.com/docker/docker/api/types/container" -) - -// ContainerInspect returns the container information. -func (cli *Client) ContainerInspect(ctx context.Context, containerID string) (container.InspectResponse, error) { - containerID, err := trimID("container", containerID) - if err != nil { - return container.InspectResponse{}, err - } - - resp, err := cli.get(ctx, "/containers/"+containerID+"/json", nil, nil) - defer ensureReaderClosed(resp) - if err != nil { - return container.InspectResponse{}, err - } - - var response container.InspectResponse - err = json.NewDecoder(resp.Body).Decode(&response) - return response, err -} - -// ContainerInspectWithRaw returns the container information and its raw representation. -func (cli *Client) ContainerInspectWithRaw(ctx context.Context, containerID string, getSize bool) (container.InspectResponse, []byte, error) { - containerID, err := trimID("container", containerID) - if err != nil { - return container.InspectResponse{}, nil, err - } - - query := url.Values{} - if getSize { - query.Set("size", "1") - } - resp, err := cli.get(ctx, "/containers/"+containerID+"/json", query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return container.InspectResponse{}, nil, err - } - - body, err := io.ReadAll(resp.Body) - if err != nil { - return container.InspectResponse{}, nil, err - } - - var response container.InspectResponse - rdr := bytes.NewReader(body) - err = json.NewDecoder(rdr).Decode(&response) - return response, body, err -} diff --git a/vendor/github.com/docker/docker/client/container_kill.go b/vendor/github.com/docker/docker/client/container_kill.go deleted file mode 100644 index 251ae479..00000000 --- a/vendor/github.com/docker/docker/client/container_kill.go +++ /dev/null @@ -1,23 +0,0 @@ -package client - -import ( - "context" - "net/url" -) - -// ContainerKill terminates the container process but does not remove the container from the docker host. -func (cli *Client) ContainerKill(ctx context.Context, containerID, signal string) error { - containerID, err := trimID("container", containerID) - if err != nil { - return err - } - - query := url.Values{} - if signal != "" { - query.Set("signal", signal) - } - - resp, err := cli.post(ctx, "/containers/"+containerID+"/kill", query, nil, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/container_list.go b/vendor/github.com/docker/docker/client/container_list.go deleted file mode 100644 index e17b14ac..00000000 --- a/vendor/github.com/docker/docker/client/container_list.go +++ /dev/null @@ -1,56 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/url" - "strconv" - - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/filters" -) - -// ContainerList returns the list of containers in the docker host. -func (cli *Client) ContainerList(ctx context.Context, options container.ListOptions) ([]container.Summary, error) { - query := url.Values{} - - if options.All { - query.Set("all", "1") - } - - if options.Limit > 0 { - query.Set("limit", strconv.Itoa(options.Limit)) - } - - if options.Since != "" { - query.Set("since", options.Since) - } - - if options.Before != "" { - query.Set("before", options.Before) - } - - if options.Size { - query.Set("size", "1") - } - - if options.Filters.Len() > 0 { - //nolint:staticcheck // ignore SA1019 for old code - filterJSON, err := filters.ToParamWithVersion(cli.version, options.Filters) - if err != nil { - return nil, err - } - - query.Set("filters", filterJSON) - } - - resp, err := cli.get(ctx, "/containers/json", query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return nil, err - } - - var containers []container.Summary - err = json.NewDecoder(resp.Body).Decode(&containers) - return containers, err -} diff --git a/vendor/github.com/docker/docker/client/container_logs.go b/vendor/github.com/docker/docker/client/container_logs.go deleted file mode 100644 index 3ea1f68d..00000000 --- a/vendor/github.com/docker/docker/client/container_logs.go +++ /dev/null @@ -1,85 +0,0 @@ -package client - -import ( - "context" - "io" - "net/url" - "time" - - "github.com/docker/docker/api/types/container" - timetypes "github.com/docker/docker/api/types/time" - "github.com/pkg/errors" -) - -// ContainerLogs returns the logs generated by a container in an io.ReadCloser. -// It's up to the caller to close the stream. -// -// The stream format on the response will be in one of two formats: -// -// If the container is using a TTY, there is only a single stream (stdout), and -// data is copied directly from the container output stream, no extra -// multiplexing or headers. -// -// If the container is *not* using a TTY, streams for stdout and stderr are -// multiplexed. -// The format of the multiplexed stream is as follows: -// -// [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}[]byte{OUTPUT} -// -// STREAM_TYPE can be 1 for stdout and 2 for stderr -// -// SIZE1, SIZE2, SIZE3, and SIZE4 are four bytes of uint32 encoded as big endian. -// This is the size of OUTPUT. -// -// You can use github.com/docker/docker/pkg/stdcopy.StdCopy to demultiplex this -// stream. -func (cli *Client) ContainerLogs(ctx context.Context, containerID string, options container.LogsOptions) (io.ReadCloser, error) { - containerID, err := trimID("container", containerID) - if err != nil { - return nil, err - } - - query := url.Values{} - if options.ShowStdout { - query.Set("stdout", "1") - } - - if options.ShowStderr { - query.Set("stderr", "1") - } - - if options.Since != "" { - ts, err := timetypes.GetTimestamp(options.Since, time.Now()) - if err != nil { - return nil, errors.Wrap(err, `invalid value for "since"`) - } - query.Set("since", ts) - } - - if options.Until != "" { - ts, err := timetypes.GetTimestamp(options.Until, time.Now()) - if err != nil { - return nil, errors.Wrap(err, `invalid value for "until"`) - } - query.Set("until", ts) - } - - if options.Timestamps { - query.Set("timestamps", "1") - } - - if options.Details { - query.Set("details", "1") - } - - if options.Follow { - query.Set("follow", "1") - } - query.Set("tail", options.Tail) - - resp, err := cli.get(ctx, "/containers/"+containerID+"/logs", query, nil) - if err != nil { - return nil, err - } - return resp.Body, nil -} diff --git a/vendor/github.com/docker/docker/client/container_pause.go b/vendor/github.com/docker/docker/client/container_pause.go deleted file mode 100644 index 59b3e2d8..00000000 --- a/vendor/github.com/docker/docker/client/container_pause.go +++ /dev/null @@ -1,15 +0,0 @@ -package client - -import "context" - -// ContainerPause pauses the main process of a given container without terminating it. -func (cli *Client) ContainerPause(ctx context.Context, containerID string) error { - containerID, err := trimID("container", containerID) - if err != nil { - return err - } - - resp, err := cli.post(ctx, "/containers/"+containerID+"/pause", nil, nil, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/container_prune.go b/vendor/github.com/docker/docker/client/container_prune.go deleted file mode 100644 index 84fb6bc2..00000000 --- a/vendor/github.com/docker/docker/client/container_prune.go +++ /dev/null @@ -1,35 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "fmt" - - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/filters" -) - -// ContainersPrune requests the daemon to delete unused data -func (cli *Client) ContainersPrune(ctx context.Context, pruneFilters filters.Args) (container.PruneReport, error) { - if err := cli.NewVersionError(ctx, "1.25", "container prune"); err != nil { - return container.PruneReport{}, err - } - - query, err := getFiltersQuery(pruneFilters) - if err != nil { - return container.PruneReport{}, err - } - - resp, err := cli.post(ctx, "/containers/prune", query, nil, nil) - defer ensureReaderClosed(resp) - if err != nil { - return container.PruneReport{}, err - } - - var report container.PruneReport - if err := json.NewDecoder(resp.Body).Decode(&report); err != nil { - return container.PruneReport{}, fmt.Errorf("Error retrieving disk usage: %v", err) - } - - return report, nil -} diff --git a/vendor/github.com/docker/docker/client/container_remove.go b/vendor/github.com/docker/docker/client/container_remove.go deleted file mode 100644 index b1a2ce6b..00000000 --- a/vendor/github.com/docker/docker/client/container_remove.go +++ /dev/null @@ -1,32 +0,0 @@ -package client - -import ( - "context" - "net/url" - - "github.com/docker/docker/api/types/container" -) - -// ContainerRemove kills and removes a container from the docker host. -func (cli *Client) ContainerRemove(ctx context.Context, containerID string, options container.RemoveOptions) error { - containerID, err := trimID("container", containerID) - if err != nil { - return err - } - - query := url.Values{} - if options.RemoveVolumes { - query.Set("v", "1") - } - if options.RemoveLinks { - query.Set("link", "1") - } - - if options.Force { - query.Set("force", "1") - } - - resp, err := cli.delete(ctx, "/containers/"+containerID, query, nil) - defer ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/container_rename.go b/vendor/github.com/docker/docker/client/container_rename.go deleted file mode 100644 index 4c030228..00000000 --- a/vendor/github.com/docker/docker/client/container_rename.go +++ /dev/null @@ -1,20 +0,0 @@ -package client - -import ( - "context" - "net/url" -) - -// ContainerRename changes the name of a given container. -func (cli *Client) ContainerRename(ctx context.Context, containerID, newContainerName string) error { - containerID, err := trimID("container", containerID) - if err != nil { - return err - } - - query := url.Values{} - query.Set("name", newContainerName) - resp, err := cli.post(ctx, "/containers/"+containerID+"/rename", query, nil, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/container_resize.go b/vendor/github.com/docker/docker/client/container_resize.go deleted file mode 100644 index 56b7368b..00000000 --- a/vendor/github.com/docker/docker/client/container_resize.go +++ /dev/null @@ -1,38 +0,0 @@ -package client - -import ( - "context" - "net/url" - "strconv" - - "github.com/docker/docker/api/types/container" -) - -// ContainerResize changes the size of the tty for a container. -func (cli *Client) ContainerResize(ctx context.Context, containerID string, options container.ResizeOptions) error { - containerID, err := trimID("container", containerID) - if err != nil { - return err - } - return cli.resize(ctx, "/containers/"+containerID, options.Height, options.Width) -} - -// ContainerExecResize changes the size of the tty for an exec process running inside a container. -func (cli *Client) ContainerExecResize(ctx context.Context, execID string, options container.ResizeOptions) error { - execID, err := trimID("exec", execID) - if err != nil { - return err - } - return cli.resize(ctx, "/exec/"+execID, options.Height, options.Width) -} - -func (cli *Client) resize(ctx context.Context, basePath string, height, width uint) error { - // FIXME(thaJeztah): the API / backend accepts uint32, but container.ResizeOptions uses uint. - query := url.Values{} - query.Set("h", strconv.FormatUint(uint64(height), 10)) - query.Set("w", strconv.FormatUint(uint64(width), 10)) - - resp, err := cli.post(ctx, basePath+"/resize", query, nil, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/container_restart.go b/vendor/github.com/docker/docker/client/container_restart.go deleted file mode 100644 index 5af07bfc..00000000 --- a/vendor/github.com/docker/docker/client/container_restart.go +++ /dev/null @@ -1,41 +0,0 @@ -package client - -import ( - "context" - "net/url" - "strconv" - - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/versions" -) - -// ContainerRestart stops and starts a container again. -// It makes the daemon wait for the container to be up again for -// a specific amount of time, given the timeout. -func (cli *Client) ContainerRestart(ctx context.Context, containerID string, options container.StopOptions) error { - containerID, err := trimID("container", containerID) - if err != nil { - return err - } - - query := url.Values{} - if options.Timeout != nil { - query.Set("t", strconv.Itoa(*options.Timeout)) - } - if options.Signal != "" { - // Make sure we negotiated (if the client is configured to do so), - // as code below contains API-version specific handling of options. - // - // Normally, version-negotiation (if enabled) would not happen until - // the API request is made. - if err := cli.checkVersion(ctx); err != nil { - return err - } - if versions.GreaterThanOrEqualTo(cli.version, "1.42") { - query.Set("signal", options.Signal) - } - } - resp, err := cli.post(ctx, "/containers/"+containerID+"/restart", query, nil, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/container_start.go b/vendor/github.com/docker/docker/client/container_start.go deleted file mode 100644 index c7206e32..00000000 --- a/vendor/github.com/docker/docker/client/container_start.go +++ /dev/null @@ -1,28 +0,0 @@ -package client - -import ( - "context" - "net/url" - - "github.com/docker/docker/api/types/container" -) - -// ContainerStart sends a request to the docker daemon to start a container. -func (cli *Client) ContainerStart(ctx context.Context, containerID string, options container.StartOptions) error { - containerID, err := trimID("container", containerID) - if err != nil { - return err - } - - query := url.Values{} - if options.CheckpointID != "" { - query.Set("checkpoint", options.CheckpointID) - } - if options.CheckpointDir != "" { - query.Set("checkpoint-dir", options.CheckpointDir) - } - - resp, err := cli.post(ctx, "/containers/"+containerID+"/start", query, nil, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/container_stats.go b/vendor/github.com/docker/docker/client/container_stats.go deleted file mode 100644 index 076954f4..00000000 --- a/vendor/github.com/docker/docker/client/container_stats.go +++ /dev/null @@ -1,56 +0,0 @@ -package client - -import ( - "context" - "net/url" - - "github.com/docker/docker/api/types/container" -) - -// ContainerStats returns near realtime stats for a given container. -// It's up to the caller to close the io.ReadCloser returned. -func (cli *Client) ContainerStats(ctx context.Context, containerID string, stream bool) (container.StatsResponseReader, error) { - containerID, err := trimID("container", containerID) - if err != nil { - return container.StatsResponseReader{}, err - } - - query := url.Values{} - query.Set("stream", "0") - if stream { - query.Set("stream", "1") - } - - resp, err := cli.get(ctx, "/containers/"+containerID+"/stats", query, nil) - if err != nil { - return container.StatsResponseReader{}, err - } - - return container.StatsResponseReader{ - Body: resp.Body, - OSType: resp.Header.Get("Ostype"), - }, nil -} - -// ContainerStatsOneShot gets a single stat entry from a container. -// It differs from `ContainerStats` in that the API should not wait to prime the stats -func (cli *Client) ContainerStatsOneShot(ctx context.Context, containerID string) (container.StatsResponseReader, error) { - containerID, err := trimID("container", containerID) - if err != nil { - return container.StatsResponseReader{}, err - } - - query := url.Values{} - query.Set("stream", "0") - query.Set("one-shot", "1") - - resp, err := cli.get(ctx, "/containers/"+containerID+"/stats", query, nil) - if err != nil { - return container.StatsResponseReader{}, err - } - - return container.StatsResponseReader{ - Body: resp.Body, - OSType: resp.Header.Get("Ostype"), - }, nil -} diff --git a/vendor/github.com/docker/docker/client/container_stop.go b/vendor/github.com/docker/docker/client/container_stop.go deleted file mode 100644 index 175b9c8b..00000000 --- a/vendor/github.com/docker/docker/client/container_stop.go +++ /dev/null @@ -1,45 +0,0 @@ -package client - -import ( - "context" - "net/url" - "strconv" - - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/versions" -) - -// ContainerStop stops a container. In case the container fails to stop -// gracefully within a time frame specified by the timeout argument, -// it is forcefully terminated (killed). -// -// If the timeout is nil, the container's StopTimeout value is used, if set, -// otherwise the engine default. A negative timeout value can be specified, -// meaning no timeout, i.e. no forceful termination is performed. -func (cli *Client) ContainerStop(ctx context.Context, containerID string, options container.StopOptions) error { - containerID, err := trimID("container", containerID) - if err != nil { - return err - } - - query := url.Values{} - if options.Timeout != nil { - query.Set("t", strconv.Itoa(*options.Timeout)) - } - if options.Signal != "" { - // Make sure we negotiated (if the client is configured to do so), - // as code below contains API-version specific handling of options. - // - // Normally, version-negotiation (if enabled) would not happen until - // the API request is made. - if err := cli.checkVersion(ctx); err != nil { - return err - } - if versions.GreaterThanOrEqualTo(cli.version, "1.42") { - query.Set("signal", options.Signal) - } - } - resp, err := cli.post(ctx, "/containers/"+containerID+"/stop", query, nil, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/container_top.go b/vendor/github.com/docker/docker/client/container_top.go deleted file mode 100644 index 5770f9d4..00000000 --- a/vendor/github.com/docker/docker/client/container_top.go +++ /dev/null @@ -1,33 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/url" - "strings" - - "github.com/docker/docker/api/types/container" -) - -// ContainerTop shows process information from within a container. -func (cli *Client) ContainerTop(ctx context.Context, containerID string, arguments []string) (container.TopResponse, error) { - containerID, err := trimID("container", containerID) - if err != nil { - return container.TopResponse{}, err - } - - query := url.Values{} - if len(arguments) > 0 { - query.Set("ps_args", strings.Join(arguments, " ")) - } - - resp, err := cli.get(ctx, "/containers/"+containerID+"/top", query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return container.TopResponse{}, err - } - - var response container.TopResponse - err = json.NewDecoder(resp.Body).Decode(&response) - return response, err -} diff --git a/vendor/github.com/docker/docker/client/container_unpause.go b/vendor/github.com/docker/docker/client/container_unpause.go deleted file mode 100644 index c95f6e3a..00000000 --- a/vendor/github.com/docker/docker/client/container_unpause.go +++ /dev/null @@ -1,15 +0,0 @@ -package client - -import "context" - -// ContainerUnpause resumes the process execution within a container -func (cli *Client) ContainerUnpause(ctx context.Context, containerID string) error { - containerID, err := trimID("container", containerID) - if err != nil { - return err - } - - resp, err := cli.post(ctx, "/containers/"+containerID+"/unpause", nil, nil, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/container_update.go b/vendor/github.com/docker/docker/client/container_update.go deleted file mode 100644 index 10e966d0..00000000 --- a/vendor/github.com/docker/docker/client/container_update.go +++ /dev/null @@ -1,26 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - - "github.com/docker/docker/api/types/container" -) - -// ContainerUpdate updates the resources of a container. -func (cli *Client) ContainerUpdate(ctx context.Context, containerID string, updateConfig container.UpdateConfig) (container.UpdateResponse, error) { - containerID, err := trimID("container", containerID) - if err != nil { - return container.UpdateResponse{}, err - } - - resp, err := cli.post(ctx, "/containers/"+containerID+"/update", nil, updateConfig, nil) - defer ensureReaderClosed(resp) - if err != nil { - return container.UpdateResponse{}, err - } - - var response container.UpdateResponse - err = json.NewDecoder(resp.Body).Decode(&response) - return response, err -} diff --git a/vendor/github.com/docker/docker/client/container_wait.go b/vendor/github.com/docker/docker/client/container_wait.go deleted file mode 100644 index 75c03a12..00000000 --- a/vendor/github.com/docker/docker/client/container_wait.go +++ /dev/null @@ -1,122 +0,0 @@ -package client - -import ( - "bytes" - "context" - "encoding/json" - "errors" - "io" - "net/url" - - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/versions" -) - -const containerWaitErrorMsgLimit = 2 * 1024 /* Max: 2KiB */ - -// ContainerWait waits until the specified container is in a certain state -// indicated by the given condition, either "not-running" (default), -// "next-exit", or "removed". -// -// If this client's API version is before 1.30, condition is ignored and -// ContainerWait will return immediately with the two channels, as the server -// will wait as if the condition were "not-running". -// -// If this client's API version is at least 1.30, ContainerWait blocks until -// the request has been acknowledged by the server (with a response header), -// then returns two channels on which the caller can wait for the exit status -// of the container or an error if there was a problem either beginning the -// wait request or in getting the response. This allows the caller to -// synchronize ContainerWait with other calls, such as specifying a -// "next-exit" condition before issuing a ContainerStart request. -func (cli *Client) ContainerWait(ctx context.Context, containerID string, condition container.WaitCondition) (<-chan container.WaitResponse, <-chan error) { - resultC := make(chan container.WaitResponse) - errC := make(chan error, 1) - - containerID, err := trimID("container", containerID) - if err != nil { - errC <- err - return resultC, errC - } - - // Make sure we negotiated (if the client is configured to do so), - // as code below contains API-version specific handling of options. - // - // Normally, version-negotiation (if enabled) would not happen until - // the API request is made. - if err := cli.checkVersion(ctx); err != nil { - errC <- err - return resultC, errC - } - if versions.LessThan(cli.ClientVersion(), "1.30") { - return cli.legacyContainerWait(ctx, containerID) - } - - query := url.Values{} - if condition != "" { - query.Set("condition", string(condition)) - } - - resp, err := cli.post(ctx, "/containers/"+containerID+"/wait", query, nil, nil) - if err != nil { - defer ensureReaderClosed(resp) - errC <- err - return resultC, errC - } - - go func() { - defer ensureReaderClosed(resp) - - responseText := bytes.NewBuffer(nil) - stream := io.TeeReader(resp.Body, responseText) - - var res container.WaitResponse - if err := json.NewDecoder(stream).Decode(&res); err != nil { - // NOTE(nicks): The /wait API does not work well with HTTP proxies. - // At any time, the proxy could cut off the response stream. - // - // But because the HTTP status has already been written, the proxy's - // only option is to write a plaintext error message. - // - // If there's a JSON parsing error, read the real error message - // off the body and send it to the client. - if errors.As(err, new(*json.SyntaxError)) { - _, _ = io.ReadAll(io.LimitReader(stream, containerWaitErrorMsgLimit)) - errC <- errors.New(responseText.String()) - } else { - errC <- err - } - return - } - - resultC <- res - }() - - return resultC, errC -} - -// legacyContainerWait returns immediately and doesn't have an option to wait -// until the container is removed. -func (cli *Client) legacyContainerWait(ctx context.Context, containerID string) (<-chan container.WaitResponse, <-chan error) { - resultC := make(chan container.WaitResponse) - errC := make(chan error) - - go func() { - resp, err := cli.post(ctx, "/containers/"+containerID+"/wait", nil, nil, nil) - if err != nil { - errC <- err - return - } - defer ensureReaderClosed(resp) - - var res container.WaitResponse - if err := json.NewDecoder(resp.Body).Decode(&res); err != nil { - errC <- err - return - } - - resultC <- res - }() - - return resultC, errC -} diff --git a/vendor/github.com/docker/docker/client/disk_usage.go b/vendor/github.com/docker/docker/client/disk_usage.go deleted file mode 100644 index 729e1057..00000000 --- a/vendor/github.com/docker/docker/client/disk_usage.go +++ /dev/null @@ -1,33 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "fmt" - "net/url" - - "github.com/docker/docker/api/types" -) - -// DiskUsage requests the current data usage from the daemon -func (cli *Client) DiskUsage(ctx context.Context, options types.DiskUsageOptions) (types.DiskUsage, error) { - var query url.Values - if len(options.Types) > 0 { - query = url.Values{} - for _, t := range options.Types { - query.Add("type", string(t)) - } - } - - resp, err := cli.get(ctx, "/system/df", query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return types.DiskUsage{}, err - } - - var du types.DiskUsage - if err := json.NewDecoder(resp.Body).Decode(&du); err != nil { - return types.DiskUsage{}, fmt.Errorf("Error retrieving disk usage: %v", err) - } - return du, nil -} diff --git a/vendor/github.com/docker/docker/client/distribution_inspect.go b/vendor/github.com/docker/docker/client/distribution_inspect.go deleted file mode 100644 index 693c4121..00000000 --- a/vendor/github.com/docker/docker/client/distribution_inspect.go +++ /dev/null @@ -1,39 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/http" - "net/url" - - "github.com/docker/docker/api/types/registry" -) - -// DistributionInspect returns the image digest with the full manifest. -func (cli *Client) DistributionInspect(ctx context.Context, imageRef, encodedRegistryAuth string) (registry.DistributionInspect, error) { - if imageRef == "" { - return registry.DistributionInspect{}, objectNotFoundError{object: "distribution", id: imageRef} - } - - if err := cli.NewVersionError(ctx, "1.30", "distribution inspect"); err != nil { - return registry.DistributionInspect{}, err - } - - var headers http.Header - if encodedRegistryAuth != "" { - headers = http.Header{ - registry.AuthHeader: {encodedRegistryAuth}, - } - } - - // Contact the registry to retrieve digest and platform information - resp, err := cli.get(ctx, "/distribution/"+imageRef+"/json", url.Values{}, headers) - defer ensureReaderClosed(resp) - if err != nil { - return registry.DistributionInspect{}, err - } - - var distributionInspect registry.DistributionInspect - err = json.NewDecoder(resp.Body).Decode(&distributionInspect) - return distributionInspect, err -} diff --git a/vendor/github.com/docker/docker/client/envvars.go b/vendor/github.com/docker/docker/client/envvars.go deleted file mode 100644 index abe122d1..00000000 --- a/vendor/github.com/docker/docker/client/envvars.go +++ /dev/null @@ -1,90 +0,0 @@ -package client - -const ( - // EnvOverrideHost is the name of the environment variable that can be used - // to override the default host to connect to (DefaultDockerHost). - // - // This env-var is read by FromEnv and WithHostFromEnv and when set to a - // non-empty value, takes precedence over the default host (which is platform - // specific), or any host already set. - EnvOverrideHost = "DOCKER_HOST" - - // EnvOverrideAPIVersion is the name of the environment variable that can - // be used to override the API version to use. Value should be - // formatted as MAJOR.MINOR, for example, "1.19". - // - // This env-var is read by FromEnv and WithVersionFromEnv and when set to a - // non-empty value, takes precedence over API version negotiation. - // - // This environment variable should be used for debugging purposes only, as - // it can set the client to use an incompatible (or invalid) API version. - EnvOverrideAPIVersion = "DOCKER_API_VERSION" - - // EnvOverrideCertPath is the name of the environment variable that can be - // used to specify the directory from which to load the TLS certificates - // (ca.pem, cert.pem, key.pem) from. These certificates are used to configure - // the Client for a TCP connection protected by TLS client authentication. - // - // TLS certificate verification is enabled by default if the Client is configured - // to use a TLS connection. Refer to EnvTLSVerify below to learn how to - // disable verification for testing purposes. - // - // WARNING: Access to the remote API is equivalent to root access to the - // host where the daemon runs. Do not expose the API without protection, - // and only if needed. Make sure you are familiar with the "daemon attack - // surface" (https://docs.docker.com/go/attack-surface/). - // - // For local access to the API, it is recommended to connect with the daemon - // using the default local socket connection (on Linux), or the named pipe - // (on Windows). - // - // If you need to access the API of a remote daemon, consider using an SSH - // (ssh://) connection, which is easier to set up, and requires no additional - // configuration if the host is accessible using ssh. - // - // If you cannot use the alternatives above, and you must expose the API over - // a TCP connection, refer to https://docs.docker.com/engine/security/protect-access/ - // to learn how to configure the daemon and client to use a TCP connection - // with TLS client authentication. Make sure you know the differences between - // a regular TLS connection and a TLS connection protected by TLS client - // authentication, and verify that the API cannot be accessed by other clients. - EnvOverrideCertPath = "DOCKER_CERT_PATH" - - // EnvTLSVerify is the name of the environment variable that can be used to - // enable or disable TLS certificate verification. When set to a non-empty - // value, TLS certificate verification is enabled, and the client is configured - // to use a TLS connection, using certificates from the default directories - // (within `~/.docker`); refer to EnvOverrideCertPath above for additional - // details. - // - // WARNING: Access to the remote API is equivalent to root access to the - // host where the daemon runs. Do not expose the API without protection, - // and only if needed. Make sure you are familiar with the "daemon attack - // surface" (https://docs.docker.com/go/attack-surface/). - // - // Before setting up your client and daemon to use a TCP connection with TLS - // client authentication, consider using one of the alternatives mentioned - // in EnvOverrideCertPath above. - // - // Disabling TLS certificate verification (for testing purposes) - // - // TLS certificate verification is enabled by default if the Client is configured - // to use a TLS connection, and it is highly recommended to keep verification - // enabled to prevent machine-in-the-middle attacks. Refer to the documentation - // at https://docs.docker.com/engine/security/protect-access/ and pages linked - // from that page to learn how to configure the daemon and client to use a - // TCP connection with TLS client authentication enabled. - // - // Set the "DOCKER_TLS_VERIFY" environment to an empty string ("") to - // disable TLS certificate verification. Disabling verification is insecure, - // so should only be done for testing purposes. From the Go documentation - // (https://pkg.go.dev/crypto/tls#Config): - // - // InsecureSkipVerify controls whether a client verifies the server's - // certificate chain and host name. If InsecureSkipVerify is true, crypto/tls - // accepts any certificate presented by the server and any host name in that - // certificate. In this mode, TLS is susceptible to machine-in-the-middle - // attacks unless custom verification is used. This should be used only for - // testing or in combination with VerifyConnection or VerifyPeerCertificate. - EnvTLSVerify = "DOCKER_TLS_VERIFY" -) diff --git a/vendor/github.com/docker/docker/client/errors.go b/vendor/github.com/docker/docker/client/errors.go deleted file mode 100644 index 9e3a2538..00000000 --- a/vendor/github.com/docker/docker/client/errors.go +++ /dev/null @@ -1,129 +0,0 @@ -package client - -import ( - "context" - "errors" - "fmt" - "net/http" - - cerrdefs "github.com/containerd/errdefs" - "github.com/containerd/errdefs/pkg/errhttp" - "github.com/docker/docker/api/types/versions" -) - -// errConnectionFailed implements an error returned when connection failed. -type errConnectionFailed struct { - error -} - -// Error returns a string representation of an errConnectionFailed -func (e errConnectionFailed) Error() string { - return e.error.Error() -} - -func (e errConnectionFailed) Unwrap() error { - return e.error -} - -// IsErrConnectionFailed returns true if the error is caused by connection failed. -func IsErrConnectionFailed(err error) bool { - return errors.As(err, &errConnectionFailed{}) -} - -// ErrorConnectionFailed returns an error with host in the error message when connection to docker daemon failed. -// -// Deprecated: this function was only used internally, and will be removed in the next release. -func ErrorConnectionFailed(host string) error { - return connectionFailed(host) -} - -// connectionFailed returns an error with host in the error message when connection -// to docker daemon failed. -func connectionFailed(host string) error { - var err error - if host == "" { - err = errors.New("Cannot connect to the Docker daemon. Is the docker daemon running on this host?") - } else { - err = fmt.Errorf("Cannot connect to the Docker daemon at %s. Is the docker daemon running?", host) - } - return errConnectionFailed{error: err} -} - -// IsErrNotFound returns true if the error is a NotFound error, which is returned -// by the API when some object is not found. It is an alias for [cerrdefs.IsNotFound]. -// -// Deprecated: use [cerrdefs.IsNotFound] instead. -func IsErrNotFound(err error) bool { - return cerrdefs.IsNotFound(err) -} - -type objectNotFoundError struct { - object string - id string -} - -func (e objectNotFoundError) NotFound() {} - -func (e objectNotFoundError) Error() string { - return fmt.Sprintf("Error: No such %s: %s", e.object, e.id) -} - -// NewVersionError returns an error if the APIVersion required is less than the -// current supported version. -// -// It performs API-version negotiation if the Client is configured with this -// option, otherwise it assumes the latest API version is used. -func (cli *Client) NewVersionError(ctx context.Context, APIrequired, feature string) error { - // Make sure we negotiated (if the client is configured to do so), - // as code below contains API-version specific handling of options. - // - // Normally, version-negotiation (if enabled) would not happen until - // the API request is made. - if err := cli.checkVersion(ctx); err != nil { - return err - } - if cli.version != "" && versions.LessThan(cli.version, APIrequired) { - return fmt.Errorf("%q requires API version %s, but the Docker daemon API version is %s", feature, APIrequired, cli.version) - } - return nil -} - -type httpError struct { - err error - errdef error -} - -func (e *httpError) Error() string { - return e.err.Error() -} - -func (e *httpError) Unwrap() error { - return e.err -} - -func (e *httpError) Is(target error) bool { - return errors.Is(e.errdef, target) -} - -// httpErrorFromStatusCode creates an errdef error, based on the provided HTTP status-code -func httpErrorFromStatusCode(err error, statusCode int) error { - if err == nil { - return nil - } - base := errhttp.ToNative(statusCode) - if base != nil { - return &httpError{err: err, errdef: base} - } - - switch { - case statusCode >= http.StatusOK && statusCode < http.StatusBadRequest: - // it's a client error - return err - case statusCode >= http.StatusBadRequest && statusCode < http.StatusInternalServerError: - return &httpError{err: err, errdef: cerrdefs.ErrInvalidArgument} - case statusCode >= http.StatusInternalServerError && statusCode < 600: - return &httpError{err: err, errdef: cerrdefs.ErrInternal} - default: - return &httpError{err: err, errdef: cerrdefs.ErrUnknown} - } -} diff --git a/vendor/github.com/docker/docker/client/events.go b/vendor/github.com/docker/docker/client/events.go deleted file mode 100644 index 498fe463..00000000 --- a/vendor/github.com/docker/docker/client/events.go +++ /dev/null @@ -1,100 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/url" - "time" - - "github.com/docker/docker/api/types/events" - "github.com/docker/docker/api/types/filters" - timetypes "github.com/docker/docker/api/types/time" -) - -// Events returns a stream of events in the daemon. It's up to the caller to close the stream -// by cancelling the context. Once the stream has been completely read an io.EOF error will -// be sent over the error channel. If an error is sent all processing will be stopped. It's up -// to the caller to reopen the stream in the event of an error by reinvoking this method. -func (cli *Client) Events(ctx context.Context, options events.ListOptions) (<-chan events.Message, <-chan error) { - messages := make(chan events.Message) - errs := make(chan error, 1) - - started := make(chan struct{}) - go func() { - defer close(errs) - - query, err := buildEventsQueryParams(cli.version, options) - if err != nil { - close(started) - errs <- err - return - } - - resp, err := cli.get(ctx, "/events", query, nil) - if err != nil { - close(started) - errs <- err - return - } - defer resp.Body.Close() - - decoder := json.NewDecoder(resp.Body) - - close(started) - for { - select { - case <-ctx.Done(): - errs <- ctx.Err() - return - default: - var event events.Message - if err := decoder.Decode(&event); err != nil { - errs <- err - return - } - - select { - case messages <- event: - case <-ctx.Done(): - errs <- ctx.Err() - return - } - } - } - }() - <-started - - return messages, errs -} - -func buildEventsQueryParams(cliVersion string, options events.ListOptions) (url.Values, error) { - query := url.Values{} - ref := time.Now() - - if options.Since != "" { - ts, err := timetypes.GetTimestamp(options.Since, ref) - if err != nil { - return nil, err - } - query.Set("since", ts) - } - - if options.Until != "" { - ts, err := timetypes.GetTimestamp(options.Until, ref) - if err != nil { - return nil, err - } - query.Set("until", ts) - } - - if options.Filters.Len() > 0 { - //nolint:staticcheck // ignore SA1019 for old code - filterJSON, err := filters.ToParamWithVersion(cliVersion, options.Filters) - if err != nil { - return nil, err - } - query.Set("filters", filterJSON) - } - - return query, nil -} diff --git a/vendor/github.com/docker/docker/client/hijack.go b/vendor/github.com/docker/docker/client/hijack.go deleted file mode 100644 index 01d121a6..00000000 --- a/vendor/github.com/docker/docker/client/hijack.go +++ /dev/null @@ -1,139 +0,0 @@ -package client - -import ( - "bufio" - "context" - "fmt" - "net" - "net/http" - "net/url" - "time" - - "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/versions" - "github.com/pkg/errors" - "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" -) - -// postHijacked sends a POST request and hijacks the connection. -func (cli *Client) postHijacked(ctx context.Context, path string, query url.Values, body interface{}, headers map[string][]string) (types.HijackedResponse, error) { - bodyEncoded, err := encodeData(body) - if err != nil { - return types.HijackedResponse{}, err - } - req, err := cli.buildRequest(ctx, http.MethodPost, cli.getAPIPath(ctx, path, query), bodyEncoded, headers) - if err != nil { - return types.HijackedResponse{}, err - } - conn, mediaType, err := setupHijackConn(cli.dialer(), req, "tcp") - if err != nil { - return types.HijackedResponse{}, err - } - - if versions.LessThan(cli.ClientVersion(), "1.42") { - // Prior to 1.42, Content-Type is always set to raw-stream and not relevant - mediaType = "" - } - - return types.NewHijackedResponse(conn, mediaType), nil -} - -// DialHijack returns a hijacked connection with negotiated protocol proto. -func (cli *Client) DialHijack(ctx context.Context, url, proto string, meta map[string][]string) (net.Conn, error) { - req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, http.NoBody) - if err != nil { - return nil, err - } - req = cli.addHeaders(req, meta) - - conn, _, err := setupHijackConn(cli.Dialer(), req, proto) - return conn, err -} - -func setupHijackConn(dialer func(context.Context) (net.Conn, error), req *http.Request, proto string) (_ net.Conn, _ string, retErr error) { - ctx := req.Context() - req.Header.Set("Connection", "Upgrade") - req.Header.Set("Upgrade", proto) - - conn, err := dialer(ctx) - if err != nil { - return nil, "", errors.Wrap(err, "cannot connect to the Docker daemon. Is 'docker daemon' running on this host?") - } - defer func() { - if retErr != nil { - conn.Close() - } - }() - - // When we set up a TCP connection for hijack, there could be long periods - // of inactivity (a long running command with no output) that in certain - // network setups may cause ECONNTIMEOUT, leaving the client in an unknown - // state. Setting TCP KeepAlive on the socket connection will prohibit - // ECONNTIMEOUT unless the socket connection truly is broken - if tcpConn, ok := conn.(*net.TCPConn); ok { - _ = tcpConn.SetKeepAlive(true) - _ = tcpConn.SetKeepAlivePeriod(30 * time.Second) - } - - hc := &hijackedConn{conn, bufio.NewReader(conn)} - - // Server hijacks the connection, error 'connection closed' expected - resp, err := otelhttp.NewTransport(hc).RoundTrip(req) - if err != nil { - return nil, "", err - } - if resp.StatusCode != http.StatusSwitchingProtocols { - _ = resp.Body.Close() - return nil, "", fmt.Errorf("unable to upgrade to %s, received %d", proto, resp.StatusCode) - } - - if hc.r.Buffered() > 0 { - // If there is buffered content, wrap the connection. We return an - // object that implements CloseWrite if the underlying connection - // implements it. - if _, ok := hc.Conn.(types.CloseWriter); ok { - conn = &hijackedConnCloseWriter{hc} - } else { - conn = hc - } - } else { - hc.r.Reset(nil) - } - - return conn, resp.Header.Get("Content-Type"), nil -} - -// hijackedConn wraps a net.Conn and is returned by setupHijackConn in the case -// that a) there was already buffered data in the http layer when Hijack() was -// called, and b) the underlying net.Conn does *not* implement CloseWrite(). -// hijackedConn does not implement CloseWrite() either. -type hijackedConn struct { - net.Conn - r *bufio.Reader -} - -func (c *hijackedConn) RoundTrip(req *http.Request) (*http.Response, error) { - if err := req.Write(c.Conn); err != nil { - return nil, err - } - return http.ReadResponse(c.r, req) -} - -func (c *hijackedConn) Read(b []byte) (int, error) { - return c.r.Read(b) -} - -// hijackedConnCloseWriter is a hijackedConn which additionally implements -// CloseWrite(). It is returned by setupHijackConn in the case that a) there -// was already buffered data in the http layer when Hijack() was called, and b) -// the underlying net.Conn *does* implement CloseWrite(). -type hijackedConnCloseWriter struct { - *hijackedConn -} - -var _ types.CloseWriter = &hijackedConnCloseWriter{} - -func (c *hijackedConnCloseWriter) CloseWrite() error { - conn := c.Conn.(types.CloseWriter) - return conn.CloseWrite() -} diff --git a/vendor/github.com/docker/docker/client/image_build.go b/vendor/github.com/docker/docker/client/image_build.go deleted file mode 100644 index 1ed0878b..00000000 --- a/vendor/github.com/docker/docker/client/image_build.go +++ /dev/null @@ -1,182 +0,0 @@ -package client - -import ( - "context" - "encoding/base64" - "encoding/json" - "io" - "net/http" - "net/url" - "strconv" - "strings" - - "github.com/docker/docker/api/types/build" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/network" -) - -// ImageBuild sends a request to the daemon to build images. -// The Body in the response implements an io.ReadCloser and it's up to the caller to -// close it. -func (cli *Client) ImageBuild(ctx context.Context, buildContext io.Reader, options build.ImageBuildOptions) (build.ImageBuildResponse, error) { - query, err := cli.imageBuildOptionsToQuery(ctx, options) - if err != nil { - return build.ImageBuildResponse{}, err - } - - buf, err := json.Marshal(options.AuthConfigs) - if err != nil { - return build.ImageBuildResponse{}, err - } - - headers := http.Header{} - headers.Add("X-Registry-Config", base64.URLEncoding.EncodeToString(buf)) - headers.Set("Content-Type", "application/x-tar") - - resp, err := cli.postRaw(ctx, "/build", query, buildContext, headers) - if err != nil { - return build.ImageBuildResponse{}, err - } - - return build.ImageBuildResponse{ - Body: resp.Body, - OSType: resp.Header.Get("Ostype"), - }, nil -} - -func (cli *Client) imageBuildOptionsToQuery(ctx context.Context, options build.ImageBuildOptions) (url.Values, error) { - query := url.Values{} - if len(options.Tags) > 0 { - query["t"] = options.Tags - } - if len(options.SecurityOpt) > 0 { - query["securityopt"] = options.SecurityOpt - } - if len(options.ExtraHosts) > 0 { - query["extrahosts"] = options.ExtraHosts - } - if options.SuppressOutput { - query.Set("q", "1") - } - if options.RemoteContext != "" { - query.Set("remote", options.RemoteContext) - } - if options.NoCache { - query.Set("nocache", "1") - } - if !options.Remove { - // only send value when opting out because the daemon's default is - // to remove intermediate containers after a successful build, - // - // TODO(thaJeztah): deprecate "Remove" option, and provide a "NoRemove" or "Keep" option instead. - query.Set("rm", "0") - } - - if options.ForceRemove { - query.Set("forcerm", "1") - } - - if options.PullParent { - query.Set("pull", "1") - } - - if options.Squash { - if err := cli.NewVersionError(ctx, "1.25", "squash"); err != nil { - return query, err - } - query.Set("squash", "1") - } - - if !container.Isolation.IsDefault(options.Isolation) { - query.Set("isolation", string(options.Isolation)) - } - - if options.CPUSetCPUs != "" { - query.Set("cpusetcpus", options.CPUSetCPUs) - } - if options.NetworkMode != "" && options.NetworkMode != network.NetworkDefault { - query.Set("networkmode", options.NetworkMode) - } - if options.CPUSetMems != "" { - query.Set("cpusetmems", options.CPUSetMems) - } - if options.CPUShares != 0 { - query.Set("cpushares", strconv.FormatInt(options.CPUShares, 10)) - } - if options.CPUQuota != 0 { - query.Set("cpuquota", strconv.FormatInt(options.CPUQuota, 10)) - } - if options.CPUPeriod != 0 { - query.Set("cpuperiod", strconv.FormatInt(options.CPUPeriod, 10)) - } - if options.Memory != 0 { - query.Set("memory", strconv.FormatInt(options.Memory, 10)) - } - if options.MemorySwap != 0 { - query.Set("memswap", strconv.FormatInt(options.MemorySwap, 10)) - } - if options.CgroupParent != "" { - query.Set("cgroupparent", options.CgroupParent) - } - if options.ShmSize != 0 { - query.Set("shmsize", strconv.FormatInt(options.ShmSize, 10)) - } - if options.Dockerfile != "" { - query.Set("dockerfile", options.Dockerfile) - } - if options.Target != "" { - query.Set("target", options.Target) - } - if len(options.Ulimits) != 0 { - ulimitsJSON, err := json.Marshal(options.Ulimits) - if err != nil { - return query, err - } - query.Set("ulimits", string(ulimitsJSON)) - } - if len(options.BuildArgs) != 0 { - buildArgsJSON, err := json.Marshal(options.BuildArgs) - if err != nil { - return query, err - } - query.Set("buildargs", string(buildArgsJSON)) - } - if len(options.Labels) != 0 { - labelsJSON, err := json.Marshal(options.Labels) - if err != nil { - return query, err - } - query.Set("labels", string(labelsJSON)) - } - if len(options.CacheFrom) != 0 { - cacheFromJSON, err := json.Marshal(options.CacheFrom) - if err != nil { - return query, err - } - query.Set("cachefrom", string(cacheFromJSON)) - } - if options.SessionID != "" { - query.Set("session", options.SessionID) - } - if options.Platform != "" { - if err := cli.NewVersionError(ctx, "1.32", "platform"); err != nil { - return query, err - } - query.Set("platform", strings.ToLower(options.Platform)) - } - if options.BuildID != "" { - query.Set("buildid", options.BuildID) - } - if options.Version != "" { - query.Set("version", string(options.Version)) - } - - if options.Outputs != nil { - outputsJSON, err := json.Marshal(options.Outputs) - if err != nil { - return query, err - } - query.Set("outputs", string(outputsJSON)) - } - return query, nil -} diff --git a/vendor/github.com/docker/docker/client/image_create.go b/vendor/github.com/docker/docker/client/image_create.go deleted file mode 100644 index 1e044d77..00000000 --- a/vendor/github.com/docker/docker/client/image_create.go +++ /dev/null @@ -1,40 +0,0 @@ -package client - -import ( - "context" - "io" - "net/http" - "net/url" - "strings" - - "github.com/distribution/reference" - "github.com/docker/docker/api/types/image" - "github.com/docker/docker/api/types/registry" -) - -// ImageCreate creates a new image based on the parent options. -// It returns the JSON content in the response body. -func (cli *Client) ImageCreate(ctx context.Context, parentReference string, options image.CreateOptions) (io.ReadCloser, error) { - ref, err := reference.ParseNormalizedNamed(parentReference) - if err != nil { - return nil, err - } - - query := url.Values{} - query.Set("fromImage", ref.Name()) - query.Set("tag", getAPITagFromNamedRef(ref)) - if options.Platform != "" { - query.Set("platform", strings.ToLower(options.Platform)) - } - resp, err := cli.tryImageCreate(ctx, query, options.RegistryAuth) - if err != nil { - return nil, err - } - return resp.Body, nil -} - -func (cli *Client) tryImageCreate(ctx context.Context, query url.Values, registryAuth string) (*http.Response, error) { - return cli.post(ctx, "/images/create", query, nil, http.Header{ - registry.AuthHeader: {registryAuth}, - }) -} diff --git a/vendor/github.com/docker/docker/client/image_history.go b/vendor/github.com/docker/docker/client/image_history.go deleted file mode 100644 index fce8b80e..00000000 --- a/vendor/github.com/docker/docker/client/image_history.go +++ /dev/null @@ -1,56 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "fmt" - "net/url" - - "github.com/docker/docker/api/types/image" - ocispec "github.com/opencontainers/image-spec/specs-go/v1" -) - -// ImageHistoryWithPlatform sets the platform for the image history operation. -func ImageHistoryWithPlatform(platform ocispec.Platform) ImageHistoryOption { - return imageHistoryOptionFunc(func(opt *imageHistoryOpts) error { - if opt.apiOptions.Platform != nil { - return fmt.Errorf("platform already set to %s", *opt.apiOptions.Platform) - } - opt.apiOptions.Platform = &platform - return nil - }) -} - -// ImageHistory returns the changes in an image in history format. -func (cli *Client) ImageHistory(ctx context.Context, imageID string, historyOpts ...ImageHistoryOption) ([]image.HistoryResponseItem, error) { - query := url.Values{} - - var opts imageHistoryOpts - for _, o := range historyOpts { - if err := o.Apply(&opts); err != nil { - return nil, err - } - } - - if opts.apiOptions.Platform != nil { - if err := cli.NewVersionError(ctx, "1.48", "platform"); err != nil { - return nil, err - } - - p, err := encodePlatform(opts.apiOptions.Platform) - if err != nil { - return nil, err - } - query.Set("platform", p) - } - - resp, err := cli.get(ctx, "/images/"+imageID+"/history", query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return nil, err - } - - var history []image.HistoryResponseItem - err = json.NewDecoder(resp.Body).Decode(&history) - return history, err -} diff --git a/vendor/github.com/docker/docker/client/image_history_opts.go b/vendor/github.com/docker/docker/client/image_history_opts.go deleted file mode 100644 index 6d3494dd..00000000 --- a/vendor/github.com/docker/docker/client/image_history_opts.go +++ /dev/null @@ -1,19 +0,0 @@ -package client - -import ( - "github.com/docker/docker/api/types/image" -) - -// ImageHistoryOption is a type representing functional options for the image history operation. -type ImageHistoryOption interface { - Apply(*imageHistoryOpts) error -} -type imageHistoryOptionFunc func(opt *imageHistoryOpts) error - -func (f imageHistoryOptionFunc) Apply(o *imageHistoryOpts) error { - return f(o) -} - -type imageHistoryOpts struct { - apiOptions image.HistoryOptions -} diff --git a/vendor/github.com/docker/docker/client/image_import.go b/vendor/github.com/docker/docker/client/image_import.go deleted file mode 100644 index 5236dbc6..00000000 --- a/vendor/github.com/docker/docker/client/image_import.go +++ /dev/null @@ -1,48 +0,0 @@ -package client - -import ( - "context" - "io" - "net/url" - "strings" - - "github.com/distribution/reference" - "github.com/docker/docker/api/types/image" -) - -// ImageImport creates a new image based on the source options. -// It returns the JSON content in the response body. -func (cli *Client) ImageImport(ctx context.Context, source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) { - if ref != "" { - // Check if the given image name can be resolved - if _, err := reference.ParseNormalizedNamed(ref); err != nil { - return nil, err - } - } - - query := url.Values{} - if source.SourceName != "" { - query.Set("fromSrc", source.SourceName) - } - if ref != "" { - query.Set("repo", ref) - } - if options.Tag != "" { - query.Set("tag", options.Tag) - } - if options.Message != "" { - query.Set("message", options.Message) - } - if options.Platform != "" { - query.Set("platform", strings.ToLower(options.Platform)) - } - for _, change := range options.Changes { - query.Add("changes", change) - } - - resp, err := cli.postRaw(ctx, "/images/create", query, source.Source, nil) - if err != nil { - return nil, err - } - return resp.Body, nil -} diff --git a/vendor/github.com/docker/docker/client/image_inspect.go b/vendor/github.com/docker/docker/client/image_inspect.go deleted file mode 100644 index 4c350031..00000000 --- a/vendor/github.com/docker/docker/client/image_inspect.go +++ /dev/null @@ -1,76 +0,0 @@ -package client - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "io" - "net/url" - - "github.com/docker/docker/api/types/image" -) - -// ImageInspect returns the image information. -func (cli *Client) ImageInspect(ctx context.Context, imageID string, inspectOpts ...ImageInspectOption) (image.InspectResponse, error) { - if imageID == "" { - return image.InspectResponse{}, objectNotFoundError{object: "image", id: imageID} - } - - var opts imageInspectOpts - for _, opt := range inspectOpts { - if err := opt.Apply(&opts); err != nil { - return image.InspectResponse{}, fmt.Errorf("error applying image inspect option: %w", err) - } - } - - query := url.Values{} - if opts.apiOptions.Manifests { - if err := cli.NewVersionError(ctx, "1.48", "manifests"); err != nil { - return image.InspectResponse{}, err - } - query.Set("manifests", "1") - } - - if opts.apiOptions.Platform != nil { - if err := cli.NewVersionError(ctx, "1.49", "platform"); err != nil { - return image.InspectResponse{}, err - } - platform, err := encodePlatform(opts.apiOptions.Platform) - if err != nil { - return image.InspectResponse{}, err - } - query.Set("platform", platform) - } - - resp, err := cli.get(ctx, "/images/"+imageID+"/json", query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return image.InspectResponse{}, err - } - - buf := opts.raw - if buf == nil { - buf = &bytes.Buffer{} - } - - if _, err := io.Copy(buf, resp.Body); err != nil { - return image.InspectResponse{}, err - } - - var response image.InspectResponse - err = json.Unmarshal(buf.Bytes(), &response) - return response, err -} - -// ImageInspectWithRaw returns the image information and its raw representation. -// -// Deprecated: Use [Client.ImageInspect] instead. Raw response can be obtained using the [ImageInspectWithRawResponse] option. -func (cli *Client) ImageInspectWithRaw(ctx context.Context, imageID string) (image.InspectResponse, []byte, error) { - var buf bytes.Buffer - resp, err := cli.ImageInspect(ctx, imageID, ImageInspectWithRawResponse(&buf)) - if err != nil { - return image.InspectResponse{}, nil, err - } - return resp, buf.Bytes(), err -} diff --git a/vendor/github.com/docker/docker/client/image_inspect_opts.go b/vendor/github.com/docker/docker/client/image_inspect_opts.go deleted file mode 100644 index 655cbf0b..00000000 --- a/vendor/github.com/docker/docker/client/image_inspect_opts.go +++ /dev/null @@ -1,62 +0,0 @@ -package client - -import ( - "bytes" - - "github.com/docker/docker/api/types/image" - ocispec "github.com/opencontainers/image-spec/specs-go/v1" -) - -// ImageInspectOption is a type representing functional options for the image inspect operation. -type ImageInspectOption interface { - Apply(*imageInspectOpts) error -} -type imageInspectOptionFunc func(opt *imageInspectOpts) error - -func (f imageInspectOptionFunc) Apply(o *imageInspectOpts) error { - return f(o) -} - -// ImageInspectWithRawResponse instructs the client to additionally store the -// raw inspect response in the provided buffer. -func ImageInspectWithRawResponse(raw *bytes.Buffer) ImageInspectOption { - return imageInspectOptionFunc(func(opts *imageInspectOpts) error { - opts.raw = raw - return nil - }) -} - -// ImageInspectWithManifests sets manifests API option for the image inspect operation. -// This option is only available for API version 1.48 and up. -// With this option set, the image inspect operation response will have the -// [image.InspectResponse.Manifests] field populated if the server is multi-platform capable. -func ImageInspectWithManifests(manifests bool) ImageInspectOption { - return imageInspectOptionFunc(func(clientOpts *imageInspectOpts) error { - clientOpts.apiOptions.Manifests = manifests - return nil - }) -} - -// ImageInspectWithPlatform sets platform API option for the image inspect operation. -// This option is only available for API version 1.49 and up. -// With this option set, the image inspect operation will return information for the -// specified platform variant of the multi-platform image. -func ImageInspectWithPlatform(platform *ocispec.Platform) ImageInspectOption { - return imageInspectOptionFunc(func(clientOpts *imageInspectOpts) error { - clientOpts.apiOptions.Platform = platform - return nil - }) -} - -// ImageInspectWithAPIOpts sets the API options for the image inspect operation. -func ImageInspectWithAPIOpts(opts image.InspectOptions) ImageInspectOption { - return imageInspectOptionFunc(func(clientOpts *imageInspectOpts) error { - clientOpts.apiOptions = opts - return nil - }) -} - -type imageInspectOpts struct { - raw *bytes.Buffer - apiOptions image.InspectOptions -} diff --git a/vendor/github.com/docker/docker/client/image_list.go b/vendor/github.com/docker/docker/client/image_list.go deleted file mode 100644 index ec0a2ad5..00000000 --- a/vendor/github.com/docker/docker/client/image_list.go +++ /dev/null @@ -1,67 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/url" - - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/image" - "github.com/docker/docker/api/types/versions" -) - -// ImageList returns a list of images in the docker host. -// -// Experimental: Setting the [options.Manifest] will populate -// [image.Summary.Manifests] with information about image manifests. -// This is experimental and might change in the future without any backward -// compatibility. -func (cli *Client) ImageList(ctx context.Context, options image.ListOptions) ([]image.Summary, error) { - var images []image.Summary - - // Make sure we negotiated (if the client is configured to do so), - // as code below contains API-version specific handling of options. - // - // Normally, version-negotiation (if enabled) would not happen until - // the API request is made. - if err := cli.checkVersion(ctx); err != nil { - return images, err - } - - query := url.Values{} - - optionFilters := options.Filters - referenceFilters := optionFilters.Get("reference") - if versions.LessThan(cli.version, "1.25") && len(referenceFilters) > 0 { - query.Set("filter", referenceFilters[0]) - for _, filterValue := range referenceFilters { - optionFilters.Del("reference", filterValue) - } - } - if optionFilters.Len() > 0 { - //nolint:staticcheck // ignore SA1019 for old code - filterJSON, err := filters.ToParamWithVersion(cli.version, optionFilters) - if err != nil { - return images, err - } - query.Set("filters", filterJSON) - } - if options.All { - query.Set("all", "1") - } - if options.SharedSize && versions.GreaterThanOrEqualTo(cli.version, "1.42") { - query.Set("shared-size", "1") - } - if options.Manifests && versions.GreaterThanOrEqualTo(cli.version, "1.47") { - query.Set("manifests", "1") - } - - resp, err := cli.get(ctx, "/images/json", query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return images, err - } - - err = json.NewDecoder(resp.Body).Decode(&images) - return images, err -} diff --git a/vendor/github.com/docker/docker/client/image_load.go b/vendor/github.com/docker/docker/client/image_load.go deleted file mode 100644 index 079002e9..00000000 --- a/vendor/github.com/docker/docker/client/image_load.go +++ /dev/null @@ -1,54 +0,0 @@ -package client - -import ( - "context" - "io" - "net/http" - "net/url" - - "github.com/docker/docker/api/types/image" -) - -// ImageLoad loads an image in the docker host from the client host. -// It's up to the caller to close the io.ReadCloser in the -// ImageLoadResponse returned by this function. -// -// Platform is an optional parameter that specifies the platform to load from -// the provided multi-platform image. This is only has effect if the input image -// is a multi-platform image. -func (cli *Client) ImageLoad(ctx context.Context, input io.Reader, loadOpts ...ImageLoadOption) (image.LoadResponse, error) { - var opts imageLoadOpts - for _, opt := range loadOpts { - if err := opt.Apply(&opts); err != nil { - return image.LoadResponse{}, err - } - } - - query := url.Values{} - query.Set("quiet", "0") - if opts.apiOptions.Quiet { - query.Set("quiet", "1") - } - if len(opts.apiOptions.Platforms) > 0 { - if err := cli.NewVersionError(ctx, "1.48", "platform"); err != nil { - return image.LoadResponse{}, err - } - - p, err := encodePlatforms(opts.apiOptions.Platforms...) - if err != nil { - return image.LoadResponse{}, err - } - query["platform"] = p - } - - resp, err := cli.postRaw(ctx, "/images/load", query, input, http.Header{ - "Content-Type": {"application/x-tar"}, - }) - if err != nil { - return image.LoadResponse{}, err - } - return image.LoadResponse{ - Body: resp.Body, - JSON: resp.Header.Get("Content-Type") == "application/json", - }, nil -} diff --git a/vendor/github.com/docker/docker/client/image_load_opts.go b/vendor/github.com/docker/docker/client/image_load_opts.go deleted file mode 100644 index ebcedd41..00000000 --- a/vendor/github.com/docker/docker/client/image_load_opts.go +++ /dev/null @@ -1,41 +0,0 @@ -package client - -import ( - "fmt" - - "github.com/docker/docker/api/types/image" - ocispec "github.com/opencontainers/image-spec/specs-go/v1" -) - -// ImageLoadOption is a type representing functional options for the image load operation. -type ImageLoadOption interface { - Apply(*imageLoadOpts) error -} -type imageLoadOptionFunc func(opt *imageLoadOpts) error - -func (f imageLoadOptionFunc) Apply(o *imageLoadOpts) error { - return f(o) -} - -type imageLoadOpts struct { - apiOptions image.LoadOptions -} - -// ImageLoadWithQuiet sets the quiet option for the image load operation. -func ImageLoadWithQuiet(quiet bool) ImageLoadOption { - return imageLoadOptionFunc(func(opt *imageLoadOpts) error { - opt.apiOptions.Quiet = quiet - return nil - }) -} - -// ImageLoadWithPlatforms sets the platforms to be loaded from the image. -func ImageLoadWithPlatforms(platforms ...ocispec.Platform) ImageLoadOption { - return imageLoadOptionFunc(func(opt *imageLoadOpts) error { - if opt.apiOptions.Platforms != nil { - return fmt.Errorf("platforms already set to %v", opt.apiOptions.Platforms) - } - opt.apiOptions.Platforms = platforms - return nil - }) -} diff --git a/vendor/github.com/docker/docker/client/image_prune.go b/vendor/github.com/docker/docker/client/image_prune.go deleted file mode 100644 index 52e8bcf5..00000000 --- a/vendor/github.com/docker/docker/client/image_prune.go +++ /dev/null @@ -1,35 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "fmt" - - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/image" -) - -// ImagesPrune requests the daemon to delete unused data -func (cli *Client) ImagesPrune(ctx context.Context, pruneFilters filters.Args) (image.PruneReport, error) { - if err := cli.NewVersionError(ctx, "1.25", "image prune"); err != nil { - return image.PruneReport{}, err - } - - query, err := getFiltersQuery(pruneFilters) - if err != nil { - return image.PruneReport{}, err - } - - resp, err := cli.post(ctx, "/images/prune", query, nil, nil) - defer ensureReaderClosed(resp) - if err != nil { - return image.PruneReport{}, err - } - - var report image.PruneReport - if err := json.NewDecoder(resp.Body).Decode(&report); err != nil { - return image.PruneReport{}, fmt.Errorf("Error retrieving disk usage: %v", err) - } - - return report, nil -} diff --git a/vendor/github.com/docker/docker/client/image_pull.go b/vendor/github.com/docker/docker/client/image_pull.go deleted file mode 100644 index ab7606b4..00000000 --- a/vendor/github.com/docker/docker/client/image_pull.go +++ /dev/null @@ -1,64 +0,0 @@ -package client - -import ( - "context" - "io" - "net/url" - "strings" - - cerrdefs "github.com/containerd/errdefs" - "github.com/distribution/reference" - "github.com/docker/docker/api/types/image" -) - -// ImagePull requests the docker host to pull an image from a remote registry. -// It executes the privileged function if the operation is unauthorized -// and it tries one more time. -// It's up to the caller to handle the io.ReadCloser and close it properly. -// -// FIXME(vdemeester): there is currently used in a few way in docker/docker -// - if not in trusted content, ref is used to pass the whole reference, and tag is empty -// - if in trusted content, ref is used to pass the reference name, and tag for the digest -func (cli *Client) ImagePull(ctx context.Context, refStr string, options image.PullOptions) (io.ReadCloser, error) { - ref, err := reference.ParseNormalizedNamed(refStr) - if err != nil { - return nil, err - } - - query := url.Values{} - query.Set("fromImage", ref.Name()) - if !options.All { - query.Set("tag", getAPITagFromNamedRef(ref)) - } - if options.Platform != "" { - query.Set("platform", strings.ToLower(options.Platform)) - } - - resp, err := cli.tryImageCreate(ctx, query, options.RegistryAuth) - if cerrdefs.IsUnauthorized(err) && options.PrivilegeFunc != nil { - newAuthHeader, privilegeErr := options.PrivilegeFunc(ctx) - if privilegeErr != nil { - return nil, privilegeErr - } - resp, err = cli.tryImageCreate(ctx, query, newAuthHeader) - } - if err != nil { - return nil, err - } - return resp.Body, nil -} - -// getAPITagFromNamedRef returns a tag from the specified reference. -// This function is necessary as long as the docker "server" api expects -// digests to be sent as tags and makes a distinction between the name -// and tag/digest part of a reference. -func getAPITagFromNamedRef(ref reference.Named) string { - if digested, ok := ref.(reference.Digested); ok { - return digested.Digest().String() - } - ref = reference.TagNameOnly(ref) - if tagged, ok := ref.(reference.Tagged); ok { - return tagged.Tag() - } - return "" -} diff --git a/vendor/github.com/docker/docker/client/image_push.go b/vendor/github.com/docker/docker/client/image_push.go deleted file mode 100644 index 8dbe0b1e..00000000 --- a/vendor/github.com/docker/docker/client/image_push.go +++ /dev/null @@ -1,81 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "io" - "net/http" - "net/url" - - cerrdefs "github.com/containerd/errdefs" - "github.com/distribution/reference" - "github.com/docker/docker/api/types/image" - "github.com/docker/docker/api/types/registry" -) - -// ImagePush requests the docker host to push an image to a remote registry. -// It executes the privileged function if the operation is unauthorized -// and it tries one more time. -// It's up to the caller to handle the io.ReadCloser and close it properly. -func (cli *Client) ImagePush(ctx context.Context, image string, options image.PushOptions) (io.ReadCloser, error) { - ref, err := reference.ParseNormalizedNamed(image) - if err != nil { - return nil, err - } - - if _, isCanonical := ref.(reference.Canonical); isCanonical { - return nil, errors.New("cannot push a digest reference") - } - - query := url.Values{} - if !options.All { - ref = reference.TagNameOnly(ref) - if tagged, ok := ref.(reference.Tagged); ok { - query.Set("tag", tagged.Tag()) - } - } - - if options.Platform != nil { - if err := cli.NewVersionError(ctx, "1.46", "platform"); err != nil { - return nil, err - } - - p := *options.Platform - pJson, err := json.Marshal(p) - if err != nil { - return nil, fmt.Errorf("invalid platform: %v", err) - } - - query.Set("platform", string(pJson)) - } - - resp, err := cli.tryImagePush(ctx, ref.Name(), query, options.RegistryAuth) - if cerrdefs.IsUnauthorized(err) && options.PrivilegeFunc != nil { - newAuthHeader, privilegeErr := options.PrivilegeFunc(ctx) - if privilegeErr != nil { - return nil, privilegeErr - } - resp, err = cli.tryImagePush(ctx, ref.Name(), query, newAuthHeader) - } - if err != nil { - return nil, err - } - return resp.Body, nil -} - -func (cli *Client) tryImagePush(ctx context.Context, imageID string, query url.Values, registryAuth string) (*http.Response, error) { - // Always send a body (which may be an empty JSON document ("{}")) to prevent - // EOF errors on older daemons which had faulty fallback code for handling - // authentication in the body when no auth-header was set, resulting in; - // - // Error response from daemon: bad parameters and missing X-Registry-Auth: invalid X-Registry-Auth header: EOF - // - // We use [http.NoBody], which gets marshaled to an empty JSON document. - // - // see: https://github.com/moby/moby/commit/ea29dffaa541289591aa44fa85d2a596ce860e16 - return cli.post(ctx, "/images/"+imageID+"/push", query, http.NoBody, http.Header{ - registry.AuthHeader: {registryAuth}, - }) -} diff --git a/vendor/github.com/docker/docker/client/image_remove.go b/vendor/github.com/docker/docker/client/image_remove.go deleted file mode 100644 index 8f357c72..00000000 --- a/vendor/github.com/docker/docker/client/image_remove.go +++ /dev/null @@ -1,39 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/url" - - "github.com/docker/docker/api/types/image" -) - -// ImageRemove removes an image from the docker host. -func (cli *Client) ImageRemove(ctx context.Context, imageID string, options image.RemoveOptions) ([]image.DeleteResponse, error) { - query := url.Values{} - - if options.Force { - query.Set("force", "1") - } - if !options.PruneChildren { - query.Set("noprune", "1") - } - - if len(options.Platforms) > 0 { - p, err := encodePlatforms(options.Platforms...) - if err != nil { - return nil, err - } - query["platforms"] = p - } - - resp, err := cli.delete(ctx, "/images/"+imageID, query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return nil, err - } - - var dels []image.DeleteResponse - err = json.NewDecoder(resp.Body).Decode(&dels) - return dels, err -} diff --git a/vendor/github.com/docker/docker/client/image_save.go b/vendor/github.com/docker/docker/client/image_save.go deleted file mode 100644 index d2102bec..00000000 --- a/vendor/github.com/docker/docker/client/image_save.go +++ /dev/null @@ -1,41 +0,0 @@ -package client - -import ( - "context" - "io" - "net/url" -) - -// ImageSave retrieves one or more images from the docker host as an io.ReadCloser. -// -// Platforms is an optional parameter that specifies the platforms to save from the image. -// This is only has effect if the input image is a multi-platform image. -func (cli *Client) ImageSave(ctx context.Context, imageIDs []string, saveOpts ...ImageSaveOption) (io.ReadCloser, error) { - var opts imageSaveOpts - for _, opt := range saveOpts { - if err := opt.Apply(&opts); err != nil { - return nil, err - } - } - - query := url.Values{ - "names": imageIDs, - } - - if len(opts.apiOptions.Platforms) > 0 { - if err := cli.NewVersionError(ctx, "1.48", "platform"); err != nil { - return nil, err - } - p, err := encodePlatforms(opts.apiOptions.Platforms...) - if err != nil { - return nil, err - } - query["platform"] = p - } - - resp, err := cli.get(ctx, "/images/get", query, nil) - if err != nil { - return nil, err - } - return resp.Body, nil -} diff --git a/vendor/github.com/docker/docker/client/image_save_opts.go b/vendor/github.com/docker/docker/client/image_save_opts.go deleted file mode 100644 index acd8f282..00000000 --- a/vendor/github.com/docker/docker/client/image_save_opts.go +++ /dev/null @@ -1,33 +0,0 @@ -package client - -import ( - "fmt" - - "github.com/docker/docker/api/types/image" - ocispec "github.com/opencontainers/image-spec/specs-go/v1" -) - -type ImageSaveOption interface { - Apply(*imageSaveOpts) error -} - -type imageSaveOptionFunc func(opt *imageSaveOpts) error - -func (f imageSaveOptionFunc) Apply(o *imageSaveOpts) error { - return f(o) -} - -// ImageSaveWithPlatforms sets the platforms to be saved from the image. -func ImageSaveWithPlatforms(platforms ...ocispec.Platform) ImageSaveOption { - return imageSaveOptionFunc(func(opt *imageSaveOpts) error { - if opt.apiOptions.Platforms != nil { - return fmt.Errorf("platforms already set to %v", opt.apiOptions.Platforms) - } - opt.apiOptions.Platforms = platforms - return nil - }) -} - -type imageSaveOpts struct { - apiOptions image.SaveOptions -} diff --git a/vendor/github.com/docker/docker/client/image_search.go b/vendor/github.com/docker/docker/client/image_search.go deleted file mode 100644 index 8f5343b9..00000000 --- a/vendor/github.com/docker/docker/client/image_search.go +++ /dev/null @@ -1,54 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/http" - "net/url" - "strconv" - - cerrdefs "github.com/containerd/errdefs" - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/registry" -) - -// ImageSearch makes the docker host search by a term in a remote registry. -// The list of results is not sorted in any fashion. -func (cli *Client) ImageSearch(ctx context.Context, term string, options registry.SearchOptions) ([]registry.SearchResult, error) { - var results []registry.SearchResult - query := url.Values{} - query.Set("term", term) - if options.Limit > 0 { - query.Set("limit", strconv.Itoa(options.Limit)) - } - - if options.Filters.Len() > 0 { - filterJSON, err := filters.ToJSON(options.Filters) - if err != nil { - return results, err - } - query.Set("filters", filterJSON) - } - - resp, err := cli.tryImageSearch(ctx, query, options.RegistryAuth) - defer ensureReaderClosed(resp) - if cerrdefs.IsUnauthorized(err) && options.PrivilegeFunc != nil { - newAuthHeader, privilegeErr := options.PrivilegeFunc(ctx) - if privilegeErr != nil { - return results, privilegeErr - } - resp, err = cli.tryImageSearch(ctx, query, newAuthHeader) - } - if err != nil { - return results, err - } - - err = json.NewDecoder(resp.Body).Decode(&results) - return results, err -} - -func (cli *Client) tryImageSearch(ctx context.Context, query url.Values, registryAuth string) (*http.Response, error) { - return cli.get(ctx, "/images/search", query, http.Header{ - registry.AuthHeader: {registryAuth}, - }) -} diff --git a/vendor/github.com/docker/docker/client/image_tag.go b/vendor/github.com/docker/docker/client/image_tag.go deleted file mode 100644 index 2bfafc51..00000000 --- a/vendor/github.com/docker/docker/client/image_tag.go +++ /dev/null @@ -1,37 +0,0 @@ -package client - -import ( - "context" - "net/url" - - "github.com/distribution/reference" - "github.com/pkg/errors" -) - -// ImageTag tags an image in the docker host -func (cli *Client) ImageTag(ctx context.Context, source, target string) error { - if _, err := reference.ParseAnyReference(source); err != nil { - return errors.Wrapf(err, "Error parsing reference: %q is not a valid repository/tag", source) - } - - ref, err := reference.ParseNormalizedNamed(target) - if err != nil { - return errors.Wrapf(err, "Error parsing reference: %q is not a valid repository/tag", target) - } - - if _, isCanonical := ref.(reference.Canonical); isCanonical { - return errors.New("refusing to create a tag with a digest reference") - } - - ref = reference.TagNameOnly(ref) - - query := url.Values{} - query.Set("repo", ref.Name()) - if tagged, ok := ref.(reference.Tagged); ok { - query.Set("tag", tagged.Tag()) - } - - resp, err := cli.post(ctx, "/images/"+source+"/tag", query, nil, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/info.go b/vendor/github.com/docker/docker/client/info.go deleted file mode 100644 index ed85d7f8..00000000 --- a/vendor/github.com/docker/docker/client/info.go +++ /dev/null @@ -1,26 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "fmt" - "net/url" - - "github.com/docker/docker/api/types/system" -) - -// Info returns information about the docker server. -func (cli *Client) Info(ctx context.Context) (system.Info, error) { - var info system.Info - resp, err := cli.get(ctx, "/info", url.Values{}, nil) - defer ensureReaderClosed(resp) - if err != nil { - return info, err - } - - if err := json.NewDecoder(resp.Body).Decode(&info); err != nil { - return info, fmt.Errorf("Error reading remote info: %v", err) - } - - return info, nil -} diff --git a/vendor/github.com/docker/docker/client/login.go b/vendor/github.com/docker/docker/client/login.go deleted file mode 100644 index 2d7f1790..00000000 --- a/vendor/github.com/docker/docker/client/login.go +++ /dev/null @@ -1,24 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/url" - - "github.com/docker/docker/api/types/registry" -) - -// RegistryLogin authenticates the docker server with a given docker registry. -// It returns unauthorizedError when the authentication fails. -func (cli *Client) RegistryLogin(ctx context.Context, auth registry.AuthConfig) (registry.AuthenticateOKBody, error) { - resp, err := cli.post(ctx, "/auth", url.Values{}, auth, nil) - defer ensureReaderClosed(resp) - - if err != nil { - return registry.AuthenticateOKBody{}, err - } - - var response registry.AuthenticateOKBody - err = json.NewDecoder(resp.Body).Decode(&response) - return response, err -} diff --git a/vendor/github.com/docker/docker/client/network_connect.go b/vendor/github.com/docker/docker/client/network_connect.go deleted file mode 100644 index f7526c5d..00000000 --- a/vendor/github.com/docker/docker/client/network_connect.go +++ /dev/null @@ -1,28 +0,0 @@ -package client - -import ( - "context" - - "github.com/docker/docker/api/types/network" -) - -// NetworkConnect connects a container to an existent network in the docker host. -func (cli *Client) NetworkConnect(ctx context.Context, networkID, containerID string, config *network.EndpointSettings) error { - networkID, err := trimID("network", networkID) - if err != nil { - return err - } - - containerID, err = trimID("container", containerID) - if err != nil { - return err - } - - nc := network.ConnectOptions{ - Container: containerID, - EndpointConfig: config, - } - resp, err := cli.post(ctx, "/networks/"+networkID+"/connect", nil, nc, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/network_create.go b/vendor/github.com/docker/docker/client/network_create.go deleted file mode 100644 index 6a7f2ea5..00000000 --- a/vendor/github.com/docker/docker/client/network_create.go +++ /dev/null @@ -1,40 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - - "github.com/docker/docker/api/types/network" - "github.com/docker/docker/api/types/versions" -) - -// NetworkCreate creates a new network in the docker host. -func (cli *Client) NetworkCreate(ctx context.Context, name string, options network.CreateOptions) (network.CreateResponse, error) { - // Make sure we negotiated (if the client is configured to do so), - // as code below contains API-version specific handling of options. - // - // Normally, version-negotiation (if enabled) would not happen until - // the API request is made. - if err := cli.checkVersion(ctx); err != nil { - return network.CreateResponse{}, err - } - - networkCreateRequest := network.CreateRequest{ - CreateOptions: options, - Name: name, - } - if versions.LessThan(cli.version, "1.44") { - enabled := true - networkCreateRequest.CheckDuplicate = &enabled //nolint:staticcheck // ignore SA1019: CheckDuplicate is deprecated since API v1.44. - } - - resp, err := cli.post(ctx, "/networks/create", nil, networkCreateRequest, nil) - defer ensureReaderClosed(resp) - if err != nil { - return network.CreateResponse{}, err - } - - var response network.CreateResponse - err = json.NewDecoder(resp.Body).Decode(&response) - return response, err -} diff --git a/vendor/github.com/docker/docker/client/network_disconnect.go b/vendor/github.com/docker/docker/client/network_disconnect.go deleted file mode 100644 index 55f9b6a2..00000000 --- a/vendor/github.com/docker/docker/client/network_disconnect.go +++ /dev/null @@ -1,28 +0,0 @@ -package client - -import ( - "context" - - "github.com/docker/docker/api/types/network" -) - -// NetworkDisconnect disconnects a container from an existent network in the docker host. -func (cli *Client) NetworkDisconnect(ctx context.Context, networkID, containerID string, force bool) error { - networkID, err := trimID("network", networkID) - if err != nil { - return err - } - - containerID, err = trimID("container", containerID) - if err != nil { - return err - } - - nd := network.DisconnectOptions{ - Container: containerID, - Force: force, - } - resp, err := cli.post(ctx, "/networks/"+networkID+"/disconnect", nil, nd, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/network_inspect.go b/vendor/github.com/docker/docker/client/network_inspect.go deleted file mode 100644 index 734ec102..00000000 --- a/vendor/github.com/docker/docker/client/network_inspect.go +++ /dev/null @@ -1,47 +0,0 @@ -package client - -import ( - "bytes" - "context" - "encoding/json" - "io" - "net/url" - - "github.com/docker/docker/api/types/network" -) - -// NetworkInspect returns the information for a specific network configured in the docker host. -func (cli *Client) NetworkInspect(ctx context.Context, networkID string, options network.InspectOptions) (network.Inspect, error) { - networkResource, _, err := cli.NetworkInspectWithRaw(ctx, networkID, options) - return networkResource, err -} - -// NetworkInspectWithRaw returns the information for a specific network configured in the docker host and its raw representation. -func (cli *Client) NetworkInspectWithRaw(ctx context.Context, networkID string, options network.InspectOptions) (network.Inspect, []byte, error) { - networkID, err := trimID("network", networkID) - if err != nil { - return network.Inspect{}, nil, err - } - query := url.Values{} - if options.Verbose { - query.Set("verbose", "true") - } - if options.Scope != "" { - query.Set("scope", options.Scope) - } - - resp, err := cli.get(ctx, "/networks/"+networkID, query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return network.Inspect{}, nil, err - } - - raw, err := io.ReadAll(resp.Body) - if err != nil { - return network.Inspect{}, nil, err - } - - var nw network.Inspect - err = json.NewDecoder(bytes.NewReader(raw)).Decode(&nw) - return nw, raw, err -} diff --git a/vendor/github.com/docker/docker/client/network_list.go b/vendor/github.com/docker/docker/client/network_list.go deleted file mode 100644 index 8d933619..00000000 --- a/vendor/github.com/docker/docker/client/network_list.go +++ /dev/null @@ -1,32 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/url" - - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/network" -) - -// NetworkList returns the list of networks configured in the docker host. -func (cli *Client) NetworkList(ctx context.Context, options network.ListOptions) ([]network.Summary, error) { - query := url.Values{} - if options.Filters.Len() > 0 { - //nolint:staticcheck // ignore SA1019 for old code - filterJSON, err := filters.ToParamWithVersion(cli.version, options.Filters) - if err != nil { - return nil, err - } - - query.Set("filters", filterJSON) - } - var networkResources []network.Summary - resp, err := cli.get(ctx, "/networks", query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return networkResources, err - } - err = json.NewDecoder(resp.Body).Decode(&networkResources) - return networkResources, err -} diff --git a/vendor/github.com/docker/docker/client/network_prune.go b/vendor/github.com/docker/docker/client/network_prune.go deleted file mode 100644 index 7835fe90..00000000 --- a/vendor/github.com/docker/docker/client/network_prune.go +++ /dev/null @@ -1,35 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "fmt" - - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/network" -) - -// NetworksPrune requests the daemon to delete unused networks -func (cli *Client) NetworksPrune(ctx context.Context, pruneFilters filters.Args) (network.PruneReport, error) { - if err := cli.NewVersionError(ctx, "1.25", "network prune"); err != nil { - return network.PruneReport{}, err - } - - query, err := getFiltersQuery(pruneFilters) - if err != nil { - return network.PruneReport{}, err - } - - resp, err := cli.post(ctx, "/networks/prune", query, nil, nil) - defer ensureReaderClosed(resp) - if err != nil { - return network.PruneReport{}, err - } - - var report network.PruneReport - if err := json.NewDecoder(resp.Body).Decode(&report); err != nil { - return network.PruneReport{}, fmt.Errorf("Error retrieving network prune report: %v", err) - } - - return report, nil -} diff --git a/vendor/github.com/docker/docker/client/network_remove.go b/vendor/github.com/docker/docker/client/network_remove.go deleted file mode 100644 index 9b164d3e..00000000 --- a/vendor/github.com/docker/docker/client/network_remove.go +++ /dev/null @@ -1,14 +0,0 @@ -package client - -import "context" - -// NetworkRemove removes an existent network from the docker host. -func (cli *Client) NetworkRemove(ctx context.Context, networkID string) error { - networkID, err := trimID("network", networkID) - if err != nil { - return err - } - resp, err := cli.delete(ctx, "/networks/"+networkID, nil, nil) - defer ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/node_inspect.go b/vendor/github.com/docker/docker/client/node_inspect.go deleted file mode 100644 index dd1f1f8a..00000000 --- a/vendor/github.com/docker/docker/client/node_inspect.go +++ /dev/null @@ -1,33 +0,0 @@ -package client - -import ( - "bytes" - "context" - "encoding/json" - "io" - - "github.com/docker/docker/api/types/swarm" -) - -// NodeInspectWithRaw returns the node information. -func (cli *Client) NodeInspectWithRaw(ctx context.Context, nodeID string) (swarm.Node, []byte, error) { - nodeID, err := trimID("node", nodeID) - if err != nil { - return swarm.Node{}, nil, err - } - resp, err := cli.get(ctx, "/nodes/"+nodeID, nil, nil) - defer ensureReaderClosed(resp) - if err != nil { - return swarm.Node{}, nil, err - } - - body, err := io.ReadAll(resp.Body) - if err != nil { - return swarm.Node{}, nil, err - } - - var response swarm.Node - rdr := bytes.NewReader(body) - err = json.NewDecoder(rdr).Decode(&response) - return response, body, err -} diff --git a/vendor/github.com/docker/docker/client/node_list.go b/vendor/github.com/docker/docker/client/node_list.go deleted file mode 100644 index 3b393ffe..00000000 --- a/vendor/github.com/docker/docker/client/node_list.go +++ /dev/null @@ -1,34 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/url" - - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/swarm" -) - -// NodeList returns the list of nodes. -func (cli *Client) NodeList(ctx context.Context, options swarm.NodeListOptions) ([]swarm.Node, error) { - query := url.Values{} - - if options.Filters.Len() > 0 { - filterJSON, err := filters.ToJSON(options.Filters) - if err != nil { - return nil, err - } - - query.Set("filters", filterJSON) - } - - resp, err := cli.get(ctx, "/nodes", query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return nil, err - } - - var nodes []swarm.Node - err = json.NewDecoder(resp.Body).Decode(&nodes) - return nodes, err -} diff --git a/vendor/github.com/docker/docker/client/node_remove.go b/vendor/github.com/docker/docker/client/node_remove.go deleted file mode 100644 index 644fe138..00000000 --- a/vendor/github.com/docker/docker/client/node_remove.go +++ /dev/null @@ -1,25 +0,0 @@ -package client - -import ( - "context" - "net/url" - - "github.com/docker/docker/api/types/swarm" -) - -// NodeRemove removes a Node. -func (cli *Client) NodeRemove(ctx context.Context, nodeID string, options swarm.NodeRemoveOptions) error { - nodeID, err := trimID("node", nodeID) - if err != nil { - return err - } - - query := url.Values{} - if options.Force { - query.Set("force", "1") - } - - resp, err := cli.delete(ctx, "/nodes/"+nodeID, query, nil) - defer ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/node_update.go b/vendor/github.com/docker/docker/client/node_update.go deleted file mode 100644 index 62af964c..00000000 --- a/vendor/github.com/docker/docker/client/node_update.go +++ /dev/null @@ -1,22 +0,0 @@ -package client - -import ( - "context" - "net/url" - - "github.com/docker/docker/api/types/swarm" -) - -// NodeUpdate updates a Node. -func (cli *Client) NodeUpdate(ctx context.Context, nodeID string, version swarm.Version, node swarm.NodeSpec) error { - nodeID, err := trimID("node", nodeID) - if err != nil { - return err - } - - query := url.Values{} - query.Set("version", version.String()) - resp, err := cli.post(ctx, "/nodes/"+nodeID+"/update", query, node, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/options.go b/vendor/github.com/docker/docker/client/options.go deleted file mode 100644 index 6f68fc2b..00000000 --- a/vendor/github.com/docker/docker/client/options.go +++ /dev/null @@ -1,240 +0,0 @@ -package client - -import ( - "context" - "net" - "net/http" - "os" - "path/filepath" - "strings" - "time" - - "github.com/docker/go-connections/sockets" - "github.com/docker/go-connections/tlsconfig" - "github.com/pkg/errors" - "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" - "go.opentelemetry.io/otel/trace" -) - -// Opt is a configuration option to initialize a [Client]. -type Opt func(*Client) error - -// FromEnv configures the client with values from environment variables. It -// is the equivalent of using the [WithTLSClientConfigFromEnv], [WithHostFromEnv], -// and [WithVersionFromEnv] options. -// -// FromEnv uses the following environment variables: -// -// - DOCKER_HOST ([EnvOverrideHost]) to set the URL to the docker server. -// - DOCKER_API_VERSION ([EnvOverrideAPIVersion]) to set the version of the -// API to use, leave empty for latest. -// - DOCKER_CERT_PATH ([EnvOverrideCertPath]) to specify the directory from -// which to load the TLS certificates ("ca.pem", "cert.pem", "key.pem'). -// - DOCKER_TLS_VERIFY ([EnvTLSVerify]) to enable or disable TLS verification -// (off by default). -func FromEnv(c *Client) error { - ops := []Opt{ - WithTLSClientConfigFromEnv(), - WithHostFromEnv(), - WithVersionFromEnv(), - } - for _, op := range ops { - if err := op(c); err != nil { - return err - } - } - return nil -} - -// WithDialContext applies the dialer to the client transport. This can be -// used to set the Timeout and KeepAlive settings of the client. It returns -// an error if the client does not have a [http.Transport] configured. -func WithDialContext(dialContext func(ctx context.Context, network, addr string) (net.Conn, error)) Opt { - return func(c *Client) error { - if transport, ok := c.client.Transport.(*http.Transport); ok { - transport.DialContext = dialContext - return nil - } - return errors.Errorf("cannot apply dialer to transport: %T", c.client.Transport) - } -} - -// WithHost overrides the client host with the specified one. -func WithHost(host string) Opt { - return func(c *Client) error { - hostURL, err := ParseHostURL(host) - if err != nil { - return err - } - c.host = host - c.proto = hostURL.Scheme - c.addr = hostURL.Host - c.basePath = hostURL.Path - if transport, ok := c.client.Transport.(*http.Transport); ok { - return sockets.ConfigureTransport(transport, c.proto, c.addr) - } - return errors.Errorf("cannot apply host to transport: %T", c.client.Transport) - } -} - -// WithHostFromEnv overrides the client host with the host specified in the -// DOCKER_HOST ([EnvOverrideHost]) environment variable. If DOCKER_HOST is not set, -// or set to an empty value, the host is not modified. -func WithHostFromEnv() Opt { - return func(c *Client) error { - if host := os.Getenv(EnvOverrideHost); host != "" { - return WithHost(host)(c) - } - return nil - } -} - -// WithHTTPClient overrides the client's HTTP client with the specified one. -func WithHTTPClient(client *http.Client) Opt { - return func(c *Client) error { - if client != nil { - c.client = client - } - return nil - } -} - -// WithTimeout configures the time limit for requests made by the HTTP client. -func WithTimeout(timeout time.Duration) Opt { - return func(c *Client) error { - c.client.Timeout = timeout - return nil - } -} - -// WithUserAgent configures the User-Agent header to use for HTTP requests. -// It overrides any User-Agent set in headers. When set to an empty string, -// the User-Agent header is removed, and no header is sent. -func WithUserAgent(ua string) Opt { - return func(c *Client) error { - c.userAgent = &ua - return nil - } -} - -// WithHTTPHeaders appends custom HTTP headers to the client's default headers. -// It does not allow for built-in headers (such as "User-Agent", if set) to -// be overridden. Also see [WithUserAgent]. -func WithHTTPHeaders(headers map[string]string) Opt { - return func(c *Client) error { - c.customHTTPHeaders = headers - return nil - } -} - -// WithScheme overrides the client scheme with the specified one. -func WithScheme(scheme string) Opt { - return func(c *Client) error { - c.scheme = scheme - return nil - } -} - -// WithTLSClientConfig applies a TLS config to the client transport. -func WithTLSClientConfig(cacertPath, certPath, keyPath string) Opt { - return func(c *Client) error { - transport, ok := c.client.Transport.(*http.Transport) - if !ok { - return errors.Errorf("cannot apply tls config to transport: %T", c.client.Transport) - } - config, err := tlsconfig.Client(tlsconfig.Options{ - CAFile: cacertPath, - CertFile: certPath, - KeyFile: keyPath, - ExclusiveRootPools: true, - }) - if err != nil { - return errors.Wrap(err, "failed to create tls config") - } - transport.TLSClientConfig = config - return nil - } -} - -// WithTLSClientConfigFromEnv configures the client's TLS settings with the -// settings in the DOCKER_CERT_PATH ([EnvOverrideCertPath]) and DOCKER_TLS_VERIFY -// ([EnvTLSVerify]) environment variables. If DOCKER_CERT_PATH is not set or empty, -// TLS configuration is not modified. -// -// WithTLSClientConfigFromEnv uses the following environment variables: -// -// - DOCKER_CERT_PATH ([EnvOverrideCertPath]) to specify the directory from -// which to load the TLS certificates ("ca.pem", "cert.pem", "key.pem"). -// - DOCKER_TLS_VERIFY ([EnvTLSVerify]) to enable or disable TLS verification -// (off by default). -func WithTLSClientConfigFromEnv() Opt { - return func(c *Client) error { - dockerCertPath := os.Getenv(EnvOverrideCertPath) - if dockerCertPath == "" { - return nil - } - tlsc, err := tlsconfig.Client(tlsconfig.Options{ - CAFile: filepath.Join(dockerCertPath, "ca.pem"), - CertFile: filepath.Join(dockerCertPath, "cert.pem"), - KeyFile: filepath.Join(dockerCertPath, "key.pem"), - InsecureSkipVerify: os.Getenv(EnvTLSVerify) == "", - }) - if err != nil { - return err - } - - c.client = &http.Client{ - Transport: &http.Transport{TLSClientConfig: tlsc}, - CheckRedirect: CheckRedirect, - } - return nil - } -} - -// WithVersion overrides the client version with the specified one. If an empty -// version is provided, the value is ignored to allow version negotiation -// (see [WithAPIVersionNegotiation]). -func WithVersion(version string) Opt { - return func(c *Client) error { - if v := strings.TrimPrefix(version, "v"); v != "" { - c.version = v - c.manualOverride = true - } - return nil - } -} - -// WithVersionFromEnv overrides the client version with the version specified in -// the DOCKER_API_VERSION ([EnvOverrideAPIVersion]) environment variable. -// If DOCKER_API_VERSION is not set, or set to an empty value, the version -// is not modified. -func WithVersionFromEnv() Opt { - return func(c *Client) error { - return WithVersion(os.Getenv(EnvOverrideAPIVersion))(c) - } -} - -// WithAPIVersionNegotiation enables automatic API version negotiation for the client. -// With this option enabled, the client automatically negotiates the API version -// to use when making requests. API version negotiation is performed on the first -// request; subsequent requests do not re-negotiate. -func WithAPIVersionNegotiation() Opt { - return func(c *Client) error { - c.negotiateVersion = true - return nil - } -} - -// WithTraceProvider sets the trace provider for the client. -// If this is not set then the global trace provider will be used. -func WithTraceProvider(provider trace.TracerProvider) Opt { - return WithTraceOptions(otelhttp.WithTracerProvider(provider)) -} - -// WithTraceOptions sets tracing span options for the client. -func WithTraceOptions(opts ...otelhttp.Option) Opt { - return func(c *Client) error { - c.traceOpts = append(c.traceOpts, opts...) - return nil - } -} diff --git a/vendor/github.com/docker/docker/client/ping.go b/vendor/github.com/docker/docker/client/ping.go deleted file mode 100644 index 385fdf05..00000000 --- a/vendor/github.com/docker/docker/client/ping.go +++ /dev/null @@ -1,81 +0,0 @@ -package client - -import ( - "context" - "net/http" - "path" - "strings" - - "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/build" - "github.com/docker/docker/api/types/swarm" -) - -// Ping pings the server and returns the value of the "Docker-Experimental", -// "Builder-Version", "OS-Type" & "API-Version" headers. It attempts to use -// a HEAD request on the endpoint, but falls back to GET if HEAD is not supported -// by the daemon. It ignores internal server errors returned by the API, which -// may be returned if the daemon is in an unhealthy state, but returns errors -// for other non-success status codes, failing to connect to the API, or failing -// to parse the API response. -func (cli *Client) Ping(ctx context.Context) (types.Ping, error) { - var ping types.Ping - - // Using cli.buildRequest() + cli.doRequest() instead of cli.sendRequest() - // because ping requests are used during API version negotiation, so we want - // to hit the non-versioned /_ping endpoint, not /v1.xx/_ping - req, err := cli.buildRequest(ctx, http.MethodHead, path.Join(cli.basePath, "/_ping"), nil, nil) - if err != nil { - return ping, err - } - resp, err := cli.doRequest(req) - if err != nil { - if IsErrConnectionFailed(err) { - return ping, err - } - // We managed to connect, but got some error; continue and try GET request. - } else { - defer ensureReaderClosed(resp) - switch resp.StatusCode { - case http.StatusOK, http.StatusInternalServerError: - // Server handled the request, so parse the response - return parsePingResponse(cli, resp) - } - } - - // HEAD failed; fallback to GET. - req.Method = http.MethodGet - resp, err = cli.doRequest(req) - defer ensureReaderClosed(resp) - if err != nil { - return ping, err - } - return parsePingResponse(cli, resp) -} - -func parsePingResponse(cli *Client, resp *http.Response) (types.Ping, error) { - if resp == nil { - return types.Ping{}, nil - } - - var ping types.Ping - if resp.Header == nil { - return ping, cli.checkResponseErr(resp) - } - ping.APIVersion = resp.Header.Get("Api-Version") - ping.OSType = resp.Header.Get("Ostype") - if resp.Header.Get("Docker-Experimental") == "true" { - ping.Experimental = true - } - if bv := resp.Header.Get("Builder-Version"); bv != "" { - ping.BuilderVersion = build.BuilderVersion(bv) - } - if si := resp.Header.Get("Swarm"); si != "" { - state, role, _ := strings.Cut(si, "/") - ping.SwarmStatus = &swarm.Status{ - NodeState: swarm.LocalNodeState(state), - ControlAvailable: role == "manager", - } - } - return ping, cli.checkResponseErr(resp) -} diff --git a/vendor/github.com/docker/docker/client/plugin_create.go b/vendor/github.com/docker/docker/client/plugin_create.go deleted file mode 100644 index eaba7ee6..00000000 --- a/vendor/github.com/docker/docker/client/plugin_create.go +++ /dev/null @@ -1,23 +0,0 @@ -package client - -import ( - "context" - "io" - "net/http" - "net/url" - - "github.com/docker/docker/api/types" -) - -// PluginCreate creates a plugin -func (cli *Client) PluginCreate(ctx context.Context, createContext io.Reader, createOptions types.PluginCreateOptions) error { - headers := http.Header(make(map[string][]string)) - headers.Set("Content-Type", "application/x-tar") - - query := url.Values{} - query.Set("name", createOptions.RepoName) - - resp, err := cli.postRaw(ctx, "/plugins/create", query, createContext, headers) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/plugin_disable.go b/vendor/github.com/docker/docker/client/plugin_disable.go deleted file mode 100644 index 4049b1b6..00000000 --- a/vendor/github.com/docker/docker/client/plugin_disable.go +++ /dev/null @@ -1,23 +0,0 @@ -package client - -import ( - "context" - "net/url" - - "github.com/docker/docker/api/types" -) - -// PluginDisable disables a plugin -func (cli *Client) PluginDisable(ctx context.Context, name string, options types.PluginDisableOptions) error { - name, err := trimID("plugin", name) - if err != nil { - return err - } - query := url.Values{} - if options.Force { - query.Set("force", "1") - } - resp, err := cli.post(ctx, "/plugins/"+name+"/disable", query, nil, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/plugin_enable.go b/vendor/github.com/docker/docker/client/plugin_enable.go deleted file mode 100644 index 61185693..00000000 --- a/vendor/github.com/docker/docker/client/plugin_enable.go +++ /dev/null @@ -1,23 +0,0 @@ -package client - -import ( - "context" - "net/url" - "strconv" - - "github.com/docker/docker/api/types" -) - -// PluginEnable enables a plugin -func (cli *Client) PluginEnable(ctx context.Context, name string, options types.PluginEnableOptions) error { - name, err := trimID("plugin", name) - if err != nil { - return err - } - query := url.Values{} - query.Set("timeout", strconv.Itoa(options.Timeout)) - - resp, err := cli.post(ctx, "/plugins/"+name+"/enable", query, nil, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/plugin_inspect.go b/vendor/github.com/docker/docker/client/plugin_inspect.go deleted file mode 100644 index eaedeb8a..00000000 --- a/vendor/github.com/docker/docker/client/plugin_inspect.go +++ /dev/null @@ -1,32 +0,0 @@ -package client - -import ( - "bytes" - "context" - "encoding/json" - "io" - - "github.com/docker/docker/api/types" -) - -// PluginInspectWithRaw inspects an existing plugin -func (cli *Client) PluginInspectWithRaw(ctx context.Context, name string) (*types.Plugin, []byte, error) { - name, err := trimID("plugin", name) - if err != nil { - return nil, nil, err - } - resp, err := cli.get(ctx, "/plugins/"+name+"/json", nil, nil) - defer ensureReaderClosed(resp) - if err != nil { - return nil, nil, err - } - - body, err := io.ReadAll(resp.Body) - if err != nil { - return nil, nil, err - } - var p types.Plugin - rdr := bytes.NewReader(body) - err = json.NewDecoder(rdr).Decode(&p) - return &p, body, err -} diff --git a/vendor/github.com/docker/docker/client/plugin_install.go b/vendor/github.com/docker/docker/client/plugin_install.go deleted file mode 100644 index 5fd2ff21..00000000 --- a/vendor/github.com/docker/docker/client/plugin_install.go +++ /dev/null @@ -1,117 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "io" - "net/http" - "net/url" - - cerrdefs "github.com/containerd/errdefs" - "github.com/distribution/reference" - "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/registry" - "github.com/pkg/errors" -) - -// PluginInstall installs a plugin -func (cli *Client) PluginInstall(ctx context.Context, name string, options types.PluginInstallOptions) (_ io.ReadCloser, retErr error) { - query := url.Values{} - if _, err := reference.ParseNormalizedNamed(options.RemoteRef); err != nil { - return nil, errors.Wrap(err, "invalid remote reference") - } - query.Set("remote", options.RemoteRef) - - privileges, err := cli.checkPluginPermissions(ctx, query, options) - if err != nil { - return nil, err - } - - // set name for plugin pull, if empty should default to remote reference - query.Set("name", name) - - resp, err := cli.tryPluginPull(ctx, query, privileges, options.RegistryAuth) - if err != nil { - return nil, err - } - - name = resp.Header.Get("Docker-Plugin-Name") - - pr, pw := io.Pipe() - go func() { // todo: the client should probably be designed more around the actual api - _, err := io.Copy(pw, resp.Body) - if err != nil { - _ = pw.CloseWithError(err) - return - } - defer func() { - if retErr != nil { - delResp, _ := cli.delete(ctx, "/plugins/"+name, nil, nil) - ensureReaderClosed(delResp) - } - }() - if len(options.Args) > 0 { - if err := cli.PluginSet(ctx, name, options.Args); err != nil { - _ = pw.CloseWithError(err) - return - } - } - - if options.Disabled { - _ = pw.Close() - return - } - - enableErr := cli.PluginEnable(ctx, name, types.PluginEnableOptions{Timeout: 0}) - _ = pw.CloseWithError(enableErr) - }() - return pr, nil -} - -func (cli *Client) tryPluginPrivileges(ctx context.Context, query url.Values, registryAuth string) (*http.Response, error) { - return cli.get(ctx, "/plugins/privileges", query, http.Header{ - registry.AuthHeader: {registryAuth}, - }) -} - -func (cli *Client) tryPluginPull(ctx context.Context, query url.Values, privileges types.PluginPrivileges, registryAuth string) (*http.Response, error) { - return cli.post(ctx, "/plugins/pull", query, privileges, http.Header{ - registry.AuthHeader: {registryAuth}, - }) -} - -func (cli *Client) checkPluginPermissions(ctx context.Context, query url.Values, options types.PluginInstallOptions) (types.PluginPrivileges, error) { - resp, err := cli.tryPluginPrivileges(ctx, query, options.RegistryAuth) - if cerrdefs.IsUnauthorized(err) && options.PrivilegeFunc != nil { - // todo: do inspect before to check existing name before checking privileges - newAuthHeader, privilegeErr := options.PrivilegeFunc(ctx) - if privilegeErr != nil { - ensureReaderClosed(resp) - return nil, privilegeErr - } - options.RegistryAuth = newAuthHeader - resp, err = cli.tryPluginPrivileges(ctx, query, options.RegistryAuth) - } - if err != nil { - ensureReaderClosed(resp) - return nil, err - } - - var privileges types.PluginPrivileges - if err := json.NewDecoder(resp.Body).Decode(&privileges); err != nil { - ensureReaderClosed(resp) - return nil, err - } - ensureReaderClosed(resp) - - if !options.AcceptAllPermissions && options.AcceptPermissionsFunc != nil && len(privileges) > 0 { - accept, err := options.AcceptPermissionsFunc(ctx, privileges) - if err != nil { - return nil, err - } - if !accept { - return nil, errors.Errorf("permission denied while installing plugin %s", options.RemoteRef) - } - } - return privileges, nil -} diff --git a/vendor/github.com/docker/docker/client/plugin_list.go b/vendor/github.com/docker/docker/client/plugin_list.go deleted file mode 100644 index f314e17f..00000000 --- a/vendor/github.com/docker/docker/client/plugin_list.go +++ /dev/null @@ -1,33 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/url" - - "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/filters" -) - -// PluginList returns the installed plugins -func (cli *Client) PluginList(ctx context.Context, filter filters.Args) (types.PluginsListResponse, error) { - var plugins types.PluginsListResponse - query := url.Values{} - - if filter.Len() > 0 { - //nolint:staticcheck // ignore SA1019 for old code - filterJSON, err := filters.ToParamWithVersion(cli.version, filter) - if err != nil { - return plugins, err - } - query.Set("filters", filterJSON) - } - resp, err := cli.get(ctx, "/plugins", query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return plugins, err - } - - err = json.NewDecoder(resp.Body).Decode(&plugins) - return plugins, err -} diff --git a/vendor/github.com/docker/docker/client/plugin_push.go b/vendor/github.com/docker/docker/client/plugin_push.go deleted file mode 100644 index 4574dcdd..00000000 --- a/vendor/github.com/docker/docker/client/plugin_push.go +++ /dev/null @@ -1,24 +0,0 @@ -package client - -import ( - "context" - "io" - "net/http" - - "github.com/docker/docker/api/types/registry" -) - -// PluginPush pushes a plugin to a registry -func (cli *Client) PluginPush(ctx context.Context, name string, registryAuth string) (io.ReadCloser, error) { - name, err := trimID("plugin", name) - if err != nil { - return nil, err - } - resp, err := cli.post(ctx, "/plugins/"+name+"/push", nil, nil, http.Header{ - registry.AuthHeader: {registryAuth}, - }) - if err != nil { - return nil, err - } - return resp.Body, nil -} diff --git a/vendor/github.com/docker/docker/client/plugin_remove.go b/vendor/github.com/docker/docker/client/plugin_remove.go deleted file mode 100644 index 2ba0a8cc..00000000 --- a/vendor/github.com/docker/docker/client/plugin_remove.go +++ /dev/null @@ -1,25 +0,0 @@ -package client - -import ( - "context" - "net/url" - - "github.com/docker/docker/api/types" -) - -// PluginRemove removes a plugin -func (cli *Client) PluginRemove(ctx context.Context, name string, options types.PluginRemoveOptions) error { - name, err := trimID("plugin", name) - if err != nil { - return err - } - - query := url.Values{} - if options.Force { - query.Set("force", "1") - } - - resp, err := cli.delete(ctx, "/plugins/"+name, query, nil) - defer ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/plugin_set.go b/vendor/github.com/docker/docker/client/plugin_set.go deleted file mode 100644 index f0e4a0c3..00000000 --- a/vendor/github.com/docker/docker/client/plugin_set.go +++ /dev/null @@ -1,17 +0,0 @@ -package client - -import ( - "context" -) - -// PluginSet modifies settings for an existing plugin -func (cli *Client) PluginSet(ctx context.Context, name string, args []string) error { - name, err := trimID("plugin", name) - if err != nil { - return err - } - - resp, err := cli.post(ctx, "/plugins/"+name+"/set", nil, args, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/plugin_upgrade.go b/vendor/github.com/docker/docker/client/plugin_upgrade.go deleted file mode 100644 index cd0cf4d2..00000000 --- a/vendor/github.com/docker/docker/client/plugin_upgrade.go +++ /dev/null @@ -1,47 +0,0 @@ -package client - -import ( - "context" - "io" - "net/http" - "net/url" - - "github.com/distribution/reference" - "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/registry" - "github.com/pkg/errors" -) - -// PluginUpgrade upgrades a plugin -func (cli *Client) PluginUpgrade(ctx context.Context, name string, options types.PluginInstallOptions) (io.ReadCloser, error) { - name, err := trimID("plugin", name) - if err != nil { - return nil, err - } - - if err := cli.NewVersionError(ctx, "1.26", "plugin upgrade"); err != nil { - return nil, err - } - query := url.Values{} - if _, err := reference.ParseNormalizedNamed(options.RemoteRef); err != nil { - return nil, errors.Wrap(err, "invalid remote reference") - } - query.Set("remote", options.RemoteRef) - - privileges, err := cli.checkPluginPermissions(ctx, query, options) - if err != nil { - return nil, err - } - - resp, err := cli.tryPluginUpgrade(ctx, query, privileges, name, options.RegistryAuth) - if err != nil { - return nil, err - } - return resp.Body, nil -} - -func (cli *Client) tryPluginUpgrade(ctx context.Context, query url.Values, privileges types.PluginPrivileges, name, registryAuth string) (*http.Response, error) { - return cli.post(ctx, "/plugins/"+name+"/upgrade", query, privileges, http.Header{ - registry.AuthHeader: {registryAuth}, - }) -} diff --git a/vendor/github.com/docker/docker/client/request.go b/vendor/github.com/docker/docker/client/request.go deleted file mode 100644 index 254138fc..00000000 --- a/vendor/github.com/docker/docker/client/request.go +++ /dev/null @@ -1,322 +0,0 @@ -package client - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "io" - "net" - "net/http" - "net/url" - "os" - "reflect" - "strings" - - "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/versions" - "github.com/pkg/errors" -) - -// head sends an http request to the docker API using the method HEAD. -func (cli *Client) head(ctx context.Context, path string, query url.Values, headers http.Header) (*http.Response, error) { - return cli.sendRequest(ctx, http.MethodHead, path, query, nil, headers) -} - -// get sends an http request to the docker API using the method GET with a specific Go context. -func (cli *Client) get(ctx context.Context, path string, query url.Values, headers http.Header) (*http.Response, error) { - return cli.sendRequest(ctx, http.MethodGet, path, query, nil, headers) -} - -// post sends an http request to the docker API using the method POST with a specific Go context. -func (cli *Client) post(ctx context.Context, path string, query url.Values, obj interface{}, headers http.Header) (*http.Response, error) { - body, headers, err := encodeBody(obj, headers) - if err != nil { - return nil, err - } - return cli.sendRequest(ctx, http.MethodPost, path, query, body, headers) -} - -func (cli *Client) postRaw(ctx context.Context, path string, query url.Values, body io.Reader, headers http.Header) (*http.Response, error) { - return cli.sendRequest(ctx, http.MethodPost, path, query, body, headers) -} - -func (cli *Client) put(ctx context.Context, path string, query url.Values, obj interface{}, headers http.Header) (*http.Response, error) { - body, headers, err := encodeBody(obj, headers) - if err != nil { - return nil, err - } - return cli.putRaw(ctx, path, query, body, headers) -} - -// putRaw sends an http request to the docker API using the method PUT. -func (cli *Client) putRaw(ctx context.Context, path string, query url.Values, body io.Reader, headers http.Header) (*http.Response, error) { - // PUT requests are expected to always have a body (apparently) - // so explicitly pass an empty body to sendRequest to signal that - // it should set the Content-Type header if not already present. - if body == nil { - body = http.NoBody - } - return cli.sendRequest(ctx, http.MethodPut, path, query, body, headers) -} - -// delete sends an http request to the docker API using the method DELETE. -func (cli *Client) delete(ctx context.Context, path string, query url.Values, headers http.Header) (*http.Response, error) { - return cli.sendRequest(ctx, http.MethodDelete, path, query, nil, headers) -} - -func encodeBody(obj interface{}, headers http.Header) (io.Reader, http.Header, error) { - if obj == nil { - return nil, headers, nil - } - // encoding/json encodes a nil pointer as the JSON document `null`, - // irrespective of whether the type implements json.Marshaler or encoding.TextMarshaler. - // That is almost certainly not what the caller intended as the request body. - if reflect.TypeOf(obj).Kind() == reflect.Ptr && reflect.ValueOf(obj).IsNil() { - return nil, headers, nil - } - - body, err := encodeData(obj) - if err != nil { - return nil, headers, err - } - if headers == nil { - headers = make(map[string][]string) - } - headers["Content-Type"] = []string{"application/json"} - return body, headers, nil -} - -func (cli *Client) buildRequest(ctx context.Context, method, path string, body io.Reader, headers http.Header) (*http.Request, error) { - req, err := http.NewRequestWithContext(ctx, method, path, body) - if err != nil { - return nil, err - } - req = cli.addHeaders(req, headers) - req.URL.Scheme = cli.scheme - req.URL.Host = cli.addr - - if cli.proto == "unix" || cli.proto == "npipe" { - // Override host header for non-tcp connections. - req.Host = DummyHost - } - - if body != nil && req.Header.Get("Content-Type") == "" { - req.Header.Set("Content-Type", "text/plain") - } - return req, nil -} - -func (cli *Client) sendRequest(ctx context.Context, method, path string, query url.Values, body io.Reader, headers http.Header) (*http.Response, error) { - req, err := cli.buildRequest(ctx, method, cli.getAPIPath(ctx, path, query), body, headers) - if err != nil { - return nil, err - } - - resp, err := cli.doRequest(req) - switch { - case errors.Is(err, context.Canceled), errors.Is(err, context.DeadlineExceeded): - return nil, err - case err == nil: - return resp, cli.checkResponseErr(resp) - default: - return resp, err - } -} - -func (cli *Client) doRequest(req *http.Request) (*http.Response, error) { - resp, err := cli.client.Do(req) - if err != nil { - if cli.scheme != "https" && strings.Contains(err.Error(), "malformed HTTP response") { - return nil, errConnectionFailed{fmt.Errorf("%v.\n* Are you trying to connect to a TLS-enabled daemon without TLS?", err)} - } - - if cli.scheme == "https" && strings.Contains(err.Error(), "bad certificate") { - return nil, errConnectionFailed{errors.Wrap(err, "the server probably has client authentication (--tlsverify) enabled; check your TLS client certification settings")} - } - - // Don't decorate context sentinel errors; users may be comparing to - // them directly. - if errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) { - return nil, err - } - - var uErr *url.Error - if errors.As(err, &uErr) { - var nErr *net.OpError - if errors.As(uErr.Err, &nErr) { - if os.IsPermission(nErr.Err) { - return nil, errConnectionFailed{errors.Wrapf(err, "permission denied while trying to connect to the Docker daemon socket at %v", cli.host)} - } - } - } - - var nErr net.Error - if errors.As(err, &nErr) { - // FIXME(thaJeztah): any net.Error should be considered a connection error (but we should include the original error)? - if nErr.Timeout() { - return nil, connectionFailed(cli.host) - } - if strings.Contains(nErr.Error(), "connection refused") || strings.Contains(nErr.Error(), "dial unix") { - return nil, connectionFailed(cli.host) - } - } - - // Although there's not a strongly typed error for this in go-winio, - // lots of people are using the default configuration for the docker - // daemon on Windows where the daemon is listening on a named pipe - // `//./pipe/docker_engine, and the client must be running elevated. - // Give users a clue rather than the not-overly useful message - // such as `error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.26/info: - // open //./pipe/docker_engine: The system cannot find the file specified.`. - // Note we can't string compare "The system cannot find the file specified" as - // this is localised - for example in French the error would be - // `open //./pipe/docker_engine: Le fichier spécifié est introuvable.` - if strings.Contains(err.Error(), `open //./pipe/docker_engine`) { - // Checks if client is running with elevated privileges - if f, elevatedErr := os.Open(`\\.\PHYSICALDRIVE0`); elevatedErr != nil { - err = errors.Wrap(err, "in the default daemon configuration on Windows, the docker client must be run with elevated privileges to connect") - } else { - _ = f.Close() - err = errors.Wrap(err, "this error may indicate that the docker daemon is not running") - } - } - - return nil, errConnectionFailed{errors.Wrap(err, "error during connect")} - } - - return resp, nil -} - -func (cli *Client) checkResponseErr(serverResp *http.Response) (retErr error) { - if serverResp == nil { - return nil - } - if serverResp.StatusCode >= http.StatusOK && serverResp.StatusCode < http.StatusBadRequest { - return nil - } - defer func() { - retErr = httpErrorFromStatusCode(retErr, serverResp.StatusCode) - }() - - var body []byte - var err error - var reqURL string - if serverResp.Request != nil { - reqURL = serverResp.Request.URL.String() - } - statusMsg := serverResp.Status - if statusMsg == "" { - statusMsg = http.StatusText(serverResp.StatusCode) - } - if serverResp.Body != nil { - bodyMax := 1 * 1024 * 1024 // 1 MiB - bodyR := &io.LimitedReader{ - R: serverResp.Body, - N: int64(bodyMax), - } - body, err = io.ReadAll(bodyR) - if err != nil { - return err - } - if bodyR.N == 0 { - if reqURL != "" { - return fmt.Errorf("request returned %s with a message (> %d bytes) for API route and version %s, check if the server supports the requested API version", statusMsg, bodyMax, reqURL) - } - return fmt.Errorf("request returned %s with a message (> %d bytes); check if the server supports the requested API version", statusMsg, bodyMax) - } - } - if len(body) == 0 { - if reqURL != "" { - return fmt.Errorf("request returned %s for API route and version %s, check if the server supports the requested API version", statusMsg, reqURL) - } - return fmt.Errorf("request returned %s; check if the server supports the requested API version", statusMsg) - } - - var daemonErr error - if serverResp.Header.Get("Content-Type") == "application/json" { - var errorResponse types.ErrorResponse - if err := json.Unmarshal(body, &errorResponse); err != nil { - return errors.Wrap(err, "Error reading JSON") - } - if errorResponse.Message == "" { - // Error-message is empty, which means that we successfully parsed the - // JSON-response (no error produced), but it didn't contain an error - // message. This could either be because the response was empty, or - // the response was valid JSON, but not with the expected schema - // ([types.ErrorResponse]). - // - // We cannot use "strict" JSON handling (json.NewDecoder with DisallowUnknownFields) - // due to the API using an open schema (we must anticipate fields - // being added to [types.ErrorResponse] in the future, and not - // reject those responses. - // - // For these cases, we construct an error with the status-code - // returned, but we could consider returning (a truncated version - // of) the actual response as-is. - // - // TODO(thaJeztah): consider adding a log.Debug to allow clients to debug the actual response when enabling debug logging. - daemonErr = fmt.Errorf(`API returned a %d (%s) but provided no error-message`, - serverResp.StatusCode, - http.StatusText(serverResp.StatusCode), - ) - } else { - daemonErr = errors.New(strings.TrimSpace(errorResponse.Message)) - } - } else { - // Fall back to returning the response as-is for API versions < 1.24 - // that didn't support JSON error responses, and for situations - // where a plain text error is returned. This branch may also catch - // situations where a proxy is involved, returning a HTML response. - daemonErr = errors.New(strings.TrimSpace(string(body))) - } - return errors.Wrap(daemonErr, "Error response from daemon") -} - -func (cli *Client) addHeaders(req *http.Request, headers http.Header) *http.Request { - // Add CLI Config's HTTP Headers BEFORE we set the Docker headers - // then the user can't change OUR headers - for k, v := range cli.customHTTPHeaders { - if versions.LessThan(cli.version, "1.25") && http.CanonicalHeaderKey(k) == "User-Agent" { - continue - } - req.Header.Set(k, v) - } - - for k, v := range headers { - req.Header[http.CanonicalHeaderKey(k)] = v - } - - if cli.userAgent != nil { - if *cli.userAgent == "" { - req.Header.Del("User-Agent") - } else { - req.Header.Set("User-Agent", *cli.userAgent) - } - } - return req -} - -func encodeData(data interface{}) (*bytes.Buffer, error) { - params := bytes.NewBuffer(nil) - if data != nil { - if err := json.NewEncoder(params).Encode(data); err != nil { - return nil, err - } - } - return params, nil -} - -func ensureReaderClosed(response *http.Response) { - if response != nil && response.Body != nil { - // Drain up to 512 bytes and close the body to let the Transport reuse the connection - // see https://github.com/google/go-github/pull/317/files#r57536827 - // - // TODO(thaJeztah): see if this optimization is still needed, or already implemented in stdlib, - // and check if context-cancellation should handle this as well. If still needed, consider - // wrapping response.Body, or returning a "closer()" from [Client.sendRequest] and related - // methods. - _, _ = io.CopyN(io.Discard, response.Body, 512) - _ = response.Body.Close() - } -} diff --git a/vendor/github.com/docker/docker/client/secret_create.go b/vendor/github.com/docker/docker/client/secret_create.go deleted file mode 100644 index be4a1da4..00000000 --- a/vendor/github.com/docker/docker/client/secret_create.go +++ /dev/null @@ -1,24 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - - "github.com/docker/docker/api/types/swarm" -) - -// SecretCreate creates a new secret. -func (cli *Client) SecretCreate(ctx context.Context, secret swarm.SecretSpec) (swarm.SecretCreateResponse, error) { - if err := cli.NewVersionError(ctx, "1.25", "secret create"); err != nil { - return swarm.SecretCreateResponse{}, err - } - resp, err := cli.post(ctx, "/secrets/create", nil, secret, nil) - defer ensureReaderClosed(resp) - if err != nil { - return swarm.SecretCreateResponse{}, err - } - - var response swarm.SecretCreateResponse - err = json.NewDecoder(resp.Body).Decode(&response) - return response, err -} diff --git a/vendor/github.com/docker/docker/client/secret_inspect.go b/vendor/github.com/docker/docker/client/secret_inspect.go deleted file mode 100644 index f44c00e7..00000000 --- a/vendor/github.com/docker/docker/client/secret_inspect.go +++ /dev/null @@ -1,37 +0,0 @@ -package client - -import ( - "bytes" - "context" - "encoding/json" - "io" - - "github.com/docker/docker/api/types/swarm" -) - -// SecretInspectWithRaw returns the secret information with raw data -func (cli *Client) SecretInspectWithRaw(ctx context.Context, id string) (swarm.Secret, []byte, error) { - id, err := trimID("secret", id) - if err != nil { - return swarm.Secret{}, nil, err - } - if err := cli.NewVersionError(ctx, "1.25", "secret inspect"); err != nil { - return swarm.Secret{}, nil, err - } - resp, err := cli.get(ctx, "/secrets/"+id, nil, nil) - defer ensureReaderClosed(resp) - if err != nil { - return swarm.Secret{}, nil, err - } - - body, err := io.ReadAll(resp.Body) - if err != nil { - return swarm.Secret{}, nil, err - } - - var secret swarm.Secret - rdr := bytes.NewReader(body) - err = json.NewDecoder(rdr).Decode(&secret) - - return secret, body, err -} diff --git a/vendor/github.com/docker/docker/client/secret_list.go b/vendor/github.com/docker/docker/client/secret_list.go deleted file mode 100644 index 2e37bda2..00000000 --- a/vendor/github.com/docker/docker/client/secret_list.go +++ /dev/null @@ -1,37 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/url" - - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/swarm" -) - -// SecretList returns the list of secrets. -func (cli *Client) SecretList(ctx context.Context, options swarm.SecretListOptions) ([]swarm.Secret, error) { - if err := cli.NewVersionError(ctx, "1.25", "secret list"); err != nil { - return nil, err - } - query := url.Values{} - - if options.Filters.Len() > 0 { - filterJSON, err := filters.ToJSON(options.Filters) - if err != nil { - return nil, err - } - - query.Set("filters", filterJSON) - } - - resp, err := cli.get(ctx, "/secrets", query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return nil, err - } - - var secrets []swarm.Secret - err = json.NewDecoder(resp.Body).Decode(&secrets) - return secrets, err -} diff --git a/vendor/github.com/docker/docker/client/secret_remove.go b/vendor/github.com/docker/docker/client/secret_remove.go deleted file mode 100644 index d1044aaf..00000000 --- a/vendor/github.com/docker/docker/client/secret_remove.go +++ /dev/null @@ -1,17 +0,0 @@ -package client - -import "context" - -// SecretRemove removes a secret. -func (cli *Client) SecretRemove(ctx context.Context, id string) error { - id, err := trimID("secret", id) - if err != nil { - return err - } - if err := cli.NewVersionError(ctx, "1.25", "secret remove"); err != nil { - return err - } - resp, err := cli.delete(ctx, "/secrets/"+id, nil, nil) - defer ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/secret_update.go b/vendor/github.com/docker/docker/client/secret_update.go deleted file mode 100644 index a0aff7cb..00000000 --- a/vendor/github.com/docker/docker/client/secret_update.go +++ /dev/null @@ -1,24 +0,0 @@ -package client - -import ( - "context" - "net/url" - - "github.com/docker/docker/api/types/swarm" -) - -// SecretUpdate attempts to update a secret. -func (cli *Client) SecretUpdate(ctx context.Context, id string, version swarm.Version, secret swarm.SecretSpec) error { - id, err := trimID("secret", id) - if err != nil { - return err - } - if err := cli.NewVersionError(ctx, "1.25", "secret update"); err != nil { - return err - } - query := url.Values{} - query.Set("version", version.String()) - resp, err := cli.post(ctx, "/secrets/"+id+"/update", query, secret, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/service_create.go b/vendor/github.com/docker/docker/client/service_create.go deleted file mode 100644 index db7566a8..00000000 --- a/vendor/github.com/docker/docker/client/service_create.go +++ /dev/null @@ -1,212 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "fmt" - "net/http" - "strings" - - "github.com/distribution/reference" - "github.com/docker/docker/api/types/registry" - "github.com/docker/docker/api/types/swarm" - "github.com/docker/docker/api/types/versions" - "github.com/opencontainers/go-digest" - "github.com/pkg/errors" -) - -// ServiceCreate creates a new service. -func (cli *Client) ServiceCreate(ctx context.Context, service swarm.ServiceSpec, options swarm.ServiceCreateOptions) (swarm.ServiceCreateResponse, error) { - var response swarm.ServiceCreateResponse - - // Make sure we negotiated (if the client is configured to do so), - // as code below contains API-version specific handling of options. - // - // Normally, version-negotiation (if enabled) would not happen until - // the API request is made. - if err := cli.checkVersion(ctx); err != nil { - return response, err - } - - // Make sure containerSpec is not nil when no runtime is set or the runtime is set to container - if service.TaskTemplate.ContainerSpec == nil && (service.TaskTemplate.Runtime == "" || service.TaskTemplate.Runtime == swarm.RuntimeContainer) { - service.TaskTemplate.ContainerSpec = &swarm.ContainerSpec{} - } - - if err := validateServiceSpec(service); err != nil { - return response, err - } - if versions.LessThan(cli.version, "1.30") { - if err := validateAPIVersion(service, cli.version); err != nil { - return response, err - } - } - - // ensure that the image is tagged - var resolveWarning string - switch { - case service.TaskTemplate.ContainerSpec != nil: - if taggedImg := imageWithTagString(service.TaskTemplate.ContainerSpec.Image); taggedImg != "" { - service.TaskTemplate.ContainerSpec.Image = taggedImg - } - if options.QueryRegistry { - resolveWarning = resolveContainerSpecImage(ctx, cli, &service.TaskTemplate, options.EncodedRegistryAuth) - } - case service.TaskTemplate.PluginSpec != nil: - if taggedImg := imageWithTagString(service.TaskTemplate.PluginSpec.Remote); taggedImg != "" { - service.TaskTemplate.PluginSpec.Remote = taggedImg - } - if options.QueryRegistry { - resolveWarning = resolvePluginSpecRemote(ctx, cli, &service.TaskTemplate, options.EncodedRegistryAuth) - } - } - - headers := http.Header{} - if versions.LessThan(cli.version, "1.30") { - // the custom "version" header was used by engine API before 20.10 - // (API 1.30) to switch between client- and server-side lookup of - // image digests. - headers["version"] = []string{cli.version} - } - if options.EncodedRegistryAuth != "" { - headers[registry.AuthHeader] = []string{options.EncodedRegistryAuth} - } - resp, err := cli.post(ctx, "/services/create", nil, service, headers) - defer ensureReaderClosed(resp) - if err != nil { - return response, err - } - - err = json.NewDecoder(resp.Body).Decode(&response) - if resolveWarning != "" { - response.Warnings = append(response.Warnings, resolveWarning) - } - - return response, err -} - -func resolveContainerSpecImage(ctx context.Context, cli DistributionAPIClient, taskSpec *swarm.TaskSpec, encodedAuth string) string { - var warning string - if img, imgPlatforms, err := imageDigestAndPlatforms(ctx, cli, taskSpec.ContainerSpec.Image, encodedAuth); err != nil { - warning = digestWarning(taskSpec.ContainerSpec.Image) - } else { - taskSpec.ContainerSpec.Image = img - if len(imgPlatforms) > 0 { - if taskSpec.Placement == nil { - taskSpec.Placement = &swarm.Placement{} - } - taskSpec.Placement.Platforms = imgPlatforms - } - } - return warning -} - -func resolvePluginSpecRemote(ctx context.Context, cli DistributionAPIClient, taskSpec *swarm.TaskSpec, encodedAuth string) string { - var warning string - if img, imgPlatforms, err := imageDigestAndPlatforms(ctx, cli, taskSpec.PluginSpec.Remote, encodedAuth); err != nil { - warning = digestWarning(taskSpec.PluginSpec.Remote) - } else { - taskSpec.PluginSpec.Remote = img - if len(imgPlatforms) > 0 { - if taskSpec.Placement == nil { - taskSpec.Placement = &swarm.Placement{} - } - taskSpec.Placement.Platforms = imgPlatforms - } - } - return warning -} - -func imageDigestAndPlatforms(ctx context.Context, cli DistributionAPIClient, image, encodedAuth string) (string, []swarm.Platform, error) { - distributionInspect, err := cli.DistributionInspect(ctx, image, encodedAuth) - var platforms []swarm.Platform - if err != nil { - return "", nil, err - } - - imageWithDigest := imageWithDigestString(image, distributionInspect.Descriptor.Digest) - - if len(distributionInspect.Platforms) > 0 { - platforms = make([]swarm.Platform, 0, len(distributionInspect.Platforms)) - for _, p := range distributionInspect.Platforms { - // clear architecture field for arm. This is a temporary patch to address - // https://github.com/docker/swarmkit/issues/2294. The issue is that while - // image manifests report "arm" as the architecture, the node reports - // something like "armv7l" (includes the variant), which causes arm images - // to stop working with swarm mode. This patch removes the architecture - // constraint for arm images to ensure tasks get scheduled. - arch := p.Architecture - if strings.ToLower(arch) == "arm" { - arch = "" - } - platforms = append(platforms, swarm.Platform{ - Architecture: arch, - OS: p.OS, - }) - } - } - return imageWithDigest, platforms, err -} - -// imageWithDigestString takes an image string and a digest, and updates -// the image string if it didn't originally contain a digest. It returns -// image unmodified in other situations. -func imageWithDigestString(image string, dgst digest.Digest) string { - namedRef, err := reference.ParseNormalizedNamed(image) - if err == nil { - if _, isCanonical := namedRef.(reference.Canonical); !isCanonical { - // ensure that image gets a default tag if none is provided - img, err := reference.WithDigest(namedRef, dgst) - if err == nil { - return reference.FamiliarString(img) - } - } - } - return image -} - -// imageWithTagString takes an image string, and returns a tagged image -// string, adding a 'latest' tag if one was not provided. It returns an -// empty string if a canonical reference was provided -func imageWithTagString(image string) string { - namedRef, err := reference.ParseNormalizedNamed(image) - if err == nil { - return reference.FamiliarString(reference.TagNameOnly(namedRef)) - } - return "" -} - -// digestWarning constructs a formatted warning string using the -// image name that could not be pinned by digest. The formatting -// is hardcoded, but could me made smarter in the future -func digestWarning(image string) string { - return fmt.Sprintf("image %s could not be accessed on a registry to record\nits digest. Each node will access %s independently,\npossibly leading to different nodes running different\nversions of the image.\n", image, image) -} - -func validateServiceSpec(s swarm.ServiceSpec) error { - if s.TaskTemplate.ContainerSpec != nil && s.TaskTemplate.PluginSpec != nil { - return errors.New("must not specify both a container spec and a plugin spec in the task template") - } - if s.TaskTemplate.PluginSpec != nil && s.TaskTemplate.Runtime != swarm.RuntimePlugin { - return errors.New("mismatched runtime with plugin spec") - } - if s.TaskTemplate.ContainerSpec != nil && (s.TaskTemplate.Runtime != "" && s.TaskTemplate.Runtime != swarm.RuntimeContainer) { - return errors.New("mismatched runtime with container spec") - } - return nil -} - -func validateAPIVersion(c swarm.ServiceSpec, apiVersion string) error { - for _, m := range c.TaskTemplate.ContainerSpec.Mounts { - if m.BindOptions != nil { - if m.BindOptions.NonRecursive && versions.LessThan(apiVersion, "1.40") { - return errors.Errorf("bind-recursive=disabled requires API v1.40 or later") - } - // ReadOnlyNonRecursive can be safely ignored when API < 1.44 - if m.BindOptions.ReadOnlyForceRecursive && versions.LessThan(apiVersion, "1.44") { - return errors.Errorf("bind-recursive=readonly requires API v1.44 or later") - } - } - } - return nil -} diff --git a/vendor/github.com/docker/docker/client/service_inspect.go b/vendor/github.com/docker/docker/client/service_inspect.go deleted file mode 100644 index cb25ade1..00000000 --- a/vendor/github.com/docker/docker/client/service_inspect.go +++ /dev/null @@ -1,38 +0,0 @@ -package client - -import ( - "bytes" - "context" - "encoding/json" - "fmt" - "io" - "net/url" - - "github.com/docker/docker/api/types/swarm" -) - -// ServiceInspectWithRaw returns the service information and the raw data. -func (cli *Client) ServiceInspectWithRaw(ctx context.Context, serviceID string, opts swarm.ServiceInspectOptions) (swarm.Service, []byte, error) { - serviceID, err := trimID("service", serviceID) - if err != nil { - return swarm.Service{}, nil, err - } - - query := url.Values{} - query.Set("insertDefaults", fmt.Sprintf("%v", opts.InsertDefaults)) - resp, err := cli.get(ctx, "/services/"+serviceID, query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return swarm.Service{}, nil, err - } - - body, err := io.ReadAll(resp.Body) - if err != nil { - return swarm.Service{}, nil, err - } - - var response swarm.Service - rdr := bytes.NewReader(body) - err = json.NewDecoder(rdr).Decode(&response) - return response, body, err -} diff --git a/vendor/github.com/docker/docker/client/service_list.go b/vendor/github.com/docker/docker/client/service_list.go deleted file mode 100644 index 26b25ff0..00000000 --- a/vendor/github.com/docker/docker/client/service_list.go +++ /dev/null @@ -1,38 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/url" - - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/swarm" -) - -// ServiceList returns the list of services. -func (cli *Client) ServiceList(ctx context.Context, options swarm.ServiceListOptions) ([]swarm.Service, error) { - query := url.Values{} - - if options.Filters.Len() > 0 { - filterJSON, err := filters.ToJSON(options.Filters) - if err != nil { - return nil, err - } - - query.Set("filters", filterJSON) - } - - if options.Status { - query.Set("status", "true") - } - - resp, err := cli.get(ctx, "/services", query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return nil, err - } - - var services []swarm.Service - err = json.NewDecoder(resp.Body).Decode(&services) - return services, err -} diff --git a/vendor/github.com/docker/docker/client/service_logs.go b/vendor/github.com/docker/docker/client/service_logs.go deleted file mode 100644 index 8bf04082..00000000 --- a/vendor/github.com/docker/docker/client/service_logs.go +++ /dev/null @@ -1,57 +0,0 @@ -package client - -import ( - "context" - "io" - "net/url" - "time" - - "github.com/docker/docker/api/types/container" - timetypes "github.com/docker/docker/api/types/time" - "github.com/pkg/errors" -) - -// ServiceLogs returns the logs generated by a service in an io.ReadCloser. -// It's up to the caller to close the stream. -func (cli *Client) ServiceLogs(ctx context.Context, serviceID string, options container.LogsOptions) (io.ReadCloser, error) { - serviceID, err := trimID("service", serviceID) - if err != nil { - return nil, err - } - - query := url.Values{} - if options.ShowStdout { - query.Set("stdout", "1") - } - - if options.ShowStderr { - query.Set("stderr", "1") - } - - if options.Since != "" { - ts, err := timetypes.GetTimestamp(options.Since, time.Now()) - if err != nil { - return nil, errors.Wrap(err, `invalid value for "since"`) - } - query.Set("since", ts) - } - - if options.Timestamps { - query.Set("timestamps", "1") - } - - if options.Details { - query.Set("details", "1") - } - - if options.Follow { - query.Set("follow", "1") - } - query.Set("tail", options.Tail) - - resp, err := cli.get(ctx, "/services/"+serviceID+"/logs", query, nil) - if err != nil { - return nil, err - } - return resp.Body, nil -} diff --git a/vendor/github.com/docker/docker/client/service_remove.go b/vendor/github.com/docker/docker/client/service_remove.go deleted file mode 100644 index 0c7cc571..00000000 --- a/vendor/github.com/docker/docker/client/service_remove.go +++ /dev/null @@ -1,15 +0,0 @@ -package client - -import "context" - -// ServiceRemove kills and removes a service. -func (cli *Client) ServiceRemove(ctx context.Context, serviceID string) error { - serviceID, err := trimID("service", serviceID) - if err != nil { - return err - } - - resp, err := cli.delete(ctx, "/services/"+serviceID, nil, nil) - defer ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/service_update.go b/vendor/github.com/docker/docker/client/service_update.go deleted file mode 100644 index 278e305d..00000000 --- a/vendor/github.com/docker/docker/client/service_update.go +++ /dev/null @@ -1,89 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/http" - "net/url" - - "github.com/docker/docker/api/types/registry" - "github.com/docker/docker/api/types/swarm" - "github.com/docker/docker/api/types/versions" -) - -// ServiceUpdate updates a Service. The version number is required to avoid conflicting writes. -// It should be the value as set *before* the update. You can find this value in the Meta field -// of swarm.Service, which can be found using ServiceInspectWithRaw. -func (cli *Client) ServiceUpdate(ctx context.Context, serviceID string, version swarm.Version, service swarm.ServiceSpec, options swarm.ServiceUpdateOptions) (swarm.ServiceUpdateResponse, error) { - serviceID, err := trimID("service", serviceID) - if err != nil { - return swarm.ServiceUpdateResponse{}, err - } - - // Make sure we negotiated (if the client is configured to do so), - // as code below contains API-version specific handling of options. - // - // Normally, version-negotiation (if enabled) would not happen until - // the API request is made. - if err := cli.checkVersion(ctx); err != nil { - return swarm.ServiceUpdateResponse{}, err - } - - query := url.Values{} - if options.RegistryAuthFrom != "" { - query.Set("registryAuthFrom", options.RegistryAuthFrom) - } - - if options.Rollback != "" { - query.Set("rollback", options.Rollback) - } - - query.Set("version", version.String()) - - if err := validateServiceSpec(service); err != nil { - return swarm.ServiceUpdateResponse{}, err - } - - // ensure that the image is tagged - var resolveWarning string - switch { - case service.TaskTemplate.ContainerSpec != nil: - if taggedImg := imageWithTagString(service.TaskTemplate.ContainerSpec.Image); taggedImg != "" { - service.TaskTemplate.ContainerSpec.Image = taggedImg - } - if options.QueryRegistry { - resolveWarning = resolveContainerSpecImage(ctx, cli, &service.TaskTemplate, options.EncodedRegistryAuth) - } - case service.TaskTemplate.PluginSpec != nil: - if taggedImg := imageWithTagString(service.TaskTemplate.PluginSpec.Remote); taggedImg != "" { - service.TaskTemplate.PluginSpec.Remote = taggedImg - } - if options.QueryRegistry { - resolveWarning = resolvePluginSpecRemote(ctx, cli, &service.TaskTemplate, options.EncodedRegistryAuth) - } - } - - headers := http.Header{} - if versions.LessThan(cli.version, "1.30") { - // the custom "version" header was used by engine API before 20.10 - // (API 1.30) to switch between client- and server-side lookup of - // image digests. - headers["version"] = []string{cli.version} - } - if options.EncodedRegistryAuth != "" { - headers[registry.AuthHeader] = []string{options.EncodedRegistryAuth} - } - resp, err := cli.post(ctx, "/services/"+serviceID+"/update", query, service, headers) - defer ensureReaderClosed(resp) - if err != nil { - return swarm.ServiceUpdateResponse{}, err - } - - var response swarm.ServiceUpdateResponse - err = json.NewDecoder(resp.Body).Decode(&response) - if resolveWarning != "" { - response.Warnings = append(response.Warnings, resolveWarning) - } - - return response, err -} diff --git a/vendor/github.com/docker/docker/client/swarm_get_unlock_key.go b/vendor/github.com/docker/docker/client/swarm_get_unlock_key.go deleted file mode 100644 index 41151f6c..00000000 --- a/vendor/github.com/docker/docker/client/swarm_get_unlock_key.go +++ /dev/null @@ -1,21 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - - "github.com/docker/docker/api/types/swarm" -) - -// SwarmGetUnlockKey retrieves the swarm's unlock key. -func (cli *Client) SwarmGetUnlockKey(ctx context.Context) (swarm.UnlockKeyResponse, error) { - resp, err := cli.get(ctx, "/swarm/unlockkey", nil, nil) - defer ensureReaderClosed(resp) - if err != nil { - return swarm.UnlockKeyResponse{}, err - } - - var response swarm.UnlockKeyResponse - err = json.NewDecoder(resp.Body).Decode(&response) - return response, err -} diff --git a/vendor/github.com/docker/docker/client/swarm_init.go b/vendor/github.com/docker/docker/client/swarm_init.go deleted file mode 100644 index 7f291654..00000000 --- a/vendor/github.com/docker/docker/client/swarm_init.go +++ /dev/null @@ -1,21 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - - "github.com/docker/docker/api/types/swarm" -) - -// SwarmInit initializes the swarm. -func (cli *Client) SwarmInit(ctx context.Context, req swarm.InitRequest) (string, error) { - resp, err := cli.post(ctx, "/swarm/init", nil, req, nil) - defer ensureReaderClosed(resp) - if err != nil { - return "", err - } - - var response string - err = json.NewDecoder(resp.Body).Decode(&response) - return response, err -} diff --git a/vendor/github.com/docker/docker/client/swarm_inspect.go b/vendor/github.com/docker/docker/client/swarm_inspect.go deleted file mode 100644 index 597693bd..00000000 --- a/vendor/github.com/docker/docker/client/swarm_inspect.go +++ /dev/null @@ -1,21 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - - "github.com/docker/docker/api/types/swarm" -) - -// SwarmInspect inspects the swarm. -func (cli *Client) SwarmInspect(ctx context.Context) (swarm.Swarm, error) { - resp, err := cli.get(ctx, "/swarm", nil, nil) - defer ensureReaderClosed(resp) - if err != nil { - return swarm.Swarm{}, err - } - - var response swarm.Swarm - err = json.NewDecoder(resp.Body).Decode(&response) - return response, err -} diff --git a/vendor/github.com/docker/docker/client/swarm_join.go b/vendor/github.com/docker/docker/client/swarm_join.go deleted file mode 100644 index 446d4d04..00000000 --- a/vendor/github.com/docker/docker/client/swarm_join.go +++ /dev/null @@ -1,14 +0,0 @@ -package client - -import ( - "context" - - "github.com/docker/docker/api/types/swarm" -) - -// SwarmJoin joins the swarm. -func (cli *Client) SwarmJoin(ctx context.Context, req swarm.JoinRequest) error { - resp, err := cli.post(ctx, "/swarm/join", nil, req, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/swarm_leave.go b/vendor/github.com/docker/docker/client/swarm_leave.go deleted file mode 100644 index 709e5adb..00000000 --- a/vendor/github.com/docker/docker/client/swarm_leave.go +++ /dev/null @@ -1,17 +0,0 @@ -package client - -import ( - "context" - "net/url" -) - -// SwarmLeave leaves the swarm. -func (cli *Client) SwarmLeave(ctx context.Context, force bool) error { - query := url.Values{} - if force { - query.Set("force", "1") - } - resp, err := cli.post(ctx, "/swarm/leave", query, nil, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/swarm_unlock.go b/vendor/github.com/docker/docker/client/swarm_unlock.go deleted file mode 100644 index e3c756b6..00000000 --- a/vendor/github.com/docker/docker/client/swarm_unlock.go +++ /dev/null @@ -1,14 +0,0 @@ -package client - -import ( - "context" - - "github.com/docker/docker/api/types/swarm" -) - -// SwarmUnlock unlocks locked swarm. -func (cli *Client) SwarmUnlock(ctx context.Context, req swarm.UnlockRequest) error { - resp, err := cli.post(ctx, "/swarm/unlock", nil, req, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/swarm_update.go b/vendor/github.com/docker/docker/client/swarm_update.go deleted file mode 100644 index 309ab194..00000000 --- a/vendor/github.com/docker/docker/client/swarm_update.go +++ /dev/null @@ -1,21 +0,0 @@ -package client - -import ( - "context" - "net/url" - "strconv" - - "github.com/docker/docker/api/types/swarm" -) - -// SwarmUpdate updates the swarm. -func (cli *Client) SwarmUpdate(ctx context.Context, version swarm.Version, swarm swarm.Spec, flags swarm.UpdateFlags) error { - query := url.Values{} - query.Set("version", version.String()) - query.Set("rotateWorkerToken", strconv.FormatBool(flags.RotateWorkerToken)) - query.Set("rotateManagerToken", strconv.FormatBool(flags.RotateManagerToken)) - query.Set("rotateManagerUnlockKey", strconv.FormatBool(flags.RotateManagerUnlockKey)) - resp, err := cli.post(ctx, "/swarm/update", query, swarm, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/task_inspect.go b/vendor/github.com/docker/docker/client/task_inspect.go deleted file mode 100644 index ca3924fc..00000000 --- a/vendor/github.com/docker/docker/client/task_inspect.go +++ /dev/null @@ -1,34 +0,0 @@ -package client - -import ( - "bytes" - "context" - "encoding/json" - "io" - - "github.com/docker/docker/api/types/swarm" -) - -// TaskInspectWithRaw returns the task information and its raw representation. -func (cli *Client) TaskInspectWithRaw(ctx context.Context, taskID string) (swarm.Task, []byte, error) { - taskID, err := trimID("task", taskID) - if err != nil { - return swarm.Task{}, nil, err - } - - resp, err := cli.get(ctx, "/tasks/"+taskID, nil, nil) - defer ensureReaderClosed(resp) - if err != nil { - return swarm.Task{}, nil, err - } - - body, err := io.ReadAll(resp.Body) - if err != nil { - return swarm.Task{}, nil, err - } - - var response swarm.Task - rdr := bytes.NewReader(body) - err = json.NewDecoder(rdr).Decode(&response) - return response, body, err -} diff --git a/vendor/github.com/docker/docker/client/task_list.go b/vendor/github.com/docker/docker/client/task_list.go deleted file mode 100644 index de743e99..00000000 --- a/vendor/github.com/docker/docker/client/task_list.go +++ /dev/null @@ -1,34 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/url" - - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/swarm" -) - -// TaskList returns the list of tasks. -func (cli *Client) TaskList(ctx context.Context, options swarm.TaskListOptions) ([]swarm.Task, error) { - query := url.Values{} - - if options.Filters.Len() > 0 { - filterJSON, err := filters.ToJSON(options.Filters) - if err != nil { - return nil, err - } - - query.Set("filters", filterJSON) - } - - resp, err := cli.get(ctx, "/tasks", query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return nil, err - } - - var tasks []swarm.Task - err = json.NewDecoder(resp.Body).Decode(&tasks) - return tasks, err -} diff --git a/vendor/github.com/docker/docker/client/task_logs.go b/vendor/github.com/docker/docker/client/task_logs.go deleted file mode 100644 index baa55528..00000000 --- a/vendor/github.com/docker/docker/client/task_logs.go +++ /dev/null @@ -1,51 +0,0 @@ -package client - -import ( - "context" - "io" - "net/url" - "time" - - "github.com/docker/docker/api/types/container" - timetypes "github.com/docker/docker/api/types/time" -) - -// TaskLogs returns the logs generated by a task in an io.ReadCloser. -// It's up to the caller to close the stream. -func (cli *Client) TaskLogs(ctx context.Context, taskID string, options container.LogsOptions) (io.ReadCloser, error) { - query := url.Values{} - if options.ShowStdout { - query.Set("stdout", "1") - } - - if options.ShowStderr { - query.Set("stderr", "1") - } - - if options.Since != "" { - ts, err := timetypes.GetTimestamp(options.Since, time.Now()) - if err != nil { - return nil, err - } - query.Set("since", ts) - } - - if options.Timestamps { - query.Set("timestamps", "1") - } - - if options.Details { - query.Set("details", "1") - } - - if options.Follow { - query.Set("follow", "1") - } - query.Set("tail", options.Tail) - - resp, err := cli.get(ctx, "/tasks/"+taskID+"/logs", query, nil) - if err != nil { - return nil, err - } - return resp.Body, nil -} diff --git a/vendor/github.com/docker/docker/client/utils.go b/vendor/github.com/docker/docker/client/utils.go deleted file mode 100644 index 7b82f185..00000000 --- a/vendor/github.com/docker/docker/client/utils.go +++ /dev/null @@ -1,83 +0,0 @@ -package client - -import ( - "encoding/json" - "fmt" - "net/url" - "strings" - - cerrdefs "github.com/containerd/errdefs" - "github.com/docker/docker/api/types/filters" - ocispec "github.com/opencontainers/image-spec/specs-go/v1" -) - -type emptyIDError string - -func (e emptyIDError) InvalidParameter() {} - -func (e emptyIDError) Error() string { - return "invalid " + string(e) + " name or ID: value is empty" -} - -// trimID trims the given object-ID / name, returning an error if it's empty. -func trimID(objType, id string) (string, error) { - id = strings.TrimSpace(id) - if id == "" { - return "", emptyIDError(objType) - } - return id, nil -} - -// getFiltersQuery returns a url query with "filters" query term, based on the -// filters provided. -func getFiltersQuery(f filters.Args) (url.Values, error) { - query := url.Values{} - if f.Len() > 0 { - filterJSON, err := filters.ToJSON(f) - if err != nil { - return query, err - } - query.Set("filters", filterJSON) - } - return query, nil -} - -// encodePlatforms marshals the given platform(s) to JSON format, to -// be used for query-parameters for filtering / selecting platforms. -func encodePlatforms(platform ...ocispec.Platform) ([]string, error) { - if len(platform) == 0 { - return []string{}, nil - } - if len(platform) == 1 { - p, err := encodePlatform(&platform[0]) - if err != nil { - return nil, err - } - return []string{p}, nil - } - - seen := make(map[string]struct{}, len(platform)) - out := make([]string, 0, len(platform)) - for i := range platform { - p, err := encodePlatform(&platform[i]) - if err != nil { - return nil, err - } - if _, ok := seen[p]; !ok { - out = append(out, p) - seen[p] = struct{}{} - } - } - return out, nil -} - -// encodePlatform marshals the given platform to JSON format, to -// be used for query-parameters for filtering / selecting platforms. It -// is used as a helper for encodePlatforms, -func encodePlatform(platform *ocispec.Platform) (string, error) { - p, err := json.Marshal(platform) - if err != nil { - return "", fmt.Errorf("%w: invalid platform: %v", cerrdefs.ErrInvalidArgument, err) - } - return string(p), nil -} diff --git a/vendor/github.com/docker/docker/client/version.go b/vendor/github.com/docker/docker/client/version.go deleted file mode 100644 index 046af16c..00000000 --- a/vendor/github.com/docker/docker/client/version.go +++ /dev/null @@ -1,21 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - - "github.com/docker/docker/api/types" -) - -// ServerVersion returns information of the docker client and server host. -func (cli *Client) ServerVersion(ctx context.Context) (types.Version, error) { - resp, err := cli.get(ctx, "/version", nil, nil) - defer ensureReaderClosed(resp) - if err != nil { - return types.Version{}, err - } - - var server types.Version - err = json.NewDecoder(resp.Body).Decode(&server) - return server, err -} diff --git a/vendor/github.com/docker/docker/client/volume_create.go b/vendor/github.com/docker/docker/client/volume_create.go deleted file mode 100644 index 1aad3f47..00000000 --- a/vendor/github.com/docker/docker/client/volume_create.go +++ /dev/null @@ -1,21 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - - "github.com/docker/docker/api/types/volume" -) - -// VolumeCreate creates a volume in the docker host. -func (cli *Client) VolumeCreate(ctx context.Context, options volume.CreateOptions) (volume.Volume, error) { - resp, err := cli.post(ctx, "/volumes/create", nil, options, nil) - defer ensureReaderClosed(resp) - if err != nil { - return volume.Volume{}, err - } - - var vol volume.Volume - err = json.NewDecoder(resp.Body).Decode(&vol) - return vol, err -} diff --git a/vendor/github.com/docker/docker/client/volume_inspect.go b/vendor/github.com/docker/docker/client/volume_inspect.go deleted file mode 100644 index 389a4a71..00000000 --- a/vendor/github.com/docker/docker/client/volume_inspect.go +++ /dev/null @@ -1,40 +0,0 @@ -package client - -import ( - "bytes" - "context" - "encoding/json" - "io" - - "github.com/docker/docker/api/types/volume" -) - -// VolumeInspect returns the information about a specific volume in the docker host. -func (cli *Client) VolumeInspect(ctx context.Context, volumeID string) (volume.Volume, error) { - vol, _, err := cli.VolumeInspectWithRaw(ctx, volumeID) - return vol, err -} - -// VolumeInspectWithRaw returns the information about a specific volume in the docker host and its raw representation -func (cli *Client) VolumeInspectWithRaw(ctx context.Context, volumeID string) (volume.Volume, []byte, error) { - volumeID, err := trimID("volume", volumeID) - if err != nil { - return volume.Volume{}, nil, err - } - - resp, err := cli.get(ctx, "/volumes/"+volumeID, nil, nil) - defer ensureReaderClosed(resp) - if err != nil { - return volume.Volume{}, nil, err - } - - body, err := io.ReadAll(resp.Body) - if err != nil { - return volume.Volume{}, nil, err - } - - var vol volume.Volume - rdr := bytes.NewReader(body) - err = json.NewDecoder(rdr).Decode(&vol) - return vol, body, err -} diff --git a/vendor/github.com/docker/docker/client/volume_list.go b/vendor/github.com/docker/docker/client/volume_list.go deleted file mode 100644 index 61ed518c..00000000 --- a/vendor/github.com/docker/docker/client/volume_list.go +++ /dev/null @@ -1,33 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "net/url" - - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/volume" -) - -// VolumeList returns the volumes configured in the docker host. -func (cli *Client) VolumeList(ctx context.Context, options volume.ListOptions) (volume.ListResponse, error) { - query := url.Values{} - - if options.Filters.Len() > 0 { - //nolint:staticcheck // ignore SA1019 for old code - filterJSON, err := filters.ToParamWithVersion(cli.version, options.Filters) - if err != nil { - return volume.ListResponse{}, err - } - query.Set("filters", filterJSON) - } - resp, err := cli.get(ctx, "/volumes", query, nil) - defer ensureReaderClosed(resp) - if err != nil { - return volume.ListResponse{}, err - } - - var volumes volume.ListResponse - err = json.NewDecoder(resp.Body).Decode(&volumes) - return volumes, err -} diff --git a/vendor/github.com/docker/docker/client/volume_prune.go b/vendor/github.com/docker/docker/client/volume_prune.go deleted file mode 100644 index e22f0072..00000000 --- a/vendor/github.com/docker/docker/client/volume_prune.go +++ /dev/null @@ -1,35 +0,0 @@ -package client - -import ( - "context" - "encoding/json" - "fmt" - - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/volume" -) - -// VolumesPrune requests the daemon to delete unused data -func (cli *Client) VolumesPrune(ctx context.Context, pruneFilters filters.Args) (volume.PruneReport, error) { - if err := cli.NewVersionError(ctx, "1.25", "volume prune"); err != nil { - return volume.PruneReport{}, err - } - - query, err := getFiltersQuery(pruneFilters) - if err != nil { - return volume.PruneReport{}, err - } - - resp, err := cli.post(ctx, "/volumes/prune", query, nil, nil) - defer ensureReaderClosed(resp) - if err != nil { - return volume.PruneReport{}, err - } - - var report volume.PruneReport - if err := json.NewDecoder(resp.Body).Decode(&report); err != nil { - return volume.PruneReport{}, fmt.Errorf("Error retrieving volume prune report: %v", err) - } - - return report, nil -} diff --git a/vendor/github.com/docker/docker/client/volume_remove.go b/vendor/github.com/docker/docker/client/volume_remove.go deleted file mode 100644 index e2a53fa9..00000000 --- a/vendor/github.com/docker/docker/client/volume_remove.go +++ /dev/null @@ -1,34 +0,0 @@ -package client - -import ( - "context" - "net/url" - - "github.com/docker/docker/api/types/versions" -) - -// VolumeRemove removes a volume from the docker host. -func (cli *Client) VolumeRemove(ctx context.Context, volumeID string, force bool) error { - volumeID, err := trimID("volume", volumeID) - if err != nil { - return err - } - - query := url.Values{} - if force { - // Make sure we negotiated (if the client is configured to do so), - // as code below contains API-version specific handling of options. - // - // Normally, version-negotiation (if enabled) would not happen until - // the API request is made. - if err := cli.checkVersion(ctx); err != nil { - return err - } - if versions.GreaterThanOrEqualTo(cli.version, "1.25") { - query.Set("force", "1") - } - } - resp, err := cli.delete(ctx, "/volumes/"+volumeID, query, nil) - defer ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/client/volume_update.go b/vendor/github.com/docker/docker/client/volume_update.go deleted file mode 100644 index 879932f0..00000000 --- a/vendor/github.com/docker/docker/client/volume_update.go +++ /dev/null @@ -1,28 +0,0 @@ -package client - -import ( - "context" - "net/url" - - "github.com/docker/docker/api/types/swarm" - "github.com/docker/docker/api/types/volume" -) - -// VolumeUpdate updates a volume. This only works for Cluster Volumes, and -// only some fields can be updated. -func (cli *Client) VolumeUpdate(ctx context.Context, volumeID string, version swarm.Version, options volume.UpdateOptions) error { - volumeID, err := trimID("volume", volumeID) - if err != nil { - return err - } - if err := cli.NewVersionError(ctx, "1.42", "volume update"); err != nil { - return err - } - - query := url.Values{} - query.Set("version", version.String()) - - resp, err := cli.put(ctx, "/volumes/"+volumeID, query, options, nil) - ensureReaderClosed(resp) - return err -} diff --git a/vendor/github.com/docker/docker/errdefs/defs.go b/vendor/github.com/docker/docker/errdefs/defs.go deleted file mode 100644 index a5523c3e..00000000 --- a/vendor/github.com/docker/docker/errdefs/defs.go +++ /dev/null @@ -1,69 +0,0 @@ -package errdefs - -// ErrNotFound signals that the requested object doesn't exist -type ErrNotFound interface { - NotFound() -} - -// ErrInvalidParameter signals that the user input is invalid -type ErrInvalidParameter interface { - InvalidParameter() -} - -// ErrConflict signals that some internal state conflicts with the requested action and can't be performed. -// A change in state should be able to clear this error. -type ErrConflict interface { - Conflict() -} - -// ErrUnauthorized is used to signify that the user is not authorized to perform a specific action -type ErrUnauthorized interface { - Unauthorized() -} - -// ErrUnavailable signals that the requested action/subsystem is not available. -type ErrUnavailable interface { - Unavailable() -} - -// ErrForbidden signals that the requested action cannot be performed under any circumstances. -// When a ErrForbidden is returned, the caller should never retry the action. -type ErrForbidden interface { - Forbidden() -} - -// ErrSystem signals that some internal error occurred. -// An example of this would be a failed mount request. -type ErrSystem interface { - System() -} - -// ErrNotModified signals that an action can't be performed because it's already in the desired state -type ErrNotModified interface { - NotModified() -} - -// ErrNotImplemented signals that the requested action/feature is not implemented on the system as configured. -type ErrNotImplemented interface { - NotImplemented() -} - -// ErrUnknown signals that the kind of error that occurred is not known. -type ErrUnknown interface { - Unknown() -} - -// ErrCancelled signals that the action was cancelled. -type ErrCancelled interface { - Cancelled() -} - -// ErrDeadline signals that the deadline was reached before the action completed. -type ErrDeadline interface { - DeadlineExceeded() -} - -// ErrDataLoss indicates that data was lost or there is data corruption. -type ErrDataLoss interface { - DataLoss() -} diff --git a/vendor/github.com/docker/docker/errdefs/doc.go b/vendor/github.com/docker/docker/errdefs/doc.go deleted file mode 100644 index efbe8ba9..00000000 --- a/vendor/github.com/docker/docker/errdefs/doc.go +++ /dev/null @@ -1,8 +0,0 @@ -// Package errdefs defines a set of error interfaces that packages should use for communicating classes of errors. -// Errors that cross the package boundary should implement one (and only one) of these interfaces. -// -// Packages should not reference these interfaces directly, only implement them. -// To check if a particular error implements one of these interfaces, there are helper -// functions provided (e.g. `Is`) which can be used rather than asserting the interfaces directly. -// If you must assert on these interfaces, be sure to check the causal chain (`err.Unwrap()`). -package errdefs diff --git a/vendor/github.com/docker/docker/errdefs/helpers.go b/vendor/github.com/docker/docker/errdefs/helpers.go deleted file mode 100644 index 2a9f7ffd..00000000 --- a/vendor/github.com/docker/docker/errdefs/helpers.go +++ /dev/null @@ -1,309 +0,0 @@ -package errdefs - -import ( - "context" - - cerrdefs "github.com/containerd/errdefs" -) - -type errNotFound struct{ error } - -func (errNotFound) NotFound() {} - -func (e errNotFound) Cause() error { - return e.error -} - -func (e errNotFound) Unwrap() error { - return e.error -} - -// NotFound creates an [ErrNotFound] error from the given error. -// It returns the error as-is if it is either nil (no error) or already implements -// [ErrNotFound], -func NotFound(err error) error { - if err == nil || cerrdefs.IsNotFound(err) { - return err - } - return errNotFound{err} -} - -type errInvalidParameter struct{ error } - -func (errInvalidParameter) InvalidParameter() {} - -func (e errInvalidParameter) Cause() error { - return e.error -} - -func (e errInvalidParameter) Unwrap() error { - return e.error -} - -// InvalidParameter creates an [ErrInvalidParameter] error from the given error. -// It returns the error as-is if it is either nil (no error) or already implements -// [ErrInvalidParameter], -func InvalidParameter(err error) error { - if err == nil || cerrdefs.IsInvalidArgument(err) { - return err - } - return errInvalidParameter{err} -} - -type errConflict struct{ error } - -func (errConflict) Conflict() {} - -func (e errConflict) Cause() error { - return e.error -} - -func (e errConflict) Unwrap() error { - return e.error -} - -// Conflict creates an [ErrConflict] error from the given error. -// It returns the error as-is if it is either nil (no error) or already implements -// [ErrConflict], -func Conflict(err error) error { - if err == nil || cerrdefs.IsConflict(err) { - return err - } - return errConflict{err} -} - -type errUnauthorized struct{ error } - -func (errUnauthorized) Unauthorized() {} - -func (e errUnauthorized) Cause() error { - return e.error -} - -func (e errUnauthorized) Unwrap() error { - return e.error -} - -// Unauthorized creates an [ErrUnauthorized] error from the given error. -// It returns the error as-is if it is either nil (no error) or already implements -// [ErrUnauthorized], -func Unauthorized(err error) error { - if err == nil || cerrdefs.IsUnauthorized(err) { - return err - } - return errUnauthorized{err} -} - -type errUnavailable struct{ error } - -func (errUnavailable) Unavailable() {} - -func (e errUnavailable) Cause() error { - return e.error -} - -func (e errUnavailable) Unwrap() error { - return e.error -} - -// Unavailable creates an [ErrUnavailable] error from the given error. -// It returns the error as-is if it is either nil (no error) or already implements -// [ErrUnavailable], -func Unavailable(err error) error { - if err == nil || cerrdefs.IsUnavailable(err) { - return err - } - return errUnavailable{err} -} - -type errForbidden struct{ error } - -func (errForbidden) Forbidden() {} - -func (e errForbidden) Cause() error { - return e.error -} - -func (e errForbidden) Unwrap() error { - return e.error -} - -// Forbidden creates an [ErrForbidden] error from the given error. -// It returns the error as-is if it is either nil (no error) or already implements -// [ErrForbidden], -func Forbidden(err error) error { - if err == nil || cerrdefs.IsPermissionDenied(err) { - return err - } - return errForbidden{err} -} - -type errSystem struct{ error } - -func (errSystem) System() {} - -func (e errSystem) Cause() error { - return e.error -} - -func (e errSystem) Unwrap() error { - return e.error -} - -// System creates an [ErrSystem] error from the given error. -// It returns the error as-is if it is either nil (no error) or already implements -// [ErrSystem], -func System(err error) error { - if err == nil || cerrdefs.IsInternal(err) { - return err - } - return errSystem{err} -} - -type errNotModified struct{ error } - -func (errNotModified) NotModified() {} - -func (e errNotModified) Cause() error { - return e.error -} - -func (e errNotModified) Unwrap() error { - return e.error -} - -// NotModified creates an [ErrNotModified] error from the given error. -// It returns the error as-is if it is either nil (no error) or already implements -// [NotModified], -func NotModified(err error) error { - if err == nil || cerrdefs.IsNotModified(err) { - return err - } - return errNotModified{err} -} - -type errNotImplemented struct{ error } - -func (errNotImplemented) NotImplemented() {} - -func (e errNotImplemented) Cause() error { - return e.error -} - -func (e errNotImplemented) Unwrap() error { - return e.error -} - -// NotImplemented creates an [ErrNotImplemented] error from the given error. -// It returns the error as-is if it is either nil (no error) or already implements -// [ErrNotImplemented], -func NotImplemented(err error) error { - if err == nil || cerrdefs.IsNotImplemented(err) { - return err - } - return errNotImplemented{err} -} - -type errUnknown struct{ error } - -func (errUnknown) Unknown() {} - -func (e errUnknown) Cause() error { - return e.error -} - -func (e errUnknown) Unwrap() error { - return e.error -} - -// Unknown creates an [ErrUnknown] error from the given error. -// It returns the error as-is if it is either nil (no error) or already implements -// [ErrUnknown], -func Unknown(err error) error { - if err == nil || cerrdefs.IsUnknown(err) { - return err - } - return errUnknown{err} -} - -type errCancelled struct{ error } - -func (errCancelled) Cancelled() {} - -func (e errCancelled) Cause() error { - return e.error -} - -func (e errCancelled) Unwrap() error { - return e.error -} - -// Cancelled creates an [ErrCancelled] error from the given error. -// It returns the error as-is if it is either nil (no error) or already implements -// [ErrCancelled], -func Cancelled(err error) error { - if err == nil || cerrdefs.IsCanceled(err) { - return err - } - return errCancelled{err} -} - -type errDeadline struct{ error } - -func (errDeadline) DeadlineExceeded() {} - -func (e errDeadline) Cause() error { - return e.error -} - -func (e errDeadline) Unwrap() error { - return e.error -} - -// Deadline creates an [ErrDeadline] error from the given error. -// It returns the error as-is if it is either nil (no error) or already implements -// [ErrDeadline], -func Deadline(err error) error { - if err == nil || cerrdefs.IsDeadlineExceeded(err) { - return err - } - return errDeadline{err} -} - -type errDataLoss struct{ error } - -func (errDataLoss) DataLoss() {} - -func (e errDataLoss) Cause() error { - return e.error -} - -func (e errDataLoss) Unwrap() error { - return e.error -} - -// DataLoss creates an [ErrDataLoss] error from the given error. -// It returns the error as-is if it is either nil (no error) or already implements -// [ErrDataLoss], -func DataLoss(err error) error { - if err == nil || cerrdefs.IsDataLoss(err) { - return err - } - return errDataLoss{err} -} - -// FromContext returns the error class from the passed in context -func FromContext(ctx context.Context) error { - e := ctx.Err() - if e == nil { - return nil - } - - if e == context.Canceled { - return Cancelled(e) - } - if e == context.DeadlineExceeded { - return Deadline(e) - } - return Unknown(e) -} diff --git a/vendor/github.com/docker/docker/errdefs/http_helpers.go b/vendor/github.com/docker/docker/errdefs/http_helpers.go deleted file mode 100644 index 823ff2d9..00000000 --- a/vendor/github.com/docker/docker/errdefs/http_helpers.go +++ /dev/null @@ -1,49 +0,0 @@ -package errdefs - -import ( - "net/http" -) - -// FromStatusCode creates an errdef error, based on the provided HTTP status-code -// -// Deprecated: Use [cerrdefs.ToNative] instead -func FromStatusCode(err error, statusCode int) error { - if err == nil { - return nil - } - switch statusCode { - case http.StatusNotFound: - return NotFound(err) - case http.StatusBadRequest: - return InvalidParameter(err) - case http.StatusConflict: - return Conflict(err) - case http.StatusUnauthorized: - return Unauthorized(err) - case http.StatusServiceUnavailable: - return Unavailable(err) - case http.StatusForbidden: - return Forbidden(err) - case http.StatusNotModified: - return NotModified(err) - case http.StatusNotImplemented: - return NotImplemented(err) - case http.StatusInternalServerError: - if IsCancelled(err) || IsSystem(err) || IsUnknown(err) || IsDataLoss(err) || IsDeadline(err) { - return err - } - return System(err) - default: - switch { - case statusCode >= http.StatusOK && statusCode < http.StatusBadRequest: - // it's a client error - return err - case statusCode >= http.StatusBadRequest && statusCode < http.StatusInternalServerError: - return InvalidParameter(err) - case statusCode >= http.StatusInternalServerError && statusCode < 600: - return System(err) - default: - return Unknown(err) - } - } -} diff --git a/vendor/github.com/docker/docker/errdefs/is.go b/vendor/github.com/docker/docker/errdefs/is.go deleted file mode 100644 index ceb754a9..00000000 --- a/vendor/github.com/docker/docker/errdefs/is.go +++ /dev/null @@ -1,78 +0,0 @@ -package errdefs - -import ( - "context" - "errors" - - cerrdefs "github.com/containerd/errdefs" -) - -// IsNotFound returns if the passed in error is an [ErrNotFound], -// -// Deprecated: use containerd [cerrdefs.IsNotFound] -var IsNotFound = cerrdefs.IsNotFound - -// IsInvalidParameter returns if the passed in error is an [ErrInvalidParameter]. -// -// Deprecated: use containerd [cerrdefs.IsInvalidArgument] -var IsInvalidParameter = cerrdefs.IsInvalidArgument - -// IsConflict returns if the passed in error is an [ErrConflict]. -// -// Deprecated: use containerd [cerrdefs.IsConflict] -var IsConflict = cerrdefs.IsConflict - -// IsUnauthorized returns if the passed in error is an [ErrUnauthorized]. -// -// Deprecated: use containerd [cerrdefs.IsUnauthorized] -var IsUnauthorized = cerrdefs.IsUnauthorized - -// IsUnavailable returns if the passed in error is an [ErrUnavailable]. -// -// Deprecated: use containerd [cerrdefs.IsUnavailable] -var IsUnavailable = cerrdefs.IsUnavailable - -// IsForbidden returns if the passed in error is an [ErrForbidden]. -// -// Deprecated: use containerd [cerrdefs.IsPermissionDenied] -var IsForbidden = cerrdefs.IsPermissionDenied - -// IsSystem returns if the passed in error is an [ErrSystem]. -// -// Deprecated: use containerd [cerrdefs.IsInternal] -var IsSystem = cerrdefs.IsInternal - -// IsNotModified returns if the passed in error is an [ErrNotModified]. -// -// Deprecated: use containerd [cerrdefs.IsNotModified] -var IsNotModified = cerrdefs.IsNotModified - -// IsNotImplemented returns if the passed in error is an [ErrNotImplemented]. -// -// Deprecated: use containerd [cerrdefs.IsNotImplemented] -var IsNotImplemented = cerrdefs.IsNotImplemented - -// IsUnknown returns if the passed in error is an [ErrUnknown]. -// -// Deprecated: use containerd [cerrdefs.IsUnknown] -var IsUnknown = cerrdefs.IsUnknown - -// IsCancelled returns if the passed in error is an [ErrCancelled]. -// -// Deprecated: use containerd [cerrdefs.IsCanceled] -var IsCancelled = cerrdefs.IsCanceled - -// IsDeadline returns if the passed in error is an [ErrDeadline]. -// -// Deprecated: use containerd [cerrdefs.IsDeadlineExceeded] -var IsDeadline = cerrdefs.IsDeadlineExceeded - -// IsDataLoss returns if the passed in error is an [ErrDataLoss]. -// -// Deprecated: use containerd [cerrdefs.IsDataLoss] -var IsDataLoss = cerrdefs.IsDataLoss - -// IsContext returns if the passed in error is due to context cancellation or deadline exceeded. -func IsContext(err error) bool { - return errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) -} diff --git a/vendor/github.com/docker/docker/pkg/ioutils/fswriters_deprecated.go b/vendor/github.com/docker/docker/pkg/ioutils/fswriters_deprecated.go deleted file mode 100644 index f34e0691..00000000 --- a/vendor/github.com/docker/docker/pkg/ioutils/fswriters_deprecated.go +++ /dev/null @@ -1,44 +0,0 @@ -package ioutils - -import ( - "io" - "os" - - "github.com/moby/sys/atomicwriter" -) - -// NewAtomicFileWriter returns WriteCloser so that writing to it writes to a -// temporary file and closing it atomically changes the temporary file to -// destination path. Writing and closing concurrently is not allowed. -// NOTE: umask is not considered for the file's permissions. -// -// Deprecated: use [atomicwriter.New] instead. -func NewAtomicFileWriter(filename string, perm os.FileMode) (io.WriteCloser, error) { - return atomicwriter.New(filename, perm) -} - -// AtomicWriteFile atomically writes data to a file named by filename and with the specified permission bits. -// NOTE: umask is not considered for the file's permissions. -// -// Deprecated: use [atomicwriter.WriteFile] instead. -func AtomicWriteFile(filename string, data []byte, perm os.FileMode) error { - return atomicwriter.WriteFile(filename, data, perm) -} - -// AtomicWriteSet is used to atomically write a set -// of files and ensure they are visible at the same time. -// Must be committed to a new directory. -// -// Deprecated: use [atomicwriter.WriteSet] instead. -type AtomicWriteSet = atomicwriter.WriteSet - -// NewAtomicWriteSet creates a new atomic write set to -// atomically create a set of files. The given directory -// is used as the base directory for storing files before -// commit. If no temporary directory is given the system -// default is used. -// -// Deprecated: use [atomicwriter.NewWriteSet] instead. -func NewAtomicWriteSet(tmpDir string) (*atomicwriter.WriteSet, error) { - return atomicwriter.NewWriteSet(tmpDir) -} diff --git a/vendor/github.com/docker/docker/pkg/ioutils/readers.go b/vendor/github.com/docker/docker/pkg/ioutils/readers.go deleted file mode 100644 index 21c7a2f6..00000000 --- a/vendor/github.com/docker/docker/pkg/ioutils/readers.go +++ /dev/null @@ -1,118 +0,0 @@ -package ioutils - -import ( - "context" - "io" - "runtime/debug" - "sync/atomic" - - "github.com/containerd/log" -) - -// readCloserWrapper wraps an io.Reader, and implements an io.ReadCloser -// It calls the given callback function when closed. It should be constructed -// with NewReadCloserWrapper -type readCloserWrapper struct { - io.Reader - closer func() error - closed atomic.Bool -} - -// Close calls back the passed closer function -func (r *readCloserWrapper) Close() error { - if !r.closed.CompareAndSwap(false, true) { - subsequentCloseWarn("ReadCloserWrapper") - return nil - } - return r.closer() -} - -// NewReadCloserWrapper wraps an io.Reader, and implements an io.ReadCloser. -// It calls the given callback function when closed. -func NewReadCloserWrapper(r io.Reader, closer func() error) io.ReadCloser { - return &readCloserWrapper{ - Reader: r, - closer: closer, - } -} - -// cancelReadCloser wraps an io.ReadCloser with a context for cancelling read -// operations. -type cancelReadCloser struct { - cancel func() - pR *io.PipeReader // Stream to read from - pW *io.PipeWriter - closed atomic.Bool -} - -// NewCancelReadCloser creates a wrapper that closes the ReadCloser when the -// context is cancelled. The returned io.ReadCloser must be closed when it is -// no longer needed. -func NewCancelReadCloser(ctx context.Context, in io.ReadCloser) io.ReadCloser { - pR, pW := io.Pipe() - - // Create a context used to signal when the pipe is closed - doneCtx, cancel := context.WithCancel(context.Background()) - - p := &cancelReadCloser{ - cancel: cancel, - pR: pR, - pW: pW, - } - - go func() { - _, err := io.Copy(pW, in) - select { - case <-ctx.Done(): - // If the context was closed, p.closeWithError - // was already called. Calling it again would - // change the error that Read returns. - default: - p.closeWithError(err) - } - in.Close() - }() - go func() { - for { - select { - case <-ctx.Done(): - p.closeWithError(ctx.Err()) - case <-doneCtx.Done(): - return - } - } - }() - - return p -} - -// Read wraps the Read method of the pipe that provides data from the wrapped -// ReadCloser. -func (p *cancelReadCloser) Read(buf []byte) (int, error) { - return p.pR.Read(buf) -} - -// closeWithError closes the wrapper and its underlying reader. It will -// cause future calls to Read to return err. -func (p *cancelReadCloser) closeWithError(err error) { - _ = p.pW.CloseWithError(err) - p.cancel() -} - -// Close closes the wrapper its underlying reader. It will cause -// future calls to Read to return io.EOF. -func (p *cancelReadCloser) Close() error { - if !p.closed.CompareAndSwap(false, true) { - subsequentCloseWarn("cancelReadCloser") - return nil - } - p.closeWithError(io.EOF) - return nil -} - -func subsequentCloseWarn(name string) { - log.G(context.TODO()).Error("subsequent attempt to close " + name) - if log.GetLevel() >= log.DebugLevel { - log.G(context.TODO()).Errorf("stack trace: %s", string(debug.Stack())) - } -} diff --git a/vendor/github.com/docker/docker/pkg/ioutils/writeflusher.go b/vendor/github.com/docker/docker/pkg/ioutils/writeflusher.go deleted file mode 100644 index 8d60ef2f..00000000 --- a/vendor/github.com/docker/docker/pkg/ioutils/writeflusher.go +++ /dev/null @@ -1,96 +0,0 @@ -package ioutils - -import ( - "io" - "sync" -) - -// WriteFlusher wraps the Write and Flush operation ensuring that every write -// is a flush. In addition, the Close method can be called to intercept -// Read/Write calls if the targets lifecycle has already ended. -type WriteFlusher struct { - w io.Writer - flusher flusher - flushed chan struct{} - flushedOnce sync.Once - closed chan struct{} - closeLock sync.Mutex -} - -type flusher interface { - Flush() -} - -func (wf *WriteFlusher) Write(b []byte) (int, error) { - select { - case <-wf.closed: - return 0, io.EOF - default: - } - - n, err := wf.w.Write(b) - wf.Flush() // every write is a flush. - return n, err -} - -// Flush the stream immediately. -func (wf *WriteFlusher) Flush() { - select { - case <-wf.closed: - return - default: - } - - wf.flushedOnce.Do(func() { - close(wf.flushed) - }) - wf.flusher.Flush() -} - -// Flushed returns the state of flushed. -// If it's flushed, return true, or else it return false. -func (wf *WriteFlusher) Flushed() bool { - // BUG(stevvooe): Remove this method. Its use is inherently racy. Seems to - // be used to detect whether or a response code has been issued or not. - // Another hook should be used instead. - var flushed bool - select { - case <-wf.flushed: - flushed = true - default: - } - return flushed -} - -// Close closes the write flusher, disallowing any further writes to the -// target. After the flusher is closed, all calls to write or flush will -// result in an error. -func (wf *WriteFlusher) Close() error { - wf.closeLock.Lock() - defer wf.closeLock.Unlock() - - select { - case <-wf.closed: - return io.EOF - default: - close(wf.closed) - } - return nil -} - -// nopFlusher represents a type which flush operation is nop. -type nopFlusher struct{} - -// Flush is a nop operation. -func (f *nopFlusher) Flush() {} - -// NewWriteFlusher returns a new WriteFlusher. -func NewWriteFlusher(w io.Writer) *WriteFlusher { - var fl flusher - if f, ok := w.(flusher); ok { - fl = f - } else { - fl = &nopFlusher{} - } - return &WriteFlusher{w: w, flusher: fl, closed: make(chan struct{}), flushed: make(chan struct{})} -} diff --git a/vendor/github.com/docker/docker/pkg/ioutils/writers.go b/vendor/github.com/docker/docker/pkg/ioutils/writers.go deleted file mode 100644 index 4cf2d4de..00000000 --- a/vendor/github.com/docker/docker/pkg/ioutils/writers.go +++ /dev/null @@ -1,28 +0,0 @@ -package ioutils - -import ( - "io" - "sync/atomic" -) - -type writeCloserWrapper struct { - io.Writer - closer func() error - closed atomic.Bool -} - -func (r *writeCloserWrapper) Close() error { - if !r.closed.CompareAndSwap(false, true) { - subsequentCloseWarn("WriteCloserWrapper") - return nil - } - return r.closer() -} - -// NewWriteCloserWrapper returns a new io.WriteCloser. -func NewWriteCloserWrapper(r io.Writer, closer func() error) io.WriteCloser { - return &writeCloserWrapper{ - Writer: r, - closer: closer, - } -} diff --git a/vendor/github.com/docker/docker/pkg/stdcopy/stdcopy.go b/vendor/github.com/docker/docker/pkg/stdcopy/stdcopy.go deleted file mode 100644 index 611432a6..00000000 --- a/vendor/github.com/docker/docker/pkg/stdcopy/stdcopy.go +++ /dev/null @@ -1,190 +0,0 @@ -package stdcopy - -import ( - "bytes" - "encoding/binary" - "errors" - "fmt" - "io" - "sync" -) - -// StdType is the type of standard stream -// a writer can multiplex to. -type StdType byte - -const ( - // Stdin represents standard input stream type. - Stdin StdType = iota - // Stdout represents standard output stream type. - Stdout - // Stderr represents standard error steam type. - Stderr - // Systemerr represents errors originating from the system that make it - // into the multiplexed stream. - Systemerr - - stdWriterPrefixLen = 8 - stdWriterFdIndex = 0 - stdWriterSizeIndex = 4 - - startingBufLen = 32*1024 + stdWriterPrefixLen + 1 -) - -var bufPool = &sync.Pool{New: func() interface{} { return bytes.NewBuffer(nil) }} - -// stdWriter is wrapper of io.Writer with extra customized info. -type stdWriter struct { - io.Writer - prefix byte -} - -// Write sends the buffer to the underneath writer. -// It inserts the prefix header before the buffer, -// so stdcopy.StdCopy knows where to multiplex the output. -// It makes stdWriter to implement io.Writer. -func (w *stdWriter) Write(p []byte) (int, error) { - if w == nil || w.Writer == nil { - return 0, errors.New("writer not instantiated") - } - if p == nil { - return 0, nil - } - - header := [stdWriterPrefixLen]byte{stdWriterFdIndex: w.prefix} - binary.BigEndian.PutUint32(header[stdWriterSizeIndex:], uint32(len(p))) - buf := bufPool.Get().(*bytes.Buffer) - buf.Write(header[:]) - buf.Write(p) - - n, err := w.Writer.Write(buf.Bytes()) - n -= stdWriterPrefixLen - if n < 0 { - n = 0 - } - - buf.Reset() - bufPool.Put(buf) - return n, err -} - -// NewStdWriter instantiates a new Writer. -// Everything written to it will be encapsulated using a custom format, -// and written to the underlying `w` stream. -// This allows multiple write streams (e.g. stdout and stderr) to be muxed into a single connection. -// `t` indicates the id of the stream to encapsulate. -// It can be stdcopy.Stdin, stdcopy.Stdout, stdcopy.Stderr. -func NewStdWriter(w io.Writer, t StdType) io.Writer { - return &stdWriter{ - Writer: w, - prefix: byte(t), - } -} - -// StdCopy is a modified version of io.Copy. -// -// StdCopy will demultiplex `src`, assuming that it contains two streams, -// previously multiplexed together using a StdWriter instance. -// As it reads from `src`, StdCopy will write to `dstout` and `dsterr`. -// -// StdCopy will read until it hits EOF on `src`. It will then return a nil error. -// In other words: if `err` is non nil, it indicates a real underlying error. -// -// `written` will hold the total number of bytes written to `dstout` and `dsterr`. -func StdCopy(dstout, dsterr io.Writer, src io.Reader) (written int64, _ error) { - var ( - buf = make([]byte, startingBufLen) - bufLen = len(buf) - nr, nw int - err error - out io.Writer - frameSize int - ) - - for { - // Make sure we have at least a full header - for nr < stdWriterPrefixLen { - var nr2 int - nr2, err = src.Read(buf[nr:]) - nr += nr2 - if errors.Is(err, io.EOF) { - if nr < stdWriterPrefixLen { - return written, nil - } - break - } - if err != nil { - return 0, err - } - } - - stream := StdType(buf[stdWriterFdIndex]) - // Check the first byte to know where to write - switch stream { - case Stdin: - fallthrough - case Stdout: - // Write on stdout - out = dstout - case Stderr: - // Write on stderr - out = dsterr - case Systemerr: - // If we're on Systemerr, we won't write anywhere. - // NB: if this code changes later, make sure you don't try to write - // to outstream if Systemerr is the stream - out = nil - default: - return 0, fmt.Errorf("Unrecognized input header: %d", buf[stdWriterFdIndex]) - } - - // Retrieve the size of the frame - frameSize = int(binary.BigEndian.Uint32(buf[stdWriterSizeIndex : stdWriterSizeIndex+4])) - - // Check if the buffer is big enough to read the frame. - // Extend it if necessary. - if frameSize+stdWriterPrefixLen > bufLen { - buf = append(buf, make([]byte, frameSize+stdWriterPrefixLen-bufLen+1)...) - bufLen = len(buf) - } - - // While the amount of bytes read is less than the size of the frame + header, we keep reading - for nr < frameSize+stdWriterPrefixLen { - var nr2 int - nr2, err = src.Read(buf[nr:]) - nr += nr2 - if errors.Is(err, io.EOF) { - if nr < frameSize+stdWriterPrefixLen { - return written, nil - } - break - } - if err != nil { - return 0, err - } - } - - // we might have an error from the source mixed up in our multiplexed - // stream. if we do, return it. - if stream == Systemerr { - return written, fmt.Errorf("error from daemon in stream: %s", string(buf[stdWriterPrefixLen:frameSize+stdWriterPrefixLen])) - } - - // Write the retrieved frame (without header) - nw, err = out.Write(buf[stdWriterPrefixLen : frameSize+stdWriterPrefixLen]) - if err != nil { - return 0, err - } - - // If the frame has not been fully written: error - if nw != frameSize { - return 0, io.ErrShortWrite - } - written += int64(nw) - - // Move the rest of the buffer to the beginning - copy(buf, buf[frameSize+stdWriterPrefixLen:]) - // Move the index - nr -= frameSize + stdWriterPrefixLen - } -} diff --git a/vendor/github.com/docker/go-connections/LICENSE b/vendor/github.com/docker/go-connections/LICENSE deleted file mode 100644 index b55b37bc..00000000 --- a/vendor/github.com/docker/go-connections/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright 2015 Docker, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/docker/go-connections/nat/nat.go b/vendor/github.com/docker/go-connections/nat/nat.go deleted file mode 100644 index 4049d780..00000000 --- a/vendor/github.com/docker/go-connections/nat/nat.go +++ /dev/null @@ -1,240 +0,0 @@ -// Package nat is a convenience package for manipulation of strings describing network ports. -package nat - -import ( - "fmt" - "net" - "strconv" - "strings" -) - -// PortBinding represents a binding between a Host IP address and a Host Port -type PortBinding struct { - // HostIP is the host IP Address - HostIP string `json:"HostIp"` - // HostPort is the host port number - HostPort string -} - -// PortMap is a collection of PortBinding indexed by Port -type PortMap map[Port][]PortBinding - -// PortSet is a collection of structs indexed by Port -type PortSet map[Port]struct{} - -// Port is a string containing port number and protocol in the format "80/tcp" -type Port string - -// NewPort creates a new instance of a Port given a protocol and port number or port range -func NewPort(proto, port string) (Port, error) { - // Check for parsing issues on "port" now so we can avoid having - // to check it later on. - - portStartInt, portEndInt, err := ParsePortRangeToInt(port) - if err != nil { - return "", err - } - - if portStartInt == portEndInt { - return Port(fmt.Sprintf("%d/%s", portStartInt, proto)), nil - } - return Port(fmt.Sprintf("%d-%d/%s", portStartInt, portEndInt, proto)), nil -} - -// ParsePort parses the port number string and returns an int -func ParsePort(rawPort string) (int, error) { - if len(rawPort) == 0 { - return 0, nil - } - port, err := strconv.ParseUint(rawPort, 10, 16) - if err != nil { - return 0, err - } - return int(port), nil -} - -// ParsePortRangeToInt parses the port range string and returns start/end ints -func ParsePortRangeToInt(rawPort string) (int, int, error) { - if len(rawPort) == 0 { - return 0, 0, nil - } - start, end, err := ParsePortRange(rawPort) - if err != nil { - return 0, 0, err - } - return int(start), int(end), nil -} - -// Proto returns the protocol of a Port -func (p Port) Proto() string { - proto, _ := SplitProtoPort(string(p)) - return proto -} - -// Port returns the port number of a Port -func (p Port) Port() string { - _, port := SplitProtoPort(string(p)) - return port -} - -// Int returns the port number of a Port as an int -func (p Port) Int() int { - portStr := p.Port() - // We don't need to check for an error because we're going to - // assume that any error would have been found, and reported, in NewPort() - port, _ := ParsePort(portStr) - return port -} - -// Range returns the start/end port numbers of a Port range as ints -func (p Port) Range() (int, int, error) { - return ParsePortRangeToInt(p.Port()) -} - -// SplitProtoPort splits a port in the format of proto/port -func SplitProtoPort(rawPort string) (string, string) { - parts := strings.Split(rawPort, "/") - l := len(parts) - if len(rawPort) == 0 || l == 0 || len(parts[0]) == 0 { - return "", "" - } - if l == 1 { - return "tcp", rawPort - } - if len(parts[1]) == 0 { - return "tcp", parts[0] - } - return parts[1], parts[0] -} - -func validateProto(proto string) bool { - for _, availableProto := range []string{"tcp", "udp", "sctp"} { - if availableProto == proto { - return true - } - } - return false -} - -// ParsePortSpecs receives port specs in the format of ip:public:private/proto and parses -// these in to the internal types -func ParsePortSpecs(ports []string) (map[Port]struct{}, map[Port][]PortBinding, error) { - var ( - exposedPorts = make(map[Port]struct{}, len(ports)) - bindings = make(map[Port][]PortBinding) - ) - for _, rawPort := range ports { - portMappings, err := ParsePortSpec(rawPort) - if err != nil { - return nil, nil, err - } - - for _, portMapping := range portMappings { - port := portMapping.Port - if _, exists := exposedPorts[port]; !exists { - exposedPorts[port] = struct{}{} - } - bslice, exists := bindings[port] - if !exists { - bslice = []PortBinding{} - } - bindings[port] = append(bslice, portMapping.Binding) - } - } - return exposedPorts, bindings, nil -} - -// PortMapping is a data object mapping a Port to a PortBinding -type PortMapping struct { - Port Port - Binding PortBinding -} - -func splitParts(rawport string) (string, string, string) { - parts := strings.Split(rawport, ":") - n := len(parts) - containerPort := parts[n-1] - - switch n { - case 1: - return "", "", containerPort - case 2: - return "", parts[0], containerPort - case 3: - return parts[0], parts[1], containerPort - default: - return strings.Join(parts[:n-2], ":"), parts[n-2], containerPort - } -} - -// ParsePortSpec parses a port specification string into a slice of PortMappings -func ParsePortSpec(rawPort string) ([]PortMapping, error) { - var proto string - ip, hostPort, containerPort := splitParts(rawPort) - proto, containerPort = SplitProtoPort(containerPort) - - if ip != "" && ip[0] == '[' { - // Strip [] from IPV6 addresses - rawIP, _, err := net.SplitHostPort(ip + ":") - if err != nil { - return nil, fmt.Errorf("invalid IP address %v: %w", ip, err) - } - ip = rawIP - } - if ip != "" && net.ParseIP(ip) == nil { - return nil, fmt.Errorf("invalid IP address: %s", ip) - } - if containerPort == "" { - return nil, fmt.Errorf("no port specified: %s", rawPort) - } - - startPort, endPort, err := ParsePortRange(containerPort) - if err != nil { - return nil, fmt.Errorf("invalid containerPort: %s", containerPort) - } - - var startHostPort, endHostPort uint64 = 0, 0 - if len(hostPort) > 0 { - startHostPort, endHostPort, err = ParsePortRange(hostPort) - if err != nil { - return nil, fmt.Errorf("invalid hostPort: %s", hostPort) - } - } - - if hostPort != "" && (endPort-startPort) != (endHostPort-startHostPort) { - // Allow host port range iff containerPort is not a range. - // In this case, use the host port range as the dynamic - // host port range to allocate into. - if endPort != startPort { - return nil, fmt.Errorf("invalid ranges specified for container and host Ports: %s and %s", containerPort, hostPort) - } - } - - if !validateProto(strings.ToLower(proto)) { - return nil, fmt.Errorf("invalid proto: %s", proto) - } - - ports := []PortMapping{} - for i := uint64(0); i <= (endPort - startPort); i++ { - containerPort = strconv.FormatUint(startPort+i, 10) - if len(hostPort) > 0 { - hostPort = strconv.FormatUint(startHostPort+i, 10) - } - // Set hostPort to a range only if there is a single container port - // and a dynamic host port. - if startPort == endPort && startHostPort != endHostPort { - hostPort = fmt.Sprintf("%s-%s", hostPort, strconv.FormatUint(endHostPort, 10)) - } - port, err := NewPort(strings.ToLower(proto), containerPort) - if err != nil { - return nil, err - } - - binding := PortBinding{ - HostIP: ip, - HostPort: hostPort, - } - ports = append(ports, PortMapping{Port: port, Binding: binding}) - } - return ports, nil -} diff --git a/vendor/github.com/docker/go-connections/nat/parse.go b/vendor/github.com/docker/go-connections/nat/parse.go deleted file mode 100644 index e4b53e8a..00000000 --- a/vendor/github.com/docker/go-connections/nat/parse.go +++ /dev/null @@ -1,33 +0,0 @@ -package nat - -import ( - "fmt" - "strconv" - "strings" -) - -// ParsePortRange parses and validates the specified string as a port-range (8000-9000) -func ParsePortRange(ports string) (uint64, uint64, error) { - if ports == "" { - return 0, 0, fmt.Errorf("empty string specified for ports") - } - if !strings.Contains(ports, "-") { - start, err := strconv.ParseUint(ports, 10, 16) - end := start - return start, end, err - } - - parts := strings.Split(ports, "-") - start, err := strconv.ParseUint(parts[0], 10, 16) - if err != nil { - return 0, 0, err - } - end, err := strconv.ParseUint(parts[1], 10, 16) - if err != nil { - return 0, 0, err - } - if end < start { - return 0, 0, fmt.Errorf("invalid range specified for port: %s", ports) - } - return start, end, nil -} diff --git a/vendor/github.com/docker/go-connections/nat/sort.go b/vendor/github.com/docker/go-connections/nat/sort.go deleted file mode 100644 index b6eed145..00000000 --- a/vendor/github.com/docker/go-connections/nat/sort.go +++ /dev/null @@ -1,96 +0,0 @@ -package nat - -import ( - "sort" - "strings" -) - -type portSorter struct { - ports []Port - by func(i, j Port) bool -} - -func (s *portSorter) Len() int { - return len(s.ports) -} - -func (s *portSorter) Swap(i, j int) { - s.ports[i], s.ports[j] = s.ports[j], s.ports[i] -} - -func (s *portSorter) Less(i, j int) bool { - ip := s.ports[i] - jp := s.ports[j] - - return s.by(ip, jp) -} - -// Sort sorts a list of ports using the provided predicate -// This function should compare `i` and `j`, returning true if `i` is -// considered to be less than `j` -func Sort(ports []Port, predicate func(i, j Port) bool) { - s := &portSorter{ports, predicate} - sort.Sort(s) -} - -type portMapEntry struct { - port Port - binding PortBinding -} - -type portMapSorter []portMapEntry - -func (s portMapSorter) Len() int { return len(s) } -func (s portMapSorter) Swap(i, j int) { s[i], s[j] = s[j], s[i] } - -// Less sorts the port so that the order is: -// 1. port with larger specified bindings -// 2. larger port -// 3. port with tcp protocol -func (s portMapSorter) Less(i, j int) bool { - pi, pj := s[i].port, s[j].port - hpi, hpj := toInt(s[i].binding.HostPort), toInt(s[j].binding.HostPort) - return hpi > hpj || pi.Int() > pj.Int() || (pi.Int() == pj.Int() && strings.ToLower(pi.Proto()) == "tcp") -} - -// SortPortMap sorts the list of ports and their respected mapping. The ports -// will explicit HostPort will be placed first. -func SortPortMap(ports []Port, bindings PortMap) { - s := portMapSorter{} - for _, p := range ports { - if binding, ok := bindings[p]; ok && len(binding) > 0 { - for _, b := range binding { - s = append(s, portMapEntry{port: p, binding: b}) - } - bindings[p] = []PortBinding{} - } else { - s = append(s, portMapEntry{port: p}) - } - } - - sort.Sort(s) - var ( - i int - pm = make(map[Port]struct{}) - ) - // reorder ports - for _, entry := range s { - if _, ok := pm[entry.port]; !ok { - ports[i] = entry.port - pm[entry.port] = struct{}{} - i++ - } - // reorder bindings for this port - if _, ok := bindings[entry.port]; ok { - bindings[entry.port] = append(bindings[entry.port], entry.binding) - } - } -} - -func toInt(s string) uint64 { - i, _, err := ParsePortRange(s) - if err != nil { - i = 0 - } - return i -} diff --git a/vendor/github.com/docker/go-connections/sockets/README.md b/vendor/github.com/docker/go-connections/sockets/README.md deleted file mode 100644 index e69de29b..00000000 diff --git a/vendor/github.com/docker/go-connections/sockets/inmem_socket.go b/vendor/github.com/docker/go-connections/sockets/inmem_socket.go deleted file mode 100644 index 99846ffd..00000000 --- a/vendor/github.com/docker/go-connections/sockets/inmem_socket.go +++ /dev/null @@ -1,81 +0,0 @@ -package sockets - -import ( - "errors" - "net" - "sync" -) - -var errClosed = errors.New("use of closed network connection") - -// InmemSocket implements net.Listener using in-memory only connections. -type InmemSocket struct { - chConn chan net.Conn - chClose chan struct{} - addr string - mu sync.Mutex -} - -// dummyAddr is used to satisfy net.Addr for the in-mem socket -// it is just stored as a string and returns the string for all calls -type dummyAddr string - -// NewInmemSocket creates an in-memory only net.Listener -// The addr argument can be any string, but is used to satisfy the `Addr()` part -// of the net.Listener interface -func NewInmemSocket(addr string, bufSize int) *InmemSocket { - return &InmemSocket{ - chConn: make(chan net.Conn, bufSize), - chClose: make(chan struct{}), - addr: addr, - } -} - -// Addr returns the socket's addr string to satisfy net.Listener -func (s *InmemSocket) Addr() net.Addr { - return dummyAddr(s.addr) -} - -// Accept implements the Accept method in the Listener interface; it waits for the next call and returns a generic Conn. -func (s *InmemSocket) Accept() (net.Conn, error) { - select { - case conn := <-s.chConn: - return conn, nil - case <-s.chClose: - return nil, errClosed - } -} - -// Close closes the listener. It will be unavailable for use once closed. -func (s *InmemSocket) Close() error { - s.mu.Lock() - defer s.mu.Unlock() - select { - case <-s.chClose: - default: - close(s.chClose) - } - return nil -} - -// Dial is used to establish a connection with the in-mem server -func (s *InmemSocket) Dial(network, addr string) (net.Conn, error) { - srvConn, clientConn := net.Pipe() - select { - case s.chConn <- srvConn: - case <-s.chClose: - return nil, errClosed - } - - return clientConn, nil -} - -// Network returns the addr string, satisfies net.Addr -func (a dummyAddr) Network() string { - return string(a) -} - -// String returns the string form -func (a dummyAddr) String() string { - return string(a) -} diff --git a/vendor/github.com/docker/go-connections/sockets/proxy.go b/vendor/github.com/docker/go-connections/sockets/proxy.go deleted file mode 100644 index c897cb02..00000000 --- a/vendor/github.com/docker/go-connections/sockets/proxy.go +++ /dev/null @@ -1,28 +0,0 @@ -package sockets - -import ( - "net" - "os" - "strings" -) - -// GetProxyEnv allows access to the uppercase and the lowercase forms of -// proxy-related variables. See the Go specification for details on these -// variables. https://golang.org/pkg/net/http/ -func GetProxyEnv(key string) string { - proxyValue := os.Getenv(strings.ToUpper(key)) - if proxyValue == "" { - return os.Getenv(strings.ToLower(key)) - } - return proxyValue -} - -// DialerFromEnvironment was previously used to configure a net.Dialer to route -// connections through a SOCKS proxy. -// DEPRECATED: SOCKS proxies are now supported by configuring only -// http.Transport.Proxy, and no longer require changing http.Transport.Dial. -// Therefore, only sockets.ConfigureTransport() needs to be called, and any -// sockets.DialerFromEnvironment() calls can be dropped. -func DialerFromEnvironment(direct *net.Dialer) (*net.Dialer, error) { - return direct, nil -} diff --git a/vendor/github.com/docker/go-connections/sockets/sockets.go b/vendor/github.com/docker/go-connections/sockets/sockets.go deleted file mode 100644 index b0eae239..00000000 --- a/vendor/github.com/docker/go-connections/sockets/sockets.go +++ /dev/null @@ -1,37 +0,0 @@ -// Package sockets provides helper functions to create and configure Unix or TCP sockets. -package sockets - -import ( - "errors" - "net" - "net/http" - "time" -) - -const defaultTimeout = 10 * time.Second - -// ErrProtocolNotAvailable is returned when a given transport protocol is not provided by the operating system. -var ErrProtocolNotAvailable = errors.New("protocol not available") - -// ConfigureTransport configures the specified [http.Transport] according to the specified proto -// and addr. -// -// If the proto is unix (using a unix socket to communicate) or npipe the compression is disabled. -// For other protos, compression is enabled. If you want to manually enable/disable compression, -// make sure you do it _after_ any subsequent calls to ConfigureTransport is made against the same -// [http.Transport]. -func ConfigureTransport(tr *http.Transport, proto, addr string) error { - switch proto { - case "unix": - return configureUnixTransport(tr, proto, addr) - case "npipe": - return configureNpipeTransport(tr, proto, addr) - default: - tr.Proxy = http.ProxyFromEnvironment - tr.DisableCompression = false - tr.DialContext = (&net.Dialer{ - Timeout: defaultTimeout, - }).DialContext - } - return nil -} diff --git a/vendor/github.com/docker/go-connections/sockets/sockets_unix.go b/vendor/github.com/docker/go-connections/sockets/sockets_unix.go deleted file mode 100644 index 78a34a98..00000000 --- a/vendor/github.com/docker/go-connections/sockets/sockets_unix.go +++ /dev/null @@ -1,39 +0,0 @@ -//go:build !windows - -package sockets - -import ( - "context" - "fmt" - "net" - "net/http" - "syscall" - "time" -) - -const maxUnixSocketPathSize = len(syscall.RawSockaddrUnix{}.Path) - -func configureUnixTransport(tr *http.Transport, proto, addr string) error { - if len(addr) > maxUnixSocketPathSize { - return fmt.Errorf("unix socket path %q is too long", addr) - } - // No need for compression in local communications. - tr.DisableCompression = true - dialer := &net.Dialer{ - Timeout: defaultTimeout, - } - tr.DialContext = func(ctx context.Context, _, _ string) (net.Conn, error) { - return dialer.DialContext(ctx, proto, addr) - } - return nil -} - -func configureNpipeTransport(tr *http.Transport, proto, addr string) error { - return ErrProtocolNotAvailable -} - -// DialPipe connects to a Windows named pipe. -// This is not supported on other OSes. -func DialPipe(_ string, _ time.Duration) (net.Conn, error) { - return nil, syscall.EAFNOSUPPORT -} diff --git a/vendor/github.com/docker/go-connections/sockets/sockets_windows.go b/vendor/github.com/docker/go-connections/sockets/sockets_windows.go deleted file mode 100644 index 7acafc5a..00000000 --- a/vendor/github.com/docker/go-connections/sockets/sockets_windows.go +++ /dev/null @@ -1,28 +0,0 @@ -package sockets - -import ( - "context" - "net" - "net/http" - "time" - - "github.com/Microsoft/go-winio" -) - -func configureUnixTransport(tr *http.Transport, proto, addr string) error { - return ErrProtocolNotAvailable -} - -func configureNpipeTransport(tr *http.Transport, proto, addr string) error { - // No need for compression in local communications. - tr.DisableCompression = true - tr.DialContext = func(ctx context.Context, _, _ string) (net.Conn, error) { - return winio.DialPipeContext(ctx, addr) - } - return nil -} - -// DialPipe connects to a Windows named pipe. -func DialPipe(addr string, timeout time.Duration) (net.Conn, error) { - return winio.DialPipe(addr, &timeout) -} diff --git a/vendor/github.com/docker/go-connections/sockets/tcp_socket.go b/vendor/github.com/docker/go-connections/sockets/tcp_socket.go deleted file mode 100644 index 53cbb6c7..00000000 --- a/vendor/github.com/docker/go-connections/sockets/tcp_socket.go +++ /dev/null @@ -1,22 +0,0 @@ -// Package sockets provides helper functions to create and configure Unix or TCP sockets. -package sockets - -import ( - "crypto/tls" - "net" -) - -// NewTCPSocket creates a TCP socket listener with the specified address and -// the specified tls configuration. If TLSConfig is set, will encapsulate the -// TCP listener inside a TLS one. -func NewTCPSocket(addr string, tlsConfig *tls.Config) (net.Listener, error) { - l, err := net.Listen("tcp", addr) - if err != nil { - return nil, err - } - if tlsConfig != nil { - tlsConfig.NextProtos = []string{"http/1.1"} - l = tls.NewListener(l, tlsConfig) - } - return l, nil -} diff --git a/vendor/github.com/docker/go-connections/sockets/unix_socket.go b/vendor/github.com/docker/go-connections/sockets/unix_socket.go deleted file mode 100644 index b9233521..00000000 --- a/vendor/github.com/docker/go-connections/sockets/unix_socket.go +++ /dev/null @@ -1,126 +0,0 @@ -//go:build !windows - -/* -Package sockets is a simple unix domain socket wrapper. - -# Usage - -For example: - - import( - "fmt" - "net" - "os" - "github.com/docker/go-connections/sockets" - ) - - func main() { - l, err := sockets.NewUnixSocketWithOpts("/path/to/sockets", - sockets.WithChown(0,0),sockets.WithChmod(0660)) - if err != nil { - panic(err) - } - echoStr := "hello" - - go func() { - for { - conn, err := l.Accept() - if err != nil { - return - } - conn.Write([]byte(echoStr)) - conn.Close() - } - }() - - conn, err := net.Dial("unix", path) - if err != nil { - t.Fatal(err) - } - - buf := make([]byte, 5) - if _, err := conn.Read(buf); err != nil { - panic(err) - } else if string(buf) != echoStr { - panic(fmt.Errorf("msg may lost")) - } - } -*/ -package sockets - -import ( - "net" - "os" - "syscall" -) - -// SockOption sets up socket file's creating option -type SockOption func(string) error - -// WithChown modifies the socket file's uid and gid -func WithChown(uid, gid int) SockOption { - return func(path string) error { - if err := os.Chown(path, uid, gid); err != nil { - return err - } - return nil - } -} - -// WithChmod modifies socket file's access mode. -func WithChmod(mask os.FileMode) SockOption { - return func(path string) error { - if err := os.Chmod(path, mask); err != nil { - return err - } - return nil - } -} - -// NewUnixSocketWithOpts creates a unix socket with the specified options. -// By default, socket permissions are 0000 (i.e.: no access for anyone); pass -// WithChmod() and WithChown() to set the desired ownership and permissions. -// -// This function temporarily changes the system's "umask" to 0777 to work around -// a race condition between creating the socket and setting its permissions. While -// this should only be for a short duration, it may affect other processes that -// create files/directories during that period. -func NewUnixSocketWithOpts(path string, opts ...SockOption) (net.Listener, error) { - if err := syscall.Unlink(path); err != nil && !os.IsNotExist(err) { - return nil, err - } - - // net.Listen does not allow for permissions to be set. As a result, when - // specifying custom permissions ("WithChmod()"), there is a short time - // between creating the socket and applying the permissions, during which - // the socket permissions are Less restrictive than desired. - // - // To work around this limitation of net.Listen(), we temporarily set the - // umask to 0777, which forces the socket to be created with 000 permissions - // (i.e.: no access for anyone). After that, WithChmod() must be used to set - // the desired permissions. - // - // We don't use "defer" here, to reset the umask to its original value as soon - // as possible. Ideally we'd be able to detect if WithChmod() was passed as - // an option, and skip changing umask if default permissions are used. - origUmask := syscall.Umask(0o777) - l, err := net.Listen("unix", path) - syscall.Umask(origUmask) - if err != nil { - return nil, err - } - - for _, op := range opts { - if err := op(path); err != nil { - _ = l.Close() - return nil, err - } - } - - return l, nil -} - -// NewUnixSocket creates a unix socket with the specified path and group. -func NewUnixSocket(path string, gid int) (net.Listener, error) { - return NewUnixSocketWithOpts(path, WithChown(0, gid), WithChmod(0o660)) -} diff --git a/vendor/github.com/docker/go-connections/tlsconfig/certpool.go b/vendor/github.com/docker/go-connections/tlsconfig/certpool.go deleted file mode 100644 index f84c624b..00000000 --- a/vendor/github.com/docker/go-connections/tlsconfig/certpool.go +++ /dev/null @@ -1,16 +0,0 @@ -package tlsconfig - -import ( - "crypto/x509" - "runtime" -) - -// SystemCertPool returns a copy of the system cert pool, -// returns an error if failed to load or empty pool on windows. -func SystemCertPool() (*x509.CertPool, error) { - certpool, err := x509.SystemCertPool() - if err != nil && runtime.GOOS == "windows" { - return x509.NewCertPool(), nil - } - return certpool, err -} diff --git a/vendor/github.com/docker/go-connections/tlsconfig/config.go b/vendor/github.com/docker/go-connections/tlsconfig/config.go deleted file mode 100644 index 606c98a3..00000000 --- a/vendor/github.com/docker/go-connections/tlsconfig/config.go +++ /dev/null @@ -1,261 +0,0 @@ -// Package tlsconfig provides primitives to retrieve secure-enough TLS configurations for both clients and servers. -// -// As a reminder from https://golang.org/pkg/crypto/tls/#Config: -// -// A Config structure is used to configure a TLS client or server. After one has been passed to a TLS function it must not be modified. -// A Config may be reused; the tls package will also not modify it. -package tlsconfig - -import ( - "crypto/tls" - "crypto/x509" - "encoding/pem" - "errors" - "fmt" - "os" -) - -// Options represents the information needed to create client and server TLS configurations. -type Options struct { - CAFile string - - // If either CertFile or KeyFile is empty, Client() will not load them - // preventing the client from authenticating to the server. - // However, Server() requires them and will error out if they are empty. - CertFile string - KeyFile string - - // client-only option - InsecureSkipVerify bool - // server-only option - ClientAuth tls.ClientAuthType - // If ExclusiveRootPools is set, then if a CA file is provided, the root pool used for TLS - // creds will include exclusively the roots in that CA file. If no CA file is provided, - // the system pool will be used. - ExclusiveRootPools bool - MinVersion uint16 - // If Passphrase is set, it will be used to decrypt a TLS private key - // if the key is encrypted. - // - // Deprecated: Use of encrypted TLS private keys has been deprecated, and - // will be removed in a future release. Golang has deprecated support for - // legacy PEM encryption (as specified in RFC 1423), as it is insecure by - // design (see https://go-review.googlesource.com/c/go/+/264159). - Passphrase string -} - -// Extra (server-side) accepted CBC cipher suites - will phase out in the future -var acceptedCBCCiphers = []uint16{ - tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, - tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, - tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, - tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, -} - -// DefaultServerAcceptedCiphers should be uses by code which already has a crypto/tls -// options struct but wants to use a commonly accepted set of TLS cipher suites, with -// known weak algorithms removed. -var DefaultServerAcceptedCiphers = append(clientCipherSuites, acceptedCBCCiphers...) - -// ServerDefault returns a secure-enough TLS configuration for the server TLS configuration. -func ServerDefault(ops ...func(*tls.Config)) *tls.Config { - tlsConfig := &tls.Config{ - // Avoid fallback by default to SSL protocols < TLS1.2 - MinVersion: tls.VersionTLS12, - PreferServerCipherSuites: true, - CipherSuites: DefaultServerAcceptedCiphers, - } - - for _, op := range ops { - op(tlsConfig) - } - - return tlsConfig -} - -// ClientDefault returns a secure-enough TLS configuration for the client TLS configuration. -func ClientDefault(ops ...func(*tls.Config)) *tls.Config { - tlsConfig := &tls.Config{ - // Prefer TLS1.2 as the client minimum - MinVersion: tls.VersionTLS12, - CipherSuites: clientCipherSuites, - } - - for _, op := range ops { - op(tlsConfig) - } - - return tlsConfig -} - -// certPool returns an X.509 certificate pool from `caFile`, the certificate file. -func certPool(caFile string, exclusivePool bool) (*x509.CertPool, error) { - // If we should verify the server, we need to load a trusted ca - var ( - certPool *x509.CertPool - err error - ) - if exclusivePool { - certPool = x509.NewCertPool() - } else { - certPool, err = SystemCertPool() - if err != nil { - return nil, fmt.Errorf("failed to read system certificates: %v", err) - } - } - pemData, err := os.ReadFile(caFile) - if err != nil { - return nil, fmt.Errorf("could not read CA certificate %q: %v", caFile, err) - } - if !certPool.AppendCertsFromPEM(pemData) { - return nil, fmt.Errorf("failed to append certificates from PEM file: %q", caFile) - } - return certPool, nil -} - -// allTLSVersions lists all the TLS versions and is used by the code that validates -// a uint16 value as a TLS version. -var allTLSVersions = map[uint16]struct{}{ - tls.VersionTLS10: {}, - tls.VersionTLS11: {}, - tls.VersionTLS12: {}, - tls.VersionTLS13: {}, -} - -// isValidMinVersion checks that the input value is a valid tls minimum version -func isValidMinVersion(version uint16) bool { - _, ok := allTLSVersions[version] - return ok -} - -// adjustMinVersion sets the MinVersion on `config`, the input configuration. -// It assumes the current MinVersion on the `config` is the lowest allowed. -func adjustMinVersion(options Options, config *tls.Config) error { - if options.MinVersion > 0 { - if !isValidMinVersion(options.MinVersion) { - return fmt.Errorf("invalid minimum TLS version: %x", options.MinVersion) - } - if options.MinVersion < config.MinVersion { - return fmt.Errorf("requested minimum TLS version is too low. Should be at-least: %x", config.MinVersion) - } - config.MinVersion = options.MinVersion - } - - return nil -} - -// IsErrEncryptedKey returns true if the 'err' is an error of incorrect -// password when trying to decrypt a TLS private key. -// -// Deprecated: Use of encrypted TLS private keys has been deprecated, and -// will be removed in a future release. Golang has deprecated support for -// legacy PEM encryption (as specified in RFC 1423), as it is insecure by -// design (see https://go-review.googlesource.com/c/go/+/264159). -func IsErrEncryptedKey(err error) bool { - return errors.Is(err, x509.IncorrectPasswordError) -} - -// getPrivateKey returns the private key in 'keyBytes', in PEM-encoded format. -// If the private key is encrypted, 'passphrase' is used to decrypted the -// private key. -func getPrivateKey(keyBytes []byte, passphrase string) ([]byte, error) { - // this section makes some small changes to code from notary/tuf/utils/x509.go - pemBlock, _ := pem.Decode(keyBytes) - if pemBlock == nil { - return nil, fmt.Errorf("no valid private key found") - } - - var err error - if x509.IsEncryptedPEMBlock(pemBlock) { //nolint:staticcheck // Ignore SA1019 (IsEncryptedPEMBlock is deprecated) - keyBytes, err = x509.DecryptPEMBlock(pemBlock, []byte(passphrase)) //nolint:staticcheck // Ignore SA1019 (DecryptPEMBlock is deprecated) - if err != nil { - return nil, fmt.Errorf("private key is encrypted, but could not decrypt it: %w", err) - } - keyBytes = pem.EncodeToMemory(&pem.Block{Type: pemBlock.Type, Bytes: keyBytes}) - } - - return keyBytes, nil -} - -// getCert returns a Certificate from the CertFile and KeyFile in 'options', -// if the key is encrypted, the Passphrase in 'options' will be used to -// decrypt it. -func getCert(options Options) ([]tls.Certificate, error) { - if options.CertFile == "" && options.KeyFile == "" { - return nil, nil - } - - cert, err := os.ReadFile(options.CertFile) - if err != nil { - return nil, err - } - - prKeyBytes, err := os.ReadFile(options.KeyFile) - if err != nil { - return nil, err - } - - prKeyBytes, err = getPrivateKey(prKeyBytes, options.Passphrase) - if err != nil { - return nil, err - } - - tlsCert, err := tls.X509KeyPair(cert, prKeyBytes) - if err != nil { - return nil, err - } - - return []tls.Certificate{tlsCert}, nil -} - -// Client returns a TLS configuration meant to be used by a client. -func Client(options Options) (*tls.Config, error) { - tlsConfig := ClientDefault() - tlsConfig.InsecureSkipVerify = options.InsecureSkipVerify - if !options.InsecureSkipVerify && options.CAFile != "" { - CAs, err := certPool(options.CAFile, options.ExclusiveRootPools) - if err != nil { - return nil, err - } - tlsConfig.RootCAs = CAs - } - - tlsCerts, err := getCert(options) - if err != nil { - return nil, fmt.Errorf("could not load X509 key pair: %w", err) - } - tlsConfig.Certificates = tlsCerts - - if err := adjustMinVersion(options, tlsConfig); err != nil { - return nil, err - } - - return tlsConfig, nil -} - -// Server returns a TLS configuration meant to be used by a server. -func Server(options Options) (*tls.Config, error) { - tlsConfig := ServerDefault() - tlsConfig.ClientAuth = options.ClientAuth - tlsCert, err := tls.LoadX509KeyPair(options.CertFile, options.KeyFile) - if err != nil { - if os.IsNotExist(err) { - return nil, fmt.Errorf("could not load X509 key pair (cert: %q, key: %q): %v", options.CertFile, options.KeyFile, err) - } - return nil, fmt.Errorf("error reading X509 key pair - make sure the key is not encrypted (cert: %q, key: %q): %v", options.CertFile, options.KeyFile, err) - } - tlsConfig.Certificates = []tls.Certificate{tlsCert} - if options.ClientAuth >= tls.VerifyClientCertIfGiven && options.CAFile != "" { - CAs, err := certPool(options.CAFile, options.ExclusiveRootPools) - if err != nil { - return nil, err - } - tlsConfig.ClientCAs = CAs - } - - if err := adjustMinVersion(options, tlsConfig); err != nil { - return nil, err - } - - return tlsConfig, nil -} diff --git a/vendor/github.com/docker/go-connections/tlsconfig/config_client_ciphers.go b/vendor/github.com/docker/go-connections/tlsconfig/config_client_ciphers.go deleted file mode 100644 index a82f9fa5..00000000 --- a/vendor/github.com/docker/go-connections/tlsconfig/config_client_ciphers.go +++ /dev/null @@ -1,14 +0,0 @@ -// Package tlsconfig provides primitives to retrieve secure-enough TLS configurations for both clients and servers. -package tlsconfig - -import ( - "crypto/tls" -) - -// Client TLS cipher suites (dropping CBC ciphers for client preferred suite set) -var clientCipherSuites = []uint16{ - tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, - tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, - tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, - tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, -} diff --git a/vendor/github.com/docker/go-units/CONTRIBUTING.md b/vendor/github.com/docker/go-units/CONTRIBUTING.md deleted file mode 100644 index 9ea86d78..00000000 --- a/vendor/github.com/docker/go-units/CONTRIBUTING.md +++ /dev/null @@ -1,67 +0,0 @@ -# Contributing to go-units - -Want to hack on go-units? Awesome! Here are instructions to get you started. - -go-units is a part of the [Docker](https://www.docker.com) project, and follows -the same rules and principles. If you're already familiar with the way -Docker does things, you'll feel right at home. - -Otherwise, go read Docker's -[contributions guidelines](https://github.com/docker/docker/blob/master/CONTRIBUTING.md), -[issue triaging](https://github.com/docker/docker/blob/master/project/ISSUE-TRIAGE.md), -[review process](https://github.com/docker/docker/blob/master/project/REVIEWING.md) and -[branches and tags](https://github.com/docker/docker/blob/master/project/BRANCHES-AND-TAGS.md). - -### Sign your work - -The sign-off is a simple line at the end of the explanation for the patch. Your -signature certifies that you wrote the patch or otherwise have the right to pass -it on as an open-source patch. The rules are pretty simple: if you can certify -the below (from [developercertificate.org](http://developercertificate.org/)): - -``` -Developer Certificate of Origin -Version 1.1 - -Copyright (C) 2004, 2006 The Linux Foundation and its contributors. -660 York Street, Suite 102, -San Francisco, CA 94110 USA - -Everyone is permitted to copy and distribute verbatim copies of this -license document, but changing it is not allowed. - -Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -(a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -(b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -(c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -(d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. -``` - -Then you just add a line to every git commit message: - - Signed-off-by: Joe Smith - -Use your real name (sorry, no pseudonyms or anonymous contributions.) - -If you set your `user.name` and `user.email` git configs, you can sign your -commit automatically with `git commit -s`. diff --git a/vendor/github.com/docker/go-units/LICENSE b/vendor/github.com/docker/go-units/LICENSE deleted file mode 100644 index b55b37bc..00000000 --- a/vendor/github.com/docker/go-units/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright 2015 Docker, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/docker/go-units/MAINTAINERS b/vendor/github.com/docker/go-units/MAINTAINERS deleted file mode 100644 index 4aac7c74..00000000 --- a/vendor/github.com/docker/go-units/MAINTAINERS +++ /dev/null @@ -1,46 +0,0 @@ -# go-units maintainers file -# -# This file describes who runs the docker/go-units project and how. -# This is a living document - if you see something out of date or missing, speak up! -# -# It is structured to be consumable by both humans and programs. -# To extract its contents programmatically, use any TOML-compliant parser. -# -# This file is compiled into the MAINTAINERS file in docker/opensource. -# -[Org] - [Org."Core maintainers"] - people = [ - "akihirosuda", - "dnephin", - "thajeztah", - "vdemeester", - ] - -[people] - -# A reference list of all people associated with the project. -# All other sections should refer to people by their canonical key -# in the people section. - - # ADD YOURSELF HERE IN ALPHABETICAL ORDER - - [people.akihirosuda] - Name = "Akihiro Suda" - Email = "akihiro.suda.cz@hco.ntt.co.jp" - GitHub = "AkihiroSuda" - - [people.dnephin] - Name = "Daniel Nephin" - Email = "dnephin@gmail.com" - GitHub = "dnephin" - - [people.thajeztah] - Name = "Sebastiaan van Stijn" - Email = "github@gone.nl" - GitHub = "thaJeztah" - - [people.vdemeester] - Name = "Vincent Demeester" - Email = "vincent@sbr.pm" - GitHub = "vdemeester" \ No newline at end of file diff --git a/vendor/github.com/docker/go-units/README.md b/vendor/github.com/docker/go-units/README.md deleted file mode 100644 index 4f70a4e1..00000000 --- a/vendor/github.com/docker/go-units/README.md +++ /dev/null @@ -1,16 +0,0 @@ -[![GoDoc](https://godoc.org/github.com/docker/go-units?status.svg)](https://godoc.org/github.com/docker/go-units) - -# Introduction - -go-units is a library to transform human friendly measurements into machine friendly values. - -## Usage - -See the [docs in godoc](https://godoc.org/github.com/docker/go-units) for examples and documentation. - -## Copyright and license - -Copyright © 2015 Docker, Inc. - -go-units is licensed under the Apache License, Version 2.0. -See [LICENSE](LICENSE) for the full text of the license. diff --git a/vendor/github.com/docker/go-units/circle.yml b/vendor/github.com/docker/go-units/circle.yml deleted file mode 100644 index af9d6055..00000000 --- a/vendor/github.com/docker/go-units/circle.yml +++ /dev/null @@ -1,11 +0,0 @@ -dependencies: - post: - # install golint - - go get golang.org/x/lint/golint - -test: - pre: - # run analysis before tests - - go vet ./... - - test -z "$(golint ./... | tee /dev/stderr)" - - test -z "$(gofmt -s -l . | tee /dev/stderr)" diff --git a/vendor/github.com/docker/go-units/duration.go b/vendor/github.com/docker/go-units/duration.go deleted file mode 100644 index 48dd8744..00000000 --- a/vendor/github.com/docker/go-units/duration.go +++ /dev/null @@ -1,35 +0,0 @@ -// Package units provides helper function to parse and print size and time units -// in human-readable format. -package units - -import ( - "fmt" - "time" -) - -// HumanDuration returns a human-readable approximation of a duration -// (eg. "About a minute", "4 hours ago", etc.). -func HumanDuration(d time.Duration) string { - if seconds := int(d.Seconds()); seconds < 1 { - return "Less than a second" - } else if seconds == 1 { - return "1 second" - } else if seconds < 60 { - return fmt.Sprintf("%d seconds", seconds) - } else if minutes := int(d.Minutes()); minutes == 1 { - return "About a minute" - } else if minutes < 60 { - return fmt.Sprintf("%d minutes", minutes) - } else if hours := int(d.Hours() + 0.5); hours == 1 { - return "About an hour" - } else if hours < 48 { - return fmt.Sprintf("%d hours", hours) - } else if hours < 24*7*2 { - return fmt.Sprintf("%d days", hours/24) - } else if hours < 24*30*2 { - return fmt.Sprintf("%d weeks", hours/24/7) - } else if hours < 24*365*2 { - return fmt.Sprintf("%d months", hours/24/30) - } - return fmt.Sprintf("%d years", int(d.Hours())/24/365) -} diff --git a/vendor/github.com/docker/go-units/size.go b/vendor/github.com/docker/go-units/size.go deleted file mode 100644 index c245a895..00000000 --- a/vendor/github.com/docker/go-units/size.go +++ /dev/null @@ -1,154 +0,0 @@ -package units - -import ( - "fmt" - "strconv" - "strings" -) - -// See: http://en.wikipedia.org/wiki/Binary_prefix -const ( - // Decimal - - KB = 1000 - MB = 1000 * KB - GB = 1000 * MB - TB = 1000 * GB - PB = 1000 * TB - - // Binary - - KiB = 1024 - MiB = 1024 * KiB - GiB = 1024 * MiB - TiB = 1024 * GiB - PiB = 1024 * TiB -) - -type unitMap map[byte]int64 - -var ( - decimalMap = unitMap{'k': KB, 'm': MB, 'g': GB, 't': TB, 'p': PB} - binaryMap = unitMap{'k': KiB, 'm': MiB, 'g': GiB, 't': TiB, 'p': PiB} -) - -var ( - decimapAbbrs = []string{"B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"} - binaryAbbrs = []string{"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"} -) - -func getSizeAndUnit(size float64, base float64, _map []string) (float64, string) { - i := 0 - unitsLimit := len(_map) - 1 - for size >= base && i < unitsLimit { - size = size / base - i++ - } - return size, _map[i] -} - -// CustomSize returns a human-readable approximation of a size -// using custom format. -func CustomSize(format string, size float64, base float64, _map []string) string { - size, unit := getSizeAndUnit(size, base, _map) - return fmt.Sprintf(format, size, unit) -} - -// HumanSizeWithPrecision allows the size to be in any precision, -// instead of 4 digit precision used in units.HumanSize. -func HumanSizeWithPrecision(size float64, precision int) string { - size, unit := getSizeAndUnit(size, 1000.0, decimapAbbrs) - return fmt.Sprintf("%.*g%s", precision, size, unit) -} - -// HumanSize returns a human-readable approximation of a size -// capped at 4 valid numbers (eg. "2.746 MB", "796 KB"). -func HumanSize(size float64) string { - return HumanSizeWithPrecision(size, 4) -} - -// BytesSize returns a human-readable size in bytes, kibibytes, -// mebibytes, gibibytes, or tebibytes (eg. "44kiB", "17MiB"). -func BytesSize(size float64) string { - return CustomSize("%.4g%s", size, 1024.0, binaryAbbrs) -} - -// FromHumanSize returns an integer from a human-readable specification of a -// size using SI standard (eg. "44kB", "17MB"). -func FromHumanSize(size string) (int64, error) { - return parseSize(size, decimalMap) -} - -// RAMInBytes parses a human-readable string representing an amount of RAM -// in bytes, kibibytes, mebibytes, gibibytes, or tebibytes and -// returns the number of bytes, or -1 if the string is unparseable. -// Units are case-insensitive, and the 'b' suffix is optional. -func RAMInBytes(size string) (int64, error) { - return parseSize(size, binaryMap) -} - -// Parses the human-readable size string into the amount it represents. -func parseSize(sizeStr string, uMap unitMap) (int64, error) { - // TODO: rewrite to use strings.Cut if there's a space - // once Go < 1.18 is deprecated. - sep := strings.LastIndexAny(sizeStr, "01234567890. ") - if sep == -1 { - // There should be at least a digit. - return -1, fmt.Errorf("invalid size: '%s'", sizeStr) - } - var num, sfx string - if sizeStr[sep] != ' ' { - num = sizeStr[:sep+1] - sfx = sizeStr[sep+1:] - } else { - // Omit the space separator. - num = sizeStr[:sep] - sfx = sizeStr[sep+1:] - } - - size, err := strconv.ParseFloat(num, 64) - if err != nil { - return -1, err - } - // Backward compatibility: reject negative sizes. - if size < 0 { - return -1, fmt.Errorf("invalid size: '%s'", sizeStr) - } - - if len(sfx) == 0 { - return int64(size), nil - } - - // Process the suffix. - - if len(sfx) > 3 { // Too long. - goto badSuffix - } - sfx = strings.ToLower(sfx) - // Trivial case: b suffix. - if sfx[0] == 'b' { - if len(sfx) > 1 { // no extra characters allowed after b. - goto badSuffix - } - return int64(size), nil - } - // A suffix from the map. - if mul, ok := uMap[sfx[0]]; ok { - size *= float64(mul) - } else { - goto badSuffix - } - - // The suffix may have extra "b" or "ib" (e.g. KiB or MB). - switch { - case len(sfx) == 2 && sfx[1] != 'b': - goto badSuffix - case len(sfx) == 3 && sfx[1:] != "ib": - goto badSuffix - } - - return int64(size), nil - -badSuffix: - return -1, fmt.Errorf("invalid suffix: '%s'", sfx) -} diff --git a/vendor/github.com/docker/go-units/ulimit.go b/vendor/github.com/docker/go-units/ulimit.go deleted file mode 100644 index fca0400c..00000000 --- a/vendor/github.com/docker/go-units/ulimit.go +++ /dev/null @@ -1,123 +0,0 @@ -package units - -import ( - "fmt" - "strconv" - "strings" -) - -// Ulimit is a human friendly version of Rlimit. -type Ulimit struct { - Name string - Hard int64 - Soft int64 -} - -// Rlimit specifies the resource limits, such as max open files. -type Rlimit struct { - Type int `json:"type,omitempty"` - Hard uint64 `json:"hard,omitempty"` - Soft uint64 `json:"soft,omitempty"` -} - -const ( - // magic numbers for making the syscall - // some of these are defined in the syscall package, but not all. - // Also since Windows client doesn't get access to the syscall package, need to - // define these here - rlimitAs = 9 - rlimitCore = 4 - rlimitCPU = 0 - rlimitData = 2 - rlimitFsize = 1 - rlimitLocks = 10 - rlimitMemlock = 8 - rlimitMsgqueue = 12 - rlimitNice = 13 - rlimitNofile = 7 - rlimitNproc = 6 - rlimitRss = 5 - rlimitRtprio = 14 - rlimitRttime = 15 - rlimitSigpending = 11 - rlimitStack = 3 -) - -var ulimitNameMapping = map[string]int{ - //"as": rlimitAs, // Disabled since this doesn't seem usable with the way Docker inits a container. - "core": rlimitCore, - "cpu": rlimitCPU, - "data": rlimitData, - "fsize": rlimitFsize, - "locks": rlimitLocks, - "memlock": rlimitMemlock, - "msgqueue": rlimitMsgqueue, - "nice": rlimitNice, - "nofile": rlimitNofile, - "nproc": rlimitNproc, - "rss": rlimitRss, - "rtprio": rlimitRtprio, - "rttime": rlimitRttime, - "sigpending": rlimitSigpending, - "stack": rlimitStack, -} - -// ParseUlimit parses and returns a Ulimit from the specified string. -func ParseUlimit(val string) (*Ulimit, error) { - parts := strings.SplitN(val, "=", 2) - if len(parts) != 2 { - return nil, fmt.Errorf("invalid ulimit argument: %s", val) - } - - if _, exists := ulimitNameMapping[parts[0]]; !exists { - return nil, fmt.Errorf("invalid ulimit type: %s", parts[0]) - } - - var ( - soft int64 - hard = &soft // default to soft in case no hard was set - temp int64 - err error - ) - switch limitVals := strings.Split(parts[1], ":"); len(limitVals) { - case 2: - temp, err = strconv.ParseInt(limitVals[1], 10, 64) - if err != nil { - return nil, err - } - hard = &temp - fallthrough - case 1: - soft, err = strconv.ParseInt(limitVals[0], 10, 64) - if err != nil { - return nil, err - } - default: - return nil, fmt.Errorf("too many limit value arguments - %s, can only have up to two, `soft[:hard]`", parts[1]) - } - - if *hard != -1 { - if soft == -1 { - return nil, fmt.Errorf("ulimit soft limit must be less than or equal to hard limit: soft: -1 (unlimited), hard: %d", *hard) - } - if soft > *hard { - return nil, fmt.Errorf("ulimit soft limit must be less than or equal to hard limit: %d > %d", soft, *hard) - } - } - - return &Ulimit{Name: parts[0], Soft: soft, Hard: *hard}, nil -} - -// GetRlimit returns the RLimit corresponding to Ulimit. -func (u *Ulimit) GetRlimit() (*Rlimit, error) { - t, exists := ulimitNameMapping[u.Name] - if !exists { - return nil, fmt.Errorf("invalid ulimit name %s", u.Name) - } - - return &Rlimit{Type: t, Soft: uint64(u.Soft), Hard: uint64(u.Hard)}, nil -} - -func (u *Ulimit) String() string { - return fmt.Sprintf("%s=%d:%d", u.Name, u.Soft, u.Hard) -} diff --git a/vendor/github.com/felixge/httpsnoop/.gitignore b/vendor/github.com/felixge/httpsnoop/.gitignore deleted file mode 100644 index e69de29b..00000000 diff --git a/vendor/github.com/felixge/httpsnoop/LICENSE.txt b/vendor/github.com/felixge/httpsnoop/LICENSE.txt deleted file mode 100644 index e028b46a..00000000 --- a/vendor/github.com/felixge/httpsnoop/LICENSE.txt +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2016 Felix Geisendörfer (felix@debuggable.com) - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. diff --git a/vendor/github.com/felixge/httpsnoop/Makefile b/vendor/github.com/felixge/httpsnoop/Makefile deleted file mode 100644 index 4e12afdd..00000000 --- a/vendor/github.com/felixge/httpsnoop/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -.PHONY: ci generate clean - -ci: clean generate - go test -race -v ./... - -generate: - go generate . - -clean: - rm -rf *_generated*.go diff --git a/vendor/github.com/felixge/httpsnoop/README.md b/vendor/github.com/felixge/httpsnoop/README.md deleted file mode 100644 index cf6b42f3..00000000 --- a/vendor/github.com/felixge/httpsnoop/README.md +++ /dev/null @@ -1,95 +0,0 @@ -# httpsnoop - -Package httpsnoop provides an easy way to capture http related metrics (i.e. -response time, bytes written, and http status code) from your application's -http.Handlers. - -Doing this requires non-trivial wrapping of the http.ResponseWriter interface, -which is also exposed for users interested in a more low-level API. - -[![Go Reference](https://pkg.go.dev/badge/github.com/felixge/httpsnoop.svg)](https://pkg.go.dev/github.com/felixge/httpsnoop) -[![Build Status](https://github.com/felixge/httpsnoop/actions/workflows/main.yaml/badge.svg)](https://github.com/felixge/httpsnoop/actions/workflows/main.yaml) - -## Usage Example - -```go -// myH is your app's http handler, perhaps a http.ServeMux or similar. -var myH http.Handler -// wrappedH wraps myH in order to log every request. -wrappedH := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - m := httpsnoop.CaptureMetrics(myH, w, r) - log.Printf( - "%s %s (code=%d dt=%s written=%d)", - r.Method, - r.URL, - m.Code, - m.Duration, - m.Written, - ) -}) -http.ListenAndServe(":8080", wrappedH) -``` - -## Why this package exists - -Instrumenting an application's http.Handler is surprisingly difficult. - -However if you google for e.g. "capture ResponseWriter status code" you'll find -lots of advise and code examples that suggest it to be a fairly trivial -undertaking. Unfortunately everything I've seen so far has a high chance of -breaking your application. - -The main problem is that a `http.ResponseWriter` often implements additional -interfaces such as `http.Flusher`, `http.CloseNotifier`, `http.Hijacker`, `http.Pusher`, and -`io.ReaderFrom`. So the naive approach of just wrapping `http.ResponseWriter` -in your own struct that also implements the `http.ResponseWriter` interface -will hide the additional interfaces mentioned above. This has a high change of -introducing subtle bugs into any non-trivial application. - -Another approach I've seen people take is to return a struct that implements -all of the interfaces above. However, that's also problematic, because it's -difficult to fake some of these interfaces behaviors when the underlying -`http.ResponseWriter` doesn't have an implementation. It's also dangerous, -because an application may choose to operate differently, merely because it -detects the presence of these additional interfaces. - -This package solves this problem by checking which additional interfaces a -`http.ResponseWriter` implements, returning a wrapped version implementing the -exact same set of interfaces. - -Additionally this package properly handles edge cases such as `WriteHeader` not -being called, or called more than once, as well as concurrent calls to -`http.ResponseWriter` methods, and even calls happening after the wrapped -`ServeHTTP` has already returned. - -Unfortunately this package is not perfect either. It's possible that it is -still missing some interfaces provided by the go core (let me know if you find -one), and it won't work for applications adding their own interfaces into the -mix. You can however use `httpsnoop.Unwrap(w)` to access the underlying -`http.ResponseWriter` and type-assert the result to its other interfaces. - -However, hopefully the explanation above has sufficiently scared you of rolling -your own solution to this problem. httpsnoop may still break your application, -but at least it tries to avoid it as much as possible. - -Anyway, the real problem here is that smuggling additional interfaces inside -`http.ResponseWriter` is a problematic design choice, but it probably goes as -deep as the Go language specification itself. But that's okay, I still prefer -Go over the alternatives ;). - -## Performance - -``` -BenchmarkBaseline-8 20000 94912 ns/op -BenchmarkCaptureMetrics-8 20000 95461 ns/op -``` - -As you can see, using `CaptureMetrics` on a vanilla http.Handler introduces an -overhead of ~500 ns per http request on my machine. However, the margin of -error appears to be larger than that, therefor it should be reasonable to -assume that the overhead introduced by `CaptureMetrics` is absolutely -negligible. - -## License - -MIT diff --git a/vendor/github.com/felixge/httpsnoop/capture_metrics.go b/vendor/github.com/felixge/httpsnoop/capture_metrics.go deleted file mode 100644 index bec7b71b..00000000 --- a/vendor/github.com/felixge/httpsnoop/capture_metrics.go +++ /dev/null @@ -1,86 +0,0 @@ -package httpsnoop - -import ( - "io" - "net/http" - "time" -) - -// Metrics holds metrics captured from CaptureMetrics. -type Metrics struct { - // Code is the first http response code passed to the WriteHeader func of - // the ResponseWriter. If no such call is made, a default code of 200 is - // assumed instead. - Code int - // Duration is the time it took to execute the handler. - Duration time.Duration - // Written is the number of bytes successfully written by the Write or - // ReadFrom function of the ResponseWriter. ResponseWriters may also write - // data to their underlaying connection directly (e.g. headers), but those - // are not tracked. Therefor the number of Written bytes will usually match - // the size of the response body. - Written int64 -} - -// CaptureMetrics wraps the given hnd, executes it with the given w and r, and -// returns the metrics it captured from it. -func CaptureMetrics(hnd http.Handler, w http.ResponseWriter, r *http.Request) Metrics { - return CaptureMetricsFn(w, func(ww http.ResponseWriter) { - hnd.ServeHTTP(ww, r) - }) -} - -// CaptureMetricsFn wraps w and calls fn with the wrapped w and returns the -// resulting metrics. This is very similar to CaptureMetrics (which is just -// sugar on top of this func), but is a more usable interface if your -// application doesn't use the Go http.Handler interface. -func CaptureMetricsFn(w http.ResponseWriter, fn func(http.ResponseWriter)) Metrics { - m := Metrics{Code: http.StatusOK} - m.CaptureMetrics(w, fn) - return m -} - -// CaptureMetrics wraps w and calls fn with the wrapped w and updates -// Metrics m with the resulting metrics. This is similar to CaptureMetricsFn, -// but allows one to customize starting Metrics object. -func (m *Metrics) CaptureMetrics(w http.ResponseWriter, fn func(http.ResponseWriter)) { - var ( - start = time.Now() - headerWritten bool - hooks = Hooks{ - WriteHeader: func(next WriteHeaderFunc) WriteHeaderFunc { - return func(code int) { - next(code) - - if !(code >= 100 && code <= 199) && !headerWritten { - m.Code = code - headerWritten = true - } - } - }, - - Write: func(next WriteFunc) WriteFunc { - return func(p []byte) (int, error) { - n, err := next(p) - - m.Written += int64(n) - headerWritten = true - return n, err - } - }, - - ReadFrom: func(next ReadFromFunc) ReadFromFunc { - return func(src io.Reader) (int64, error) { - n, err := next(src) - - headerWritten = true - m.Written += n - return n, err - } - }, - } - ) - - fn(Wrap(w, hooks)) - m.Duration += time.Since(start) -} diff --git a/vendor/github.com/felixge/httpsnoop/docs.go b/vendor/github.com/felixge/httpsnoop/docs.go deleted file mode 100644 index 203c35b3..00000000 --- a/vendor/github.com/felixge/httpsnoop/docs.go +++ /dev/null @@ -1,10 +0,0 @@ -// Package httpsnoop provides an easy way to capture http related metrics (i.e. -// response time, bytes written, and http status code) from your application's -// http.Handlers. -// -// Doing this requires non-trivial wrapping of the http.ResponseWriter -// interface, which is also exposed for users interested in a more low-level -// API. -package httpsnoop - -//go:generate go run codegen/main.go diff --git a/vendor/github.com/felixge/httpsnoop/wrap_generated_gteq_1.8.go b/vendor/github.com/felixge/httpsnoop/wrap_generated_gteq_1.8.go deleted file mode 100644 index 101cedde..00000000 --- a/vendor/github.com/felixge/httpsnoop/wrap_generated_gteq_1.8.go +++ /dev/null @@ -1,436 +0,0 @@ -// +build go1.8 -// Code generated by "httpsnoop/codegen"; DO NOT EDIT. - -package httpsnoop - -import ( - "bufio" - "io" - "net" - "net/http" -) - -// HeaderFunc is part of the http.ResponseWriter interface. -type HeaderFunc func() http.Header - -// WriteHeaderFunc is part of the http.ResponseWriter interface. -type WriteHeaderFunc func(code int) - -// WriteFunc is part of the http.ResponseWriter interface. -type WriteFunc func(b []byte) (int, error) - -// FlushFunc is part of the http.Flusher interface. -type FlushFunc func() - -// CloseNotifyFunc is part of the http.CloseNotifier interface. -type CloseNotifyFunc func() <-chan bool - -// HijackFunc is part of the http.Hijacker interface. -type HijackFunc func() (net.Conn, *bufio.ReadWriter, error) - -// ReadFromFunc is part of the io.ReaderFrom interface. -type ReadFromFunc func(src io.Reader) (int64, error) - -// PushFunc is part of the http.Pusher interface. -type PushFunc func(target string, opts *http.PushOptions) error - -// Hooks defines a set of method interceptors for methods included in -// http.ResponseWriter as well as some others. You can think of them as -// middleware for the function calls they target. See Wrap for more details. -type Hooks struct { - Header func(HeaderFunc) HeaderFunc - WriteHeader func(WriteHeaderFunc) WriteHeaderFunc - Write func(WriteFunc) WriteFunc - Flush func(FlushFunc) FlushFunc - CloseNotify func(CloseNotifyFunc) CloseNotifyFunc - Hijack func(HijackFunc) HijackFunc - ReadFrom func(ReadFromFunc) ReadFromFunc - Push func(PushFunc) PushFunc -} - -// Wrap returns a wrapped version of w that provides the exact same interface -// as w. Specifically if w implements any combination of: -// -// - http.Flusher -// - http.CloseNotifier -// - http.Hijacker -// - io.ReaderFrom -// - http.Pusher -// -// The wrapped version will implement the exact same combination. If no hooks -// are set, the wrapped version also behaves exactly as w. Hooks targeting -// methods not supported by w are ignored. Any other hooks will intercept the -// method they target and may modify the call's arguments and/or return values. -// The CaptureMetrics implementation serves as a working example for how the -// hooks can be used. -func Wrap(w http.ResponseWriter, hooks Hooks) http.ResponseWriter { - rw := &rw{w: w, h: hooks} - _, i0 := w.(http.Flusher) - _, i1 := w.(http.CloseNotifier) - _, i2 := w.(http.Hijacker) - _, i3 := w.(io.ReaderFrom) - _, i4 := w.(http.Pusher) - switch { - // combination 1/32 - case !i0 && !i1 && !i2 && !i3 && !i4: - return struct { - Unwrapper - http.ResponseWriter - }{rw, rw} - // combination 2/32 - case !i0 && !i1 && !i2 && !i3 && i4: - return struct { - Unwrapper - http.ResponseWriter - http.Pusher - }{rw, rw, rw} - // combination 3/32 - case !i0 && !i1 && !i2 && i3 && !i4: - return struct { - Unwrapper - http.ResponseWriter - io.ReaderFrom - }{rw, rw, rw} - // combination 4/32 - case !i0 && !i1 && !i2 && i3 && i4: - return struct { - Unwrapper - http.ResponseWriter - io.ReaderFrom - http.Pusher - }{rw, rw, rw, rw} - // combination 5/32 - case !i0 && !i1 && i2 && !i3 && !i4: - return struct { - Unwrapper - http.ResponseWriter - http.Hijacker - }{rw, rw, rw} - // combination 6/32 - case !i0 && !i1 && i2 && !i3 && i4: - return struct { - Unwrapper - http.ResponseWriter - http.Hijacker - http.Pusher - }{rw, rw, rw, rw} - // combination 7/32 - case !i0 && !i1 && i2 && i3 && !i4: - return struct { - Unwrapper - http.ResponseWriter - http.Hijacker - io.ReaderFrom - }{rw, rw, rw, rw} - // combination 8/32 - case !i0 && !i1 && i2 && i3 && i4: - return struct { - Unwrapper - http.ResponseWriter - http.Hijacker - io.ReaderFrom - http.Pusher - }{rw, rw, rw, rw, rw} - // combination 9/32 - case !i0 && i1 && !i2 && !i3 && !i4: - return struct { - Unwrapper - http.ResponseWriter - http.CloseNotifier - }{rw, rw, rw} - // combination 10/32 - case !i0 && i1 && !i2 && !i3 && i4: - return struct { - Unwrapper - http.ResponseWriter - http.CloseNotifier - http.Pusher - }{rw, rw, rw, rw} - // combination 11/32 - case !i0 && i1 && !i2 && i3 && !i4: - return struct { - Unwrapper - http.ResponseWriter - http.CloseNotifier - io.ReaderFrom - }{rw, rw, rw, rw} - // combination 12/32 - case !i0 && i1 && !i2 && i3 && i4: - return struct { - Unwrapper - http.ResponseWriter - http.CloseNotifier - io.ReaderFrom - http.Pusher - }{rw, rw, rw, rw, rw} - // combination 13/32 - case !i0 && i1 && i2 && !i3 && !i4: - return struct { - Unwrapper - http.ResponseWriter - http.CloseNotifier - http.Hijacker - }{rw, rw, rw, rw} - // combination 14/32 - case !i0 && i1 && i2 && !i3 && i4: - return struct { - Unwrapper - http.ResponseWriter - http.CloseNotifier - http.Hijacker - http.Pusher - }{rw, rw, rw, rw, rw} - // combination 15/32 - case !i0 && i1 && i2 && i3 && !i4: - return struct { - Unwrapper - http.ResponseWriter - http.CloseNotifier - http.Hijacker - io.ReaderFrom - }{rw, rw, rw, rw, rw} - // combination 16/32 - case !i0 && i1 && i2 && i3 && i4: - return struct { - Unwrapper - http.ResponseWriter - http.CloseNotifier - http.Hijacker - io.ReaderFrom - http.Pusher - }{rw, rw, rw, rw, rw, rw} - // combination 17/32 - case i0 && !i1 && !i2 && !i3 && !i4: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - }{rw, rw, rw} - // combination 18/32 - case i0 && !i1 && !i2 && !i3 && i4: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.Pusher - }{rw, rw, rw, rw} - // combination 19/32 - case i0 && !i1 && !i2 && i3 && !i4: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - io.ReaderFrom - }{rw, rw, rw, rw} - // combination 20/32 - case i0 && !i1 && !i2 && i3 && i4: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - io.ReaderFrom - http.Pusher - }{rw, rw, rw, rw, rw} - // combination 21/32 - case i0 && !i1 && i2 && !i3 && !i4: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.Hijacker - }{rw, rw, rw, rw} - // combination 22/32 - case i0 && !i1 && i2 && !i3 && i4: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.Hijacker - http.Pusher - }{rw, rw, rw, rw, rw} - // combination 23/32 - case i0 && !i1 && i2 && i3 && !i4: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.Hijacker - io.ReaderFrom - }{rw, rw, rw, rw, rw} - // combination 24/32 - case i0 && !i1 && i2 && i3 && i4: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.Hijacker - io.ReaderFrom - http.Pusher - }{rw, rw, rw, rw, rw, rw} - // combination 25/32 - case i0 && i1 && !i2 && !i3 && !i4: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.CloseNotifier - }{rw, rw, rw, rw} - // combination 26/32 - case i0 && i1 && !i2 && !i3 && i4: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.CloseNotifier - http.Pusher - }{rw, rw, rw, rw, rw} - // combination 27/32 - case i0 && i1 && !i2 && i3 && !i4: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.CloseNotifier - io.ReaderFrom - }{rw, rw, rw, rw, rw} - // combination 28/32 - case i0 && i1 && !i2 && i3 && i4: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.CloseNotifier - io.ReaderFrom - http.Pusher - }{rw, rw, rw, rw, rw, rw} - // combination 29/32 - case i0 && i1 && i2 && !i3 && !i4: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.CloseNotifier - http.Hijacker - }{rw, rw, rw, rw, rw} - // combination 30/32 - case i0 && i1 && i2 && !i3 && i4: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.CloseNotifier - http.Hijacker - http.Pusher - }{rw, rw, rw, rw, rw, rw} - // combination 31/32 - case i0 && i1 && i2 && i3 && !i4: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.CloseNotifier - http.Hijacker - io.ReaderFrom - }{rw, rw, rw, rw, rw, rw} - // combination 32/32 - case i0 && i1 && i2 && i3 && i4: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.CloseNotifier - http.Hijacker - io.ReaderFrom - http.Pusher - }{rw, rw, rw, rw, rw, rw, rw} - } - panic("unreachable") -} - -type rw struct { - w http.ResponseWriter - h Hooks -} - -func (w *rw) Unwrap() http.ResponseWriter { - return w.w -} - -func (w *rw) Header() http.Header { - f := w.w.(http.ResponseWriter).Header - if w.h.Header != nil { - f = w.h.Header(f) - } - return f() -} - -func (w *rw) WriteHeader(code int) { - f := w.w.(http.ResponseWriter).WriteHeader - if w.h.WriteHeader != nil { - f = w.h.WriteHeader(f) - } - f(code) -} - -func (w *rw) Write(b []byte) (int, error) { - f := w.w.(http.ResponseWriter).Write - if w.h.Write != nil { - f = w.h.Write(f) - } - return f(b) -} - -func (w *rw) Flush() { - f := w.w.(http.Flusher).Flush - if w.h.Flush != nil { - f = w.h.Flush(f) - } - f() -} - -func (w *rw) CloseNotify() <-chan bool { - f := w.w.(http.CloseNotifier).CloseNotify - if w.h.CloseNotify != nil { - f = w.h.CloseNotify(f) - } - return f() -} - -func (w *rw) Hijack() (net.Conn, *bufio.ReadWriter, error) { - f := w.w.(http.Hijacker).Hijack - if w.h.Hijack != nil { - f = w.h.Hijack(f) - } - return f() -} - -func (w *rw) ReadFrom(src io.Reader) (int64, error) { - f := w.w.(io.ReaderFrom).ReadFrom - if w.h.ReadFrom != nil { - f = w.h.ReadFrom(f) - } - return f(src) -} - -func (w *rw) Push(target string, opts *http.PushOptions) error { - f := w.w.(http.Pusher).Push - if w.h.Push != nil { - f = w.h.Push(f) - } - return f(target, opts) -} - -type Unwrapper interface { - Unwrap() http.ResponseWriter -} - -// Unwrap returns the underlying http.ResponseWriter from within zero or more -// layers of httpsnoop wrappers. -func Unwrap(w http.ResponseWriter) http.ResponseWriter { - if rw, ok := w.(Unwrapper); ok { - // recurse until rw.Unwrap() returns a non-Unwrapper - return Unwrap(rw.Unwrap()) - } else { - return w - } -} diff --git a/vendor/github.com/felixge/httpsnoop/wrap_generated_lt_1.8.go b/vendor/github.com/felixge/httpsnoop/wrap_generated_lt_1.8.go deleted file mode 100644 index e0951df1..00000000 --- a/vendor/github.com/felixge/httpsnoop/wrap_generated_lt_1.8.go +++ /dev/null @@ -1,278 +0,0 @@ -// +build !go1.8 -// Code generated by "httpsnoop/codegen"; DO NOT EDIT. - -package httpsnoop - -import ( - "bufio" - "io" - "net" - "net/http" -) - -// HeaderFunc is part of the http.ResponseWriter interface. -type HeaderFunc func() http.Header - -// WriteHeaderFunc is part of the http.ResponseWriter interface. -type WriteHeaderFunc func(code int) - -// WriteFunc is part of the http.ResponseWriter interface. -type WriteFunc func(b []byte) (int, error) - -// FlushFunc is part of the http.Flusher interface. -type FlushFunc func() - -// CloseNotifyFunc is part of the http.CloseNotifier interface. -type CloseNotifyFunc func() <-chan bool - -// HijackFunc is part of the http.Hijacker interface. -type HijackFunc func() (net.Conn, *bufio.ReadWriter, error) - -// ReadFromFunc is part of the io.ReaderFrom interface. -type ReadFromFunc func(src io.Reader) (int64, error) - -// Hooks defines a set of method interceptors for methods included in -// http.ResponseWriter as well as some others. You can think of them as -// middleware for the function calls they target. See Wrap for more details. -type Hooks struct { - Header func(HeaderFunc) HeaderFunc - WriteHeader func(WriteHeaderFunc) WriteHeaderFunc - Write func(WriteFunc) WriteFunc - Flush func(FlushFunc) FlushFunc - CloseNotify func(CloseNotifyFunc) CloseNotifyFunc - Hijack func(HijackFunc) HijackFunc - ReadFrom func(ReadFromFunc) ReadFromFunc -} - -// Wrap returns a wrapped version of w that provides the exact same interface -// as w. Specifically if w implements any combination of: -// -// - http.Flusher -// - http.CloseNotifier -// - http.Hijacker -// - io.ReaderFrom -// -// The wrapped version will implement the exact same combination. If no hooks -// are set, the wrapped version also behaves exactly as w. Hooks targeting -// methods not supported by w are ignored. Any other hooks will intercept the -// method they target and may modify the call's arguments and/or return values. -// The CaptureMetrics implementation serves as a working example for how the -// hooks can be used. -func Wrap(w http.ResponseWriter, hooks Hooks) http.ResponseWriter { - rw := &rw{w: w, h: hooks} - _, i0 := w.(http.Flusher) - _, i1 := w.(http.CloseNotifier) - _, i2 := w.(http.Hijacker) - _, i3 := w.(io.ReaderFrom) - switch { - // combination 1/16 - case !i0 && !i1 && !i2 && !i3: - return struct { - Unwrapper - http.ResponseWriter - }{rw, rw} - // combination 2/16 - case !i0 && !i1 && !i2 && i3: - return struct { - Unwrapper - http.ResponseWriter - io.ReaderFrom - }{rw, rw, rw} - // combination 3/16 - case !i0 && !i1 && i2 && !i3: - return struct { - Unwrapper - http.ResponseWriter - http.Hijacker - }{rw, rw, rw} - // combination 4/16 - case !i0 && !i1 && i2 && i3: - return struct { - Unwrapper - http.ResponseWriter - http.Hijacker - io.ReaderFrom - }{rw, rw, rw, rw} - // combination 5/16 - case !i0 && i1 && !i2 && !i3: - return struct { - Unwrapper - http.ResponseWriter - http.CloseNotifier - }{rw, rw, rw} - // combination 6/16 - case !i0 && i1 && !i2 && i3: - return struct { - Unwrapper - http.ResponseWriter - http.CloseNotifier - io.ReaderFrom - }{rw, rw, rw, rw} - // combination 7/16 - case !i0 && i1 && i2 && !i3: - return struct { - Unwrapper - http.ResponseWriter - http.CloseNotifier - http.Hijacker - }{rw, rw, rw, rw} - // combination 8/16 - case !i0 && i1 && i2 && i3: - return struct { - Unwrapper - http.ResponseWriter - http.CloseNotifier - http.Hijacker - io.ReaderFrom - }{rw, rw, rw, rw, rw} - // combination 9/16 - case i0 && !i1 && !i2 && !i3: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - }{rw, rw, rw} - // combination 10/16 - case i0 && !i1 && !i2 && i3: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - io.ReaderFrom - }{rw, rw, rw, rw} - // combination 11/16 - case i0 && !i1 && i2 && !i3: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.Hijacker - }{rw, rw, rw, rw} - // combination 12/16 - case i0 && !i1 && i2 && i3: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.Hijacker - io.ReaderFrom - }{rw, rw, rw, rw, rw} - // combination 13/16 - case i0 && i1 && !i2 && !i3: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.CloseNotifier - }{rw, rw, rw, rw} - // combination 14/16 - case i0 && i1 && !i2 && i3: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.CloseNotifier - io.ReaderFrom - }{rw, rw, rw, rw, rw} - // combination 15/16 - case i0 && i1 && i2 && !i3: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.CloseNotifier - http.Hijacker - }{rw, rw, rw, rw, rw} - // combination 16/16 - case i0 && i1 && i2 && i3: - return struct { - Unwrapper - http.ResponseWriter - http.Flusher - http.CloseNotifier - http.Hijacker - io.ReaderFrom - }{rw, rw, rw, rw, rw, rw} - } - panic("unreachable") -} - -type rw struct { - w http.ResponseWriter - h Hooks -} - -func (w *rw) Unwrap() http.ResponseWriter { - return w.w -} - -func (w *rw) Header() http.Header { - f := w.w.(http.ResponseWriter).Header - if w.h.Header != nil { - f = w.h.Header(f) - } - return f() -} - -func (w *rw) WriteHeader(code int) { - f := w.w.(http.ResponseWriter).WriteHeader - if w.h.WriteHeader != nil { - f = w.h.WriteHeader(f) - } - f(code) -} - -func (w *rw) Write(b []byte) (int, error) { - f := w.w.(http.ResponseWriter).Write - if w.h.Write != nil { - f = w.h.Write(f) - } - return f(b) -} - -func (w *rw) Flush() { - f := w.w.(http.Flusher).Flush - if w.h.Flush != nil { - f = w.h.Flush(f) - } - f() -} - -func (w *rw) CloseNotify() <-chan bool { - f := w.w.(http.CloseNotifier).CloseNotify - if w.h.CloseNotify != nil { - f = w.h.CloseNotify(f) - } - return f() -} - -func (w *rw) Hijack() (net.Conn, *bufio.ReadWriter, error) { - f := w.w.(http.Hijacker).Hijack - if w.h.Hijack != nil { - f = w.h.Hijack(f) - } - return f() -} - -func (w *rw) ReadFrom(src io.Reader) (int64, error) { - f := w.w.(io.ReaderFrom).ReadFrom - if w.h.ReadFrom != nil { - f = w.h.ReadFrom(f) - } - return f(src) -} - -type Unwrapper interface { - Unwrap() http.ResponseWriter -} - -// Unwrap returns the underlying http.ResponseWriter from within zero or more -// layers of httpsnoop wrappers. -func Unwrap(w http.ResponseWriter) http.ResponseWriter { - if rw, ok := w.(Unwrapper); ok { - // recurse until rw.Unwrap() returns a non-Unwrapper - return Unwrap(rw.Unwrap()) - } else { - return w - } -} diff --git a/vendor/github.com/fvbommel/sortorder/.gitignore b/vendor/github.com/fvbommel/sortorder/.gitignore deleted file mode 100644 index c021733e..00000000 --- a/vendor/github.com/fvbommel/sortorder/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so -# Folders -_obj -_test -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* -_testmain.go -*.exe -*.test -*.prof diff --git a/vendor/github.com/fvbommel/sortorder/LICENSE b/vendor/github.com/fvbommel/sortorder/LICENSE deleted file mode 100644 index 5c695fb5..00000000 --- a/vendor/github.com/fvbommel/sortorder/LICENSE +++ /dev/null @@ -1,17 +0,0 @@ -The MIT License (MIT) -Copyright (c) 2015 Frits van Bommel -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/vendor/github.com/fvbommel/sortorder/README.md b/vendor/github.com/fvbommel/sortorder/README.md deleted file mode 100644 index 06779c88..00000000 --- a/vendor/github.com/fvbommel/sortorder/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# sortorder [![PkgGoDev](https://pkg.go.dev/badge/github.com/fvbommel/sortorder)](https://pkg.go.dev/github.com/fvbommel/sortorder) - - import "github.com/fvbommel/sortorder" - -Sort orders and comparison functions. - -Case-insensitive sort orders are in the `casefolded` sub-package -because it pulls in the Unicode tables in the standard library, -which can add significantly to the size of binaries. diff --git a/vendor/github.com/fvbommel/sortorder/doc.go b/vendor/github.com/fvbommel/sortorder/doc.go deleted file mode 100644 index a7dd9585..00000000 --- a/vendor/github.com/fvbommel/sortorder/doc.go +++ /dev/null @@ -1,5 +0,0 @@ -// Package sortorder implements sort orders and comparison functions. -// -// Currently, it only implements so-called "natural order", where integers -// embedded in strings are compared by value. -package sortorder // import "github.com/fvbommel/sortorder" diff --git a/vendor/github.com/fvbommel/sortorder/natsort.go b/vendor/github.com/fvbommel/sortorder/natsort.go deleted file mode 100644 index e4f15110..00000000 --- a/vendor/github.com/fvbommel/sortorder/natsort.go +++ /dev/null @@ -1,76 +0,0 @@ -package sortorder - -// Natural implements sort.Interface to sort strings in natural order. This -// means that e.g. "abc2" < "abc12". -// -// Non-digit sequences and numbers are compared separately. The former are -// compared bytewise, while digits are compared numerically (except that -// the number of leading zeros is used as a tie-breaker, so e.g. "2" < "02") -// -// Limitation: only ASCII digits (0-9) are considered. -type Natural []string - -func (n Natural) Len() int { return len(n) } -func (n Natural) Swap(i, j int) { n[i], n[j] = n[j], n[i] } -func (n Natural) Less(i, j int) bool { return NaturalLess(n[i], n[j]) } - -func isDigit(b byte) bool { return '0' <= b && b <= '9' } - -// NaturalLess compares two strings using natural ordering. This means that e.g. -// "abc2" < "abc12". -// -// Non-digit sequences and numbers are compared separately. The former are -// compared bytewise, while digits are compared numerically (except that -// the number of leading zeros is used as a tie-breaker, so e.g. "2" < "02") -// -// Limitation: only ASCII digits (0-9) are considered. -func NaturalLess(str1, str2 string) bool { - idx1, idx2 := 0, 0 - for idx1 < len(str1) && idx2 < len(str2) { - c1, c2 := str1[idx1], str2[idx2] - dig1, dig2 := isDigit(c1), isDigit(c2) - switch { - case dig1 != dig2: // Digits before other characters. - return dig1 // True if LHS is a digit, false if the RHS is one. - case !dig1: // && !dig2, because dig1 == dig2 - // UTF-8 compares bytewise-lexicographically, no need to decode - // codepoints. - if c1 != c2 { - return c1 < c2 - } - idx1++ - idx2++ - default: // Digits - // Eat zeros. - for ; idx1 < len(str1) && str1[idx1] == '0'; idx1++ { - } - for ; idx2 < len(str2) && str2[idx2] == '0'; idx2++ { - } - // Eat all digits. - nonZero1, nonZero2 := idx1, idx2 - for ; idx1 < len(str1) && isDigit(str1[idx1]); idx1++ { - } - for ; idx2 < len(str2) && isDigit(str2[idx2]); idx2++ { - } - // If lengths of numbers with non-zero prefix differ, the shorter - // one is less. - if len1, len2 := idx1-nonZero1, idx2-nonZero2; len1 != len2 { - return len1 < len2 - } - // If they're equally long, string comparison is correct. - if nr1, nr2 := str1[nonZero1:idx1], str2[nonZero2:idx2]; nr1 != nr2 { - return nr1 < nr2 - } - // Otherwise, the one with less zeros is less. - // Because everything up to the number is equal, comparing the index - // after the zeros is sufficient. - if nonZero1 != nonZero2 { - return nonZero1 < nonZero2 - } - } - // They're identical so far, so continue comparing. - } - // So far they are identical. At least one is ended. If the other continues, - // it sorts last. - return len(str1) < len(str2) -} diff --git a/vendor/github.com/go-logr/logr/.golangci.yaml b/vendor/github.com/go-logr/logr/.golangci.yaml deleted file mode 100644 index 0cffafa7..00000000 --- a/vendor/github.com/go-logr/logr/.golangci.yaml +++ /dev/null @@ -1,26 +0,0 @@ -run: - timeout: 1m - tests: true - -linters: - disable-all: true - enable: - - asciicheck - - errcheck - - forcetypeassert - - gocritic - - gofmt - - goimports - - gosimple - - govet - - ineffassign - - misspell - - revive - - staticcheck - - typecheck - - unused - -issues: - exclude-use-default: false - max-issues-per-linter: 0 - max-same-issues: 10 diff --git a/vendor/github.com/go-logr/logr/CHANGELOG.md b/vendor/github.com/go-logr/logr/CHANGELOG.md deleted file mode 100644 index c3569600..00000000 --- a/vendor/github.com/go-logr/logr/CHANGELOG.md +++ /dev/null @@ -1,6 +0,0 @@ -# CHANGELOG - -## v1.0.0-rc1 - -This is the first logged release. Major changes (including breaking changes) -have occurred since earlier tags. diff --git a/vendor/github.com/go-logr/logr/CONTRIBUTING.md b/vendor/github.com/go-logr/logr/CONTRIBUTING.md deleted file mode 100644 index 5d37e294..00000000 --- a/vendor/github.com/go-logr/logr/CONTRIBUTING.md +++ /dev/null @@ -1,17 +0,0 @@ -# Contributing - -Logr is open to pull-requests, provided they fit within the intended scope of -the project. Specifically, this library aims to be VERY small and minimalist, -with no external dependencies. - -## Compatibility - -This project intends to follow [semantic versioning](http://semver.org) and -is very strict about compatibility. Any proposed changes MUST follow those -rules. - -## Performance - -As a logging library, logr must be as light-weight as possible. Any proposed -code change must include results of running the [benchmark](./benchmark) -before and after the change. diff --git a/vendor/github.com/go-logr/logr/LICENSE b/vendor/github.com/go-logr/logr/LICENSE deleted file mode 100644 index 8dada3ed..00000000 --- a/vendor/github.com/go-logr/logr/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/go-logr/logr/README.md b/vendor/github.com/go-logr/logr/README.md deleted file mode 100644 index 7c7f0c69..00000000 --- a/vendor/github.com/go-logr/logr/README.md +++ /dev/null @@ -1,407 +0,0 @@ -# A minimal logging API for Go - -[![Go Reference](https://pkg.go.dev/badge/github.com/go-logr/logr.svg)](https://pkg.go.dev/github.com/go-logr/logr) -[![Go Report Card](https://goreportcard.com/badge/github.com/go-logr/logr)](https://goreportcard.com/report/github.com/go-logr/logr) -[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/go-logr/logr/badge)](https://securityscorecards.dev/viewer/?platform=github.com&org=go-logr&repo=logr) - -logr offers an(other) opinion on how Go programs and libraries can do logging -without becoming coupled to a particular logging implementation. This is not -an implementation of logging - it is an API. In fact it is two APIs with two -different sets of users. - -The `Logger` type is intended for application and library authors. It provides -a relatively small API which can be used everywhere you want to emit logs. It -defers the actual act of writing logs (to files, to stdout, or whatever) to the -`LogSink` interface. - -The `LogSink` interface is intended for logging library implementers. It is a -pure interface which can be implemented by logging frameworks to provide the actual logging -functionality. - -This decoupling allows application and library developers to write code in -terms of `logr.Logger` (which has very low dependency fan-out) while the -implementation of logging is managed "up stack" (e.g. in or near `main()`.) -Application developers can then switch out implementations as necessary. - -Many people assert that libraries should not be logging, and as such efforts -like this are pointless. Those people are welcome to convince the authors of -the tens-of-thousands of libraries that *DO* write logs that they are all -wrong. In the meantime, logr takes a more practical approach. - -## Typical usage - -Somewhere, early in an application's life, it will make a decision about which -logging library (implementation) it actually wants to use. Something like: - -``` - func main() { - // ... other setup code ... - - // Create the "root" logger. We have chosen the "logimpl" implementation, - // which takes some initial parameters and returns a logr.Logger. - logger := logimpl.New(param1, param2) - - // ... other setup code ... -``` - -Most apps will call into other libraries, create structures to govern the flow, -etc. The `logr.Logger` object can be passed to these other libraries, stored -in structs, or even used as a package-global variable, if needed. For example: - -``` - app := createTheAppObject(logger) - app.Run() -``` - -Outside of this early setup, no other packages need to know about the choice of -implementation. They write logs in terms of the `logr.Logger` that they -received: - -``` - type appObject struct { - // ... other fields ... - logger logr.Logger - // ... other fields ... - } - - func (app *appObject) Run() { - app.logger.Info("starting up", "timestamp", time.Now()) - - // ... app code ... -``` - -## Background - -If the Go standard library had defined an interface for logging, this project -probably would not be needed. Alas, here we are. - -When the Go developers started developing such an interface with -[slog](https://github.com/golang/go/issues/56345), they adopted some of the -logr design but also left out some parts and changed others: - -| Feature | logr | slog | -|---------|------|------| -| High-level API | `Logger` (passed by value) | `Logger` (passed by [pointer](https://github.com/golang/go/issues/59126)) | -| Low-level API | `LogSink` | `Handler` | -| Stack unwinding | done by `LogSink` | done by `Logger` | -| Skipping helper functions | `WithCallDepth`, `WithCallStackHelper` | [not supported by Logger](https://github.com/golang/go/issues/59145) | -| Generating a value for logging on demand | `Marshaler` | `LogValuer` | -| Log levels | >= 0, higher meaning "less important" | positive and negative, with 0 for "info" and higher meaning "more important" | -| Error log entries | always logged, don't have a verbosity level | normal log entries with level >= `LevelError` | -| Passing logger via context | `NewContext`, `FromContext` | no API | -| Adding a name to a logger | `WithName` | no API | -| Modify verbosity of log entries in a call chain | `V` | no API | -| Grouping of key/value pairs | not supported | `WithGroup`, `GroupValue` | -| Pass context for extracting additional values | no API | API variants like `InfoCtx` | - -The high-level slog API is explicitly meant to be one of many different APIs -that can be layered on top of a shared `slog.Handler`. logr is one such -alternative API, with [interoperability](#slog-interoperability) provided by -some conversion functions. - -### Inspiration - -Before you consider this package, please read [this blog post by the -inimitable Dave Cheney][warning-makes-no-sense]. We really appreciate what -he has to say, and it largely aligns with our own experiences. - -### Differences from Dave's ideas - -The main differences are: - -1. Dave basically proposes doing away with the notion of a logging API in favor -of `fmt.Printf()`. We disagree, especially when you consider things like output -locations, timestamps, file and line decorations, and structured logging. This -package restricts the logging API to just 2 types of logs: info and error. - -Info logs are things you want to tell the user which are not errors. Error -logs are, well, errors. If your code receives an `error` from a subordinate -function call and is logging that `error` *and not returning it*, use error -logs. - -2. Verbosity-levels on info logs. This gives developers a chance to indicate -arbitrary grades of importance for info logs, without assigning names with -semantic meaning such as "warning", "trace", and "debug." Superficially this -may feel very similar, but the primary difference is the lack of semantics. -Because verbosity is a numerical value, it's safe to assume that an app running -with higher verbosity means more (and less important) logs will be generated. - -## Implementations (non-exhaustive) - -There are implementations for the following logging libraries: - -- **a function** (can bridge to non-structured libraries): [funcr](https://github.com/go-logr/logr/tree/master/funcr) -- **a testing.T** (for use in Go tests, with JSON-like output): [testr](https://github.com/go-logr/logr/tree/master/testr) -- **github.com/google/glog**: [glogr](https://github.com/go-logr/glogr) -- **k8s.io/klog** (for Kubernetes): [klogr](https://git.k8s.io/klog/klogr) -- **a testing.T** (with klog-like text output): [ktesting](https://git.k8s.io/klog/ktesting) -- **go.uber.org/zap**: [zapr](https://github.com/go-logr/zapr) -- **log** (the Go standard library logger): [stdr](https://github.com/go-logr/stdr) -- **github.com/sirupsen/logrus**: [logrusr](https://github.com/bombsimon/logrusr) -- **github.com/wojas/genericr**: [genericr](https://github.com/wojas/genericr) (makes it easy to implement your own backend) -- **logfmt** (Heroku style [logging](https://www.brandur.org/logfmt)): [logfmtr](https://github.com/iand/logfmtr) -- **github.com/rs/zerolog**: [zerologr](https://github.com/go-logr/zerologr) -- **github.com/go-kit/log**: [gokitlogr](https://github.com/tonglil/gokitlogr) (also compatible with github.com/go-kit/kit/log since v0.12.0) -- **bytes.Buffer** (writing to a buffer): [bufrlogr](https://github.com/tonglil/buflogr) (useful for ensuring values were logged, like during testing) - -## slog interoperability - -Interoperability goes both ways, using the `logr.Logger` API with a `slog.Handler` -and using the `slog.Logger` API with a `logr.LogSink`. `FromSlogHandler` and -`ToSlogHandler` convert between a `logr.Logger` and a `slog.Handler`. -As usual, `slog.New` can be used to wrap such a `slog.Handler` in the high-level -slog API. - -### Using a `logr.LogSink` as backend for slog - -Ideally, a logr sink implementation should support both logr and slog by -implementing both the normal logr interface(s) and `SlogSink`. Because -of a conflict in the parameters of the common `Enabled` method, it is [not -possible to implement both slog.Handler and logr.Sink in the same -type](https://github.com/golang/go/issues/59110). - -If both are supported, log calls can go from the high-level APIs to the backend -without the need to convert parameters. `FromSlogHandler` and `ToSlogHandler` can -convert back and forth without adding additional wrappers, with one exception: -when `Logger.V` was used to adjust the verbosity for a `slog.Handler`, then -`ToSlogHandler` has to use a wrapper which adjusts the verbosity for future -log calls. - -Such an implementation should also support values that implement specific -interfaces from both packages for logging (`logr.Marshaler`, `slog.LogValuer`, -`slog.GroupValue`). logr does not convert those. - -Not supporting slog has several drawbacks: -- Recording source code locations works correctly if the handler gets called - through `slog.Logger`, but may be wrong in other cases. That's because a - `logr.Sink` does its own stack unwinding instead of using the program counter - provided by the high-level API. -- slog levels <= 0 can be mapped to logr levels by negating the level without a - loss of information. But all slog levels > 0 (e.g. `slog.LevelWarning` as - used by `slog.Logger.Warn`) must be mapped to 0 before calling the sink - because logr does not support "more important than info" levels. -- The slog group concept is supported by prefixing each key in a key/value - pair with the group names, separated by a dot. For structured output like - JSON it would be better to group the key/value pairs inside an object. -- Special slog values and interfaces don't work as expected. -- The overhead is likely to be higher. - -These drawbacks are severe enough that applications using a mixture of slog and -logr should switch to a different backend. - -### Using a `slog.Handler` as backend for logr - -Using a plain `slog.Handler` without support for logr works better than the -other direction: -- All logr verbosity levels can be mapped 1:1 to their corresponding slog level - by negating them. -- Stack unwinding is done by the `SlogSink` and the resulting program - counter is passed to the `slog.Handler`. -- Names added via `Logger.WithName` are gathered and recorded in an additional - attribute with `logger` as key and the names separated by slash as value. -- `Logger.Error` is turned into a log record with `slog.LevelError` as level - and an additional attribute with `err` as key, if an error was provided. - -The main drawback is that `logr.Marshaler` will not be supported. Types should -ideally support both `logr.Marshaler` and `slog.Valuer`. If compatibility -with logr implementations without slog support is not important, then -`slog.Valuer` is sufficient. - -### Context support for slog - -Storing a logger in a `context.Context` is not supported by -slog. `NewContextWithSlogLogger` and `FromContextAsSlogLogger` can be -used to fill this gap. They store and retrieve a `slog.Logger` pointer -under the same context key that is also used by `NewContext` and -`FromContext` for `logr.Logger` value. - -When `NewContextWithSlogLogger` is followed by `FromContext`, the latter will -automatically convert the `slog.Logger` to a -`logr.Logger`. `FromContextAsSlogLogger` does the same for the other direction. - -With this approach, binaries which use either slog or logr are as efficient as -possible with no unnecessary allocations. This is also why the API stores a -`slog.Logger` pointer: when storing a `slog.Handler`, creating a `slog.Logger` -on retrieval would need to allocate one. - -The downside is that switching back and forth needs more allocations. Because -logr is the API that is already in use by different packages, in particular -Kubernetes, the recommendation is to use the `logr.Logger` API in code which -uses contextual logging. - -An alternative to adding values to a logger and storing that logger in the -context is to store the values in the context and to configure a logging -backend to extract those values when emitting log entries. This only works when -log calls are passed the context, which is not supported by the logr API. - -With the slog API, it is possible, but not -required. https://github.com/veqryn/slog-context is a package for slog which -provides additional support code for this approach. It also contains wrappers -for the context functions in logr, so developers who prefer to not use the logr -APIs directly can use those instead and the resulting code will still be -interoperable with logr. - -## FAQ - -### Conceptual - -#### Why structured logging? - -- **Structured logs are more easily queryable**: Since you've got - key-value pairs, it's much easier to query your structured logs for - particular values by filtering on the contents of a particular key -- - think searching request logs for error codes, Kubernetes reconcilers for - the name and namespace of the reconciled object, etc. - -- **Structured logging makes it easier to have cross-referenceable logs**: - Similarly to searchability, if you maintain conventions around your - keys, it becomes easy to gather all log lines related to a particular - concept. - -- **Structured logs allow better dimensions of filtering**: if you have - structure to your logs, you've got more precise control over how much - information is logged -- you might choose in a particular configuration - to log certain keys but not others, only log lines where a certain key - matches a certain value, etc., instead of just having v-levels and names - to key off of. - -- **Structured logs better represent structured data**: sometimes, the - data that you want to log is inherently structured (think tuple-link - objects.) Structured logs allow you to preserve that structure when - outputting. - -#### Why V-levels? - -**V-levels give operators an easy way to control the chattiness of log -operations**. V-levels provide a way for a given package to distinguish -the relative importance or verbosity of a given log message. Then, if -a particular logger or package is logging too many messages, the user -of the package can simply change the v-levels for that library. - -#### Why not named levels, like Info/Warning/Error? - -Read [Dave Cheney's post][warning-makes-no-sense]. Then read [Differences -from Dave's ideas](#differences-from-daves-ideas). - -#### Why not allow format strings, too? - -**Format strings negate many of the benefits of structured logs**: - -- They're not easily searchable without resorting to fuzzy searching, - regular expressions, etc. - -- They don't store structured data well, since contents are flattened into - a string. - -- They're not cross-referenceable. - -- They don't compress easily, since the message is not constant. - -(Unless you turn positional parameters into key-value pairs with numerical -keys, at which point you've gotten key-value logging with meaningless -keys.) - -### Practical - -#### Why key-value pairs, and not a map? - -Key-value pairs are *much* easier to optimize, especially around -allocations. Zap (a structured logger that inspired logr's interface) has -[performance measurements](https://github.com/uber-go/zap#performance) -that show this quite nicely. - -While the interface ends up being a little less obvious, you get -potentially better performance, plus avoid making users type -`map[string]string{}` every time they want to log. - -#### What if my V-levels differ between libraries? - -That's fine. Control your V-levels on a per-logger basis, and use the -`WithName` method to pass different loggers to different libraries. - -Generally, you should take care to ensure that you have relatively -consistent V-levels within a given logger, however, as this makes deciding -on what verbosity of logs to request easier. - -#### But I really want to use a format string! - -That's not actually a question. Assuming your question is "how do -I convert my mental model of logging with format strings to logging with -constant messages": - -1. Figure out what the error actually is, as you'd write in a TL;DR style, - and use that as a message. - -2. For every place you'd write a format specifier, look to the word before - it, and add that as a key value pair. - -For instance, consider the following examples (all taken from spots in the -Kubernetes codebase): - -- `klog.V(4).Infof("Client is returning errors: code %v, error %v", - responseCode, err)` becomes `logger.Error(err, "client returned an - error", "code", responseCode)` - -- `klog.V(4).Infof("Got a Retry-After %ds response for attempt %d to %v", - seconds, retries, url)` becomes `logger.V(4).Info("got a retry-after - response when requesting url", "attempt", retries, "after - seconds", seconds, "url", url)` - -If you *really* must use a format string, use it in a key's value, and -call `fmt.Sprintf` yourself. For instance: `log.Printf("unable to -reflect over type %T")` becomes `logger.Info("unable to reflect over -type", "type", fmt.Sprintf("%T"))`. In general though, the cases where -this is necessary should be few and far between. - -#### How do I choose my V-levels? - -This is basically the only hard constraint: increase V-levels to denote -more verbose or more debug-y logs. - -Otherwise, you can start out with `0` as "you always want to see this", -`1` as "common logging that you might *possibly* want to turn off", and -`10` as "I would like to performance-test your log collection stack." - -Then gradually choose levels in between as you need them, working your way -down from 10 (for debug and trace style logs) and up from 1 (for chattier -info-type logs). For reference, slog pre-defines -4 for debug logs -(corresponds to 4 in logr), which matches what is -[recommended for Kubernetes](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md#what-method-to-use). - -#### How do I choose my keys? - -Keys are fairly flexible, and can hold more or less any string -value. For best compatibility with implementations and consistency -with existing code in other projects, there are a few conventions you -should consider. - -- Make your keys human-readable. -- Constant keys are generally a good idea. -- Be consistent across your codebase. -- Keys should naturally match parts of the message string. -- Use lower case for simple keys and - [lowerCamelCase](https://en.wiktionary.org/wiki/lowerCamelCase) for - more complex ones. Kubernetes is one example of a project that has - [adopted that - convention](https://github.com/kubernetes/community/blob/HEAD/contributors/devel/sig-instrumentation/migration-to-structured-logging.md#name-arguments). - -While key names are mostly unrestricted (and spaces are acceptable), -it's generally a good idea to stick to printable ascii characters, or at -least match the general character set of your log lines. - -#### Why should keys be constant values? - -The point of structured logging is to make later log processing easier. Your -keys are, effectively, the schema of each log message. If you use different -keys across instances of the same log line, you will make your structured logs -much harder to use. `Sprintf()` is for values, not for keys! - -#### Why is this not a pure interface? - -The Logger type is implemented as a struct in order to allow the Go compiler to -optimize things like high-V `Info` logs that are not triggered. Not all of -these implementations are implemented yet, but this structure was suggested as -a way to ensure they *can* be implemented. All of the real work is behind the -`LogSink` interface. - -[warning-makes-no-sense]: http://dave.cheney.net/2015/11/05/lets-talk-about-logging diff --git a/vendor/github.com/go-logr/logr/SECURITY.md b/vendor/github.com/go-logr/logr/SECURITY.md deleted file mode 100644 index 1ca756fc..00000000 --- a/vendor/github.com/go-logr/logr/SECURITY.md +++ /dev/null @@ -1,18 +0,0 @@ -# Security Policy - -If you have discovered a security vulnerability in this project, please report it -privately. **Do not disclose it as a public issue.** This gives us time to work with you -to fix the issue before public exposure, reducing the chance that the exploit will be -used before a patch is released. - -You may submit the report in the following ways: - -- send an email to go-logr-security@googlegroups.com -- send us a [private vulnerability report](https://github.com/go-logr/logr/security/advisories/new) - -Please provide the following information in your report: - -- A description of the vulnerability and its impact -- How to reproduce the issue - -We ask that you give us 90 days to work on a fix before public exposure. diff --git a/vendor/github.com/go-logr/logr/context.go b/vendor/github.com/go-logr/logr/context.go deleted file mode 100644 index de8bcc3a..00000000 --- a/vendor/github.com/go-logr/logr/context.go +++ /dev/null @@ -1,33 +0,0 @@ -/* -Copyright 2023 The logr Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package logr - -// contextKey is how we find Loggers in a context.Context. With Go < 1.21, -// the value is always a Logger value. With Go >= 1.21, the value can be a -// Logger value or a slog.Logger pointer. -type contextKey struct{} - -// notFoundError exists to carry an IsNotFound method. -type notFoundError struct{} - -func (notFoundError) Error() string { - return "no logr.Logger was present" -} - -func (notFoundError) IsNotFound() bool { - return true -} diff --git a/vendor/github.com/go-logr/logr/context_noslog.go b/vendor/github.com/go-logr/logr/context_noslog.go deleted file mode 100644 index f012f9a1..00000000 --- a/vendor/github.com/go-logr/logr/context_noslog.go +++ /dev/null @@ -1,49 +0,0 @@ -//go:build !go1.21 -// +build !go1.21 - -/* -Copyright 2019 The logr Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package logr - -import ( - "context" -) - -// FromContext returns a Logger from ctx or an error if no Logger is found. -func FromContext(ctx context.Context) (Logger, error) { - if v, ok := ctx.Value(contextKey{}).(Logger); ok { - return v, nil - } - - return Logger{}, notFoundError{} -} - -// FromContextOrDiscard returns a Logger from ctx. If no Logger is found, this -// returns a Logger that discards all log messages. -func FromContextOrDiscard(ctx context.Context) Logger { - if v, ok := ctx.Value(contextKey{}).(Logger); ok { - return v - } - - return Discard() -} - -// NewContext returns a new Context, derived from ctx, which carries the -// provided Logger. -func NewContext(ctx context.Context, logger Logger) context.Context { - return context.WithValue(ctx, contextKey{}, logger) -} diff --git a/vendor/github.com/go-logr/logr/context_slog.go b/vendor/github.com/go-logr/logr/context_slog.go deleted file mode 100644 index 065ef0b8..00000000 --- a/vendor/github.com/go-logr/logr/context_slog.go +++ /dev/null @@ -1,83 +0,0 @@ -//go:build go1.21 -// +build go1.21 - -/* -Copyright 2019 The logr Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package logr - -import ( - "context" - "fmt" - "log/slog" -) - -// FromContext returns a Logger from ctx or an error if no Logger is found. -func FromContext(ctx context.Context) (Logger, error) { - v := ctx.Value(contextKey{}) - if v == nil { - return Logger{}, notFoundError{} - } - - switch v := v.(type) { - case Logger: - return v, nil - case *slog.Logger: - return FromSlogHandler(v.Handler()), nil - default: - // Not reached. - panic(fmt.Sprintf("unexpected value type for logr context key: %T", v)) - } -} - -// FromContextAsSlogLogger returns a slog.Logger from ctx or nil if no such Logger is found. -func FromContextAsSlogLogger(ctx context.Context) *slog.Logger { - v := ctx.Value(contextKey{}) - if v == nil { - return nil - } - - switch v := v.(type) { - case Logger: - return slog.New(ToSlogHandler(v)) - case *slog.Logger: - return v - default: - // Not reached. - panic(fmt.Sprintf("unexpected value type for logr context key: %T", v)) - } -} - -// FromContextOrDiscard returns a Logger from ctx. If no Logger is found, this -// returns a Logger that discards all log messages. -func FromContextOrDiscard(ctx context.Context) Logger { - if logger, err := FromContext(ctx); err == nil { - return logger - } - return Discard() -} - -// NewContext returns a new Context, derived from ctx, which carries the -// provided Logger. -func NewContext(ctx context.Context, logger Logger) context.Context { - return context.WithValue(ctx, contextKey{}, logger) -} - -// NewContextWithSlogLogger returns a new Context, derived from ctx, which carries the -// provided slog.Logger. -func NewContextWithSlogLogger(ctx context.Context, logger *slog.Logger) context.Context { - return context.WithValue(ctx, contextKey{}, logger) -} diff --git a/vendor/github.com/go-logr/logr/discard.go b/vendor/github.com/go-logr/logr/discard.go deleted file mode 100644 index 99fe8be9..00000000 --- a/vendor/github.com/go-logr/logr/discard.go +++ /dev/null @@ -1,24 +0,0 @@ -/* -Copyright 2020 The logr Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package logr - -// Discard returns a Logger that discards all messages logged to it. It can be -// used whenever the caller is not interested in the logs. Logger instances -// produced by this function always compare as equal. -func Discard() Logger { - return New(nil) -} diff --git a/vendor/github.com/go-logr/logr/funcr/funcr.go b/vendor/github.com/go-logr/logr/funcr/funcr.go deleted file mode 100644 index 30568e76..00000000 --- a/vendor/github.com/go-logr/logr/funcr/funcr.go +++ /dev/null @@ -1,914 +0,0 @@ -/* -Copyright 2021 The logr Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package funcr implements formatting of structured log messages and -// optionally captures the call site and timestamp. -// -// The simplest way to use it is via its implementation of a -// github.com/go-logr/logr.LogSink with output through an arbitrary -// "write" function. See New and NewJSON for details. -// -// # Custom LogSinks -// -// For users who need more control, a funcr.Formatter can be embedded inside -// your own custom LogSink implementation. This is useful when the LogSink -// needs to implement additional methods, for example. -// -// # Formatting -// -// This will respect logr.Marshaler, fmt.Stringer, and error interfaces for -// values which are being logged. When rendering a struct, funcr will use Go's -// standard JSON tags (all except "string"). -package funcr - -import ( - "bytes" - "encoding" - "encoding/json" - "fmt" - "path/filepath" - "reflect" - "runtime" - "strconv" - "strings" - "time" - - "github.com/go-logr/logr" -) - -// New returns a logr.Logger which is implemented by an arbitrary function. -func New(fn func(prefix, args string), opts Options) logr.Logger { - return logr.New(newSink(fn, NewFormatter(opts))) -} - -// NewJSON returns a logr.Logger which is implemented by an arbitrary function -// and produces JSON output. -func NewJSON(fn func(obj string), opts Options) logr.Logger { - fnWrapper := func(_, obj string) { - fn(obj) - } - return logr.New(newSink(fnWrapper, NewFormatterJSON(opts))) -} - -// Underlier exposes access to the underlying logging function. Since -// callers only have a logr.Logger, they have to know which -// implementation is in use, so this interface is less of an -// abstraction and more of a way to test type conversion. -type Underlier interface { - GetUnderlying() func(prefix, args string) -} - -func newSink(fn func(prefix, args string), formatter Formatter) logr.LogSink { - l := &fnlogger{ - Formatter: formatter, - write: fn, - } - // For skipping fnlogger.Info and fnlogger.Error. - l.Formatter.AddCallDepth(1) - return l -} - -// Options carries parameters which influence the way logs are generated. -type Options struct { - // LogCaller tells funcr to add a "caller" key to some or all log lines. - // This has some overhead, so some users might not want it. - LogCaller MessageClass - - // LogCallerFunc tells funcr to also log the calling function name. This - // has no effect if caller logging is not enabled (see Options.LogCaller). - LogCallerFunc bool - - // LogTimestamp tells funcr to add a "ts" key to log lines. This has some - // overhead, so some users might not want it. - LogTimestamp bool - - // TimestampFormat tells funcr how to render timestamps when LogTimestamp - // is enabled. If not specified, a default format will be used. For more - // details, see docs for Go's time.Layout. - TimestampFormat string - - // LogInfoLevel tells funcr what key to use to log the info level. - // If not specified, the info level will be logged as "level". - // If this is set to "", the info level will not be logged at all. - LogInfoLevel *string - - // Verbosity tells funcr which V logs to produce. Higher values enable - // more logs. Info logs at or below this level will be written, while logs - // above this level will be discarded. - Verbosity int - - // RenderBuiltinsHook allows users to mutate the list of key-value pairs - // while a log line is being rendered. The kvList argument follows logr - // conventions - each pair of slice elements is comprised of a string key - // and an arbitrary value (verified and sanitized before calling this - // hook). The value returned must follow the same conventions. This hook - // can be used to audit or modify logged data. For example, you might want - // to prefix all of funcr's built-in keys with some string. This hook is - // only called for built-in (provided by funcr itself) key-value pairs. - // Equivalent hooks are offered for key-value pairs saved via - // logr.Logger.WithValues or Formatter.AddValues (see RenderValuesHook) and - // for user-provided pairs (see RenderArgsHook). - RenderBuiltinsHook func(kvList []any) []any - - // RenderValuesHook is the same as RenderBuiltinsHook, except that it is - // only called for key-value pairs saved via logr.Logger.WithValues. See - // RenderBuiltinsHook for more details. - RenderValuesHook func(kvList []any) []any - - // RenderArgsHook is the same as RenderBuiltinsHook, except that it is only - // called for key-value pairs passed directly to Info and Error. See - // RenderBuiltinsHook for more details. - RenderArgsHook func(kvList []any) []any - - // MaxLogDepth tells funcr how many levels of nested fields (e.g. a struct - // that contains a struct, etc.) it may log. Every time it finds a struct, - // slice, array, or map the depth is increased by one. When the maximum is - // reached, the value will be converted to a string indicating that the max - // depth has been exceeded. If this field is not specified, a default - // value will be used. - MaxLogDepth int -} - -// MessageClass indicates which category or categories of messages to consider. -type MessageClass int - -const ( - // None ignores all message classes. - None MessageClass = iota - // All considers all message classes. - All - // Info only considers info messages. - Info - // Error only considers error messages. - Error -) - -// fnlogger inherits some of its LogSink implementation from Formatter -// and just needs to add some glue code. -type fnlogger struct { - Formatter - write func(prefix, args string) -} - -func (l fnlogger) WithName(name string) logr.LogSink { - l.Formatter.AddName(name) - return &l -} - -func (l fnlogger) WithValues(kvList ...any) logr.LogSink { - l.Formatter.AddValues(kvList) - return &l -} - -func (l fnlogger) WithCallDepth(depth int) logr.LogSink { - l.Formatter.AddCallDepth(depth) - return &l -} - -func (l fnlogger) Info(level int, msg string, kvList ...any) { - prefix, args := l.FormatInfo(level, msg, kvList) - l.write(prefix, args) -} - -func (l fnlogger) Error(err error, msg string, kvList ...any) { - prefix, args := l.FormatError(err, msg, kvList) - l.write(prefix, args) -} - -func (l fnlogger) GetUnderlying() func(prefix, args string) { - return l.write -} - -// Assert conformance to the interfaces. -var _ logr.LogSink = &fnlogger{} -var _ logr.CallDepthLogSink = &fnlogger{} -var _ Underlier = &fnlogger{} - -// NewFormatter constructs a Formatter which emits a JSON-like key=value format. -func NewFormatter(opts Options) Formatter { - return newFormatter(opts, outputKeyValue) -} - -// NewFormatterJSON constructs a Formatter which emits strict JSON. -func NewFormatterJSON(opts Options) Formatter { - return newFormatter(opts, outputJSON) -} - -// Defaults for Options. -const defaultTimestampFormat = "2006-01-02 15:04:05.000000" -const defaultMaxLogDepth = 16 - -func newFormatter(opts Options, outfmt outputFormat) Formatter { - if opts.TimestampFormat == "" { - opts.TimestampFormat = defaultTimestampFormat - } - if opts.MaxLogDepth == 0 { - opts.MaxLogDepth = defaultMaxLogDepth - } - if opts.LogInfoLevel == nil { - opts.LogInfoLevel = new(string) - *opts.LogInfoLevel = "level" - } - f := Formatter{ - outputFormat: outfmt, - prefix: "", - values: nil, - depth: 0, - opts: &opts, - } - return f -} - -// Formatter is an opaque struct which can be embedded in a LogSink -// implementation. It should be constructed with NewFormatter. Some of -// its methods directly implement logr.LogSink. -type Formatter struct { - outputFormat outputFormat - prefix string - values []any - valuesStr string - depth int - opts *Options - groupName string // for slog groups - groups []groupDef -} - -// outputFormat indicates which outputFormat to use. -type outputFormat int - -const ( - // outputKeyValue emits a JSON-like key=value format, but not strict JSON. - outputKeyValue outputFormat = iota - // outputJSON emits strict JSON. - outputJSON -) - -// groupDef represents a saved group. The values may be empty, but we don't -// know if we need to render the group until the final record is rendered. -type groupDef struct { - name string - values string -} - -// PseudoStruct is a list of key-value pairs that gets logged as a struct. -type PseudoStruct []any - -// render produces a log line, ready to use. -func (f Formatter) render(builtins, args []any) string { - // Empirically bytes.Buffer is faster than strings.Builder for this. - buf := bytes.NewBuffer(make([]byte, 0, 1024)) - - if f.outputFormat == outputJSON { - buf.WriteByte('{') // for the whole record - } - - // Render builtins - vals := builtins - if hook := f.opts.RenderBuiltinsHook; hook != nil { - vals = hook(f.sanitize(vals)) - } - f.flatten(buf, vals, false) // keys are ours, no need to escape - continuing := len(builtins) > 0 - - // Turn the inner-most group into a string - argsStr := func() string { - buf := bytes.NewBuffer(make([]byte, 0, 1024)) - - vals = args - if hook := f.opts.RenderArgsHook; hook != nil { - vals = hook(f.sanitize(vals)) - } - f.flatten(buf, vals, true) // escape user-provided keys - - return buf.String() - }() - - // Render the stack of groups from the inside out. - bodyStr := f.renderGroup(f.groupName, f.valuesStr, argsStr) - for i := len(f.groups) - 1; i >= 0; i-- { - grp := &f.groups[i] - if grp.values == "" && bodyStr == "" { - // no contents, so we must elide the whole group - continue - } - bodyStr = f.renderGroup(grp.name, grp.values, bodyStr) - } - - if bodyStr != "" { - if continuing { - buf.WriteByte(f.comma()) - } - buf.WriteString(bodyStr) - } - - if f.outputFormat == outputJSON { - buf.WriteByte('}') // for the whole record - } - - return buf.String() -} - -// renderGroup returns a string representation of the named group with rendered -// values and args. If the name is empty, this will return the values and args, -// joined. If the name is not empty, this will return a single key-value pair, -// where the value is a grouping of the values and args. If the values and -// args are both empty, this will return an empty string, even if the name was -// specified. -func (f Formatter) renderGroup(name string, values string, args string) string { - buf := bytes.NewBuffer(make([]byte, 0, 1024)) - - needClosingBrace := false - if name != "" && (values != "" || args != "") { - buf.WriteString(f.quoted(name, true)) // escape user-provided keys - buf.WriteByte(f.colon()) - buf.WriteByte('{') - needClosingBrace = true - } - - continuing := false - if values != "" { - buf.WriteString(values) - continuing = true - } - - if args != "" { - if continuing { - buf.WriteByte(f.comma()) - } - buf.WriteString(args) - } - - if needClosingBrace { - buf.WriteByte('}') - } - - return buf.String() -} - -// flatten renders a list of key-value pairs into a buffer. If escapeKeys is -// true, the keys are assumed to have non-JSON-compatible characters in them -// and must be evaluated for escapes. -// -// This function returns a potentially modified version of kvList, which -// ensures that there is a value for every key (adding a value if needed) and -// that each key is a string (substituting a key if needed). -func (f Formatter) flatten(buf *bytes.Buffer, kvList []any, escapeKeys bool) []any { - // This logic overlaps with sanitize() but saves one type-cast per key, - // which can be measurable. - if len(kvList)%2 != 0 { - kvList = append(kvList, noValue) - } - copied := false - for i := 0; i < len(kvList); i += 2 { - k, ok := kvList[i].(string) - if !ok { - if !copied { - newList := make([]any, len(kvList)) - copy(newList, kvList) - kvList = newList - copied = true - } - k = f.nonStringKey(kvList[i]) - kvList[i] = k - } - v := kvList[i+1] - - if i > 0 { - if f.outputFormat == outputJSON { - buf.WriteByte(f.comma()) - } else { - // In theory the format could be something we don't understand. In - // practice, we control it, so it won't be. - buf.WriteByte(' ') - } - } - - buf.WriteString(f.quoted(k, escapeKeys)) - buf.WriteByte(f.colon()) - buf.WriteString(f.pretty(v)) - } - return kvList -} - -func (f Formatter) quoted(str string, escape bool) string { - if escape { - return prettyString(str) - } - // this is faster - return `"` + str + `"` -} - -func (f Formatter) comma() byte { - if f.outputFormat == outputJSON { - return ',' - } - return ' ' -} - -func (f Formatter) colon() byte { - if f.outputFormat == outputJSON { - return ':' - } - return '=' -} - -func (f Formatter) pretty(value any) string { - return f.prettyWithFlags(value, 0, 0) -} - -const ( - flagRawStruct = 0x1 // do not print braces on structs -) - -// TODO: This is not fast. Most of the overhead goes here. -func (f Formatter) prettyWithFlags(value any, flags uint32, depth int) string { - if depth > f.opts.MaxLogDepth { - return `""` - } - - // Handle types that take full control of logging. - if v, ok := value.(logr.Marshaler); ok { - // Replace the value with what the type wants to get logged. - // That then gets handled below via reflection. - value = invokeMarshaler(v) - } - - // Handle types that want to format themselves. - switch v := value.(type) { - case fmt.Stringer: - value = invokeStringer(v) - case error: - value = invokeError(v) - } - - // Handling the most common types without reflect is a small perf win. - switch v := value.(type) { - case bool: - return strconv.FormatBool(v) - case string: - return prettyString(v) - case int: - return strconv.FormatInt(int64(v), 10) - case int8: - return strconv.FormatInt(int64(v), 10) - case int16: - return strconv.FormatInt(int64(v), 10) - case int32: - return strconv.FormatInt(int64(v), 10) - case int64: - return strconv.FormatInt(int64(v), 10) - case uint: - return strconv.FormatUint(uint64(v), 10) - case uint8: - return strconv.FormatUint(uint64(v), 10) - case uint16: - return strconv.FormatUint(uint64(v), 10) - case uint32: - return strconv.FormatUint(uint64(v), 10) - case uint64: - return strconv.FormatUint(v, 10) - case uintptr: - return strconv.FormatUint(uint64(v), 10) - case float32: - return strconv.FormatFloat(float64(v), 'f', -1, 32) - case float64: - return strconv.FormatFloat(v, 'f', -1, 64) - case complex64: - return `"` + strconv.FormatComplex(complex128(v), 'f', -1, 64) + `"` - case complex128: - return `"` + strconv.FormatComplex(v, 'f', -1, 128) + `"` - case PseudoStruct: - buf := bytes.NewBuffer(make([]byte, 0, 1024)) - v = f.sanitize(v) - if flags&flagRawStruct == 0 { - buf.WriteByte('{') - } - for i := 0; i < len(v); i += 2 { - if i > 0 { - buf.WriteByte(f.comma()) - } - k, _ := v[i].(string) // sanitize() above means no need to check success - // arbitrary keys might need escaping - buf.WriteString(prettyString(k)) - buf.WriteByte(f.colon()) - buf.WriteString(f.prettyWithFlags(v[i+1], 0, depth+1)) - } - if flags&flagRawStruct == 0 { - buf.WriteByte('}') - } - return buf.String() - } - - buf := bytes.NewBuffer(make([]byte, 0, 256)) - t := reflect.TypeOf(value) - if t == nil { - return "null" - } - v := reflect.ValueOf(value) - switch t.Kind() { - case reflect.Bool: - return strconv.FormatBool(v.Bool()) - case reflect.String: - return prettyString(v.String()) - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return strconv.FormatInt(int64(v.Int()), 10) - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return strconv.FormatUint(uint64(v.Uint()), 10) - case reflect.Float32: - return strconv.FormatFloat(float64(v.Float()), 'f', -1, 32) - case reflect.Float64: - return strconv.FormatFloat(v.Float(), 'f', -1, 64) - case reflect.Complex64: - return `"` + strconv.FormatComplex(complex128(v.Complex()), 'f', -1, 64) + `"` - case reflect.Complex128: - return `"` + strconv.FormatComplex(v.Complex(), 'f', -1, 128) + `"` - case reflect.Struct: - if flags&flagRawStruct == 0 { - buf.WriteByte('{') - } - printComma := false // testing i>0 is not enough because of JSON omitted fields - for i := 0; i < t.NumField(); i++ { - fld := t.Field(i) - if fld.PkgPath != "" { - // reflect says this field is only defined for non-exported fields. - continue - } - if !v.Field(i).CanInterface() { - // reflect isn't clear exactly what this means, but we can't use it. - continue - } - name := "" - omitempty := false - if tag, found := fld.Tag.Lookup("json"); found { - if tag == "-" { - continue - } - if comma := strings.Index(tag, ","); comma != -1 { - if n := tag[:comma]; n != "" { - name = n - } - rest := tag[comma:] - if strings.Contains(rest, ",omitempty,") || strings.HasSuffix(rest, ",omitempty") { - omitempty = true - } - } else { - name = tag - } - } - if omitempty && isEmpty(v.Field(i)) { - continue - } - if printComma { - buf.WriteByte(f.comma()) - } - printComma = true // if we got here, we are rendering a field - if fld.Anonymous && fld.Type.Kind() == reflect.Struct && name == "" { - buf.WriteString(f.prettyWithFlags(v.Field(i).Interface(), flags|flagRawStruct, depth+1)) - continue - } - if name == "" { - name = fld.Name - } - // field names can't contain characters which need escaping - buf.WriteString(f.quoted(name, false)) - buf.WriteByte(f.colon()) - buf.WriteString(f.prettyWithFlags(v.Field(i).Interface(), 0, depth+1)) - } - if flags&flagRawStruct == 0 { - buf.WriteByte('}') - } - return buf.String() - case reflect.Slice, reflect.Array: - // If this is outputing as JSON make sure this isn't really a json.RawMessage. - // If so just emit "as-is" and don't pretty it as that will just print - // it as [X,Y,Z,...] which isn't terribly useful vs the string form you really want. - if f.outputFormat == outputJSON { - if rm, ok := value.(json.RawMessage); ok { - // If it's empty make sure we emit an empty value as the array style would below. - if len(rm) > 0 { - buf.Write(rm) - } else { - buf.WriteString("null") - } - return buf.String() - } - } - buf.WriteByte('[') - for i := 0; i < v.Len(); i++ { - if i > 0 { - buf.WriteByte(f.comma()) - } - e := v.Index(i) - buf.WriteString(f.prettyWithFlags(e.Interface(), 0, depth+1)) - } - buf.WriteByte(']') - return buf.String() - case reflect.Map: - buf.WriteByte('{') - // This does not sort the map keys, for best perf. - it := v.MapRange() - i := 0 - for it.Next() { - if i > 0 { - buf.WriteByte(f.comma()) - } - // If a map key supports TextMarshaler, use it. - keystr := "" - if m, ok := it.Key().Interface().(encoding.TextMarshaler); ok { - txt, err := m.MarshalText() - if err != nil { - keystr = fmt.Sprintf("", err.Error()) - } else { - keystr = string(txt) - } - keystr = prettyString(keystr) - } else { - // prettyWithFlags will produce already-escaped values - keystr = f.prettyWithFlags(it.Key().Interface(), 0, depth+1) - if t.Key().Kind() != reflect.String { - // JSON only does string keys. Unlike Go's standard JSON, we'll - // convert just about anything to a string. - keystr = prettyString(keystr) - } - } - buf.WriteString(keystr) - buf.WriteByte(f.colon()) - buf.WriteString(f.prettyWithFlags(it.Value().Interface(), 0, depth+1)) - i++ - } - buf.WriteByte('}') - return buf.String() - case reflect.Ptr, reflect.Interface: - if v.IsNil() { - return "null" - } - return f.prettyWithFlags(v.Elem().Interface(), 0, depth) - } - return fmt.Sprintf(`""`, t.Kind().String()) -} - -func prettyString(s string) string { - // Avoid escaping (which does allocations) if we can. - if needsEscape(s) { - return strconv.Quote(s) - } - b := bytes.NewBuffer(make([]byte, 0, 1024)) - b.WriteByte('"') - b.WriteString(s) - b.WriteByte('"') - return b.String() -} - -// needsEscape determines whether the input string needs to be escaped or not, -// without doing any allocations. -func needsEscape(s string) bool { - for _, r := range s { - if !strconv.IsPrint(r) || r == '\\' || r == '"' { - return true - } - } - return false -} - -func isEmpty(v reflect.Value) bool { - switch v.Kind() { - case reflect.Array, reflect.Map, reflect.Slice, reflect.String: - return v.Len() == 0 - case reflect.Bool: - return !v.Bool() - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return v.Int() == 0 - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return v.Uint() == 0 - case reflect.Float32, reflect.Float64: - return v.Float() == 0 - case reflect.Complex64, reflect.Complex128: - return v.Complex() == 0 - case reflect.Interface, reflect.Ptr: - return v.IsNil() - } - return false -} - -func invokeMarshaler(m logr.Marshaler) (ret any) { - defer func() { - if r := recover(); r != nil { - ret = fmt.Sprintf("", r) - } - }() - return m.MarshalLog() -} - -func invokeStringer(s fmt.Stringer) (ret string) { - defer func() { - if r := recover(); r != nil { - ret = fmt.Sprintf("", r) - } - }() - return s.String() -} - -func invokeError(e error) (ret string) { - defer func() { - if r := recover(); r != nil { - ret = fmt.Sprintf("", r) - } - }() - return e.Error() -} - -// Caller represents the original call site for a log line, after considering -// logr.Logger.WithCallDepth and logr.Logger.WithCallStackHelper. The File and -// Line fields will always be provided, while the Func field is optional. -// Users can set the render hook fields in Options to examine logged key-value -// pairs, one of which will be {"caller", Caller} if the Options.LogCaller -// field is enabled for the given MessageClass. -type Caller struct { - // File is the basename of the file for this call site. - File string `json:"file"` - // Line is the line number in the file for this call site. - Line int `json:"line"` - // Func is the function name for this call site, or empty if - // Options.LogCallerFunc is not enabled. - Func string `json:"function,omitempty"` -} - -func (f Formatter) caller() Caller { - // +1 for this frame, +1 for Info/Error. - pc, file, line, ok := runtime.Caller(f.depth + 2) - if !ok { - return Caller{"", 0, ""} - } - fn := "" - if f.opts.LogCallerFunc { - if fp := runtime.FuncForPC(pc); fp != nil { - fn = fp.Name() - } - } - - return Caller{filepath.Base(file), line, fn} -} - -const noValue = "" - -func (f Formatter) nonStringKey(v any) string { - return fmt.Sprintf("", f.snippet(v)) -} - -// snippet produces a short snippet string of an arbitrary value. -func (f Formatter) snippet(v any) string { - const snipLen = 16 - - snip := f.pretty(v) - if len(snip) > snipLen { - snip = snip[:snipLen] - } - return snip -} - -// sanitize ensures that a list of key-value pairs has a value for every key -// (adding a value if needed) and that each key is a string (substituting a key -// if needed). -func (f Formatter) sanitize(kvList []any) []any { - if len(kvList)%2 != 0 { - kvList = append(kvList, noValue) - } - for i := 0; i < len(kvList); i += 2 { - _, ok := kvList[i].(string) - if !ok { - kvList[i] = f.nonStringKey(kvList[i]) - } - } - return kvList -} - -// startGroup opens a new group scope (basically a sub-struct), which locks all -// the current saved values and starts them anew. This is needed to satisfy -// slog. -func (f *Formatter) startGroup(name string) { - // Unnamed groups are just inlined. - if name == "" { - return - } - - n := len(f.groups) - f.groups = append(f.groups[:n:n], groupDef{f.groupName, f.valuesStr}) - - // Start collecting new values. - f.groupName = name - f.valuesStr = "" - f.values = nil -} - -// Init configures this Formatter from runtime info, such as the call depth -// imposed by logr itself. -// Note that this receiver is a pointer, so depth can be saved. -func (f *Formatter) Init(info logr.RuntimeInfo) { - f.depth += info.CallDepth -} - -// Enabled checks whether an info message at the given level should be logged. -func (f Formatter) Enabled(level int) bool { - return level <= f.opts.Verbosity -} - -// GetDepth returns the current depth of this Formatter. This is useful for -// implementations which do their own caller attribution. -func (f Formatter) GetDepth() int { - return f.depth -} - -// FormatInfo renders an Info log message into strings. The prefix will be -// empty when no names were set (via AddNames), or when the output is -// configured for JSON. -func (f Formatter) FormatInfo(level int, msg string, kvList []any) (prefix, argsStr string) { - args := make([]any, 0, 64) // using a constant here impacts perf - prefix = f.prefix - if f.outputFormat == outputJSON { - args = append(args, "logger", prefix) - prefix = "" - } - if f.opts.LogTimestamp { - args = append(args, "ts", time.Now().Format(f.opts.TimestampFormat)) - } - if policy := f.opts.LogCaller; policy == All || policy == Info { - args = append(args, "caller", f.caller()) - } - if key := *f.opts.LogInfoLevel; key != "" { - args = append(args, key, level) - } - args = append(args, "msg", msg) - return prefix, f.render(args, kvList) -} - -// FormatError renders an Error log message into strings. The prefix will be -// empty when no names were set (via AddNames), or when the output is -// configured for JSON. -func (f Formatter) FormatError(err error, msg string, kvList []any) (prefix, argsStr string) { - args := make([]any, 0, 64) // using a constant here impacts perf - prefix = f.prefix - if f.outputFormat == outputJSON { - args = append(args, "logger", prefix) - prefix = "" - } - if f.opts.LogTimestamp { - args = append(args, "ts", time.Now().Format(f.opts.TimestampFormat)) - } - if policy := f.opts.LogCaller; policy == All || policy == Error { - args = append(args, "caller", f.caller()) - } - args = append(args, "msg", msg) - var loggableErr any - if err != nil { - loggableErr = err.Error() - } - args = append(args, "error", loggableErr) - return prefix, f.render(args, kvList) -} - -// AddName appends the specified name. funcr uses '/' characters to separate -// name elements. Callers should not pass '/' in the provided name string, but -// this library does not actually enforce that. -func (f *Formatter) AddName(name string) { - if len(f.prefix) > 0 { - f.prefix += "/" - } - f.prefix += name -} - -// AddValues adds key-value pairs to the set of saved values to be logged with -// each log line. -func (f *Formatter) AddValues(kvList []any) { - // Three slice args forces a copy. - n := len(f.values) - f.values = append(f.values[:n:n], kvList...) - - vals := f.values - if hook := f.opts.RenderValuesHook; hook != nil { - vals = hook(f.sanitize(vals)) - } - - // Pre-render values, so we don't have to do it on each Info/Error call. - buf := bytes.NewBuffer(make([]byte, 0, 1024)) - f.flatten(buf, vals, true) // escape user-provided keys - f.valuesStr = buf.String() -} - -// AddCallDepth increases the number of stack-frames to skip when attributing -// the log line to a file and line. -func (f *Formatter) AddCallDepth(depth int) { - f.depth += depth -} diff --git a/vendor/github.com/go-logr/logr/funcr/slogsink.go b/vendor/github.com/go-logr/logr/funcr/slogsink.go deleted file mode 100644 index 7bd84761..00000000 --- a/vendor/github.com/go-logr/logr/funcr/slogsink.go +++ /dev/null @@ -1,105 +0,0 @@ -//go:build go1.21 -// +build go1.21 - -/* -Copyright 2023 The logr Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package funcr - -import ( - "context" - "log/slog" - - "github.com/go-logr/logr" -) - -var _ logr.SlogSink = &fnlogger{} - -const extraSlogSinkDepth = 3 // 2 for slog, 1 for SlogSink - -func (l fnlogger) Handle(_ context.Context, record slog.Record) error { - kvList := make([]any, 0, 2*record.NumAttrs()) - record.Attrs(func(attr slog.Attr) bool { - kvList = attrToKVs(attr, kvList) - return true - }) - - if record.Level >= slog.LevelError { - l.WithCallDepth(extraSlogSinkDepth).Error(nil, record.Message, kvList...) - } else { - level := l.levelFromSlog(record.Level) - l.WithCallDepth(extraSlogSinkDepth).Info(level, record.Message, kvList...) - } - return nil -} - -func (l fnlogger) WithAttrs(attrs []slog.Attr) logr.SlogSink { - kvList := make([]any, 0, 2*len(attrs)) - for _, attr := range attrs { - kvList = attrToKVs(attr, kvList) - } - l.AddValues(kvList) - return &l -} - -func (l fnlogger) WithGroup(name string) logr.SlogSink { - l.startGroup(name) - return &l -} - -// attrToKVs appends a slog.Attr to a logr-style kvList. It handle slog Groups -// and other details of slog. -func attrToKVs(attr slog.Attr, kvList []any) []any { - attrVal := attr.Value.Resolve() - if attrVal.Kind() == slog.KindGroup { - groupVal := attrVal.Group() - grpKVs := make([]any, 0, 2*len(groupVal)) - for _, attr := range groupVal { - grpKVs = attrToKVs(attr, grpKVs) - } - if attr.Key == "" { - // slog says we have to inline these - kvList = append(kvList, grpKVs...) - } else { - kvList = append(kvList, attr.Key, PseudoStruct(grpKVs)) - } - } else if attr.Key != "" { - kvList = append(kvList, attr.Key, attrVal.Any()) - } - - return kvList -} - -// levelFromSlog adjusts the level by the logger's verbosity and negates it. -// It ensures that the result is >= 0. This is necessary because the result is -// passed to a LogSink and that API did not historically document whether -// levels could be negative or what that meant. -// -// Some example usage: -// -// logrV0 := getMyLogger() -// logrV2 := logrV0.V(2) -// slogV2 := slog.New(logr.ToSlogHandler(logrV2)) -// slogV2.Debug("msg") // =~ logrV2.V(4) =~ logrV0.V(6) -// slogV2.Info("msg") // =~ logrV2.V(0) =~ logrV0.V(2) -// slogv2.Warn("msg") // =~ logrV2.V(-4) =~ logrV0.V(0) -func (l fnlogger) levelFromSlog(level slog.Level) int { - result := -level - if result < 0 { - result = 0 // because LogSink doesn't expect negative V levels - } - return int(result) -} diff --git a/vendor/github.com/go-logr/logr/logr.go b/vendor/github.com/go-logr/logr/logr.go deleted file mode 100644 index b4428e10..00000000 --- a/vendor/github.com/go-logr/logr/logr.go +++ /dev/null @@ -1,520 +0,0 @@ -/* -Copyright 2019 The logr Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// This design derives from Dave Cheney's blog: -// http://dave.cheney.net/2015/11/05/lets-talk-about-logging - -// Package logr defines a general-purpose logging API and abstract interfaces -// to back that API. Packages in the Go ecosystem can depend on this package, -// while callers can implement logging with whatever backend is appropriate. -// -// # Usage -// -// Logging is done using a Logger instance. Logger is a concrete type with -// methods, which defers the actual logging to a LogSink interface. The main -// methods of Logger are Info() and Error(). Arguments to Info() and Error() -// are key/value pairs rather than printf-style formatted strings, emphasizing -// "structured logging". -// -// With Go's standard log package, we might write: -// -// log.Printf("setting target value %s", targetValue) -// -// With logr's structured logging, we'd write: -// -// logger.Info("setting target", "value", targetValue) -// -// Errors are much the same. Instead of: -// -// log.Printf("failed to open the pod bay door for user %s: %v", user, err) -// -// We'd write: -// -// logger.Error(err, "failed to open the pod bay door", "user", user) -// -// Info() and Error() are very similar, but they are separate methods so that -// LogSink implementations can choose to do things like attach additional -// information (such as stack traces) on calls to Error(). Error() messages are -// always logged, regardless of the current verbosity. If there is no error -// instance available, passing nil is valid. -// -// # Verbosity -// -// Often we want to log information only when the application in "verbose -// mode". To write log lines that are more verbose, Logger has a V() method. -// The higher the V-level of a log line, the less critical it is considered. -// Log-lines with V-levels that are not enabled (as per the LogSink) will not -// be written. Level V(0) is the default, and logger.V(0).Info() has the same -// meaning as logger.Info(). Negative V-levels have the same meaning as V(0). -// Error messages do not have a verbosity level and are always logged. -// -// Where we might have written: -// -// if flVerbose >= 2 { -// log.Printf("an unusual thing happened") -// } -// -// We can write: -// -// logger.V(2).Info("an unusual thing happened") -// -// # Logger Names -// -// Logger instances can have name strings so that all messages logged through -// that instance have additional context. For example, you might want to add -// a subsystem name: -// -// logger.WithName("compactor").Info("started", "time", time.Now()) -// -// The WithName() method returns a new Logger, which can be passed to -// constructors or other functions for further use. Repeated use of WithName() -// will accumulate name "segments". These name segments will be joined in some -// way by the LogSink implementation. It is strongly recommended that name -// segments contain simple identifiers (letters, digits, and hyphen), and do -// not contain characters that could muddle the log output or confuse the -// joining operation (e.g. whitespace, commas, periods, slashes, brackets, -// quotes, etc). -// -// # Saved Values -// -// Logger instances can store any number of key/value pairs, which will be -// logged alongside all messages logged through that instance. For example, -// you might want to create a Logger instance per managed object: -// -// With the standard log package, we might write: -// -// log.Printf("decided to set field foo to value %q for object %s/%s", -// targetValue, object.Namespace, object.Name) -// -// With logr we'd write: -// -// // Elsewhere: set up the logger to log the object name. -// obj.logger = mainLogger.WithValues( -// "name", obj.name, "namespace", obj.namespace) -// -// // later on... -// obj.logger.Info("setting foo", "value", targetValue) -// -// # Best Practices -// -// Logger has very few hard rules, with the goal that LogSink implementations -// might have a lot of freedom to differentiate. There are, however, some -// things to consider. -// -// The log message consists of a constant message attached to the log line. -// This should generally be a simple description of what's occurring, and should -// never be a format string. Variable information can then be attached using -// named values. -// -// Keys are arbitrary strings, but should generally be constant values. Values -// may be any Go value, but how the value is formatted is determined by the -// LogSink implementation. -// -// Logger instances are meant to be passed around by value. Code that receives -// such a value can call its methods without having to check whether the -// instance is ready for use. -// -// The zero logger (= Logger{}) is identical to Discard() and discards all log -// entries. Code that receives a Logger by value can simply call it, the methods -// will never crash. For cases where passing a logger is optional, a pointer to Logger -// should be used. -// -// # Key Naming Conventions -// -// Keys are not strictly required to conform to any specification or regex, but -// it is recommended that they: -// - be human-readable and meaningful (not auto-generated or simple ordinals) -// - be constant (not dependent on input data) -// - contain only printable characters -// - not contain whitespace or punctuation -// - use lower case for simple keys and lowerCamelCase for more complex ones -// -// These guidelines help ensure that log data is processed properly regardless -// of the log implementation. For example, log implementations will try to -// output JSON data or will store data for later database (e.g. SQL) queries. -// -// While users are generally free to use key names of their choice, it's -// generally best to avoid using the following keys, as they're frequently used -// by implementations: -// - "caller": the calling information (file/line) of a particular log line -// - "error": the underlying error value in the `Error` method -// - "level": the log level -// - "logger": the name of the associated logger -// - "msg": the log message -// - "stacktrace": the stack trace associated with a particular log line or -// error (often from the `Error` message) -// - "ts": the timestamp for a log line -// -// Implementations are encouraged to make use of these keys to represent the -// above concepts, when necessary (for example, in a pure-JSON output form, it -// would be necessary to represent at least message and timestamp as ordinary -// named values). -// -// # Break Glass -// -// Implementations may choose to give callers access to the underlying -// logging implementation. The recommended pattern for this is: -// -// // Underlier exposes access to the underlying logging implementation. -// // Since callers only have a logr.Logger, they have to know which -// // implementation is in use, so this interface is less of an abstraction -// // and more of way to test type conversion. -// type Underlier interface { -// GetUnderlying() -// } -// -// Logger grants access to the sink to enable type assertions like this: -// -// func DoSomethingWithImpl(log logr.Logger) { -// if underlier, ok := log.GetSink().(impl.Underlier); ok { -// implLogger := underlier.GetUnderlying() -// ... -// } -// } -// -// Custom `With*` functions can be implemented by copying the complete -// Logger struct and replacing the sink in the copy: -// -// // WithFooBar changes the foobar parameter in the log sink and returns a -// // new logger with that modified sink. It does nothing for loggers where -// // the sink doesn't support that parameter. -// func WithFoobar(log logr.Logger, foobar int) logr.Logger { -// if foobarLogSink, ok := log.GetSink().(FoobarSink); ok { -// log = log.WithSink(foobarLogSink.WithFooBar(foobar)) -// } -// return log -// } -// -// Don't use New to construct a new Logger with a LogSink retrieved from an -// existing Logger. Source code attribution might not work correctly and -// unexported fields in Logger get lost. -// -// Beware that the same LogSink instance may be shared by different logger -// instances. Calling functions that modify the LogSink will affect all of -// those. -package logr - -// New returns a new Logger instance. This is primarily used by libraries -// implementing LogSink, rather than end users. Passing a nil sink will create -// a Logger which discards all log lines. -func New(sink LogSink) Logger { - logger := Logger{} - logger.setSink(sink) - if sink != nil { - sink.Init(runtimeInfo) - } - return logger -} - -// setSink stores the sink and updates any related fields. It mutates the -// logger and thus is only safe to use for loggers that are not currently being -// used concurrently. -func (l *Logger) setSink(sink LogSink) { - l.sink = sink -} - -// GetSink returns the stored sink. -func (l Logger) GetSink() LogSink { - return l.sink -} - -// WithSink returns a copy of the logger with the new sink. -func (l Logger) WithSink(sink LogSink) Logger { - l.setSink(sink) - return l -} - -// Logger is an interface to an abstract logging implementation. This is a -// concrete type for performance reasons, but all the real work is passed on to -// a LogSink. Implementations of LogSink should provide their own constructors -// that return Logger, not LogSink. -// -// The underlying sink can be accessed through GetSink and be modified through -// WithSink. This enables the implementation of custom extensions (see "Break -// Glass" in the package documentation). Normally the sink should be used only -// indirectly. -type Logger struct { - sink LogSink - level int -} - -// Enabled tests whether this Logger is enabled. For example, commandline -// flags might be used to set the logging verbosity and disable some info logs. -func (l Logger) Enabled() bool { - // Some implementations of LogSink look at the caller in Enabled (e.g. - // different verbosity levels per package or file), but we only pass one - // CallDepth in (via Init). This means that all calls from Logger to the - // LogSink's Enabled, Info, and Error methods must have the same number of - // frames. In other words, Logger methods can't call other Logger methods - // which call these LogSink methods unless we do it the same in all paths. - return l.sink != nil && l.sink.Enabled(l.level) -} - -// Info logs a non-error message with the given key/value pairs as context. -// -// The msg argument should be used to add some constant description to the log -// line. The key/value pairs can then be used to add additional variable -// information. The key/value pairs must alternate string keys and arbitrary -// values. -func (l Logger) Info(msg string, keysAndValues ...any) { - if l.sink == nil { - return - } - if l.sink.Enabled(l.level) { // see comment in Enabled - if withHelper, ok := l.sink.(CallStackHelperLogSink); ok { - withHelper.GetCallStackHelper()() - } - l.sink.Info(l.level, msg, keysAndValues...) - } -} - -// Error logs an error, with the given message and key/value pairs as context. -// It functions similarly to Info, but may have unique behavior, and should be -// preferred for logging errors (see the package documentations for more -// information). The log message will always be emitted, regardless of -// verbosity level. -// -// The msg argument should be used to add context to any underlying error, -// while the err argument should be used to attach the actual error that -// triggered this log line, if present. The err parameter is optional -// and nil may be passed instead of an error instance. -func (l Logger) Error(err error, msg string, keysAndValues ...any) { - if l.sink == nil { - return - } - if withHelper, ok := l.sink.(CallStackHelperLogSink); ok { - withHelper.GetCallStackHelper()() - } - l.sink.Error(err, msg, keysAndValues...) -} - -// V returns a new Logger instance for a specific verbosity level, relative to -// this Logger. In other words, V-levels are additive. A higher verbosity -// level means a log message is less important. Negative V-levels are treated -// as 0. -func (l Logger) V(level int) Logger { - if l.sink == nil { - return l - } - if level < 0 { - level = 0 - } - l.level += level - return l -} - -// GetV returns the verbosity level of the logger. If the logger's LogSink is -// nil as in the Discard logger, this will always return 0. -func (l Logger) GetV() int { - // 0 if l.sink nil because of the if check in V above. - return l.level -} - -// WithValues returns a new Logger instance with additional key/value pairs. -// See Info for documentation on how key/value pairs work. -func (l Logger) WithValues(keysAndValues ...any) Logger { - if l.sink == nil { - return l - } - l.setSink(l.sink.WithValues(keysAndValues...)) - return l -} - -// WithName returns a new Logger instance with the specified name element added -// to the Logger's name. Successive calls with WithName append additional -// suffixes to the Logger's name. It's strongly recommended that name segments -// contain only letters, digits, and hyphens (see the package documentation for -// more information). -func (l Logger) WithName(name string) Logger { - if l.sink == nil { - return l - } - l.setSink(l.sink.WithName(name)) - return l -} - -// WithCallDepth returns a Logger instance that offsets the call stack by the -// specified number of frames when logging call site information, if possible. -// This is useful for users who have helper functions between the "real" call -// site and the actual calls to Logger methods. If depth is 0 the attribution -// should be to the direct caller of this function. If depth is 1 the -// attribution should skip 1 call frame, and so on. Successive calls to this -// are additive. -// -// If the underlying log implementation supports a WithCallDepth(int) method, -// it will be called and the result returned. If the implementation does not -// support CallDepthLogSink, the original Logger will be returned. -// -// To skip one level, WithCallStackHelper() should be used instead of -// WithCallDepth(1) because it works with implementions that support the -// CallDepthLogSink and/or CallStackHelperLogSink interfaces. -func (l Logger) WithCallDepth(depth int) Logger { - if l.sink == nil { - return l - } - if withCallDepth, ok := l.sink.(CallDepthLogSink); ok { - l.setSink(withCallDepth.WithCallDepth(depth)) - } - return l -} - -// WithCallStackHelper returns a new Logger instance that skips the direct -// caller when logging call site information, if possible. This is useful for -// users who have helper functions between the "real" call site and the actual -// calls to Logger methods and want to support loggers which depend on marking -// each individual helper function, like loggers based on testing.T. -// -// In addition to using that new logger instance, callers also must call the -// returned function. -// -// If the underlying log implementation supports a WithCallDepth(int) method, -// WithCallDepth(1) will be called to produce a new logger. If it supports a -// WithCallStackHelper() method, that will be also called. If the -// implementation does not support either of these, the original Logger will be -// returned. -func (l Logger) WithCallStackHelper() (func(), Logger) { - if l.sink == nil { - return func() {}, l - } - var helper func() - if withCallDepth, ok := l.sink.(CallDepthLogSink); ok { - l.setSink(withCallDepth.WithCallDepth(1)) - } - if withHelper, ok := l.sink.(CallStackHelperLogSink); ok { - helper = withHelper.GetCallStackHelper() - } else { - helper = func() {} - } - return helper, l -} - -// IsZero returns true if this logger is an uninitialized zero value -func (l Logger) IsZero() bool { - return l.sink == nil -} - -// RuntimeInfo holds information that the logr "core" library knows which -// LogSinks might want to know. -type RuntimeInfo struct { - // CallDepth is the number of call frames the logr library adds between the - // end-user and the LogSink. LogSink implementations which choose to print - // the original logging site (e.g. file & line) should climb this many - // additional frames to find it. - CallDepth int -} - -// runtimeInfo is a static global. It must not be changed at run time. -var runtimeInfo = RuntimeInfo{ - CallDepth: 1, -} - -// LogSink represents a logging implementation. End-users will generally not -// interact with this type. -type LogSink interface { - // Init receives optional information about the logr library for LogSink - // implementations that need it. - Init(info RuntimeInfo) - - // Enabled tests whether this LogSink is enabled at the specified V-level. - // For example, commandline flags might be used to set the logging - // verbosity and disable some info logs. - Enabled(level int) bool - - // Info logs a non-error message with the given key/value pairs as context. - // The level argument is provided for optional logging. This method will - // only be called when Enabled(level) is true. See Logger.Info for more - // details. - Info(level int, msg string, keysAndValues ...any) - - // Error logs an error, with the given message and key/value pairs as - // context. See Logger.Error for more details. - Error(err error, msg string, keysAndValues ...any) - - // WithValues returns a new LogSink with additional key/value pairs. See - // Logger.WithValues for more details. - WithValues(keysAndValues ...any) LogSink - - // WithName returns a new LogSink with the specified name appended. See - // Logger.WithName for more details. - WithName(name string) LogSink -} - -// CallDepthLogSink represents a LogSink that knows how to climb the call stack -// to identify the original call site and can offset the depth by a specified -// number of frames. This is useful for users who have helper functions -// between the "real" call site and the actual calls to Logger methods. -// Implementations that log information about the call site (such as file, -// function, or line) would otherwise log information about the intermediate -// helper functions. -// -// This is an optional interface and implementations are not required to -// support it. -type CallDepthLogSink interface { - // WithCallDepth returns a LogSink that will offset the call - // stack by the specified number of frames when logging call - // site information. - // - // If depth is 0, the LogSink should skip exactly the number - // of call frames defined in RuntimeInfo.CallDepth when Info - // or Error are called, i.e. the attribution should be to the - // direct caller of Logger.Info or Logger.Error. - // - // If depth is 1 the attribution should skip 1 call frame, and so on. - // Successive calls to this are additive. - WithCallDepth(depth int) LogSink -} - -// CallStackHelperLogSink represents a LogSink that knows how to climb -// the call stack to identify the original call site and can skip -// intermediate helper functions if they mark themselves as -// helper. Go's testing package uses that approach. -// -// This is useful for users who have helper functions between the -// "real" call site and the actual calls to Logger methods. -// Implementations that log information about the call site (such as -// file, function, or line) would otherwise log information about the -// intermediate helper functions. -// -// This is an optional interface and implementations are not required -// to support it. Implementations that choose to support this must not -// simply implement it as WithCallDepth(1), because -// Logger.WithCallStackHelper will call both methods if they are -// present. This should only be implemented for LogSinks that actually -// need it, as with testing.T. -type CallStackHelperLogSink interface { - // GetCallStackHelper returns a function that must be called - // to mark the direct caller as helper function when logging - // call site information. - GetCallStackHelper() func() -} - -// Marshaler is an optional interface that logged values may choose to -// implement. Loggers with structured output, such as JSON, should -// log the object return by the MarshalLog method instead of the -// original value. -type Marshaler interface { - // MarshalLog can be used to: - // - ensure that structs are not logged as strings when the original - // value has a String method: return a different type without a - // String method - // - select which fields of a complex type should get logged: - // return a simpler struct with fewer fields - // - log unexported fields: return a different struct - // with exported fields - // - // It may return any value of any type. - MarshalLog() any -} diff --git a/vendor/github.com/go-logr/logr/sloghandler.go b/vendor/github.com/go-logr/logr/sloghandler.go deleted file mode 100644 index 82d1ba49..00000000 --- a/vendor/github.com/go-logr/logr/sloghandler.go +++ /dev/null @@ -1,192 +0,0 @@ -//go:build go1.21 -// +build go1.21 - -/* -Copyright 2023 The logr Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package logr - -import ( - "context" - "log/slog" -) - -type slogHandler struct { - // May be nil, in which case all logs get discarded. - sink LogSink - // Non-nil if sink is non-nil and implements SlogSink. - slogSink SlogSink - - // groupPrefix collects values from WithGroup calls. It gets added as - // prefix to value keys when handling a log record. - groupPrefix string - - // levelBias can be set when constructing the handler to influence the - // slog.Level of log records. A positive levelBias reduces the - // slog.Level value. slog has no API to influence this value after the - // handler got created, so it can only be set indirectly through - // Logger.V. - levelBias slog.Level -} - -var _ slog.Handler = &slogHandler{} - -// groupSeparator is used to concatenate WithGroup names and attribute keys. -const groupSeparator = "." - -// GetLevel is used for black box unit testing. -func (l *slogHandler) GetLevel() slog.Level { - return l.levelBias -} - -func (l *slogHandler) Enabled(_ context.Context, level slog.Level) bool { - return l.sink != nil && (level >= slog.LevelError || l.sink.Enabled(l.levelFromSlog(level))) -} - -func (l *slogHandler) Handle(ctx context.Context, record slog.Record) error { - if l.slogSink != nil { - // Only adjust verbosity level of log entries < slog.LevelError. - if record.Level < slog.LevelError { - record.Level -= l.levelBias - } - return l.slogSink.Handle(ctx, record) - } - - // No need to check for nil sink here because Handle will only be called - // when Enabled returned true. - - kvList := make([]any, 0, 2*record.NumAttrs()) - record.Attrs(func(attr slog.Attr) bool { - kvList = attrToKVs(attr, l.groupPrefix, kvList) - return true - }) - if record.Level >= slog.LevelError { - l.sinkWithCallDepth().Error(nil, record.Message, kvList...) - } else { - level := l.levelFromSlog(record.Level) - l.sinkWithCallDepth().Info(level, record.Message, kvList...) - } - return nil -} - -// sinkWithCallDepth adjusts the stack unwinding so that when Error or Info -// are called by Handle, code in slog gets skipped. -// -// This offset currently (Go 1.21.0) works for calls through -// slog.New(ToSlogHandler(...)). There's no guarantee that the call -// chain won't change. Wrapping the handler will also break unwinding. It's -// still better than not adjusting at all.... -// -// This cannot be done when constructing the handler because FromSlogHandler needs -// access to the original sink without this adjustment. A second copy would -// work, but then WithAttrs would have to be called for both of them. -func (l *slogHandler) sinkWithCallDepth() LogSink { - if sink, ok := l.sink.(CallDepthLogSink); ok { - return sink.WithCallDepth(2) - } - return l.sink -} - -func (l *slogHandler) WithAttrs(attrs []slog.Attr) slog.Handler { - if l.sink == nil || len(attrs) == 0 { - return l - } - - clone := *l - if l.slogSink != nil { - clone.slogSink = l.slogSink.WithAttrs(attrs) - clone.sink = clone.slogSink - } else { - kvList := make([]any, 0, 2*len(attrs)) - for _, attr := range attrs { - kvList = attrToKVs(attr, l.groupPrefix, kvList) - } - clone.sink = l.sink.WithValues(kvList...) - } - return &clone -} - -func (l *slogHandler) WithGroup(name string) slog.Handler { - if l.sink == nil { - return l - } - if name == "" { - // slog says to inline empty groups - return l - } - clone := *l - if l.slogSink != nil { - clone.slogSink = l.slogSink.WithGroup(name) - clone.sink = clone.slogSink - } else { - clone.groupPrefix = addPrefix(clone.groupPrefix, name) - } - return &clone -} - -// attrToKVs appends a slog.Attr to a logr-style kvList. It handle slog Groups -// and other details of slog. -func attrToKVs(attr slog.Attr, groupPrefix string, kvList []any) []any { - attrVal := attr.Value.Resolve() - if attrVal.Kind() == slog.KindGroup { - groupVal := attrVal.Group() - grpKVs := make([]any, 0, 2*len(groupVal)) - prefix := groupPrefix - if attr.Key != "" { - prefix = addPrefix(groupPrefix, attr.Key) - } - for _, attr := range groupVal { - grpKVs = attrToKVs(attr, prefix, grpKVs) - } - kvList = append(kvList, grpKVs...) - } else if attr.Key != "" { - kvList = append(kvList, addPrefix(groupPrefix, attr.Key), attrVal.Any()) - } - - return kvList -} - -func addPrefix(prefix, name string) string { - if prefix == "" { - return name - } - if name == "" { - return prefix - } - return prefix + groupSeparator + name -} - -// levelFromSlog adjusts the level by the logger's verbosity and negates it. -// It ensures that the result is >= 0. This is necessary because the result is -// passed to a LogSink and that API did not historically document whether -// levels could be negative or what that meant. -// -// Some example usage: -// -// logrV0 := getMyLogger() -// logrV2 := logrV0.V(2) -// slogV2 := slog.New(logr.ToSlogHandler(logrV2)) -// slogV2.Debug("msg") // =~ logrV2.V(4) =~ logrV0.V(6) -// slogV2.Info("msg") // =~ logrV2.V(0) =~ logrV0.V(2) -// slogv2.Warn("msg") // =~ logrV2.V(-4) =~ logrV0.V(0) -func (l *slogHandler) levelFromSlog(level slog.Level) int { - result := -level - result += l.levelBias // in case the original Logger had a V level - if result < 0 { - result = 0 // because LogSink doesn't expect negative V levels - } - return int(result) -} diff --git a/vendor/github.com/go-logr/logr/slogr.go b/vendor/github.com/go-logr/logr/slogr.go deleted file mode 100644 index 28a83d02..00000000 --- a/vendor/github.com/go-logr/logr/slogr.go +++ /dev/null @@ -1,100 +0,0 @@ -//go:build go1.21 -// +build go1.21 - -/* -Copyright 2023 The logr Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package logr - -import ( - "context" - "log/slog" -) - -// FromSlogHandler returns a Logger which writes to the slog.Handler. -// -// The logr verbosity level is mapped to slog levels such that V(0) becomes -// slog.LevelInfo and V(4) becomes slog.LevelDebug. -func FromSlogHandler(handler slog.Handler) Logger { - if handler, ok := handler.(*slogHandler); ok { - if handler.sink == nil { - return Discard() - } - return New(handler.sink).V(int(handler.levelBias)) - } - return New(&slogSink{handler: handler}) -} - -// ToSlogHandler returns a slog.Handler which writes to the same sink as the Logger. -// -// The returned logger writes all records with level >= slog.LevelError as -// error log entries with LogSink.Error, regardless of the verbosity level of -// the Logger: -// -// logger := -// slog.New(ToSlogHandler(logger.V(10))).Error(...) -> logSink.Error(...) -// -// The level of all other records gets reduced by the verbosity -// level of the Logger and the result is negated. If it happens -// to be negative, then it gets replaced by zero because a LogSink -// is not expected to handled negative levels: -// -// slog.New(ToSlogHandler(logger)).Debug(...) -> logger.GetSink().Info(level=4, ...) -// slog.New(ToSlogHandler(logger)).Warning(...) -> logger.GetSink().Info(level=0, ...) -// slog.New(ToSlogHandler(logger)).Info(...) -> logger.GetSink().Info(level=0, ...) -// slog.New(ToSlogHandler(logger.V(4))).Info(...) -> logger.GetSink().Info(level=4, ...) -func ToSlogHandler(logger Logger) slog.Handler { - if sink, ok := logger.GetSink().(*slogSink); ok && logger.GetV() == 0 { - return sink.handler - } - - handler := &slogHandler{sink: logger.GetSink(), levelBias: slog.Level(logger.GetV())} - if slogSink, ok := handler.sink.(SlogSink); ok { - handler.slogSink = slogSink - } - return handler -} - -// SlogSink is an optional interface that a LogSink can implement to support -// logging through the slog.Logger or slog.Handler APIs better. It then should -// also support special slog values like slog.Group. When used as a -// slog.Handler, the advantages are: -// -// - stack unwinding gets avoided in favor of logging the pre-recorded PC, -// as intended by slog -// - proper grouping of key/value pairs via WithGroup -// - verbosity levels > slog.LevelInfo can be recorded -// - less overhead -// -// Both APIs (Logger and slog.Logger/Handler) then are supported equally -// well. Developers can pick whatever API suits them better and/or mix -// packages which use either API in the same binary with a common logging -// implementation. -// -// This interface is necessary because the type implementing the LogSink -// interface cannot also implement the slog.Handler interface due to the -// different prototype of the common Enabled method. -// -// An implementation could support both interfaces in two different types, but then -// additional interfaces would be needed to convert between those types in FromSlogHandler -// and ToSlogHandler. -type SlogSink interface { - LogSink - - Handle(ctx context.Context, record slog.Record) error - WithAttrs(attrs []slog.Attr) SlogSink - WithGroup(name string) SlogSink -} diff --git a/vendor/github.com/go-logr/logr/slogsink.go b/vendor/github.com/go-logr/logr/slogsink.go deleted file mode 100644 index 4060fcbc..00000000 --- a/vendor/github.com/go-logr/logr/slogsink.go +++ /dev/null @@ -1,120 +0,0 @@ -//go:build go1.21 -// +build go1.21 - -/* -Copyright 2023 The logr Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package logr - -import ( - "context" - "log/slog" - "runtime" - "time" -) - -var ( - _ LogSink = &slogSink{} - _ CallDepthLogSink = &slogSink{} - _ Underlier = &slogSink{} -) - -// Underlier is implemented by the LogSink returned by NewFromLogHandler. -type Underlier interface { - // GetUnderlying returns the Handler used by the LogSink. - GetUnderlying() slog.Handler -} - -const ( - // nameKey is used to log the `WithName` values as an additional attribute. - nameKey = "logger" - - // errKey is used to log the error parameter of Error as an additional attribute. - errKey = "err" -) - -type slogSink struct { - callDepth int - name string - handler slog.Handler -} - -func (l *slogSink) Init(info RuntimeInfo) { - l.callDepth = info.CallDepth -} - -func (l *slogSink) GetUnderlying() slog.Handler { - return l.handler -} - -func (l *slogSink) WithCallDepth(depth int) LogSink { - newLogger := *l - newLogger.callDepth += depth - return &newLogger -} - -func (l *slogSink) Enabled(level int) bool { - return l.handler.Enabled(context.Background(), slog.Level(-level)) -} - -func (l *slogSink) Info(level int, msg string, kvList ...interface{}) { - l.log(nil, msg, slog.Level(-level), kvList...) -} - -func (l *slogSink) Error(err error, msg string, kvList ...interface{}) { - l.log(err, msg, slog.LevelError, kvList...) -} - -func (l *slogSink) log(err error, msg string, level slog.Level, kvList ...interface{}) { - var pcs [1]uintptr - // skip runtime.Callers, this function, Info/Error, and all helper functions above that. - runtime.Callers(3+l.callDepth, pcs[:]) - - record := slog.NewRecord(time.Now(), level, msg, pcs[0]) - if l.name != "" { - record.AddAttrs(slog.String(nameKey, l.name)) - } - if err != nil { - record.AddAttrs(slog.Any(errKey, err)) - } - record.Add(kvList...) - _ = l.handler.Handle(context.Background(), record) -} - -func (l slogSink) WithName(name string) LogSink { - if l.name != "" { - l.name += "/" - } - l.name += name - return &l -} - -func (l slogSink) WithValues(kvList ...interface{}) LogSink { - l.handler = l.handler.WithAttrs(kvListToAttrs(kvList...)) - return &l -} - -func kvListToAttrs(kvList ...interface{}) []slog.Attr { - // We don't need the record itself, only its Add method. - record := slog.NewRecord(time.Time{}, 0, "", 0) - record.Add(kvList...) - attrs := make([]slog.Attr, 0, record.NumAttrs()) - record.Attrs(func(attr slog.Attr) bool { - attrs = append(attrs, attr) - return true - }) - return attrs -} diff --git a/vendor/github.com/go-logr/stdr/LICENSE b/vendor/github.com/go-logr/stdr/LICENSE deleted file mode 100644 index 261eeb9e..00000000 --- a/vendor/github.com/go-logr/stdr/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/go-logr/stdr/README.md b/vendor/github.com/go-logr/stdr/README.md deleted file mode 100644 index 51586678..00000000 --- a/vendor/github.com/go-logr/stdr/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Minimal Go logging using logr and Go's standard library - -[![Go Reference](https://pkg.go.dev/badge/github.com/go-logr/stdr.svg)](https://pkg.go.dev/github.com/go-logr/stdr) - -This package implements the [logr interface](https://github.com/go-logr/logr) -in terms of Go's standard log package(https://pkg.go.dev/log). diff --git a/vendor/github.com/go-logr/stdr/stdr.go b/vendor/github.com/go-logr/stdr/stdr.go deleted file mode 100644 index 93a8aab5..00000000 --- a/vendor/github.com/go-logr/stdr/stdr.go +++ /dev/null @@ -1,170 +0,0 @@ -/* -Copyright 2019 The logr Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -// Package stdr implements github.com/go-logr/logr.Logger in terms of -// Go's standard log package. -package stdr - -import ( - "log" - "os" - - "github.com/go-logr/logr" - "github.com/go-logr/logr/funcr" -) - -// The global verbosity level. See SetVerbosity(). -var globalVerbosity int - -// SetVerbosity sets the global level against which all info logs will be -// compared. If this is greater than or equal to the "V" of the logger, the -// message will be logged. A higher value here means more logs will be written. -// The previous verbosity value is returned. This is not concurrent-safe - -// callers must be sure to call it from only one goroutine. -func SetVerbosity(v int) int { - old := globalVerbosity - globalVerbosity = v - return old -} - -// New returns a logr.Logger which is implemented by Go's standard log package, -// or something like it. If std is nil, this will use a default logger -// instead. -// -// Example: stdr.New(log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile))) -func New(std StdLogger) logr.Logger { - return NewWithOptions(std, Options{}) -} - -// NewWithOptions returns a logr.Logger which is implemented by Go's standard -// log package, or something like it. See New for details. -func NewWithOptions(std StdLogger, opts Options) logr.Logger { - if std == nil { - // Go's log.Default() is only available in 1.16 and higher. - std = log.New(os.Stderr, "", log.LstdFlags) - } - - if opts.Depth < 0 { - opts.Depth = 0 - } - - fopts := funcr.Options{ - LogCaller: funcr.MessageClass(opts.LogCaller), - } - - sl := &logger{ - Formatter: funcr.NewFormatter(fopts), - std: std, - } - - // For skipping our own logger.Info/Error. - sl.Formatter.AddCallDepth(1 + opts.Depth) - - return logr.New(sl) -} - -// Options carries parameters which influence the way logs are generated. -type Options struct { - // Depth biases the assumed number of call frames to the "true" caller. - // This is useful when the calling code calls a function which then calls - // stdr (e.g. a logging shim to another API). Values less than zero will - // be treated as zero. - Depth int - - // LogCaller tells stdr to add a "caller" key to some or all log lines. - // Go's log package has options to log this natively, too. - LogCaller MessageClass - - // TODO: add an option to log the date/time -} - -// MessageClass indicates which category or categories of messages to consider. -type MessageClass int - -const ( - // None ignores all message classes. - None MessageClass = iota - // All considers all message classes. - All - // Info only considers info messages. - Info - // Error only considers error messages. - Error -) - -// StdLogger is the subset of the Go stdlib log.Logger API that is needed for -// this adapter. -type StdLogger interface { - // Output is the same as log.Output and log.Logger.Output. - Output(calldepth int, logline string) error -} - -type logger struct { - funcr.Formatter - std StdLogger -} - -var _ logr.LogSink = &logger{} -var _ logr.CallDepthLogSink = &logger{} - -func (l logger) Enabled(level int) bool { - return globalVerbosity >= level -} - -func (l logger) Info(level int, msg string, kvList ...interface{}) { - prefix, args := l.FormatInfo(level, msg, kvList) - if prefix != "" { - args = prefix + ": " + args - } - _ = l.std.Output(l.Formatter.GetDepth()+1, args) -} - -func (l logger) Error(err error, msg string, kvList ...interface{}) { - prefix, args := l.FormatError(err, msg, kvList) - if prefix != "" { - args = prefix + ": " + args - } - _ = l.std.Output(l.Formatter.GetDepth()+1, args) -} - -func (l logger) WithName(name string) logr.LogSink { - l.Formatter.AddName(name) - return &l -} - -func (l logger) WithValues(kvList ...interface{}) logr.LogSink { - l.Formatter.AddValues(kvList) - return &l -} - -func (l logger) WithCallDepth(depth int) logr.LogSink { - l.Formatter.AddCallDepth(depth) - return &l -} - -// Underlier exposes access to the underlying logging implementation. Since -// callers only have a logr.Logger, they have to know which implementation is -// in use, so this interface is less of an abstraction and more of way to test -// type conversion. -type Underlier interface { - GetUnderlying() StdLogger -} - -// GetUnderlying returns the StdLogger underneath this logger. Since StdLogger -// is itself an interface, the result may or may not be a Go log.Logger. -func (l logger) GetUnderlying() StdLogger { - return l.std -} diff --git a/vendor/github.com/moby/docker-image-spec/LICENSE b/vendor/github.com/moby/docker-image-spec/LICENSE deleted file mode 100644 index 261eeb9e..00000000 --- a/vendor/github.com/moby/docker-image-spec/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/moby/docker-image-spec/specs-go/v1/image.go b/vendor/github.com/moby/docker-image-spec/specs-go/v1/image.go deleted file mode 100644 index 16726176..00000000 --- a/vendor/github.com/moby/docker-image-spec/specs-go/v1/image.go +++ /dev/null @@ -1,54 +0,0 @@ -package v1 - -import ( - "time" - - ocispec "github.com/opencontainers/image-spec/specs-go/v1" -) - -const DockerOCIImageMediaType = "application/vnd.docker.container.image.v1+json" - -// DockerOCIImage is a ocispec.Image extended with Docker specific Config. -type DockerOCIImage struct { - ocispec.Image - - // Shadow ocispec.Image.Config - Config DockerOCIImageConfig `json:"config,omitempty"` -} - -// DockerOCIImageConfig is a ocispec.ImageConfig extended with Docker specific fields. -type DockerOCIImageConfig struct { - ocispec.ImageConfig - - DockerOCIImageConfigExt -} - -// DockerOCIImageConfigExt contains Docker-specific fields in DockerImageConfig. -type DockerOCIImageConfigExt struct { - Healthcheck *HealthcheckConfig `json:",omitempty"` // Healthcheck describes how to check the container is healthy - - OnBuild []string `json:",omitempty"` // ONBUILD metadata that were defined on the image Dockerfile - Shell []string `json:",omitempty"` // Shell for shell-form of RUN, CMD, ENTRYPOINT -} - -// HealthcheckConfig holds configuration settings for the HEALTHCHECK feature. -type HealthcheckConfig struct { - // Test is the test to perform to check that the container is healthy. - // An empty slice means to inherit the default. - // The options are: - // {} : inherit healthcheck - // {"NONE"} : disable healthcheck - // {"CMD", args...} : exec arguments directly - // {"CMD-SHELL", command} : run command with system's default shell - Test []string `json:",omitempty"` - - // Zero means to inherit. Durations are expressed as integer nanoseconds. - Interval time.Duration `json:",omitempty"` // Interval is the time to wait between checks. - Timeout time.Duration `json:",omitempty"` // Timeout is the time to wait before considering the check to have hung. - StartPeriod time.Duration `json:",omitempty"` // The start period for the container to initialize before the retries starts to count down. - StartInterval time.Duration `json:",omitempty"` // The interval to attempt healthchecks at during the start period - - // Retries is the number of consecutive failures needed to consider a container as unhealthy. - // Zero means inherit. - Retries int `json:",omitempty"` -} diff --git a/vendor/github.com/moby/sys/atomicwriter/LICENSE b/vendor/github.com/moby/sys/atomicwriter/LICENSE deleted file mode 100644 index d6456956..00000000 --- a/vendor/github.com/moby/sys/atomicwriter/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/moby/sys/atomicwriter/atomicwriter.go b/vendor/github.com/moby/sys/atomicwriter/atomicwriter.go deleted file mode 100644 index d0d3be88..00000000 --- a/vendor/github.com/moby/sys/atomicwriter/atomicwriter.go +++ /dev/null @@ -1,245 +0,0 @@ -// Package atomicwriter provides utilities to perform atomic writes to a -// file or set of files. -package atomicwriter - -import ( - "errors" - "fmt" - "io" - "os" - "path/filepath" - "syscall" - - "github.com/moby/sys/sequential" -) - -func validateDestination(fileName string) error { - if fileName == "" { - return errors.New("file name is empty") - } - if dir := filepath.Dir(fileName); dir != "" && dir != "." && dir != ".." { - di, err := os.Stat(dir) - if err != nil { - return fmt.Errorf("invalid output path: %w", err) - } - if !di.IsDir() { - return fmt.Errorf("invalid output path: %w", &os.PathError{Op: "stat", Path: dir, Err: syscall.ENOTDIR}) - } - } - - // Deliberately using Lstat here to match the behavior of [os.Rename], - // which is used when completing the write and does not resolve symlinks. - fi, err := os.Lstat(fileName) - if err != nil { - if os.IsNotExist(err) { - return nil - } - return fmt.Errorf("failed to stat output path: %w", err) - } - - switch mode := fi.Mode(); { - case mode.IsRegular(): - return nil // Regular file - case mode&os.ModeDir != 0: - return errors.New("cannot write to a directory") - case mode&os.ModeSymlink != 0: - return errors.New("cannot write to a symbolic link directly") - case mode&os.ModeNamedPipe != 0: - return errors.New("cannot write to a named pipe (FIFO)") - case mode&os.ModeSocket != 0: - return errors.New("cannot write to a socket") - case mode&os.ModeDevice != 0: - if mode&os.ModeCharDevice != 0 { - return errors.New("cannot write to a character device file") - } - return errors.New("cannot write to a block device file") - case mode&os.ModeSetuid != 0: - return errors.New("cannot write to a setuid file") - case mode&os.ModeSetgid != 0: - return errors.New("cannot write to a setgid file") - case mode&os.ModeSticky != 0: - return errors.New("cannot write to a sticky bit file") - default: - return fmt.Errorf("unknown file mode: %[1]s (%#[1]o)", mode) - } -} - -// New returns a WriteCloser so that writing to it writes to a -// temporary file and closing it atomically changes the temporary file to -// destination path. Writing and closing concurrently is not allowed. -// NOTE: umask is not considered for the file's permissions. -// -// New uses [sequential.CreateTemp] to use sequential file access on Windows, -// avoiding depleting the standby list un-necessarily. On Linux, this equates to -// a regular [os.CreateTemp]. Refer to the [Win32 API documentation] for details -// on sequential file access. -// -// [Win32 API documentation]: https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea#FILE_FLAG_SEQUENTIAL_SCAN -func New(filename string, perm os.FileMode) (io.WriteCloser, error) { - if err := validateDestination(filename); err != nil { - return nil, err - } - abspath, err := filepath.Abs(filename) - if err != nil { - return nil, err - } - - f, err := sequential.CreateTemp(filepath.Dir(abspath), ".tmp-"+filepath.Base(filename)) - if err != nil { - return nil, err - } - return &atomicFileWriter{ - f: f, - fn: abspath, - perm: perm, - }, nil -} - -// WriteFile atomically writes data to a file named by filename and with the -// specified permission bits. The given filename is created if it does not exist, -// but the destination directory must exist. It can be used as a drop-in replacement -// for [os.WriteFile], but currently does not allow the destination path to be -// a symlink. WriteFile is implemented using [New] for its implementation. -// -// NOTE: umask is not considered for the file's permissions. -func WriteFile(filename string, data []byte, perm os.FileMode) error { - f, err := New(filename, perm) - if err != nil { - return err - } - n, err := f.Write(data) - if err == nil && n < len(data) { - err = io.ErrShortWrite - f.(*atomicFileWriter).writeErr = err - } - if err1 := f.Close(); err == nil { - err = err1 - } - return err -} - -type atomicFileWriter struct { - f *os.File - fn string - writeErr error - written bool - perm os.FileMode -} - -func (w *atomicFileWriter) Write(dt []byte) (int, error) { - w.written = true - n, err := w.f.Write(dt) - if err != nil { - w.writeErr = err - } - return n, err -} - -func (w *atomicFileWriter) Close() (retErr error) { - defer func() { - if err := os.Remove(w.f.Name()); !errors.Is(err, os.ErrNotExist) && retErr == nil { - retErr = err - } - }() - if err := w.f.Sync(); err != nil { - _ = w.f.Close() - return err - } - if err := w.f.Close(); err != nil { - return err - } - if err := os.Chmod(w.f.Name(), w.perm); err != nil { - return err - } - if w.writeErr == nil && w.written { - return os.Rename(w.f.Name(), w.fn) - } - return nil -} - -// WriteSet is used to atomically write a set -// of files and ensure they are visible at the same time. -// Must be committed to a new directory. -type WriteSet struct { - root string -} - -// NewWriteSet creates a new atomic write set to -// atomically create a set of files. The given directory -// is used as the base directory for storing files before -// commit. If no temporary directory is given the system -// default is used. -func NewWriteSet(tmpDir string) (*WriteSet, error) { - td, err := os.MkdirTemp(tmpDir, "write-set-") - if err != nil { - return nil, err - } - - return &WriteSet{ - root: td, - }, nil -} - -// WriteFile writes a file to the set, guaranteeing the file -// has been synced. -func (ws *WriteSet) WriteFile(filename string, data []byte, perm os.FileMode) error { - f, err := ws.FileWriter(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm) - if err != nil { - return err - } - n, err := f.Write(data) - if err == nil && n < len(data) { - err = io.ErrShortWrite - } - if err1 := f.Close(); err == nil { - err = err1 - } - return err -} - -type syncFileCloser struct { - *os.File -} - -func (w syncFileCloser) Close() error { - err := w.File.Sync() - if err1 := w.File.Close(); err == nil { - err = err1 - } - return err -} - -// FileWriter opens a file writer inside the set. The file -// should be synced and closed before calling commit. -// -// FileWriter uses [sequential.OpenFile] to use sequential file access on Windows, -// avoiding depleting the standby list un-necessarily. On Linux, this equates to -// a regular [os.OpenFile]. Refer to the [Win32 API documentation] for details -// on sequential file access. -// -// [Win32 API documentation]: https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea#FILE_FLAG_SEQUENTIAL_SCAN -func (ws *WriteSet) FileWriter(name string, flag int, perm os.FileMode) (io.WriteCloser, error) { - f, err := sequential.OpenFile(filepath.Join(ws.root, name), flag, perm) - if err != nil { - return nil, err - } - return syncFileCloser{f}, nil -} - -// Cancel cancels the set and removes all temporary data -// created in the set. -func (ws *WriteSet) Cancel() error { - return os.RemoveAll(ws.root) -} - -// Commit moves all created files to the target directory. The -// target directory must not exist and the parent of the target -// directory must exist. -func (ws *WriteSet) Commit(target string) error { - return os.Rename(ws.root, target) -} - -// String returns the location the set is writing to. -func (ws *WriteSet) String() string { - return ws.root -} diff --git a/vendor/github.com/moby/sys/sequential/LICENSE b/vendor/github.com/moby/sys/sequential/LICENSE deleted file mode 100644 index d6456956..00000000 --- a/vendor/github.com/moby/sys/sequential/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/moby/sys/sequential/doc.go b/vendor/github.com/moby/sys/sequential/doc.go deleted file mode 100644 index af281750..00000000 --- a/vendor/github.com/moby/sys/sequential/doc.go +++ /dev/null @@ -1,15 +0,0 @@ -// Package sequential provides a set of functions for managing sequential -// files on Windows. -// -// The origin of these functions are the golang OS and windows packages, -// slightly modified to only cope with files, not directories due to the -// specific use case. -// -// The alteration is to allow a file on Windows to be opened with -// FILE_FLAG_SEQUENTIAL_SCAN (particular for docker load), to avoid eating -// the standby list, particularly when accessing large files such as layer.tar. -// -// For non-Windows platforms, the package provides wrappers for the equivalents -// in the os packages. They are passthrough on Unix platforms, and only relevant -// on Windows. -package sequential diff --git a/vendor/github.com/moby/sys/sequential/sequential_unix.go b/vendor/github.com/moby/sys/sequential/sequential_unix.go deleted file mode 100644 index 278cdfb0..00000000 --- a/vendor/github.com/moby/sys/sequential/sequential_unix.go +++ /dev/null @@ -1,26 +0,0 @@ -//go:build !windows -// +build !windows - -package sequential - -import "os" - -// Create is an alias for [os.Create] on non-Windows platforms. -func Create(name string) (*os.File, error) { - return os.Create(name) -} - -// Open is an alias for [os.Open] on non-Windows platforms. -func Open(name string) (*os.File, error) { - return os.Open(name) -} - -// OpenFile is an alias for [os.OpenFile] on non-Windows platforms. -func OpenFile(name string, flag int, perm os.FileMode) (*os.File, error) { - return os.OpenFile(name, flag, perm) -} - -// CreateTemp is an alias for [os.CreateTemp] on non-Windows platforms. -func CreateTemp(dir, prefix string) (f *os.File, err error) { - return os.CreateTemp(dir, prefix) -} diff --git a/vendor/github.com/moby/sys/sequential/sequential_windows.go b/vendor/github.com/moby/sys/sequential/sequential_windows.go deleted file mode 100644 index 3500ecc6..00000000 --- a/vendor/github.com/moby/sys/sequential/sequential_windows.go +++ /dev/null @@ -1,162 +0,0 @@ -package sequential - -import ( - "os" - "path/filepath" - "strconv" - "sync" - "time" - "unsafe" - - "golang.org/x/sys/windows" -) - -// Create is a copy of [os.Create], modified to use sequential file access. -// -// It uses [windows.FILE_FLAG_SEQUENTIAL_SCAN] rather than [windows.FILE_ATTRIBUTE_NORMAL] -// as implemented in golang. Refer to the [Win32 API documentation] for details -// on sequential file access. -// -// [Win32 API documentation]: https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea#FILE_FLAG_SEQUENTIAL_SCAN -func Create(name string) (*os.File, error) { - return openFileSequential(name, windows.O_RDWR|windows.O_CREAT|windows.O_TRUNC) -} - -// Open is a copy of [os.Open], modified to use sequential file access. -// -// It uses [windows.FILE_FLAG_SEQUENTIAL_SCAN] rather than [windows.FILE_ATTRIBUTE_NORMAL] -// as implemented in golang. Refer to the [Win32 API documentation] for details -// on sequential file access. -// -// [Win32 API documentation]: https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea#FILE_FLAG_SEQUENTIAL_SCAN -func Open(name string) (*os.File, error) { - return openFileSequential(name, windows.O_RDONLY) -} - -// OpenFile is a copy of [os.OpenFile], modified to use sequential file access. -// -// It uses [windows.FILE_FLAG_SEQUENTIAL_SCAN] rather than [windows.FILE_ATTRIBUTE_NORMAL] -// as implemented in golang. Refer to the [Win32 API documentation] for details -// on sequential file access. -// -// [Win32 API documentation]: https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea#FILE_FLAG_SEQUENTIAL_SCAN -func OpenFile(name string, flag int, _ os.FileMode) (*os.File, error) { - return openFileSequential(name, flag) -} - -func openFileSequential(name string, flag int) (file *os.File, err error) { - if name == "" { - return nil, &os.PathError{Op: "open", Path: name, Err: windows.ERROR_FILE_NOT_FOUND} - } - r, e := openSequential(name, flag|windows.O_CLOEXEC) - if e != nil { - return nil, &os.PathError{Op: "open", Path: name, Err: e} - } - return os.NewFile(uintptr(r), name), nil -} - -func makeInheritSa() *windows.SecurityAttributes { - var sa windows.SecurityAttributes - sa.Length = uint32(unsafe.Sizeof(sa)) - sa.InheritHandle = 1 - return &sa -} - -func openSequential(path string, mode int) (fd windows.Handle, err error) { - if len(path) == 0 { - return windows.InvalidHandle, windows.ERROR_FILE_NOT_FOUND - } - pathp, err := windows.UTF16PtrFromString(path) - if err != nil { - return windows.InvalidHandle, err - } - var access uint32 - switch mode & (windows.O_RDONLY | windows.O_WRONLY | windows.O_RDWR) { - case windows.O_RDONLY: - access = windows.GENERIC_READ - case windows.O_WRONLY: - access = windows.GENERIC_WRITE - case windows.O_RDWR: - access = windows.GENERIC_READ | windows.GENERIC_WRITE - } - if mode&windows.O_CREAT != 0 { - access |= windows.GENERIC_WRITE - } - if mode&windows.O_APPEND != 0 { - access &^= windows.GENERIC_WRITE - access |= windows.FILE_APPEND_DATA - } - sharemode := uint32(windows.FILE_SHARE_READ | windows.FILE_SHARE_WRITE) - var sa *windows.SecurityAttributes - if mode&windows.O_CLOEXEC == 0 { - sa = makeInheritSa() - } - var createmode uint32 - switch { - case mode&(windows.O_CREAT|windows.O_EXCL) == (windows.O_CREAT | windows.O_EXCL): - createmode = windows.CREATE_NEW - case mode&(windows.O_CREAT|windows.O_TRUNC) == (windows.O_CREAT | windows.O_TRUNC): - createmode = windows.CREATE_ALWAYS - case mode&windows.O_CREAT == windows.O_CREAT: - createmode = windows.OPEN_ALWAYS - case mode&windows.O_TRUNC == windows.O_TRUNC: - createmode = windows.TRUNCATE_EXISTING - default: - createmode = windows.OPEN_EXISTING - } - // Use FILE_FLAG_SEQUENTIAL_SCAN rather than FILE_ATTRIBUTE_NORMAL as implemented in golang. - // https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea#FILE_FLAG_SEQUENTIAL_SCAN - h, e := windows.CreateFile(pathp, access, sharemode, sa, createmode, windows.FILE_FLAG_SEQUENTIAL_SCAN, 0) - return h, e -} - -// Helpers for CreateTemp -var ( - rand uint32 - randmu sync.Mutex -) - -func reseed() uint32 { - return uint32(time.Now().UnixNano() + int64(os.Getpid())) -} - -func nextSuffix() string { - randmu.Lock() - r := rand - if r == 0 { - r = reseed() - } - r = r*1664525 + 1013904223 // constants from Numerical Recipes - rand = r - randmu.Unlock() - return strconv.Itoa(int(1e9 + r%1e9))[1:] -} - -// CreateTemp is a copy of [os.CreateTemp], modified to use sequential file access. -// -// It uses [windows.FILE_FLAG_SEQUENTIAL_SCAN] rather than [windows.FILE_ATTRIBUTE_NORMAL] -// as implemented in golang. Refer to the [Win32 API documentation] for details -// on sequential file access. -// -// [Win32 API documentation]: https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilea#FILE_FLAG_SEQUENTIAL_SCAN -func CreateTemp(dir, prefix string) (f *os.File, err error) { - if dir == "" { - dir = os.TempDir() - } - - nconflict := 0 - for i := 0; i < 10000; i++ { - name := filepath.Join(dir, prefix+nextSuffix()) - f, err = openFileSequential(name, windows.O_RDWR|windows.O_CREAT|windows.O_EXCL) - if os.IsExist(err) { - if nconflict++; nconflict > 10 { - randmu.Lock() - rand = reseed() - randmu.Unlock() - } - continue - } - break - } - return -} diff --git a/vendor/github.com/opencontainers/go-digest/.mailmap b/vendor/github.com/opencontainers/go-digest/.mailmap deleted file mode 100644 index eaf8b2f9..00000000 --- a/vendor/github.com/opencontainers/go-digest/.mailmap +++ /dev/null @@ -1,4 +0,0 @@ -Aaron Lehmann -Derek McGowan -Stephen J Day -Haibing Zhou diff --git a/vendor/github.com/opencontainers/go-digest/.pullapprove.yml b/vendor/github.com/opencontainers/go-digest/.pullapprove.yml deleted file mode 100644 index b6165f83..00000000 --- a/vendor/github.com/opencontainers/go-digest/.pullapprove.yml +++ /dev/null @@ -1,28 +0,0 @@ -version: 2 - -requirements: - signed_off_by: - required: true - -always_pending: - title_regex: '^WIP' - explanation: 'Work in progress...' - -group_defaults: - required: 2 - approve_by_comment: - enabled: true - approve_regex: '^LGTM' - reject_regex: '^Rejected' - reset_on_push: - enabled: true - author_approval: - ignored: true - conditions: - branches: - - master - -groups: - go-digest: - teams: - - go-digest-maintainers diff --git a/vendor/github.com/opencontainers/go-digest/.travis.yml b/vendor/github.com/opencontainers/go-digest/.travis.yml deleted file mode 100644 index 5775f885..00000000 --- a/vendor/github.com/opencontainers/go-digest/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: go -go: - - 1.12.x - - 1.13.x - - master diff --git a/vendor/github.com/opencontainers/go-digest/CONTRIBUTING.md b/vendor/github.com/opencontainers/go-digest/CONTRIBUTING.md deleted file mode 100644 index e4d962ac..00000000 --- a/vendor/github.com/opencontainers/go-digest/CONTRIBUTING.md +++ /dev/null @@ -1,72 +0,0 @@ -# Contributing to Docker open source projects - -Want to hack on this project? Awesome! Here are instructions to get you started. - -This project is a part of the [Docker](https://www.docker.com) project, and follows -the same rules and principles. If you're already familiar with the way -Docker does things, you'll feel right at home. - -Otherwise, go read Docker's -[contributions guidelines](https://github.com/docker/docker/blob/master/CONTRIBUTING.md), -[issue triaging](https://github.com/docker/docker/blob/master/project/ISSUE-TRIAGE.md), -[review process](https://github.com/docker/docker/blob/master/project/REVIEWING.md) and -[branches and tags](https://github.com/docker/docker/blob/master/project/BRANCHES-AND-TAGS.md). - -For an in-depth description of our contribution process, visit the -contributors guide: [Understand how to contribute](https://docs.docker.com/opensource/workflow/make-a-contribution/) - -### Sign your work - -The sign-off is a simple line at the end of the explanation for the patch. Your -signature certifies that you wrote the patch or otherwise have the right to pass -it on as an open-source patch. The rules are pretty simple: if you can certify -the below (from [developercertificate.org](http://developercertificate.org/)): - -``` -Developer Certificate of Origin -Version 1.1 - -Copyright (C) 2004, 2006 The Linux Foundation and its contributors. -1 Letterman Drive -Suite D4700 -San Francisco, CA, 94129 - -Everyone is permitted to copy and distribute verbatim copies of this -license document, but changing it is not allowed. - - -Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -(a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -(b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -(c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -(d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. -``` - -Then you just add a line to every git commit message: - - Signed-off-by: Joe Smith - -Use your real name (sorry, no pseudonyms or anonymous contributions.) - -If you set your `user.name` and `user.email` git configs, you can sign your -commit automatically with `git commit -s`. diff --git a/vendor/github.com/opencontainers/go-digest/LICENSE b/vendor/github.com/opencontainers/go-digest/LICENSE deleted file mode 100644 index 3ac8ab64..00000000 --- a/vendor/github.com/opencontainers/go-digest/LICENSE +++ /dev/null @@ -1,192 +0,0 @@ - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright 2019, 2020 OCI Contributors - Copyright 2016 Docker, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/opencontainers/go-digest/LICENSE.docs b/vendor/github.com/opencontainers/go-digest/LICENSE.docs deleted file mode 100644 index e26cd4fc..00000000 --- a/vendor/github.com/opencontainers/go-digest/LICENSE.docs +++ /dev/null @@ -1,425 +0,0 @@ -Attribution-ShareAlike 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") is not a law firm and -does not provide legal services or legal advice. Distribution of -Creative Commons public licenses does not create a lawyer-client or -other relationship. Creative Commons makes its licenses and related -information available on an "as-is" basis. Creative Commons gives no -warranties regarding its licenses, any material licensed under their -terms and conditions, or any related information. Creative Commons -disclaims all liability for damages resulting from their use to the -fullest extent possible. - -Using Creative Commons Public Licenses - -Creative Commons public licenses provide a standard set of terms and -conditions that creators and other rights holders may use to share -original works of authorship and other material subject to copyright -and certain other rights specified in the public license below. The -following considerations are for informational purposes only, are not -exhaustive, and do not form part of our licenses. - - Considerations for licensors: Our public licenses are - intended for use by those authorized to give the public - permission to use material in ways otherwise restricted by - copyright and certain other rights. Our licenses are - irrevocable. Licensors should read and understand the terms - and conditions of the license they choose before applying it. - Licensors should also secure all rights necessary before - applying our licenses so that the public can reuse the - material as expected. Licensors should clearly mark any - material not subject to the license. This includes other CC- - licensed material, or material used under an exception or - limitation to copyright. More considerations for licensors: - wiki.creativecommons.org/Considerations_for_licensors - - Considerations for the public: By using one of our public - licenses, a licensor grants the public permission to use the - licensed material under specified terms and conditions. If - the licensor's permission is not necessary for any reason--for - example, because of any applicable exception or limitation to - copyright--then that use is not regulated by the license. Our - licenses grant only permissions under copyright and certain - other rights that a licensor has authority to grant. Use of - the licensed material may still be restricted for other - reasons, including because others have copyright or other - rights in the material. A licensor may make special requests, - such as asking that all changes be marked or described. - Although not required by our licenses, you are encouraged to - respect those requests where reasonable. More_considerations - for the public: - wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -Creative Commons Attribution-ShareAlike 4.0 International Public -License - -By exercising the Licensed Rights (defined below), You accept and agree -to be bound by the terms and conditions of this Creative Commons -Attribution-ShareAlike 4.0 International Public License ("Public -License"). To the extent this Public License may be interpreted as a -contract, You are granted the Licensed Rights in consideration of Your -acceptance of these terms and conditions, and the Licensor grants You -such rights in consideration of benefits the Licensor receives from -making the Licensed Material available under these terms and -conditions. - - -Section 1 -- Definitions. - - a. Adapted Material means material subject to Copyright and Similar - Rights that is derived from or based upon the Licensed Material - and in which the Licensed Material is translated, altered, - arranged, transformed, or otherwise modified in a manner requiring - permission under the Copyright and Similar Rights held by the - Licensor. For purposes of this Public License, where the Licensed - Material is a musical work, performance, or sound recording, - Adapted Material is always produced where the Licensed Material is - synched in timed relation with a moving image. - - b. Adapter's License means the license You apply to Your Copyright - and Similar Rights in Your contributions to Adapted Material in - accordance with the terms and conditions of this Public License. - - c. BY-SA Compatible License means a license listed at - creativecommons.org/compatiblelicenses, approved by Creative - Commons as essentially the equivalent of this Public License. - - d. Copyright and Similar Rights means copyright and/or similar rights - closely related to copyright including, without limitation, - performance, broadcast, sound recording, and Sui Generis Database - Rights, without regard to how the rights are labeled or - categorized. For purposes of this Public License, the rights - specified in Section 2(b)(1)-(2) are not Copyright and Similar - Rights. - - e. Effective Technological Measures means those measures that, in the - absence of proper authority, may not be circumvented under laws - fulfilling obligations under Article 11 of the WIPO Copyright - Treaty adopted on December 20, 1996, and/or similar international - agreements. - - f. Exceptions and Limitations means fair use, fair dealing, and/or - any other exception or limitation to Copyright and Similar Rights - that applies to Your use of the Licensed Material. - - g. License Elements means the license attributes listed in the name - of a Creative Commons Public License. The License Elements of this - Public License are Attribution and ShareAlike. - - h. Licensed Material means the artistic or literary work, database, - or other material to which the Licensor applied this Public - License. - - i. Licensed Rights means the rights granted to You subject to the - terms and conditions of this Public License, which are limited to - all Copyright and Similar Rights that apply to Your use of the - Licensed Material and that the Licensor has authority to license. - - j. Licensor means the individual(s) or entity(ies) granting rights - under this Public License. - - k. Share means to provide material to the public by any means or - process that requires permission under the Licensed Rights, such - as reproduction, public display, public performance, distribution, - dissemination, communication, or importation, and to make material - available to the public including in ways that members of the - public may access the material from a place and at a time - individually chosen by them. - - l. Sui Generis Database Rights means rights other than copyright - resulting from Directive 96/9/EC of the European Parliament and of - the Council of 11 March 1996 on the legal protection of databases, - as amended and/or succeeded, as well as other essentially - equivalent rights anywhere in the world. - - m. You means the individual or entity exercising the Licensed Rights - under this Public License. Your has a corresponding meaning. - - -Section 2 -- Scope. - - a. License grant. - - 1. Subject to the terms and conditions of this Public License, - the Licensor hereby grants You a worldwide, royalty-free, - non-sublicensable, non-exclusive, irrevocable license to - exercise the Licensed Rights in the Licensed Material to: - - a. reproduce and Share the Licensed Material, in whole or - in part; and - - b. produce, reproduce, and Share Adapted Material. - - 2. Exceptions and Limitations. For the avoidance of doubt, where - Exceptions and Limitations apply to Your use, this Public - License does not apply, and You do not need to comply with - its terms and conditions. - - 3. Term. The term of this Public License is specified in Section - 6(a). - - 4. Media and formats; technical modifications allowed. The - Licensor authorizes You to exercise the Licensed Rights in - all media and formats whether now known or hereafter created, - and to make technical modifications necessary to do so. The - Licensor waives and/or agrees not to assert any right or - authority to forbid You from making technical modifications - necessary to exercise the Licensed Rights, including - technical modifications necessary to circumvent Effective - Technological Measures. For purposes of this Public License, - simply making modifications authorized by this Section 2(a) - (4) never produces Adapted Material. - - 5. Downstream recipients. - - a. Offer from the Licensor -- Licensed Material. Every - recipient of the Licensed Material automatically - receives an offer from the Licensor to exercise the - Licensed Rights under the terms and conditions of this - Public License. - - b. Additional offer from the Licensor -- Adapted Material. - Every recipient of Adapted Material from You - automatically receives an offer from the Licensor to - exercise the Licensed Rights in the Adapted Material - under the conditions of the Adapter's License You apply. - - c. No downstream restrictions. You may not offer or impose - any additional or different terms or conditions on, or - apply any Effective Technological Measures to, the - Licensed Material if doing so restricts exercise of the - Licensed Rights by any recipient of the Licensed - Material. - - 6. No endorsement. Nothing in this Public License constitutes or - may be construed as permission to assert or imply that You - are, or that Your use of the Licensed Material is, connected - with, or sponsored, endorsed, or granted official status by, - the Licensor or others designated to receive attribution as - provided in Section 3(a)(1)(A)(i). - - b. Other rights. - - 1. Moral rights, such as the right of integrity, are not - licensed under this Public License, nor are publicity, - privacy, and/or other similar personality rights; however, to - the extent possible, the Licensor waives and/or agrees not to - assert any such rights held by the Licensor to the limited - extent necessary to allow You to exercise the Licensed - Rights, but not otherwise. - - 2. Patent and trademark rights are not licensed under this - Public License. - - 3. To the extent possible, the Licensor waives any right to - collect royalties from You for the exercise of the Licensed - Rights, whether directly or through a collecting society - under any voluntary or waivable statutory or compulsory - licensing scheme. In all other cases the Licensor expressly - reserves any right to collect such royalties. - - -Section 3 -- License Conditions. - -Your exercise of the Licensed Rights is expressly made subject to the -following conditions. - - a. Attribution. - - 1. If You Share the Licensed Material (including in modified - form), You must: - - a. retain the following if it is supplied by the Licensor - with the Licensed Material: - - i. identification of the creator(s) of the Licensed - Material and any others designated to receive - attribution, in any reasonable manner requested by - the Licensor (including by pseudonym if - designated); - - ii. a copyright notice; - - iii. a notice that refers to this Public License; - - iv. a notice that refers to the disclaimer of - warranties; - - v. a URI or hyperlink to the Licensed Material to the - extent reasonably practicable; - - b. indicate if You modified the Licensed Material and - retain an indication of any previous modifications; and - - c. indicate the Licensed Material is licensed under this - Public License, and include the text of, or the URI or - hyperlink to, this Public License. - - 2. You may satisfy the conditions in Section 3(a)(1) in any - reasonable manner based on the medium, means, and context in - which You Share the Licensed Material. For example, it may be - reasonable to satisfy the conditions by providing a URI or - hyperlink to a resource that includes the required - information. - - 3. If requested by the Licensor, You must remove any of the - information required by Section 3(a)(1)(A) to the extent - reasonably practicable. - - b. ShareAlike. - - In addition to the conditions in Section 3(a), if You Share - Adapted Material You produce, the following conditions also apply. - - 1. The Adapter's License You apply must be a Creative Commons - license with the same License Elements, this version or - later, or a BY-SA Compatible License. - - 2. You must include the text of, or the URI or hyperlink to, the - Adapter's License You apply. You may satisfy this condition - in any reasonable manner based on the medium, means, and - context in which You Share Adapted Material. - - 3. You may not offer or impose any additional or different terms - or conditions on, or apply any Effective Technological - Measures to, Adapted Material that restrict exercise of the - rights granted under the Adapter's License You apply. - - -Section 4 -- Sui Generis Database Rights. - -Where the Licensed Rights include Sui Generis Database Rights that -apply to Your use of the Licensed Material: - - a. for the avoidance of doubt, Section 2(a)(1) grants You the right - to extract, reuse, reproduce, and Share all or a substantial - portion of the contents of the database; - - b. if You include all or a substantial portion of the database - contents in a database in which You have Sui Generis Database - Rights, then the database in which You have Sui Generis Database - Rights (but not its individual contents) is Adapted Material, - - including for purposes of Section 3(b); and - c. You must comply with the conditions in Section 3(a) if You Share - all or a substantial portion of the contents of the database. - -For the avoidance of doubt, this Section 4 supplements and does not -replace Your obligations under this Public License where the Licensed -Rights include other Copyright and Similar Rights. - - -Section 5 -- Disclaimer of Warranties and Limitation of Liability. - - a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE - EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS - AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF - ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, - IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, - WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR - PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, - ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT - KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT - ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. - - b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE - TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, - NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, - INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, - COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR - USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN - ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR - DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR - IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. - - c. The disclaimer of warranties and limitation of liability provided - above shall be interpreted in a manner that, to the extent - possible, most closely approximates an absolute disclaimer and - waiver of all liability. - - -Section 6 -- Term and Termination. - - a. This Public License applies for the term of the Copyright and - Similar Rights licensed here. However, if You fail to comply with - this Public License, then Your rights under this Public License - terminate automatically. - - b. Where Your right to use the Licensed Material has terminated under - Section 6(a), it reinstates: - - 1. automatically as of the date the violation is cured, provided - it is cured within 30 days of Your discovery of the - violation; or - - 2. upon express reinstatement by the Licensor. - - For the avoidance of doubt, this Section 6(b) does not affect any - right the Licensor may have to seek remedies for Your violations - of this Public License. - - c. For the avoidance of doubt, the Licensor may also offer the - Licensed Material under separate terms or conditions or stop - distributing the Licensed Material at any time; however, doing so - will not terminate this Public License. - - d. Sections 1, 5, 6, 7, and 8 survive termination of this Public - License. - - -Section 7 -- Other Terms and Conditions. - - a. The Licensor shall not be bound by any additional or different - terms or conditions communicated by You unless expressly agreed. - - b. Any arrangements, understandings, or agreements regarding the - Licensed Material not stated herein are separate from and - independent of the terms and conditions of this Public License. - - -Section 8 -- Interpretation. - - a. For the avoidance of doubt, this Public License does not, and - shall not be interpreted to, reduce, limit, restrict, or impose - conditions on any use of the Licensed Material that could lawfully - be made without permission under this Public License. - - b. To the extent possible, if any provision of this Public License is - deemed unenforceable, it shall be automatically reformed to the - minimum extent necessary to make it enforceable. If the provision - cannot be reformed, it shall be severed from this Public License - without affecting the enforceability of the remaining terms and - conditions. - - c. No term or condition of this Public License will be waived and no - failure to comply consented to unless expressly agreed to by the - Licensor. - - d. Nothing in this Public License constitutes or may be interpreted - as a limitation upon, or waiver of, any privileges and immunities - that apply to the Licensor or You, including from the legal - processes of any jurisdiction or authority. - - -======================================================================= - -Creative Commons is not a party to its public licenses. -Notwithstanding, Creative Commons may elect to apply one of its public -licenses to material it publishes and in those instances will be -considered the "Licensor." Except for the limited purpose of indicating -that material is shared under a Creative Commons public license or as -otherwise permitted by the Creative Commons policies published at -creativecommons.org/policies, Creative Commons does not authorize the -use of the trademark "Creative Commons" or any other trademark or logo -of Creative Commons without its prior written consent including, -without limitation, in connection with any unauthorized modifications -to any of its public licenses or any other arrangements, -understandings, or agreements concerning use of licensed material. For -the avoidance of doubt, this paragraph does not form part of the public -licenses. - -Creative Commons may be contacted at creativecommons.org. diff --git a/vendor/github.com/opencontainers/go-digest/MAINTAINERS b/vendor/github.com/opencontainers/go-digest/MAINTAINERS deleted file mode 100644 index 843b1b20..00000000 --- a/vendor/github.com/opencontainers/go-digest/MAINTAINERS +++ /dev/null @@ -1,5 +0,0 @@ -Derek McGowan (@dmcgowan) -Stephen Day (@stevvooe) -Vincent Batts (@vbatts) -Akihiro Suda (@AkihiroSuda) -Sebastiaan van Stijn (@thaJeztah) diff --git a/vendor/github.com/opencontainers/go-digest/README.md b/vendor/github.com/opencontainers/go-digest/README.md deleted file mode 100644 index a1128720..00000000 --- a/vendor/github.com/opencontainers/go-digest/README.md +++ /dev/null @@ -1,96 +0,0 @@ -# go-digest - -[![GoDoc](https://godoc.org/github.com/opencontainers/go-digest?status.svg)](https://godoc.org/github.com/opencontainers/go-digest) [![Go Report Card](https://goreportcard.com/badge/github.com/opencontainers/go-digest)](https://goreportcard.com/report/github.com/opencontainers/go-digest) [![Build Status](https://travis-ci.org/opencontainers/go-digest.svg?branch=master)](https://travis-ci.org/opencontainers/go-digest) - -Common digest package used across the container ecosystem. - -Please see the [godoc](https://godoc.org/github.com/opencontainers/go-digest) for more information. - -# What is a digest? - -A digest is just a [hash](https://en.wikipedia.org/wiki/Hash_function). - -The most common use case for a digest is to create a content identifier for use in [Content Addressable Storage](https://en.wikipedia.org/wiki/Content-addressable_storage) systems: - -```go -id := digest.FromBytes([]byte("my content")) -``` - -In the example above, the id can be used to uniquely identify the byte slice "my content". -This allows two disparate applications to agree on a verifiable identifier without having to trust one another. - -An identifying digest can be verified, as follows: - -```go -if id != digest.FromBytes([]byte("my content")) { - return errors.New("the content has changed!") -} -``` - -A `Verifier` type can be used to handle cases where an `io.Reader` makes more sense: - -```go -rd := getContent() -verifier := id.Verifier() -io.Copy(verifier, rd) - -if !verifier.Verified() { - return errors.New("the content has changed!") -} -``` - -Using [Merkle DAGs](https://en.wikipedia.org/wiki/Merkle_tree), this can power a rich, safe, content distribution system. - -# Usage - -While the [godoc](https://godoc.org/github.com/opencontainers/go-digest) is considered the best resource, a few important items need to be called out when using this package. - -1. Make sure to import the hash implementations into your application or the package will panic. - You should have something like the following in the main (or other entrypoint) of your application: - - ```go - import ( - _ "crypto/sha256" - _ "crypto/sha512" - ) - ``` - This may seem inconvenient but it allows you replace the hash - implementations with others, such as https://github.com/stevvooe/resumable. - -2. Even though `digest.Digest` may be assemblable as a string, _always_ verify your input with `digest.Parse` or use `Digest.Validate` when accepting untrusted input. - While there are measures to avoid common problems, this will ensure you have valid digests in the rest of your application. - -3. While alternative encodings of hash values (digests) are possible (for example, base64), this package deals exclusively with hex-encoded digests. - -# Stability - -The Go API, at this stage, is considered stable, unless otherwise noted. - -As always, before using a package export, read the [godoc](https://godoc.org/github.com/opencontainers/go-digest). - -# Contributing - -This package is considered fairly complete. -It has been in production in thousands (millions?) of deployments and is fairly battle-hardened. -New additions will be met with skepticism. -If you think there is a missing feature, please file a bug clearly describing the problem and the alternatives you tried before submitting a PR. - -## Code of Conduct - -Participation in the OpenContainers community is governed by [OpenContainer's Code of Conduct][code-of-conduct]. - -## Security - -If you find an issue, please follow the [security][security] protocol to report it. - -# Copyright and license - -Copyright © 2019, 2020 OCI Contributors -Copyright © 2016 Docker, Inc. -All rights reserved, except as follows. -Code is released under the [Apache 2.0 license](LICENSE). -This `README.md` file and the [`CONTRIBUTING.md`](CONTRIBUTING.md) file are licensed under the Creative Commons Attribution 4.0 International License under the terms and conditions set forth in the file [`LICENSE.docs`](LICENSE.docs). -You may obtain a duplicate copy of the same license, titled CC BY-SA 4.0, at http://creativecommons.org/licenses/by-sa/4.0/. - -[security]: https://github.com/opencontainers/org/blob/master/security -[code-of-conduct]: https://github.com/opencontainers/org/blob/master/CODE_OF_CONDUCT.md diff --git a/vendor/github.com/opencontainers/go-digest/algorithm.go b/vendor/github.com/opencontainers/go-digest/algorithm.go deleted file mode 100644 index 490951dc..00000000 --- a/vendor/github.com/opencontainers/go-digest/algorithm.go +++ /dev/null @@ -1,193 +0,0 @@ -// Copyright 2019, 2020 OCI Contributors -// Copyright 2017 Docker, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package digest - -import ( - "crypto" - "fmt" - "hash" - "io" - "regexp" -) - -// Algorithm identifies and implementation of a digester by an identifier. -// Note the that this defines both the hash algorithm used and the string -// encoding. -type Algorithm string - -// supported digest types -const ( - SHA256 Algorithm = "sha256" // sha256 with hex encoding (lower case only) - SHA384 Algorithm = "sha384" // sha384 with hex encoding (lower case only) - SHA512 Algorithm = "sha512" // sha512 with hex encoding (lower case only) - - // Canonical is the primary digest algorithm used with the distribution - // project. Other digests may be used but this one is the primary storage - // digest. - Canonical = SHA256 -) - -var ( - // TODO(stevvooe): Follow the pattern of the standard crypto package for - // registration of digests. Effectively, we are a registerable set and - // common symbol access. - - // algorithms maps values to hash.Hash implementations. Other algorithms - // may be available but they cannot be calculated by the digest package. - algorithms = map[Algorithm]crypto.Hash{ - SHA256: crypto.SHA256, - SHA384: crypto.SHA384, - SHA512: crypto.SHA512, - } - - // anchoredEncodedRegexps contains anchored regular expressions for hex-encoded digests. - // Note that /A-F/ disallowed. - anchoredEncodedRegexps = map[Algorithm]*regexp.Regexp{ - SHA256: regexp.MustCompile(`^[a-f0-9]{64}$`), - SHA384: regexp.MustCompile(`^[a-f0-9]{96}$`), - SHA512: regexp.MustCompile(`^[a-f0-9]{128}$`), - } -) - -// Available returns true if the digest type is available for use. If this -// returns false, Digester and Hash will return nil. -func (a Algorithm) Available() bool { - h, ok := algorithms[a] - if !ok { - return false - } - - // check availability of the hash, as well - return h.Available() -} - -func (a Algorithm) String() string { - return string(a) -} - -// Size returns number of bytes returned by the hash. -func (a Algorithm) Size() int { - h, ok := algorithms[a] - if !ok { - return 0 - } - return h.Size() -} - -// Set implemented to allow use of Algorithm as a command line flag. -func (a *Algorithm) Set(value string) error { - if value == "" { - *a = Canonical - } else { - // just do a type conversion, support is queried with Available. - *a = Algorithm(value) - } - - if !a.Available() { - return ErrDigestUnsupported - } - - return nil -} - -// Digester returns a new digester for the specified algorithm. If the algorithm -// does not have a digester implementation, nil will be returned. This can be -// checked by calling Available before calling Digester. -func (a Algorithm) Digester() Digester { - return &digester{ - alg: a, - hash: a.Hash(), - } -} - -// Hash returns a new hash as used by the algorithm. If not available, the -// method will panic. Check Algorithm.Available() before calling. -func (a Algorithm) Hash() hash.Hash { - if !a.Available() { - // Empty algorithm string is invalid - if a == "" { - panic(fmt.Sprintf("empty digest algorithm, validate before calling Algorithm.Hash()")) - } - - // NOTE(stevvooe): A missing hash is usually a programming error that - // must be resolved at compile time. We don't import in the digest - // package to allow users to choose their hash implementation (such as - // when using stevvooe/resumable or a hardware accelerated package). - // - // Applications that may want to resolve the hash at runtime should - // call Algorithm.Available before call Algorithm.Hash(). - panic(fmt.Sprintf("%v not available (make sure it is imported)", a)) - } - - return algorithms[a].New() -} - -// Encode encodes the raw bytes of a digest, typically from a hash.Hash, into -// the encoded portion of the digest. -func (a Algorithm) Encode(d []byte) string { - // TODO(stevvooe): Currently, all algorithms use a hex encoding. When we - // add support for back registration, we can modify this accordingly. - return fmt.Sprintf("%x", d) -} - -// FromReader returns the digest of the reader using the algorithm. -func (a Algorithm) FromReader(rd io.Reader) (Digest, error) { - digester := a.Digester() - - if _, err := io.Copy(digester.Hash(), rd); err != nil { - return "", err - } - - return digester.Digest(), nil -} - -// FromBytes digests the input and returns a Digest. -func (a Algorithm) FromBytes(p []byte) Digest { - digester := a.Digester() - - if _, err := digester.Hash().Write(p); err != nil { - // Writes to a Hash should never fail. None of the existing - // hash implementations in the stdlib or hashes vendored - // here can return errors from Write. Having a panic in this - // condition instead of having FromBytes return an error value - // avoids unnecessary error handling paths in all callers. - panic("write to hash function returned error: " + err.Error()) - } - - return digester.Digest() -} - -// FromString digests the string input and returns a Digest. -func (a Algorithm) FromString(s string) Digest { - return a.FromBytes([]byte(s)) -} - -// Validate validates the encoded portion string -func (a Algorithm) Validate(encoded string) error { - r, ok := anchoredEncodedRegexps[a] - if !ok { - return ErrDigestUnsupported - } - // Digests much always be hex-encoded, ensuring that their hex portion will - // always be size*2 - if a.Size()*2 != len(encoded) { - return ErrDigestInvalidLength - } - if r.MatchString(encoded) { - return nil - } - return ErrDigestInvalidFormat -} diff --git a/vendor/github.com/opencontainers/go-digest/digest.go b/vendor/github.com/opencontainers/go-digest/digest.go deleted file mode 100644 index 518b5e71..00000000 --- a/vendor/github.com/opencontainers/go-digest/digest.go +++ /dev/null @@ -1,157 +0,0 @@ -// Copyright 2019, 2020 OCI Contributors -// Copyright 2017 Docker, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package digest - -import ( - "fmt" - "hash" - "io" - "regexp" - "strings" -) - -// Digest allows simple protection of hex formatted digest strings, prefixed -// by their algorithm. Strings of type Digest have some guarantee of being in -// the correct format and it provides quick access to the components of a -// digest string. -// -// The following is an example of the contents of Digest types: -// -// sha256:7173b809ca12ec5dee4506cd86be934c4596dd234ee82c0662eac04a8c2c71dc -// -// This allows to abstract the digest behind this type and work only in those -// terms. -type Digest string - -// NewDigest returns a Digest from alg and a hash.Hash object. -func NewDigest(alg Algorithm, h hash.Hash) Digest { - return NewDigestFromBytes(alg, h.Sum(nil)) -} - -// NewDigestFromBytes returns a new digest from the byte contents of p. -// Typically, this can come from hash.Hash.Sum(...) or xxx.SumXXX(...) -// functions. This is also useful for rebuilding digests from binary -// serializations. -func NewDigestFromBytes(alg Algorithm, p []byte) Digest { - return NewDigestFromEncoded(alg, alg.Encode(p)) -} - -// NewDigestFromHex is deprecated. Please use NewDigestFromEncoded. -func NewDigestFromHex(alg, hex string) Digest { - return NewDigestFromEncoded(Algorithm(alg), hex) -} - -// NewDigestFromEncoded returns a Digest from alg and the encoded digest. -func NewDigestFromEncoded(alg Algorithm, encoded string) Digest { - return Digest(fmt.Sprintf("%s:%s", alg, encoded)) -} - -// DigestRegexp matches valid digest types. -var DigestRegexp = regexp.MustCompile(`[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+`) - -// DigestRegexpAnchored matches valid digest types, anchored to the start and end of the match. -var DigestRegexpAnchored = regexp.MustCompile(`^` + DigestRegexp.String() + `$`) - -var ( - // ErrDigestInvalidFormat returned when digest format invalid. - ErrDigestInvalidFormat = fmt.Errorf("invalid checksum digest format") - - // ErrDigestInvalidLength returned when digest has invalid length. - ErrDigestInvalidLength = fmt.Errorf("invalid checksum digest length") - - // ErrDigestUnsupported returned when the digest algorithm is unsupported. - ErrDigestUnsupported = fmt.Errorf("unsupported digest algorithm") -) - -// Parse parses s and returns the validated digest object. An error will -// be returned if the format is invalid. -func Parse(s string) (Digest, error) { - d := Digest(s) - return d, d.Validate() -} - -// FromReader consumes the content of rd until io.EOF, returning canonical digest. -func FromReader(rd io.Reader) (Digest, error) { - return Canonical.FromReader(rd) -} - -// FromBytes digests the input and returns a Digest. -func FromBytes(p []byte) Digest { - return Canonical.FromBytes(p) -} - -// FromString digests the input and returns a Digest. -func FromString(s string) Digest { - return Canonical.FromString(s) -} - -// Validate checks that the contents of d is a valid digest, returning an -// error if not. -func (d Digest) Validate() error { - s := string(d) - i := strings.Index(s, ":") - if i <= 0 || i+1 == len(s) { - return ErrDigestInvalidFormat - } - algorithm, encoded := Algorithm(s[:i]), s[i+1:] - if !algorithm.Available() { - if !DigestRegexpAnchored.MatchString(s) { - return ErrDigestInvalidFormat - } - return ErrDigestUnsupported - } - return algorithm.Validate(encoded) -} - -// Algorithm returns the algorithm portion of the digest. This will panic if -// the underlying digest is not in a valid format. -func (d Digest) Algorithm() Algorithm { - return Algorithm(d[:d.sepIndex()]) -} - -// Verifier returns a writer object that can be used to verify a stream of -// content against the digest. If the digest is invalid, the method will panic. -func (d Digest) Verifier() Verifier { - return hashVerifier{ - hash: d.Algorithm().Hash(), - digest: d, - } -} - -// Encoded returns the encoded portion of the digest. This will panic if the -// underlying digest is not in a valid format. -func (d Digest) Encoded() string { - return string(d[d.sepIndex()+1:]) -} - -// Hex is deprecated. Please use Digest.Encoded. -func (d Digest) Hex() string { - return d.Encoded() -} - -func (d Digest) String() string { - return string(d) -} - -func (d Digest) sepIndex() int { - i := strings.Index(string(d), ":") - - if i < 0 { - panic(fmt.Sprintf("no ':' separator in digest %q", d)) - } - - return i -} diff --git a/vendor/github.com/opencontainers/go-digest/digester.go b/vendor/github.com/opencontainers/go-digest/digester.go deleted file mode 100644 index ede90775..00000000 --- a/vendor/github.com/opencontainers/go-digest/digester.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2019, 2020 OCI Contributors -// Copyright 2017 Docker, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package digest - -import "hash" - -// Digester calculates the digest of written data. Writes should go directly -// to the return value of Hash, while calling Digest will return the current -// value of the digest. -type Digester interface { - Hash() hash.Hash // provides direct access to underlying hash instance. - Digest() Digest -} - -// digester provides a simple digester definition that embeds a hasher. -type digester struct { - alg Algorithm - hash hash.Hash -} - -func (d *digester) Hash() hash.Hash { - return d.hash -} - -func (d *digester) Digest() Digest { - return NewDigest(d.alg, d.hash) -} diff --git a/vendor/github.com/opencontainers/go-digest/doc.go b/vendor/github.com/opencontainers/go-digest/doc.go deleted file mode 100644 index 83d3a936..00000000 --- a/vendor/github.com/opencontainers/go-digest/doc.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2019, 2020 OCI Contributors -// Copyright 2017 Docker, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package digest provides a generalized type to opaquely represent message -// digests and their operations within the registry. The Digest type is -// designed to serve as a flexible identifier in a content-addressable system. -// More importantly, it provides tools and wrappers to work with -// hash.Hash-based digests with little effort. -// -// Basics -// -// The format of a digest is simply a string with two parts, dubbed the -// "algorithm" and the "digest", separated by a colon: -// -// : -// -// An example of a sha256 digest representation follows: -// -// sha256:7173b809ca12ec5dee4506cd86be934c4596dd234ee82c0662eac04a8c2c71dc -// -// The "algorithm" portion defines both the hashing algorithm used to calculate -// the digest and the encoding of the resulting digest, which defaults to "hex" -// if not otherwise specified. Currently, all supported algorithms have their -// digests encoded in hex strings. -// -// In the example above, the string "sha256" is the algorithm and the hex bytes -// are the "digest". -// -// Because the Digest type is simply a string, once a valid Digest is -// obtained, comparisons are cheap, quick and simple to express with the -// standard equality operator. -// -// Verification -// -// The main benefit of using the Digest type is simple verification against a -// given digest. The Verifier interface, modeled after the stdlib hash.Hash -// interface, provides a common write sink for digest verification. After -// writing is complete, calling the Verifier.Verified method will indicate -// whether or not the stream of bytes matches the target digest. -// -// Missing Features -// -// In addition to the above, we intend to add the following features to this -// package: -// -// 1. A Digester type that supports write sink digest calculation. -// -// 2. Suspend and resume of ongoing digest calculations to support efficient digest verification in the registry. -// -package digest diff --git a/vendor/github.com/opencontainers/go-digest/verifiers.go b/vendor/github.com/opencontainers/go-digest/verifiers.go deleted file mode 100644 index afef506f..00000000 --- a/vendor/github.com/opencontainers/go-digest/verifiers.go +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright 2019, 2020 OCI Contributors -// Copyright 2017 Docker, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// https://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package digest - -import ( - "hash" - "io" -) - -// Verifier presents a general verification interface to be used with message -// digests and other byte stream verifications. Users instantiate a Verifier -// from one of the various methods, write the data under test to it then check -// the result with the Verified method. -type Verifier interface { - io.Writer - - // Verified will return true if the content written to Verifier matches - // the digest. - Verified() bool -} - -type hashVerifier struct { - digest Digest - hash hash.Hash -} - -func (hv hashVerifier) Write(p []byte) (n int, err error) { - return hv.hash.Write(p) -} - -func (hv hashVerifier) Verified() bool { - return hv.digest == NewDigest(hv.digest.Algorithm(), hv.hash) -} diff --git a/vendor/github.com/opencontainers/image-spec/LICENSE b/vendor/github.com/opencontainers/image-spec/LICENSE deleted file mode 100644 index 9fdc20fd..00000000 --- a/vendor/github.com/opencontainers/image-spec/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright 2016 The Linux Foundation. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/v1/annotations.go b/vendor/github.com/opencontainers/image-spec/specs-go/v1/annotations.go deleted file mode 100644 index 581cf7cd..00000000 --- a/vendor/github.com/opencontainers/image-spec/specs-go/v1/annotations.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2016 The Linux Foundation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package v1 - -const ( - // AnnotationCreated is the annotation key for the date and time on which the image was built (date-time string as defined by RFC 3339). - AnnotationCreated = "org.opencontainers.image.created" - - // AnnotationAuthors is the annotation key for the contact details of the people or organization responsible for the image (freeform string). - AnnotationAuthors = "org.opencontainers.image.authors" - - // AnnotationURL is the annotation key for the URL to find more information on the image. - AnnotationURL = "org.opencontainers.image.url" - - // AnnotationDocumentation is the annotation key for the URL to get documentation on the image. - AnnotationDocumentation = "org.opencontainers.image.documentation" - - // AnnotationSource is the annotation key for the URL to get source code for building the image. - AnnotationSource = "org.opencontainers.image.source" - - // AnnotationVersion is the annotation key for the version of the packaged software. - // The version MAY match a label or tag in the source code repository. - // The version MAY be Semantic versioning-compatible. - AnnotationVersion = "org.opencontainers.image.version" - - // AnnotationRevision is the annotation key for the source control revision identifier for the packaged software. - AnnotationRevision = "org.opencontainers.image.revision" - - // AnnotationVendor is the annotation key for the name of the distributing entity, organization or individual. - AnnotationVendor = "org.opencontainers.image.vendor" - - // AnnotationLicenses is the annotation key for the license(s) under which contained software is distributed as an SPDX License Expression. - AnnotationLicenses = "org.opencontainers.image.licenses" - - // AnnotationRefName is the annotation key for the name of the reference for a target. - // SHOULD only be considered valid when on descriptors on `index.json` within image layout. - AnnotationRefName = "org.opencontainers.image.ref.name" - - // AnnotationTitle is the annotation key for the human-readable title of the image. - AnnotationTitle = "org.opencontainers.image.title" - - // AnnotationDescription is the annotation key for the human-readable description of the software packaged in the image. - AnnotationDescription = "org.opencontainers.image.description" - - // AnnotationBaseImageDigest is the annotation key for the digest of the image's base image. - AnnotationBaseImageDigest = "org.opencontainers.image.base.digest" - - // AnnotationBaseImageName is the annotation key for the image reference of the image's base image. - AnnotationBaseImageName = "org.opencontainers.image.base.name" -) diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/v1/config.go b/vendor/github.com/opencontainers/image-spec/specs-go/v1/config.go deleted file mode 100644 index 36b0aeb8..00000000 --- a/vendor/github.com/opencontainers/image-spec/specs-go/v1/config.go +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2016 The Linux Foundation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package v1 - -import ( - "time" - - digest "github.com/opencontainers/go-digest" -) - -// ImageConfig defines the execution parameters which should be used as a base when running a container using an image. -type ImageConfig struct { - // User defines the username or UID which the process in the container should run as. - User string `json:"User,omitempty"` - - // ExposedPorts a set of ports to expose from a container running this image. - ExposedPorts map[string]struct{} `json:"ExposedPorts,omitempty"` - - // Env is a list of environment variables to be used in a container. - Env []string `json:"Env,omitempty"` - - // Entrypoint defines a list of arguments to use as the command to execute when the container starts. - Entrypoint []string `json:"Entrypoint,omitempty"` - - // Cmd defines the default arguments to the entrypoint of the container. - Cmd []string `json:"Cmd,omitempty"` - - // Volumes is a set of directories describing where the process is likely write data specific to a container instance. - Volumes map[string]struct{} `json:"Volumes,omitempty"` - - // WorkingDir sets the current working directory of the entrypoint process in the container. - WorkingDir string `json:"WorkingDir,omitempty"` - - // Labels contains arbitrary metadata for the container. - Labels map[string]string `json:"Labels,omitempty"` - - // StopSignal contains the system call signal that will be sent to the container to exit. - StopSignal string `json:"StopSignal,omitempty"` - - // ArgsEscaped - // - // Deprecated: This field is present only for legacy compatibility with - // Docker and should not be used by new image builders. It is used by Docker - // for Windows images to indicate that the `Entrypoint` or `Cmd` or both, - // contains only a single element array, that is a pre-escaped, and combined - // into a single string `CommandLine`. If `true` the value in `Entrypoint` or - // `Cmd` should be used as-is to avoid double escaping. - // https://github.com/opencontainers/image-spec/pull/892 - ArgsEscaped bool `json:"ArgsEscaped,omitempty"` -} - -// RootFS describes a layer content addresses -type RootFS struct { - // Type is the type of the rootfs. - Type string `json:"type"` - - // DiffIDs is an array of layer content hashes (DiffIDs), in order from bottom-most to top-most. - DiffIDs []digest.Digest `json:"diff_ids"` -} - -// History describes the history of a layer. -type History struct { - // Created is the combined date and time at which the layer was created, formatted as defined by RFC 3339, section 5.6. - Created *time.Time `json:"created,omitempty"` - - // CreatedBy is the command which created the layer. - CreatedBy string `json:"created_by,omitempty"` - - // Author is the author of the build point. - Author string `json:"author,omitempty"` - - // Comment is a custom message set when creating the layer. - Comment string `json:"comment,omitempty"` - - // EmptyLayer is used to mark if the history item created a filesystem diff. - EmptyLayer bool `json:"empty_layer,omitempty"` -} - -// Image is the JSON structure which describes some basic information about the image. -// This provides the `application/vnd.oci.image.config.v1+json` mediatype when marshalled to JSON. -type Image struct { - // Created is the combined date and time at which the image was created, formatted as defined by RFC 3339, section 5.6. - Created *time.Time `json:"created,omitempty"` - - // Author defines the name and/or email address of the person or entity which created and is responsible for maintaining the image. - Author string `json:"author,omitempty"` - - // Platform describes the platform which the image in the manifest runs on. - Platform - - // Config defines the execution parameters which should be used as a base when running a container using the image. - Config ImageConfig `json:"config,omitempty"` - - // RootFS references the layer content addresses used by the image. - RootFS RootFS `json:"rootfs"` - - // History describes the history of each layer. - History []History `json:"history,omitempty"` -} diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/v1/descriptor.go b/vendor/github.com/opencontainers/image-spec/specs-go/v1/descriptor.go deleted file mode 100644 index 1881b118..00000000 --- a/vendor/github.com/opencontainers/image-spec/specs-go/v1/descriptor.go +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2016-2022 The Linux Foundation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package v1 - -import digest "github.com/opencontainers/go-digest" - -// Descriptor describes the disposition of targeted content. -// This structure provides `application/vnd.oci.descriptor.v1+json` mediatype -// when marshalled to JSON. -type Descriptor struct { - // MediaType is the media type of the object this schema refers to. - MediaType string `json:"mediaType"` - - // Digest is the digest of the targeted content. - Digest digest.Digest `json:"digest"` - - // Size specifies the size in bytes of the blob. - Size int64 `json:"size"` - - // URLs specifies a list of URLs from which this object MAY be downloaded - URLs []string `json:"urls,omitempty"` - - // Annotations contains arbitrary metadata relating to the targeted content. - Annotations map[string]string `json:"annotations,omitempty"` - - // Data is an embedding of the targeted content. This is encoded as a base64 - // string when marshalled to JSON (automatically, by encoding/json). If - // present, Data can be used directly to avoid fetching the targeted content. - Data []byte `json:"data,omitempty"` - - // Platform describes the platform which the image in the manifest runs on. - // - // This should only be used when referring to a manifest. - Platform *Platform `json:"platform,omitempty"` - - // ArtifactType is the IANA media type of this artifact. - ArtifactType string `json:"artifactType,omitempty"` -} - -// Platform describes the platform which the image in the manifest runs on. -type Platform struct { - // Architecture field specifies the CPU architecture, for example - // `amd64` or `ppc64le`. - Architecture string `json:"architecture"` - - // OS specifies the operating system, for example `linux` or `windows`. - OS string `json:"os"` - - // OSVersion is an optional field specifying the operating system - // version, for example on Windows `10.0.14393.1066`. - OSVersion string `json:"os.version,omitempty"` - - // OSFeatures is an optional field specifying an array of strings, - // each listing a required OS feature (for example on Windows `win32k`). - OSFeatures []string `json:"os.features,omitempty"` - - // Variant is an optional field specifying a variant of the CPU, for - // example `v7` to specify ARMv7 when architecture is `arm`. - Variant string `json:"variant,omitempty"` -} - -// DescriptorEmptyJSON is the descriptor of a blob with content of `{}`. -var DescriptorEmptyJSON = Descriptor{ - MediaType: MediaTypeEmptyJSON, - Digest: `sha256:44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a`, - Size: 2, - Data: []byte(`{}`), -} diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/v1/index.go b/vendor/github.com/opencontainers/image-spec/specs-go/v1/index.go deleted file mode 100644 index e2bed9d4..00000000 --- a/vendor/github.com/opencontainers/image-spec/specs-go/v1/index.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2016 The Linux Foundation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package v1 - -import "github.com/opencontainers/image-spec/specs-go" - -// Index references manifests for various platforms. -// This structure provides `application/vnd.oci.image.index.v1+json` mediatype when marshalled to JSON. -type Index struct { - specs.Versioned - - // MediaType specifies the type of this document data structure e.g. `application/vnd.oci.image.index.v1+json` - MediaType string `json:"mediaType,omitempty"` - - // ArtifactType specifies the IANA media type of artifact when the manifest is used for an artifact. - ArtifactType string `json:"artifactType,omitempty"` - - // Manifests references platform specific manifests. - Manifests []Descriptor `json:"manifests"` - - // Subject is an optional link from the image manifest to another manifest forming an association between the image manifest and the other manifest. - Subject *Descriptor `json:"subject,omitempty"` - - // Annotations contains arbitrary metadata for the image index. - Annotations map[string]string `json:"annotations,omitempty"` -} diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/v1/layout.go b/vendor/github.com/opencontainers/image-spec/specs-go/v1/layout.go deleted file mode 100644 index c5503cb3..00000000 --- a/vendor/github.com/opencontainers/image-spec/specs-go/v1/layout.go +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2016 The Linux Foundation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package v1 - -const ( - // ImageLayoutFile is the file name containing ImageLayout in an OCI Image Layout - ImageLayoutFile = "oci-layout" - // ImageLayoutVersion is the version of ImageLayout - ImageLayoutVersion = "1.0.0" - // ImageIndexFile is the file name of the entry point for references and descriptors in an OCI Image Layout - ImageIndexFile = "index.json" - // ImageBlobsDir is the directory name containing content addressable blobs in an OCI Image Layout - ImageBlobsDir = "blobs" -) - -// ImageLayout is the structure in the "oci-layout" file, found in the root -// of an OCI Image-layout directory. -type ImageLayout struct { - Version string `json:"imageLayoutVersion"` -} diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/v1/manifest.go b/vendor/github.com/opencontainers/image-spec/specs-go/v1/manifest.go deleted file mode 100644 index 26fec52a..00000000 --- a/vendor/github.com/opencontainers/image-spec/specs-go/v1/manifest.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright 2016-2022 The Linux Foundation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package v1 - -import "github.com/opencontainers/image-spec/specs-go" - -// Manifest provides `application/vnd.oci.image.manifest.v1+json` mediatype structure when marshalled to JSON. -type Manifest struct { - specs.Versioned - - // MediaType specifies the type of this document data structure e.g. `application/vnd.oci.image.manifest.v1+json` - MediaType string `json:"mediaType,omitempty"` - - // ArtifactType specifies the IANA media type of artifact when the manifest is used for an artifact. - ArtifactType string `json:"artifactType,omitempty"` - - // Config references a configuration object for a container, by digest. - // The referenced configuration object is a JSON blob that the runtime uses to set up the container. - Config Descriptor `json:"config"` - - // Layers is an indexed list of layers referenced by the manifest. - Layers []Descriptor `json:"layers"` - - // Subject is an optional link from the image manifest to another manifest forming an association between the image manifest and the other manifest. - Subject *Descriptor `json:"subject,omitempty"` - - // Annotations contains arbitrary metadata for the image manifest. - Annotations map[string]string `json:"annotations,omitempty"` -} diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/v1/mediatype.go b/vendor/github.com/opencontainers/image-spec/specs-go/v1/mediatype.go deleted file mode 100644 index ce8313e7..00000000 --- a/vendor/github.com/opencontainers/image-spec/specs-go/v1/mediatype.go +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2016 The Linux Foundation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package v1 - -const ( - // MediaTypeDescriptor specifies the media type for a content descriptor. - MediaTypeDescriptor = "application/vnd.oci.descriptor.v1+json" - - // MediaTypeLayoutHeader specifies the media type for the oci-layout. - MediaTypeLayoutHeader = "application/vnd.oci.layout.header.v1+json" - - // MediaTypeImageIndex specifies the media type for an image index. - MediaTypeImageIndex = "application/vnd.oci.image.index.v1+json" - - // MediaTypeImageManifest specifies the media type for an image manifest. - MediaTypeImageManifest = "application/vnd.oci.image.manifest.v1+json" - - // MediaTypeImageConfig specifies the media type for the image configuration. - MediaTypeImageConfig = "application/vnd.oci.image.config.v1+json" - - // MediaTypeEmptyJSON specifies the media type for an unused blob containing the value "{}". - MediaTypeEmptyJSON = "application/vnd.oci.empty.v1+json" -) - -const ( - // MediaTypeImageLayer is the media type used for layers referenced by the manifest. - MediaTypeImageLayer = "application/vnd.oci.image.layer.v1.tar" - - // MediaTypeImageLayerGzip is the media type used for gzipped layers - // referenced by the manifest. - MediaTypeImageLayerGzip = "application/vnd.oci.image.layer.v1.tar+gzip" - - // MediaTypeImageLayerZstd is the media type used for zstd compressed - // layers referenced by the manifest. - MediaTypeImageLayerZstd = "application/vnd.oci.image.layer.v1.tar+zstd" -) - -// Non-distributable layer media-types. -// -// Deprecated: Non-distributable layers are deprecated, and not recommended -// for future use. Implementations SHOULD NOT produce new non-distributable -// layers. -// https://github.com/opencontainers/image-spec/pull/965 -const ( - // MediaTypeImageLayerNonDistributable is the media type for layers referenced by - // the manifest but with distribution restrictions. - // - // Deprecated: Non-distributable layers are deprecated, and not recommended - // for future use. Implementations SHOULD NOT produce new non-distributable - // layers. - // https://github.com/opencontainers/image-spec/pull/965 - MediaTypeImageLayerNonDistributable = "application/vnd.oci.image.layer.nondistributable.v1.tar" - - // MediaTypeImageLayerNonDistributableGzip is the media type for - // gzipped layers referenced by the manifest but with distribution - // restrictions. - // - // Deprecated: Non-distributable layers are deprecated, and not recommended - // for future use. Implementations SHOULD NOT produce new non-distributable - // layers. - // https://github.com/opencontainers/image-spec/pull/965 - MediaTypeImageLayerNonDistributableGzip = "application/vnd.oci.image.layer.nondistributable.v1.tar+gzip" - - // MediaTypeImageLayerNonDistributableZstd is the media type for zstd - // compressed layers referenced by the manifest but with distribution - // restrictions. - // - // Deprecated: Non-distributable layers are deprecated, and not recommended - // for future use. Implementations SHOULD NOT produce new non-distributable - // layers. - // https://github.com/opencontainers/image-spec/pull/965 - MediaTypeImageLayerNonDistributableZstd = "application/vnd.oci.image.layer.nondistributable.v1.tar+zstd" -) diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/version.go b/vendor/github.com/opencontainers/image-spec/specs-go/version.go deleted file mode 100644 index 7069ae44..00000000 --- a/vendor/github.com/opencontainers/image-spec/specs-go/version.go +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2016 The Linux Foundation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package specs - -import "fmt" - -const ( - // VersionMajor is for an API incompatible changes - VersionMajor = 1 - // VersionMinor is for functionality in a backwards-compatible manner - VersionMinor = 1 - // VersionPatch is for backwards-compatible bug fixes - VersionPatch = 0 - - // VersionDev indicates development branch. Releases will be empty string. - VersionDev = "" -) - -// Version is the specification version that the package types support. -var Version = fmt.Sprintf("%d.%d.%d%s", VersionMajor, VersionMinor, VersionPatch, VersionDev) diff --git a/vendor/github.com/opencontainers/image-spec/specs-go/versioned.go b/vendor/github.com/opencontainers/image-spec/specs-go/versioned.go deleted file mode 100644 index 58a1510f..00000000 --- a/vendor/github.com/opencontainers/image-spec/specs-go/versioned.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2016 The Linux Foundation -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package specs - -// Versioned provides a struct with the manifest schemaVersion and mediaType. -// Incoming content with unknown schema version can be decoded against this -// struct to check the version. -type Versioned struct { - // SchemaVersion is the image manifest schema that this image follows - SchemaVersion int `json:"schemaVersion"` -} diff --git a/vendor/github.com/pkg/errors/.gitignore b/vendor/github.com/pkg/errors/.gitignore deleted file mode 100644 index daf913b1..00000000 --- a/vendor/github.com/pkg/errors/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Compiled Object files, Static and Dynamic libs (Shared Objects) -*.o -*.a -*.so - -# Folders -_obj -_test - -# Architecture specific extensions/prefixes -*.[568vq] -[568vq].out - -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* - -_testmain.go - -*.exe -*.test -*.prof diff --git a/vendor/github.com/pkg/errors/.travis.yml b/vendor/github.com/pkg/errors/.travis.yml deleted file mode 100644 index 9159de03..00000000 --- a/vendor/github.com/pkg/errors/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: go -go_import_path: github.com/pkg/errors -go: - - 1.11.x - - 1.12.x - - 1.13.x - - tip - -script: - - make check diff --git a/vendor/github.com/pkg/errors/LICENSE b/vendor/github.com/pkg/errors/LICENSE deleted file mode 100644 index 835ba3e7..00000000 --- a/vendor/github.com/pkg/errors/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright (c) 2015, Dave Cheney -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. - -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 HOLDER 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 --git a/vendor/github.com/pkg/errors/Makefile b/vendor/github.com/pkg/errors/Makefile deleted file mode 100644 index ce9d7cde..00000000 --- a/vendor/github.com/pkg/errors/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -PKGS := github.com/pkg/errors -SRCDIRS := $(shell go list -f '{{.Dir}}' $(PKGS)) -GO := go - -check: test vet gofmt misspell unconvert staticcheck ineffassign unparam - -test: - $(GO) test $(PKGS) - -vet: | test - $(GO) vet $(PKGS) - -staticcheck: - $(GO) get honnef.co/go/tools/cmd/staticcheck - staticcheck -checks all $(PKGS) - -misspell: - $(GO) get github.com/client9/misspell/cmd/misspell - misspell \ - -locale GB \ - -error \ - *.md *.go - -unconvert: - $(GO) get github.com/mdempsky/unconvert - unconvert -v $(PKGS) - -ineffassign: - $(GO) get github.com/gordonklaus/ineffassign - find $(SRCDIRS) -name '*.go' | xargs ineffassign - -pedantic: check errcheck - -unparam: - $(GO) get mvdan.cc/unparam - unparam ./... - -errcheck: - $(GO) get github.com/kisielk/errcheck - errcheck $(PKGS) - -gofmt: - @echo Checking code is gofmted - @test -z "$(shell gofmt -s -l -d -e $(SRCDIRS) | tee /dev/stderr)" diff --git a/vendor/github.com/pkg/errors/README.md b/vendor/github.com/pkg/errors/README.md deleted file mode 100644 index 54dfdcb1..00000000 --- a/vendor/github.com/pkg/errors/README.md +++ /dev/null @@ -1,59 +0,0 @@ -# errors [![Travis-CI](https://travis-ci.org/pkg/errors.svg)](https://travis-ci.org/pkg/errors) [![AppVeyor](https://ci.appveyor.com/api/projects/status/b98mptawhudj53ep/branch/master?svg=true)](https://ci.appveyor.com/project/davecheney/errors/branch/master) [![GoDoc](https://godoc.org/github.com/pkg/errors?status.svg)](http://godoc.org/github.com/pkg/errors) [![Report card](https://goreportcard.com/badge/github.com/pkg/errors)](https://goreportcard.com/report/github.com/pkg/errors) [![Sourcegraph](https://sourcegraph.com/github.com/pkg/errors/-/badge.svg)](https://sourcegraph.com/github.com/pkg/errors?badge) - -Package errors provides simple error handling primitives. - -`go get github.com/pkg/errors` - -The traditional error handling idiom in Go is roughly akin to -```go -if err != nil { - return err -} -``` -which applied recursively up the call stack results in error reports without context or debugging information. The errors package allows programmers to add context to the failure path in their code in a way that does not destroy the original value of the error. - -## Adding context to an error - -The errors.Wrap function returns a new error that adds context to the original error. For example -```go -_, err := ioutil.ReadAll(r) -if err != nil { - return errors.Wrap(err, "read failed") -} -``` -## Retrieving the cause of an error - -Using `errors.Wrap` constructs a stack of errors, adding context to the preceding error. Depending on the nature of the error it may be necessary to reverse the operation of errors.Wrap to retrieve the original error for inspection. Any error value which implements this interface can be inspected by `errors.Cause`. -```go -type causer interface { - Cause() error -} -``` -`errors.Cause` will recursively retrieve the topmost error which does not implement `causer`, which is assumed to be the original cause. For example: -```go -switch err := errors.Cause(err).(type) { -case *MyError: - // handle specifically -default: - // unknown error -} -``` - -[Read the package documentation for more information](https://godoc.org/github.com/pkg/errors). - -## Roadmap - -With the upcoming [Go2 error proposals](https://go.googlesource.com/proposal/+/master/design/go2draft.md) this package is moving into maintenance mode. The roadmap for a 1.0 release is as follows: - -- 0.9. Remove pre Go 1.9 and Go 1.10 support, address outstanding pull requests (if possible) -- 1.0. Final release. - -## Contributing - -Because of the Go2 errors changes, this package is not accepting proposals for new functionality. With that said, we welcome pull requests, bug fixes and issue reports. - -Before sending a PR, please discuss your change by raising an issue. - -## License - -BSD-2-Clause diff --git a/vendor/github.com/pkg/errors/appveyor.yml b/vendor/github.com/pkg/errors/appveyor.yml deleted file mode 100644 index a932eade..00000000 --- a/vendor/github.com/pkg/errors/appveyor.yml +++ /dev/null @@ -1,32 +0,0 @@ -version: build-{build}.{branch} - -clone_folder: C:\gopath\src\github.com\pkg\errors -shallow_clone: true # for startup speed - -environment: - GOPATH: C:\gopath - -platform: - - x64 - -# http://www.appveyor.com/docs/installed-software -install: - # some helpful output for debugging builds - - go version - - go env - # pre-installed MinGW at C:\MinGW is 32bit only - # but MSYS2 at C:\msys64 has mingw64 - - set PATH=C:\msys64\mingw64\bin;%PATH% - - gcc --version - - g++ --version - -build_script: - - go install -v ./... - -test_script: - - set PATH=C:\gopath\bin;%PATH% - - go test -v ./... - -#artifacts: -# - path: '%GOPATH%\bin\*.exe' -deploy: off diff --git a/vendor/github.com/pkg/errors/errors.go b/vendor/github.com/pkg/errors/errors.go deleted file mode 100644 index 161aea25..00000000 --- a/vendor/github.com/pkg/errors/errors.go +++ /dev/null @@ -1,288 +0,0 @@ -// Package errors provides simple error handling primitives. -// -// The traditional error handling idiom in Go is roughly akin to -// -// if err != nil { -// return err -// } -// -// which when applied recursively up the call stack results in error reports -// without context or debugging information. The errors package allows -// programmers to add context to the failure path in their code in a way -// that does not destroy the original value of the error. -// -// Adding context to an error -// -// The errors.Wrap function returns a new error that adds context to the -// original error by recording a stack trace at the point Wrap is called, -// together with the supplied message. For example -// -// _, err := ioutil.ReadAll(r) -// if err != nil { -// return errors.Wrap(err, "read failed") -// } -// -// If additional control is required, the errors.WithStack and -// errors.WithMessage functions destructure errors.Wrap into its component -// operations: annotating an error with a stack trace and with a message, -// respectively. -// -// Retrieving the cause of an error -// -// Using errors.Wrap constructs a stack of errors, adding context to the -// preceding error. Depending on the nature of the error it may be necessary -// to reverse the operation of errors.Wrap to retrieve the original error -// for inspection. Any error value which implements this interface -// -// type causer interface { -// Cause() error -// } -// -// can be inspected by errors.Cause. errors.Cause will recursively retrieve -// the topmost error that does not implement causer, which is assumed to be -// the original cause. For example: -// -// switch err := errors.Cause(err).(type) { -// case *MyError: -// // handle specifically -// default: -// // unknown error -// } -// -// Although the causer interface is not exported by this package, it is -// considered a part of its stable public interface. -// -// Formatted printing of errors -// -// All error values returned from this package implement fmt.Formatter and can -// be formatted by the fmt package. The following verbs are supported: -// -// %s print the error. If the error has a Cause it will be -// printed recursively. -// %v see %s -// %+v extended format. Each Frame of the error's StackTrace will -// be printed in detail. -// -// Retrieving the stack trace of an error or wrapper -// -// New, Errorf, Wrap, and Wrapf record a stack trace at the point they are -// invoked. This information can be retrieved with the following interface: -// -// type stackTracer interface { -// StackTrace() errors.StackTrace -// } -// -// The returned errors.StackTrace type is defined as -// -// type StackTrace []Frame -// -// The Frame type represents a call site in the stack trace. Frame supports -// the fmt.Formatter interface that can be used for printing information about -// the stack trace of this error. For example: -// -// if err, ok := err.(stackTracer); ok { -// for _, f := range err.StackTrace() { -// fmt.Printf("%+s:%d\n", f, f) -// } -// } -// -// Although the stackTracer interface is not exported by this package, it is -// considered a part of its stable public interface. -// -// See the documentation for Frame.Format for more details. -package errors - -import ( - "fmt" - "io" -) - -// New returns an error with the supplied message. -// New also records the stack trace at the point it was called. -func New(message string) error { - return &fundamental{ - msg: message, - stack: callers(), - } -} - -// Errorf formats according to a format specifier and returns the string -// as a value that satisfies error. -// Errorf also records the stack trace at the point it was called. -func Errorf(format string, args ...interface{}) error { - return &fundamental{ - msg: fmt.Sprintf(format, args...), - stack: callers(), - } -} - -// fundamental is an error that has a message and a stack, but no caller. -type fundamental struct { - msg string - *stack -} - -func (f *fundamental) Error() string { return f.msg } - -func (f *fundamental) Format(s fmt.State, verb rune) { - switch verb { - case 'v': - if s.Flag('+') { - io.WriteString(s, f.msg) - f.stack.Format(s, verb) - return - } - fallthrough - case 's': - io.WriteString(s, f.msg) - case 'q': - fmt.Fprintf(s, "%q", f.msg) - } -} - -// WithStack annotates err with a stack trace at the point WithStack was called. -// If err is nil, WithStack returns nil. -func WithStack(err error) error { - if err == nil { - return nil - } - return &withStack{ - err, - callers(), - } -} - -type withStack struct { - error - *stack -} - -func (w *withStack) Cause() error { return w.error } - -// Unwrap provides compatibility for Go 1.13 error chains. -func (w *withStack) Unwrap() error { return w.error } - -func (w *withStack) Format(s fmt.State, verb rune) { - switch verb { - case 'v': - if s.Flag('+') { - fmt.Fprintf(s, "%+v", w.Cause()) - w.stack.Format(s, verb) - return - } - fallthrough - case 's': - io.WriteString(s, w.Error()) - case 'q': - fmt.Fprintf(s, "%q", w.Error()) - } -} - -// Wrap returns an error annotating err with a stack trace -// at the point Wrap is called, and the supplied message. -// If err is nil, Wrap returns nil. -func Wrap(err error, message string) error { - if err == nil { - return nil - } - err = &withMessage{ - cause: err, - msg: message, - } - return &withStack{ - err, - callers(), - } -} - -// Wrapf returns an error annotating err with a stack trace -// at the point Wrapf is called, and the format specifier. -// If err is nil, Wrapf returns nil. -func Wrapf(err error, format string, args ...interface{}) error { - if err == nil { - return nil - } - err = &withMessage{ - cause: err, - msg: fmt.Sprintf(format, args...), - } - return &withStack{ - err, - callers(), - } -} - -// WithMessage annotates err with a new message. -// If err is nil, WithMessage returns nil. -func WithMessage(err error, message string) error { - if err == nil { - return nil - } - return &withMessage{ - cause: err, - msg: message, - } -} - -// WithMessagef annotates err with the format specifier. -// If err is nil, WithMessagef returns nil. -func WithMessagef(err error, format string, args ...interface{}) error { - if err == nil { - return nil - } - return &withMessage{ - cause: err, - msg: fmt.Sprintf(format, args...), - } -} - -type withMessage struct { - cause error - msg string -} - -func (w *withMessage) Error() string { return w.msg + ": " + w.cause.Error() } -func (w *withMessage) Cause() error { return w.cause } - -// Unwrap provides compatibility for Go 1.13 error chains. -func (w *withMessage) Unwrap() error { return w.cause } - -func (w *withMessage) Format(s fmt.State, verb rune) { - switch verb { - case 'v': - if s.Flag('+') { - fmt.Fprintf(s, "%+v\n", w.Cause()) - io.WriteString(s, w.msg) - return - } - fallthrough - case 's', 'q': - io.WriteString(s, w.Error()) - } -} - -// Cause returns the underlying cause of the error, if possible. -// An error value has a cause if it implements the following -// interface: -// -// type causer interface { -// Cause() error -// } -// -// If the error does not implement Cause, the original error will -// be returned. If the error is nil, nil will be returned without further -// investigation. -func Cause(err error) error { - type causer interface { - Cause() error - } - - for err != nil { - cause, ok := err.(causer) - if !ok { - break - } - err = cause.Cause() - } - return err -} diff --git a/vendor/github.com/pkg/errors/go113.go b/vendor/github.com/pkg/errors/go113.go deleted file mode 100644 index be0d10d0..00000000 --- a/vendor/github.com/pkg/errors/go113.go +++ /dev/null @@ -1,38 +0,0 @@ -// +build go1.13 - -package errors - -import ( - stderrors "errors" -) - -// Is reports whether any error in err's chain matches target. -// -// The chain consists of err itself followed by the sequence of errors obtained by -// repeatedly calling Unwrap. -// -// An error is considered to match a target if it is equal to that target or if -// it implements a method Is(error) bool such that Is(target) returns true. -func Is(err, target error) bool { return stderrors.Is(err, target) } - -// As finds the first error in err's chain that matches target, and if so, sets -// target to that error value and returns true. -// -// The chain consists of err itself followed by the sequence of errors obtained by -// repeatedly calling Unwrap. -// -// An error matches target if the error's concrete value is assignable to the value -// pointed to by target, or if the error has a method As(interface{}) bool such that -// As(target) returns true. In the latter case, the As method is responsible for -// setting target. -// -// As will panic if target is not a non-nil pointer to either a type that implements -// error, or to any interface type. As returns false if err is nil. -func As(err error, target interface{}) bool { return stderrors.As(err, target) } - -// Unwrap returns the result of calling the Unwrap method on err, if err's -// type contains an Unwrap method returning error. -// Otherwise, Unwrap returns nil. -func Unwrap(err error) error { - return stderrors.Unwrap(err) -} diff --git a/vendor/github.com/pkg/errors/stack.go b/vendor/github.com/pkg/errors/stack.go deleted file mode 100644 index 779a8348..00000000 --- a/vendor/github.com/pkg/errors/stack.go +++ /dev/null @@ -1,177 +0,0 @@ -package errors - -import ( - "fmt" - "io" - "path" - "runtime" - "strconv" - "strings" -) - -// Frame represents a program counter inside a stack frame. -// For historical reasons if Frame is interpreted as a uintptr -// its value represents the program counter + 1. -type Frame uintptr - -// pc returns the program counter for this frame; -// multiple frames may have the same PC value. -func (f Frame) pc() uintptr { return uintptr(f) - 1 } - -// file returns the full path to the file that contains the -// function for this Frame's pc. -func (f Frame) file() string { - fn := runtime.FuncForPC(f.pc()) - if fn == nil { - return "unknown" - } - file, _ := fn.FileLine(f.pc()) - return file -} - -// line returns the line number of source code of the -// function for this Frame's pc. -func (f Frame) line() int { - fn := runtime.FuncForPC(f.pc()) - if fn == nil { - return 0 - } - _, line := fn.FileLine(f.pc()) - return line -} - -// name returns the name of this function, if known. -func (f Frame) name() string { - fn := runtime.FuncForPC(f.pc()) - if fn == nil { - return "unknown" - } - return fn.Name() -} - -// Format formats the frame according to the fmt.Formatter interface. -// -// %s source file -// %d source line -// %n function name -// %v equivalent to %s:%d -// -// Format accepts flags that alter the printing of some verbs, as follows: -// -// %+s function name and path of source file relative to the compile time -// GOPATH separated by \n\t (\n\t) -// %+v equivalent to %+s:%d -func (f Frame) Format(s fmt.State, verb rune) { - switch verb { - case 's': - switch { - case s.Flag('+'): - io.WriteString(s, f.name()) - io.WriteString(s, "\n\t") - io.WriteString(s, f.file()) - default: - io.WriteString(s, path.Base(f.file())) - } - case 'd': - io.WriteString(s, strconv.Itoa(f.line())) - case 'n': - io.WriteString(s, funcname(f.name())) - case 'v': - f.Format(s, 's') - io.WriteString(s, ":") - f.Format(s, 'd') - } -} - -// MarshalText formats a stacktrace Frame as a text string. The output is the -// same as that of fmt.Sprintf("%+v", f), but without newlines or tabs. -func (f Frame) MarshalText() ([]byte, error) { - name := f.name() - if name == "unknown" { - return []byte(name), nil - } - return []byte(fmt.Sprintf("%s %s:%d", name, f.file(), f.line())), nil -} - -// StackTrace is stack of Frames from innermost (newest) to outermost (oldest). -type StackTrace []Frame - -// Format formats the stack of Frames according to the fmt.Formatter interface. -// -// %s lists source files for each Frame in the stack -// %v lists the source file and line number for each Frame in the stack -// -// Format accepts flags that alter the printing of some verbs, as follows: -// -// %+v Prints filename, function, and line number for each Frame in the stack. -func (st StackTrace) Format(s fmt.State, verb rune) { - switch verb { - case 'v': - switch { - case s.Flag('+'): - for _, f := range st { - io.WriteString(s, "\n") - f.Format(s, verb) - } - case s.Flag('#'): - fmt.Fprintf(s, "%#v", []Frame(st)) - default: - st.formatSlice(s, verb) - } - case 's': - st.formatSlice(s, verb) - } -} - -// formatSlice will format this StackTrace into the given buffer as a slice of -// Frame, only valid when called with '%s' or '%v'. -func (st StackTrace) formatSlice(s fmt.State, verb rune) { - io.WriteString(s, "[") - for i, f := range st { - if i > 0 { - io.WriteString(s, " ") - } - f.Format(s, verb) - } - io.WriteString(s, "]") -} - -// stack represents a stack of program counters. -type stack []uintptr - -func (s *stack) Format(st fmt.State, verb rune) { - switch verb { - case 'v': - switch { - case st.Flag('+'): - for _, pc := range *s { - f := Frame(pc) - fmt.Fprintf(st, "\n%+v", f) - } - } - } -} - -func (s *stack) StackTrace() StackTrace { - f := make([]Frame, len(*s)) - for i := 0; i < len(f); i++ { - f[i] = Frame((*s)[i]) - } - return f -} - -func callers() *stack { - const depth = 32 - var pcs [depth]uintptr - n := runtime.Callers(3, pcs[:]) - var st stack = pcs[0:n] - return &st -} - -// funcname removes the path prefix component of a function's name reported by func.Name(). -func funcname(name string) string { - i := strings.LastIndex(name, "/") - name = name[i+1:] - i = strings.Index(name, ".") - return name[i+1:] -} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/LICENSE b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/LICENSE deleted file mode 100644 index 261eeb9e..00000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/client.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/client.go deleted file mode 100644 index 6aae83bf..00000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/client.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" - -import ( - "context" - "io" - "net/http" - "net/url" - "strings" -) - -// DefaultClient is the default Client and is used by Get, Head, Post and PostForm. -// Please be careful of initialization order - for example, if you change -// the global propagator, the DefaultClient might still be using the old one. -var DefaultClient = &http.Client{Transport: NewTransport(http.DefaultTransport)} - -// Get is a convenient replacement for http.Get that adds a span around the request. -func Get(ctx context.Context, targetURL string) (resp *http.Response, err error) { - req, err := http.NewRequestWithContext(ctx, "GET", targetURL, nil) - if err != nil { - return nil, err - } - return DefaultClient.Do(req) -} - -// Head is a convenient replacement for http.Head that adds a span around the request. -func Head(ctx context.Context, targetURL string) (resp *http.Response, err error) { - req, err := http.NewRequestWithContext(ctx, "HEAD", targetURL, nil) - if err != nil { - return nil, err - } - return DefaultClient.Do(req) -} - -// Post is a convenient replacement for http.Post that adds a span around the request. -func Post(ctx context.Context, targetURL, contentType string, body io.Reader) (resp *http.Response, err error) { - req, err := http.NewRequestWithContext(ctx, "POST", targetURL, body) - if err != nil { - return nil, err - } - req.Header.Set("Content-Type", contentType) - return DefaultClient.Do(req) -} - -// PostForm is a convenient replacement for http.PostForm that adds a span around the request. -func PostForm(ctx context.Context, targetURL string, data url.Values) (resp *http.Response, err error) { - return Post(ctx, targetURL, "application/x-www-form-urlencoded", strings.NewReader(data.Encode())) -} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go deleted file mode 100644 index 214acaf5..00000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/common.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" - -import ( - "net/http" - - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/trace" -) - -// Attribute keys that can be added to a span. -const ( - ReadBytesKey = attribute.Key("http.read_bytes") // if anything was read from the request body, the total number of bytes read - ReadErrorKey = attribute.Key("http.read_error") // If an error occurred while reading a request, the string of the error (io.EOF is not recorded) - WroteBytesKey = attribute.Key("http.wrote_bytes") // if anything was written to the response writer, the total number of bytes written - WriteErrorKey = attribute.Key("http.write_error") // if an error occurred while writing a reply, the string of the error (io.EOF is not recorded) -) - -// Server HTTP metrics. -const ( - serverRequestSize = "http.server.request.size" // Incoming request bytes total - serverResponseSize = "http.server.response.size" // Incoming response bytes total - serverDuration = "http.server.duration" // Incoming end to end duration, milliseconds -) - -// Client HTTP metrics. -const ( - clientRequestSize = "http.client.request.size" // Outgoing request bytes total - clientResponseSize = "http.client.response.size" // Outgoing response bytes total - clientDuration = "http.client.duration" // Outgoing end to end duration, milliseconds -) - -// Filter is a predicate used to determine whether a given http.request should -// be traced. A Filter must return true if the request should be traced. -type Filter func(*http.Request) bool - -func newTracer(tp trace.TracerProvider) trace.Tracer { - return tp.Tracer(ScopeName, trace.WithInstrumentationVersion(Version())) -} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/config.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/config.go deleted file mode 100644 index f0a9bb9e..00000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/config.go +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" - -import ( - "context" - "net/http" - "net/http/httptrace" - - "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/propagation" - "go.opentelemetry.io/otel/trace" -) - -// ScopeName is the instrumentation scope name. -const ScopeName = "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" - -// config represents the configuration options available for the http.Handler -// and http.Transport types. -type config struct { - ServerName string - Tracer trace.Tracer - Meter metric.Meter - Propagators propagation.TextMapPropagator - SpanStartOptions []trace.SpanStartOption - PublicEndpoint bool - PublicEndpointFn func(*http.Request) bool - ReadEvent bool - WriteEvent bool - Filters []Filter - SpanNameFormatter func(string, *http.Request) string - ClientTrace func(context.Context) *httptrace.ClientTrace - - TracerProvider trace.TracerProvider - MeterProvider metric.MeterProvider -} - -// Option interface used for setting optional config properties. -type Option interface { - apply(*config) -} - -type optionFunc func(*config) - -func (o optionFunc) apply(c *config) { - o(c) -} - -// newConfig creates a new config struct and applies opts to it. -func newConfig(opts ...Option) *config { - c := &config{ - Propagators: otel.GetTextMapPropagator(), - MeterProvider: otel.GetMeterProvider(), - } - for _, opt := range opts { - opt.apply(c) - } - - // Tracer is only initialized if manually specified. Otherwise, can be passed with the tracing context. - if c.TracerProvider != nil { - c.Tracer = newTracer(c.TracerProvider) - } - - c.Meter = c.MeterProvider.Meter( - ScopeName, - metric.WithInstrumentationVersion(Version()), - ) - - return c -} - -// WithTracerProvider specifies a tracer provider to use for creating a tracer. -// If none is specified, the global provider is used. -func WithTracerProvider(provider trace.TracerProvider) Option { - return optionFunc(func(cfg *config) { - if provider != nil { - cfg.TracerProvider = provider - } - }) -} - -// WithMeterProvider specifies a meter provider to use for creating a meter. -// If none is specified, the global provider is used. -func WithMeterProvider(provider metric.MeterProvider) Option { - return optionFunc(func(cfg *config) { - if provider != nil { - cfg.MeterProvider = provider - } - }) -} - -// WithPublicEndpoint configures the Handler to link the span with an incoming -// span context. If this option is not provided, then the association is a child -// association instead of a link. -func WithPublicEndpoint() Option { - return optionFunc(func(c *config) { - c.PublicEndpoint = true - }) -} - -// WithPublicEndpointFn runs with every request, and allows conditionally -// configuring the Handler to link the span with an incoming span context. If -// this option is not provided or returns false, then the association is a -// child association instead of a link. -// Note: WithPublicEndpoint takes precedence over WithPublicEndpointFn. -func WithPublicEndpointFn(fn func(*http.Request) bool) Option { - return optionFunc(func(c *config) { - c.PublicEndpointFn = fn - }) -} - -// WithPropagators configures specific propagators. If this -// option isn't specified, then the global TextMapPropagator is used. -func WithPropagators(ps propagation.TextMapPropagator) Option { - return optionFunc(func(c *config) { - if ps != nil { - c.Propagators = ps - } - }) -} - -// WithSpanOptions configures an additional set of -// trace.SpanOptions, which are applied to each new span. -func WithSpanOptions(opts ...trace.SpanStartOption) Option { - return optionFunc(func(c *config) { - c.SpanStartOptions = append(c.SpanStartOptions, opts...) - }) -} - -// WithFilter adds a filter to the list of filters used by the handler. -// If any filter indicates to exclude a request then the request will not be -// traced. All filters must allow a request to be traced for a Span to be created. -// If no filters are provided then all requests are traced. -// Filters will be invoked for each processed request, it is advised to make them -// simple and fast. -func WithFilter(f Filter) Option { - return optionFunc(func(c *config) { - c.Filters = append(c.Filters, f) - }) -} - -type event int - -// Different types of events that can be recorded, see WithMessageEvents. -const ( - ReadEvents event = iota - WriteEvents -) - -// WithMessageEvents configures the Handler to record the specified events -// (span.AddEvent) on spans. By default only summary attributes are added at the -// end of the request. -// -// Valid events are: -// - ReadEvents: Record the number of bytes read after every http.Request.Body.Read -// using the ReadBytesKey -// - WriteEvents: Record the number of bytes written after every http.ResponeWriter.Write -// using the WriteBytesKey -func WithMessageEvents(events ...event) Option { - return optionFunc(func(c *config) { - for _, e := range events { - switch e { - case ReadEvents: - c.ReadEvent = true - case WriteEvents: - c.WriteEvent = true - } - } - }) -} - -// WithSpanNameFormatter takes a function that will be called on every -// request and the returned string will become the Span Name. -func WithSpanNameFormatter(f func(operation string, r *http.Request) string) Option { - return optionFunc(func(c *config) { - c.SpanNameFormatter = f - }) -} - -// WithClientTrace takes a function that returns client trace instance that will be -// applied to the requests sent through the otelhttp Transport. -func WithClientTrace(f func(context.Context) *httptrace.ClientTrace) Option { - return optionFunc(func(c *config) { - c.ClientTrace = f - }) -} - -// WithServerName returns an Option that sets the name of the (virtual) server -// handling requests. -func WithServerName(server string) Option { - return optionFunc(func(c *config) { - c.ServerName = server - }) -} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/doc.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/doc.go deleted file mode 100644 index 56b24b98..00000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/doc.go +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Package otelhttp provides an http.Handler and functions that are intended -// to be used to add tracing by wrapping existing handlers (with Handler) and -// routes WithRouteTag. -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go deleted file mode 100644 index d01bdccf..00000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/handler.go +++ /dev/null @@ -1,258 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" - -import ( - "net/http" - "time" - - "github.com/felixge/httpsnoop" - - "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv" - "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil" - "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/propagation" - "go.opentelemetry.io/otel/trace" -) - -// middleware is an http middleware which wraps the next handler in a span. -type middleware struct { - operation string - server string - - tracer trace.Tracer - meter metric.Meter - propagators propagation.TextMapPropagator - spanStartOptions []trace.SpanStartOption - readEvent bool - writeEvent bool - filters []Filter - spanNameFormatter func(string, *http.Request) string - publicEndpoint bool - publicEndpointFn func(*http.Request) bool - - traceSemconv semconv.HTTPServer - requestBytesCounter metric.Int64Counter - responseBytesCounter metric.Int64Counter - serverLatencyMeasure metric.Float64Histogram -} - -func defaultHandlerFormatter(operation string, _ *http.Request) string { - return operation -} - -// NewHandler wraps the passed handler in a span named after the operation and -// enriches it with metrics. -func NewHandler(handler http.Handler, operation string, opts ...Option) http.Handler { - return NewMiddleware(operation, opts...)(handler) -} - -// NewMiddleware returns a tracing and metrics instrumentation middleware. -// The handler returned by the middleware wraps a handler -// in a span named after the operation and enriches it with metrics. -func NewMiddleware(operation string, opts ...Option) func(http.Handler) http.Handler { - h := middleware{ - operation: operation, - - traceSemconv: semconv.NewHTTPServer(), - } - - defaultOpts := []Option{ - WithSpanOptions(trace.WithSpanKind(trace.SpanKindServer)), - WithSpanNameFormatter(defaultHandlerFormatter), - } - - c := newConfig(append(defaultOpts, opts...)...) - h.configure(c) - h.createMeasures() - - return func(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - h.serveHTTP(w, r, next) - }) - } -} - -func (h *middleware) configure(c *config) { - h.tracer = c.Tracer - h.meter = c.Meter - h.propagators = c.Propagators - h.spanStartOptions = c.SpanStartOptions - h.readEvent = c.ReadEvent - h.writeEvent = c.WriteEvent - h.filters = c.Filters - h.spanNameFormatter = c.SpanNameFormatter - h.publicEndpoint = c.PublicEndpoint - h.publicEndpointFn = c.PublicEndpointFn - h.server = c.ServerName -} - -func handleErr(err error) { - if err != nil { - otel.Handle(err) - } -} - -func (h *middleware) createMeasures() { - var err error - h.requestBytesCounter, err = h.meter.Int64Counter( - serverRequestSize, - metric.WithUnit("By"), - metric.WithDescription("Measures the size of HTTP request messages."), - ) - handleErr(err) - - h.responseBytesCounter, err = h.meter.Int64Counter( - serverResponseSize, - metric.WithUnit("By"), - metric.WithDescription("Measures the size of HTTP response messages."), - ) - handleErr(err) - - h.serverLatencyMeasure, err = h.meter.Float64Histogram( - serverDuration, - metric.WithUnit("ms"), - metric.WithDescription("Measures the duration of inbound HTTP requests."), - ) - handleErr(err) -} - -// serveHTTP sets up tracing and calls the given next http.Handler with the span -// context injected into the request context. -func (h *middleware) serveHTTP(w http.ResponseWriter, r *http.Request, next http.Handler) { - requestStartTime := time.Now() - for _, f := range h.filters { - if !f(r) { - // Simply pass through to the handler if a filter rejects the request - next.ServeHTTP(w, r) - return - } - } - - ctx := h.propagators.Extract(r.Context(), propagation.HeaderCarrier(r.Header)) - opts := []trace.SpanStartOption{ - trace.WithAttributes(h.traceSemconv.RequestTraceAttrs(h.server, r)...), - } - - opts = append(opts, h.spanStartOptions...) - if h.publicEndpoint || (h.publicEndpointFn != nil && h.publicEndpointFn(r.WithContext(ctx))) { - opts = append(opts, trace.WithNewRoot()) - // Linking incoming span context if any for public endpoint. - if s := trace.SpanContextFromContext(ctx); s.IsValid() && s.IsRemote() { - opts = append(opts, trace.WithLinks(trace.Link{SpanContext: s})) - } - } - - tracer := h.tracer - - if tracer == nil { - if span := trace.SpanFromContext(r.Context()); span.SpanContext().IsValid() { - tracer = newTracer(span.TracerProvider()) - } else { - tracer = newTracer(otel.GetTracerProvider()) - } - } - - ctx, span := tracer.Start(ctx, h.spanNameFormatter(h.operation, r), opts...) - defer span.End() - - readRecordFunc := func(int64) {} - if h.readEvent { - readRecordFunc = func(n int64) { - span.AddEvent("read", trace.WithAttributes(ReadBytesKey.Int64(n))) - } - } - - var bw bodyWrapper - // if request body is nil or NoBody, we don't want to mutate the body as it - // will affect the identity of it in an unforeseeable way because we assert - // ReadCloser fulfills a certain interface and it is indeed nil or NoBody. - if r.Body != nil && r.Body != http.NoBody { - bw.ReadCloser = r.Body - bw.record = readRecordFunc - r.Body = &bw - } - - writeRecordFunc := func(int64) {} - if h.writeEvent { - writeRecordFunc = func(n int64) { - span.AddEvent("write", trace.WithAttributes(WroteBytesKey.Int64(n))) - } - } - - rww := &respWriterWrapper{ - ResponseWriter: w, - record: writeRecordFunc, - ctx: ctx, - props: h.propagators, - statusCode: http.StatusOK, // default status code in case the Handler doesn't write anything - } - - // Wrap w to use our ResponseWriter methods while also exposing - // other interfaces that w may implement (http.CloseNotifier, - // http.Flusher, http.Hijacker, http.Pusher, io.ReaderFrom). - - w = httpsnoop.Wrap(w, httpsnoop.Hooks{ - Header: func(httpsnoop.HeaderFunc) httpsnoop.HeaderFunc { - return rww.Header - }, - Write: func(httpsnoop.WriteFunc) httpsnoop.WriteFunc { - return rww.Write - }, - WriteHeader: func(httpsnoop.WriteHeaderFunc) httpsnoop.WriteHeaderFunc { - return rww.WriteHeader - }, - Flush: func(httpsnoop.FlushFunc) httpsnoop.FlushFunc { - return rww.Flush - }, - }) - - labeler, found := LabelerFromContext(ctx) - if !found { - ctx = ContextWithLabeler(ctx, labeler) - } - - next.ServeHTTP(w, r.WithContext(ctx)) - - span.SetStatus(semconv.ServerStatus(rww.statusCode)) - span.SetAttributes(h.traceSemconv.ResponseTraceAttrs(semconv.ResponseTelemetry{ - StatusCode: rww.statusCode, - ReadBytes: bw.read.Load(), - ReadError: bw.err, - WriteBytes: rww.written, - WriteError: rww.err, - })...) - - // Add metrics - attributes := append(labeler.Get(), semconvutil.HTTPServerRequestMetrics(h.server, r)...) - if rww.statusCode > 0 { - attributes = append(attributes, semconv.HTTPStatusCode(rww.statusCode)) - } - o := metric.WithAttributeSet(attribute.NewSet(attributes...)) - addOpts := []metric.AddOption{o} // Allocate vararg slice once. - h.requestBytesCounter.Add(ctx, bw.read.Load(), addOpts...) - h.responseBytesCounter.Add(ctx, rww.written, addOpts...) - - // Use floating point division here for higher precision (instead of Millisecond method). - elapsedTime := float64(time.Since(requestStartTime)) / float64(time.Millisecond) - - h.serverLatencyMeasure.Record(ctx, elapsedTime, o) -} - -// WithRouteTag annotates spans and metrics with the provided route name -// with HTTP route attribute. -func WithRouteTag(route string, h http.Handler) http.Handler { - attr := semconv.NewHTTPServer().Route(route) - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - span := trace.SpanFromContext(r.Context()) - span.SetAttributes(attr) - - labeler, _ := LabelerFromContext(r.Context()) - labeler.Add(attr) - - h.ServeHTTP(w, r) - }) -} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/env.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/env.go deleted file mode 100644 index 3ec0ad00..00000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/env.go +++ /dev/null @@ -1,82 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package semconv // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv" - -import ( - "fmt" - "net/http" - "os" - "strings" - - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/codes" -) - -type ResponseTelemetry struct { - StatusCode int - ReadBytes int64 - ReadError error - WriteBytes int64 - WriteError error -} - -type HTTPServer struct { - duplicate bool -} - -// RequestTraceAttrs returns trace attributes for an HTTP request received by a -// server. -// -// The server must be the primary server name if it is known. For example this -// would be the ServerName directive -// (https://httpd.apache.org/docs/2.4/mod/core.html#servername) for an Apache -// server, and the server_name directive -// (http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name) for an -// nginx server. More generically, the primary server name would be the host -// header value that matches the default virtual host of an HTTP server. It -// should include the host identifier and if a port is used to route to the -// server that port identifier should be included as an appropriate port -// suffix. -// -// If the primary server name is not known, server should be an empty string. -// The req Host will be used to determine the server instead. -func (s HTTPServer) RequestTraceAttrs(server string, req *http.Request) []attribute.KeyValue { - if s.duplicate { - return append(oldHTTPServer{}.RequestTraceAttrs(server, req), newHTTPServer{}.RequestTraceAttrs(server, req)...) - } - return oldHTTPServer{}.RequestTraceAttrs(server, req) -} - -// ResponseTraceAttrs returns trace attributes for telemetry from an HTTP response. -// -// If any of the fields in the ResponseTelemetry are not set the attribute will be omitted. -func (s HTTPServer) ResponseTraceAttrs(resp ResponseTelemetry) []attribute.KeyValue { - if s.duplicate { - return append(oldHTTPServer{}.ResponseTraceAttrs(resp), newHTTPServer{}.ResponseTraceAttrs(resp)...) - } - return oldHTTPServer{}.ResponseTraceAttrs(resp) -} - -// Route returns the attribute for the route. -func (s HTTPServer) Route(route string) attribute.KeyValue { - return oldHTTPServer{}.Route(route) -} - -func NewHTTPServer() HTTPServer { - env := strings.ToLower(os.Getenv("OTEL_HTTP_CLIENT_COMPATIBILITY_MODE")) - return HTTPServer{duplicate: env == "http/dup"} -} - -// ServerStatus returns a span status code and message for an HTTP status code -// value returned by a server. Status codes in the 400-499 range are not -// returned as errors. -func ServerStatus(code int) (codes.Code, string) { - if code < 100 || code >= 600 { - return codes.Error, fmt.Sprintf("Invalid HTTP status code %d", code) - } - if code >= 500 { - return codes.Error, "" - } - return codes.Unset, "" -} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/util.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/util.go deleted file mode 100644 index e7f29376..00000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/util.go +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package semconv // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv" - -import ( - "net" - "net/http" - "strconv" - "strings" - - "go.opentelemetry.io/otel/attribute" - semconvNew "go.opentelemetry.io/otel/semconv/v1.24.0" -) - -// splitHostPort splits a network address hostport of the form "host", -// "host%zone", "[host]", "[host%zone], "host:port", "host%zone:port", -// "[host]:port", "[host%zone]:port", or ":port" into host or host%zone and -// port. -// -// An empty host is returned if it is not provided or unparsable. A negative -// port is returned if it is not provided or unparsable. -func splitHostPort(hostport string) (host string, port int) { - port = -1 - - if strings.HasPrefix(hostport, "[") { - addrEnd := strings.LastIndex(hostport, "]") - if addrEnd < 0 { - // Invalid hostport. - return - } - if i := strings.LastIndex(hostport[addrEnd:], ":"); i < 0 { - host = hostport[1:addrEnd] - return - } - } else { - if i := strings.LastIndex(hostport, ":"); i < 0 { - host = hostport - return - } - } - - host, pStr, err := net.SplitHostPort(hostport) - if err != nil { - return - } - - p, err := strconv.ParseUint(pStr, 10, 16) - if err != nil { - return - } - return host, int(p) -} - -func requiredHTTPPort(https bool, port int) int { // nolint:revive - if https { - if port > 0 && port != 443 { - return port - } - } else { - if port > 0 && port != 80 { - return port - } - } - return -1 -} - -func serverClientIP(xForwardedFor string) string { - if idx := strings.Index(xForwardedFor, ","); idx >= 0 { - xForwardedFor = xForwardedFor[:idx] - } - return xForwardedFor -} - -func netProtocol(proto string) (name string, version string) { - name, version, _ = strings.Cut(proto, "/") - name = strings.ToLower(name) - return name, version -} - -var methodLookup = map[string]attribute.KeyValue{ - http.MethodConnect: semconvNew.HTTPRequestMethodConnect, - http.MethodDelete: semconvNew.HTTPRequestMethodDelete, - http.MethodGet: semconvNew.HTTPRequestMethodGet, - http.MethodHead: semconvNew.HTTPRequestMethodHead, - http.MethodOptions: semconvNew.HTTPRequestMethodOptions, - http.MethodPatch: semconvNew.HTTPRequestMethodPatch, - http.MethodPost: semconvNew.HTTPRequestMethodPost, - http.MethodPut: semconvNew.HTTPRequestMethodPut, - http.MethodTrace: semconvNew.HTTPRequestMethodTrace, -} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/v1.20.0.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/v1.20.0.go deleted file mode 100644 index c3e838aa..00000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/v1.20.0.go +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package semconv // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv" - -import ( - "errors" - "io" - "net/http" - - "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil" - "go.opentelemetry.io/otel/attribute" - semconv "go.opentelemetry.io/otel/semconv/v1.20.0" -) - -type oldHTTPServer struct{} - -// RequestTraceAttrs returns trace attributes for an HTTP request received by a -// server. -// -// The server must be the primary server name if it is known. For example this -// would be the ServerName directive -// (https://httpd.apache.org/docs/2.4/mod/core.html#servername) for an Apache -// server, and the server_name directive -// (http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name) for an -// nginx server. More generically, the primary server name would be the host -// header value that matches the default virtual host of an HTTP server. It -// should include the host identifier and if a port is used to route to the -// server that port identifier should be included as an appropriate port -// suffix. -// -// If the primary server name is not known, server should be an empty string. -// The req Host will be used to determine the server instead. -func (o oldHTTPServer) RequestTraceAttrs(server string, req *http.Request) []attribute.KeyValue { - return semconvutil.HTTPServerRequest(server, req) -} - -// ResponseTraceAttrs returns trace attributes for telemetry from an HTTP response. -// -// If any of the fields in the ResponseTelemetry are not set the attribute will be omitted. -func (o oldHTTPServer) ResponseTraceAttrs(resp ResponseTelemetry) []attribute.KeyValue { - attributes := []attribute.KeyValue{} - - if resp.ReadBytes > 0 { - attributes = append(attributes, semconv.HTTPRequestContentLength(int(resp.ReadBytes))) - } - if resp.ReadError != nil && !errors.Is(resp.ReadError, io.EOF) { - // This is not in the semantic conventions, but is historically provided - attributes = append(attributes, attribute.String("http.read_error", resp.ReadError.Error())) - } - if resp.WriteBytes > 0 { - attributes = append(attributes, semconv.HTTPResponseContentLength(int(resp.WriteBytes))) - } - if resp.StatusCode > 0 { - attributes = append(attributes, semconv.HTTPStatusCode(resp.StatusCode)) - } - if resp.WriteError != nil && !errors.Is(resp.WriteError, io.EOF) { - // This is not in the semantic conventions, but is historically provided - attributes = append(attributes, attribute.String("http.write_error", resp.WriteError.Error())) - } - - return attributes -} - -// Route returns the attribute for the route. -func (o oldHTTPServer) Route(route string) attribute.KeyValue { - return semconv.HTTPRoute(route) -} - -// HTTPStatusCode returns the attribute for the HTTP status code. -// This is a temporary function needed by metrics. This will be removed when MetricsRequest is added. -func HTTPStatusCode(status int) attribute.KeyValue { - return semconv.HTTPStatusCode(status) -} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/v1.24.0.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/v1.24.0.go deleted file mode 100644 index 0c5d4c46..00000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv/v1.24.0.go +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package semconv // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv" - -import ( - "net/http" - "strings" - - "go.opentelemetry.io/otel/attribute" - semconvNew "go.opentelemetry.io/otel/semconv/v1.24.0" -) - -type newHTTPServer struct{} - -// TraceRequest returns trace attributes for an HTTP request received by a -// server. -// -// The server must be the primary server name if it is known. For example this -// would be the ServerName directive -// (https://httpd.apache.org/docs/2.4/mod/core.html#servername) for an Apache -// server, and the server_name directive -// (http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name) for an -// nginx server. More generically, the primary server name would be the host -// header value that matches the default virtual host of an HTTP server. It -// should include the host identifier and if a port is used to route to the -// server that port identifier should be included as an appropriate port -// suffix. -// -// If the primary server name is not known, server should be an empty string. -// The req Host will be used to determine the server instead. -func (n newHTTPServer) RequestTraceAttrs(server string, req *http.Request) []attribute.KeyValue { - count := 3 // ServerAddress, Method, Scheme - - var host string - var p int - if server == "" { - host, p = splitHostPort(req.Host) - } else { - // Prioritize the primary server name. - host, p = splitHostPort(server) - if p < 0 { - _, p = splitHostPort(req.Host) - } - } - - hostPort := requiredHTTPPort(req.TLS != nil, p) - if hostPort > 0 { - count++ - } - - method, methodOriginal := n.method(req.Method) - if methodOriginal != (attribute.KeyValue{}) { - count++ - } - - scheme := n.scheme(req.TLS != nil) - - if peer, peerPort := splitHostPort(req.RemoteAddr); peer != "" { - // The Go HTTP server sets RemoteAddr to "IP:port", this will not be a - // file-path that would be interpreted with a sock family. - count++ - if peerPort > 0 { - count++ - } - } - - useragent := req.UserAgent() - if useragent != "" { - count++ - } - - clientIP := serverClientIP(req.Header.Get("X-Forwarded-For")) - if clientIP != "" { - count++ - } - - if req.URL != nil && req.URL.Path != "" { - count++ - } - - protoName, protoVersion := netProtocol(req.Proto) - if protoName != "" && protoName != "http" { - count++ - } - if protoVersion != "" { - count++ - } - - attrs := make([]attribute.KeyValue, 0, count) - attrs = append(attrs, - semconvNew.ServerAddress(host), - method, - scheme, - ) - - if hostPort > 0 { - attrs = append(attrs, semconvNew.ServerPort(hostPort)) - } - if methodOriginal != (attribute.KeyValue{}) { - attrs = append(attrs, methodOriginal) - } - - if peer, peerPort := splitHostPort(req.RemoteAddr); peer != "" { - // The Go HTTP server sets RemoteAddr to "IP:port", this will not be a - // file-path that would be interpreted with a sock family. - attrs = append(attrs, semconvNew.NetworkPeerAddress(peer)) - if peerPort > 0 { - attrs = append(attrs, semconvNew.NetworkPeerPort(peerPort)) - } - } - - if useragent := req.UserAgent(); useragent != "" { - attrs = append(attrs, semconvNew.UserAgentOriginal(useragent)) - } - - if clientIP != "" { - attrs = append(attrs, semconvNew.ClientAddress(clientIP)) - } - - if req.URL != nil && req.URL.Path != "" { - attrs = append(attrs, semconvNew.URLPath(req.URL.Path)) - } - - if protoName != "" && protoName != "http" { - attrs = append(attrs, semconvNew.NetworkProtocolName(protoName)) - } - if protoVersion != "" { - attrs = append(attrs, semconvNew.NetworkProtocolVersion(protoVersion)) - } - - return attrs -} - -func (n newHTTPServer) method(method string) (attribute.KeyValue, attribute.KeyValue) { - if method == "" { - return semconvNew.HTTPRequestMethodGet, attribute.KeyValue{} - } - if attr, ok := methodLookup[method]; ok { - return attr, attribute.KeyValue{} - } - - orig := semconvNew.HTTPRequestMethodOriginal(method) - if attr, ok := methodLookup[strings.ToUpper(method)]; ok { - return attr, orig - } - return semconvNew.HTTPRequestMethodGet, orig -} - -func (n newHTTPServer) scheme(https bool) attribute.KeyValue { // nolint:revive - if https { - return semconvNew.URLScheme("https") - } - return semconvNew.URLScheme("http") -} - -// TraceResponse returns trace attributes for telemetry from an HTTP response. -// -// If any of the fields in the ResponseTelemetry are not set the attribute will be omitted. -func (n newHTTPServer) ResponseTraceAttrs(resp ResponseTelemetry) []attribute.KeyValue { - var count int - - if resp.ReadBytes > 0 { - count++ - } - if resp.WriteBytes > 0 { - count++ - } - if resp.StatusCode > 0 { - count++ - } - - attributes := make([]attribute.KeyValue, 0, count) - - if resp.ReadBytes > 0 { - attributes = append(attributes, - semconvNew.HTTPRequestBodySize(int(resp.ReadBytes)), - ) - } - if resp.WriteBytes > 0 { - attributes = append(attributes, - semconvNew.HTTPResponseBodySize(int(resp.WriteBytes)), - ) - } - if resp.StatusCode > 0 { - attributes = append(attributes, - semconvNew.HTTPResponseStatusCode(resp.StatusCode), - ) - } - - return attributes -} - -// Route returns the attribute for the route. -func (n newHTTPServer) Route(route string) attribute.KeyValue { - return semconvNew.HTTPRoute(route) -} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/gen.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/gen.go deleted file mode 100644 index 7aa5f99e..00000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/gen.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package semconvutil // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil" - -// Generate semconvutil package: -//go:generate gotmpl --body=../../../../../../internal/shared/semconvutil/httpconv_test.go.tmpl "--data={}" --out=httpconv_test.go -//go:generate gotmpl --body=../../../../../../internal/shared/semconvutil/httpconv.go.tmpl "--data={}" --out=httpconv.go -//go:generate gotmpl --body=../../../../../../internal/shared/semconvutil/netconv_test.go.tmpl "--data={}" --out=netconv_test.go -//go:generate gotmpl --body=../../../../../../internal/shared/semconvutil/netconv.go.tmpl "--data={}" --out=netconv.go diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/httpconv.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/httpconv.go deleted file mode 100644 index a73bb06e..00000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/httpconv.go +++ /dev/null @@ -1,575 +0,0 @@ -// Code created by gotmpl. DO NOT MODIFY. -// source: internal/shared/semconvutil/httpconv.go.tmpl - -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package semconvutil // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil" - -import ( - "fmt" - "net/http" - "strings" - - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/codes" - semconv "go.opentelemetry.io/otel/semconv/v1.20.0" -) - -// HTTPClientResponse returns trace attributes for an HTTP response received by a -// client from a server. It will return the following attributes if the related -// values are defined in resp: "http.status.code", -// "http.response_content_length". -// -// This does not add all OpenTelemetry required attributes for an HTTP event, -// it assumes ClientRequest was used to create the span with a complete set of -// attributes. If a complete set of attributes can be generated using the -// request contained in resp. For example: -// -// append(HTTPClientResponse(resp), ClientRequest(resp.Request)...) -func HTTPClientResponse(resp *http.Response) []attribute.KeyValue { - return hc.ClientResponse(resp) -} - -// HTTPClientRequest returns trace attributes for an HTTP request made by a client. -// The following attributes are always returned: "http.url", "http.method", -// "net.peer.name". The following attributes are returned if the related values -// are defined in req: "net.peer.port", "user_agent.original", -// "http.request_content_length". -func HTTPClientRequest(req *http.Request) []attribute.KeyValue { - return hc.ClientRequest(req) -} - -// HTTPClientRequestMetrics returns metric attributes for an HTTP request made by a client. -// The following attributes are always returned: "http.method", "net.peer.name". -// The following attributes are returned if the -// related values are defined in req: "net.peer.port". -func HTTPClientRequestMetrics(req *http.Request) []attribute.KeyValue { - return hc.ClientRequestMetrics(req) -} - -// HTTPClientStatus returns a span status code and message for an HTTP status code -// value received by a client. -func HTTPClientStatus(code int) (codes.Code, string) { - return hc.ClientStatus(code) -} - -// HTTPServerRequest returns trace attributes for an HTTP request received by a -// server. -// -// The server must be the primary server name if it is known. For example this -// would be the ServerName directive -// (https://httpd.apache.org/docs/2.4/mod/core.html#servername) for an Apache -// server, and the server_name directive -// (http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name) for an -// nginx server. More generically, the primary server name would be the host -// header value that matches the default virtual host of an HTTP server. It -// should include the host identifier and if a port is used to route to the -// server that port identifier should be included as an appropriate port -// suffix. -// -// If the primary server name is not known, server should be an empty string. -// The req Host will be used to determine the server instead. -// -// The following attributes are always returned: "http.method", "http.scheme", -// "http.target", "net.host.name". The following attributes are returned if -// they related values are defined in req: "net.host.port", "net.sock.peer.addr", -// "net.sock.peer.port", "user_agent.original", "http.client_ip". -func HTTPServerRequest(server string, req *http.Request) []attribute.KeyValue { - return hc.ServerRequest(server, req) -} - -// HTTPServerRequestMetrics returns metric attributes for an HTTP request received by a -// server. -// -// The server must be the primary server name if it is known. For example this -// would be the ServerName directive -// (https://httpd.apache.org/docs/2.4/mod/core.html#servername) for an Apache -// server, and the server_name directive -// (http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name) for an -// nginx server. More generically, the primary server name would be the host -// header value that matches the default virtual host of an HTTP server. It -// should include the host identifier and if a port is used to route to the -// server that port identifier should be included as an appropriate port -// suffix. -// -// If the primary server name is not known, server should be an empty string. -// The req Host will be used to determine the server instead. -// -// The following attributes are always returned: "http.method", "http.scheme", -// "net.host.name". The following attributes are returned if they related -// values are defined in req: "net.host.port". -func HTTPServerRequestMetrics(server string, req *http.Request) []attribute.KeyValue { - return hc.ServerRequestMetrics(server, req) -} - -// HTTPServerStatus returns a span status code and message for an HTTP status code -// value returned by a server. Status codes in the 400-499 range are not -// returned as errors. -func HTTPServerStatus(code int) (codes.Code, string) { - return hc.ServerStatus(code) -} - -// httpConv are the HTTP semantic convention attributes defined for a version -// of the OpenTelemetry specification. -type httpConv struct { - NetConv *netConv - - HTTPClientIPKey attribute.Key - HTTPMethodKey attribute.Key - HTTPRequestContentLengthKey attribute.Key - HTTPResponseContentLengthKey attribute.Key - HTTPRouteKey attribute.Key - HTTPSchemeHTTP attribute.KeyValue - HTTPSchemeHTTPS attribute.KeyValue - HTTPStatusCodeKey attribute.Key - HTTPTargetKey attribute.Key - HTTPURLKey attribute.Key - UserAgentOriginalKey attribute.Key -} - -var hc = &httpConv{ - NetConv: nc, - - HTTPClientIPKey: semconv.HTTPClientIPKey, - HTTPMethodKey: semconv.HTTPMethodKey, - HTTPRequestContentLengthKey: semconv.HTTPRequestContentLengthKey, - HTTPResponseContentLengthKey: semconv.HTTPResponseContentLengthKey, - HTTPRouteKey: semconv.HTTPRouteKey, - HTTPSchemeHTTP: semconv.HTTPSchemeHTTP, - HTTPSchemeHTTPS: semconv.HTTPSchemeHTTPS, - HTTPStatusCodeKey: semconv.HTTPStatusCodeKey, - HTTPTargetKey: semconv.HTTPTargetKey, - HTTPURLKey: semconv.HTTPURLKey, - UserAgentOriginalKey: semconv.UserAgentOriginalKey, -} - -// ClientResponse returns attributes for an HTTP response received by a client -// from a server. The following attributes are returned if the related values -// are defined in resp: "http.status.code", "http.response_content_length". -// -// This does not add all OpenTelemetry required attributes for an HTTP event, -// it assumes ClientRequest was used to create the span with a complete set of -// attributes. If a complete set of attributes can be generated using the -// request contained in resp. For example: -// -// append(ClientResponse(resp), ClientRequest(resp.Request)...) -func (c *httpConv) ClientResponse(resp *http.Response) []attribute.KeyValue { - /* The following semantic conventions are returned if present: - http.status_code int - http.response_content_length int - */ - var n int - if resp.StatusCode > 0 { - n++ - } - if resp.ContentLength > 0 { - n++ - } - - attrs := make([]attribute.KeyValue, 0, n) - if resp.StatusCode > 0 { - attrs = append(attrs, c.HTTPStatusCodeKey.Int(resp.StatusCode)) - } - if resp.ContentLength > 0 { - attrs = append(attrs, c.HTTPResponseContentLengthKey.Int(int(resp.ContentLength))) - } - return attrs -} - -// ClientRequest returns attributes for an HTTP request made by a client. The -// following attributes are always returned: "http.url", "http.method", -// "net.peer.name". The following attributes are returned if the related values -// are defined in req: "net.peer.port", "user_agent.original", -// "http.request_content_length", "user_agent.original". -func (c *httpConv) ClientRequest(req *http.Request) []attribute.KeyValue { - /* The following semantic conventions are returned if present: - http.method string - user_agent.original string - http.url string - net.peer.name string - net.peer.port int - http.request_content_length int - */ - - /* The following semantic conventions are not returned: - http.status_code This requires the response. See ClientResponse. - http.response_content_length This requires the response. See ClientResponse. - net.sock.family This requires the socket used. - net.sock.peer.addr This requires the socket used. - net.sock.peer.name This requires the socket used. - net.sock.peer.port This requires the socket used. - http.resend_count This is something outside of a single request. - net.protocol.name The value is the Request is ignored, and the go client will always use "http". - net.protocol.version The value in the Request is ignored, and the go client will always use 1.1 or 2.0. - */ - n := 3 // URL, peer name, proto, and method. - var h string - if req.URL != nil { - h = req.URL.Host - } - peer, p := firstHostPort(h, req.Header.Get("Host")) - port := requiredHTTPPort(req.URL != nil && req.URL.Scheme == "https", p) - if port > 0 { - n++ - } - useragent := req.UserAgent() - if useragent != "" { - n++ - } - if req.ContentLength > 0 { - n++ - } - - attrs := make([]attribute.KeyValue, 0, n) - - attrs = append(attrs, c.method(req.Method)) - - var u string - if req.URL != nil { - // Remove any username/password info that may be in the URL. - userinfo := req.URL.User - req.URL.User = nil - u = req.URL.String() - // Restore any username/password info that was removed. - req.URL.User = userinfo - } - attrs = append(attrs, c.HTTPURLKey.String(u)) - - attrs = append(attrs, c.NetConv.PeerName(peer)) - if port > 0 { - attrs = append(attrs, c.NetConv.PeerPort(port)) - } - - if useragent != "" { - attrs = append(attrs, c.UserAgentOriginalKey.String(useragent)) - } - - if l := req.ContentLength; l > 0 { - attrs = append(attrs, c.HTTPRequestContentLengthKey.Int64(l)) - } - - return attrs -} - -// ClientRequestMetrics returns metric attributes for an HTTP request made by a client. The -// following attributes are always returned: "http.method", "net.peer.name". -// The following attributes are returned if the related values -// are defined in req: "net.peer.port". -func (c *httpConv) ClientRequestMetrics(req *http.Request) []attribute.KeyValue { - /* The following semantic conventions are returned if present: - http.method string - net.peer.name string - net.peer.port int - */ - - n := 2 // method, peer name. - var h string - if req.URL != nil { - h = req.URL.Host - } - peer, p := firstHostPort(h, req.Header.Get("Host")) - port := requiredHTTPPort(req.URL != nil && req.URL.Scheme == "https", p) - if port > 0 { - n++ - } - - attrs := make([]attribute.KeyValue, 0, n) - attrs = append(attrs, c.method(req.Method), c.NetConv.PeerName(peer)) - - if port > 0 { - attrs = append(attrs, c.NetConv.PeerPort(port)) - } - - return attrs -} - -// ServerRequest returns attributes for an HTTP request received by a server. -// -// The server must be the primary server name if it is known. For example this -// would be the ServerName directive -// (https://httpd.apache.org/docs/2.4/mod/core.html#servername) for an Apache -// server, and the server_name directive -// (http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name) for an -// nginx server. More generically, the primary server name would be the host -// header value that matches the default virtual host of an HTTP server. It -// should include the host identifier and if a port is used to route to the -// server that port identifier should be included as an appropriate port -// suffix. -// -// If the primary server name is not known, server should be an empty string. -// The req Host will be used to determine the server instead. -// -// The following attributes are always returned: "http.method", "http.scheme", -// "http.target", "net.host.name". The following attributes are returned if they -// related values are defined in req: "net.host.port", "net.sock.peer.addr", -// "net.sock.peer.port", "user_agent.original", "http.client_ip", -// "net.protocol.name", "net.protocol.version". -func (c *httpConv) ServerRequest(server string, req *http.Request) []attribute.KeyValue { - /* The following semantic conventions are returned if present: - http.method string - http.scheme string - net.host.name string - net.host.port int - net.sock.peer.addr string - net.sock.peer.port int - user_agent.original string - http.client_ip string - net.protocol.name string Note: not set if the value is "http". - net.protocol.version string - http.target string Note: doesn't include the query parameter. - */ - - /* The following semantic conventions are not returned: - http.status_code This requires the response. - http.request_content_length This requires the len() of body, which can mutate it. - http.response_content_length This requires the response. - http.route This is not available. - net.sock.peer.name This would require a DNS lookup. - net.sock.host.addr The request doesn't have access to the underlying socket. - net.sock.host.port The request doesn't have access to the underlying socket. - - */ - n := 4 // Method, scheme, proto, and host name. - var host string - var p int - if server == "" { - host, p = splitHostPort(req.Host) - } else { - // Prioritize the primary server name. - host, p = splitHostPort(server) - if p < 0 { - _, p = splitHostPort(req.Host) - } - } - hostPort := requiredHTTPPort(req.TLS != nil, p) - if hostPort > 0 { - n++ - } - peer, peerPort := splitHostPort(req.RemoteAddr) - if peer != "" { - n++ - if peerPort > 0 { - n++ - } - } - useragent := req.UserAgent() - if useragent != "" { - n++ - } - - clientIP := serverClientIP(req.Header.Get("X-Forwarded-For")) - if clientIP != "" { - n++ - } - - var target string - if req.URL != nil { - target = req.URL.Path - if target != "" { - n++ - } - } - protoName, protoVersion := netProtocol(req.Proto) - if protoName != "" && protoName != "http" { - n++ - } - if protoVersion != "" { - n++ - } - - attrs := make([]attribute.KeyValue, 0, n) - - attrs = append(attrs, c.method(req.Method)) - attrs = append(attrs, c.scheme(req.TLS != nil)) - attrs = append(attrs, c.NetConv.HostName(host)) - - if hostPort > 0 { - attrs = append(attrs, c.NetConv.HostPort(hostPort)) - } - - if peer != "" { - // The Go HTTP server sets RemoteAddr to "IP:port", this will not be a - // file-path that would be interpreted with a sock family. - attrs = append(attrs, c.NetConv.SockPeerAddr(peer)) - if peerPort > 0 { - attrs = append(attrs, c.NetConv.SockPeerPort(peerPort)) - } - } - - if useragent != "" { - attrs = append(attrs, c.UserAgentOriginalKey.String(useragent)) - } - - if clientIP != "" { - attrs = append(attrs, c.HTTPClientIPKey.String(clientIP)) - } - - if target != "" { - attrs = append(attrs, c.HTTPTargetKey.String(target)) - } - - if protoName != "" && protoName != "http" { - attrs = append(attrs, c.NetConv.NetProtocolName.String(protoName)) - } - if protoVersion != "" { - attrs = append(attrs, c.NetConv.NetProtocolVersion.String(protoVersion)) - } - - return attrs -} - -// ServerRequestMetrics returns metric attributes for an HTTP request received -// by a server. -// -// The server must be the primary server name if it is known. For example this -// would be the ServerName directive -// (https://httpd.apache.org/docs/2.4/mod/core.html#servername) for an Apache -// server, and the server_name directive -// (http://nginx.org/en/docs/http/ngx_http_core_module.html#server_name) for an -// nginx server. More generically, the primary server name would be the host -// header value that matches the default virtual host of an HTTP server. It -// should include the host identifier and if a port is used to route to the -// server that port identifier should be included as an appropriate port -// suffix. -// -// If the primary server name is not known, server should be an empty string. -// The req Host will be used to determine the server instead. -// -// The following attributes are always returned: "http.method", "http.scheme", -// "net.host.name". The following attributes are returned if they related -// values are defined in req: "net.host.port". -func (c *httpConv) ServerRequestMetrics(server string, req *http.Request) []attribute.KeyValue { - /* The following semantic conventions are returned if present: - http.scheme string - http.route string - http.method string - http.status_code int - net.host.name string - net.host.port int - net.protocol.name string Note: not set if the value is "http". - net.protocol.version string - */ - - n := 3 // Method, scheme, and host name. - var host string - var p int - if server == "" { - host, p = splitHostPort(req.Host) - } else { - // Prioritize the primary server name. - host, p = splitHostPort(server) - if p < 0 { - _, p = splitHostPort(req.Host) - } - } - hostPort := requiredHTTPPort(req.TLS != nil, p) - if hostPort > 0 { - n++ - } - protoName, protoVersion := netProtocol(req.Proto) - if protoName != "" { - n++ - } - if protoVersion != "" { - n++ - } - - attrs := make([]attribute.KeyValue, 0, n) - - attrs = append(attrs, c.methodMetric(req.Method)) - attrs = append(attrs, c.scheme(req.TLS != nil)) - attrs = append(attrs, c.NetConv.HostName(host)) - - if hostPort > 0 { - attrs = append(attrs, c.NetConv.HostPort(hostPort)) - } - if protoName != "" { - attrs = append(attrs, c.NetConv.NetProtocolName.String(protoName)) - } - if protoVersion != "" { - attrs = append(attrs, c.NetConv.NetProtocolVersion.String(protoVersion)) - } - - return attrs -} - -func (c *httpConv) method(method string) attribute.KeyValue { - if method == "" { - return c.HTTPMethodKey.String(http.MethodGet) - } - return c.HTTPMethodKey.String(method) -} - -func (c *httpConv) methodMetric(method string) attribute.KeyValue { - method = strings.ToUpper(method) - switch method { - case http.MethodConnect, http.MethodDelete, http.MethodGet, http.MethodHead, http.MethodOptions, http.MethodPatch, http.MethodPost, http.MethodPut, http.MethodTrace: - default: - method = "_OTHER" - } - return c.HTTPMethodKey.String(method) -} - -func (c *httpConv) scheme(https bool) attribute.KeyValue { // nolint:revive - if https { - return c.HTTPSchemeHTTPS - } - return c.HTTPSchemeHTTP -} - -func serverClientIP(xForwardedFor string) string { - if idx := strings.Index(xForwardedFor, ","); idx >= 0 { - xForwardedFor = xForwardedFor[:idx] - } - return xForwardedFor -} - -func requiredHTTPPort(https bool, port int) int { // nolint:revive - if https { - if port > 0 && port != 443 { - return port - } - } else { - if port > 0 && port != 80 { - return port - } - } - return -1 -} - -// Return the request host and port from the first non-empty source. -func firstHostPort(source ...string) (host string, port int) { - for _, hostport := range source { - host, port = splitHostPort(hostport) - if host != "" || port > 0 { - break - } - } - return -} - -// ClientStatus returns a span status code and message for an HTTP status code -// value received by a client. -func (c *httpConv) ClientStatus(code int) (codes.Code, string) { - if code < 100 || code >= 600 { - return codes.Error, fmt.Sprintf("Invalid HTTP status code %d", code) - } - if code >= 400 { - return codes.Error, "" - } - return codes.Unset, "" -} - -// ServerStatus returns a span status code and message for an HTTP status code -// value returned by a server. Status codes in the 400-499 range are not -// returned as errors. -func (c *httpConv) ServerStatus(code int) (codes.Code, string) { - if code < 100 || code >= 600 { - return codes.Error, fmt.Sprintf("Invalid HTTP status code %d", code) - } - if code >= 500 { - return codes.Error, "" - } - return codes.Unset, "" -} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/netconv.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/netconv.go deleted file mode 100644 index a9a9226b..00000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil/netconv.go +++ /dev/null @@ -1,205 +0,0 @@ -// Code created by gotmpl. DO NOT MODIFY. -// source: internal/shared/semconvutil/netconv.go.tmpl - -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package semconvutil // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil" - -import ( - "net" - "strconv" - "strings" - - "go.opentelemetry.io/otel/attribute" - semconv "go.opentelemetry.io/otel/semconv/v1.20.0" -) - -// NetTransport returns a trace attribute describing the transport protocol of the -// passed network. See the net.Dial for information about acceptable network -// values. -func NetTransport(network string) attribute.KeyValue { - return nc.Transport(network) -} - -// netConv are the network semantic convention attributes defined for a version -// of the OpenTelemetry specification. -type netConv struct { - NetHostNameKey attribute.Key - NetHostPortKey attribute.Key - NetPeerNameKey attribute.Key - NetPeerPortKey attribute.Key - NetProtocolName attribute.Key - NetProtocolVersion attribute.Key - NetSockFamilyKey attribute.Key - NetSockPeerAddrKey attribute.Key - NetSockPeerPortKey attribute.Key - NetSockHostAddrKey attribute.Key - NetSockHostPortKey attribute.Key - NetTransportOther attribute.KeyValue - NetTransportTCP attribute.KeyValue - NetTransportUDP attribute.KeyValue - NetTransportInProc attribute.KeyValue -} - -var nc = &netConv{ - NetHostNameKey: semconv.NetHostNameKey, - NetHostPortKey: semconv.NetHostPortKey, - NetPeerNameKey: semconv.NetPeerNameKey, - NetPeerPortKey: semconv.NetPeerPortKey, - NetProtocolName: semconv.NetProtocolNameKey, - NetProtocolVersion: semconv.NetProtocolVersionKey, - NetSockFamilyKey: semconv.NetSockFamilyKey, - NetSockPeerAddrKey: semconv.NetSockPeerAddrKey, - NetSockPeerPortKey: semconv.NetSockPeerPortKey, - NetSockHostAddrKey: semconv.NetSockHostAddrKey, - NetSockHostPortKey: semconv.NetSockHostPortKey, - NetTransportOther: semconv.NetTransportOther, - NetTransportTCP: semconv.NetTransportTCP, - NetTransportUDP: semconv.NetTransportUDP, - NetTransportInProc: semconv.NetTransportInProc, -} - -func (c *netConv) Transport(network string) attribute.KeyValue { - switch network { - case "tcp", "tcp4", "tcp6": - return c.NetTransportTCP - case "udp", "udp4", "udp6": - return c.NetTransportUDP - case "unix", "unixgram", "unixpacket": - return c.NetTransportInProc - default: - // "ip:*", "ip4:*", and "ip6:*" all are considered other. - return c.NetTransportOther - } -} - -// Host returns attributes for a network host address. -func (c *netConv) Host(address string) []attribute.KeyValue { - h, p := splitHostPort(address) - var n int - if h != "" { - n++ - if p > 0 { - n++ - } - } - - if n == 0 { - return nil - } - - attrs := make([]attribute.KeyValue, 0, n) - attrs = append(attrs, c.HostName(h)) - if p > 0 { - attrs = append(attrs, c.HostPort(p)) - } - return attrs -} - -func (c *netConv) HostName(name string) attribute.KeyValue { - return c.NetHostNameKey.String(name) -} - -func (c *netConv) HostPort(port int) attribute.KeyValue { - return c.NetHostPortKey.Int(port) -} - -func family(network, address string) string { - switch network { - case "unix", "unixgram", "unixpacket": - return "unix" - default: - if ip := net.ParseIP(address); ip != nil { - if ip.To4() == nil { - return "inet6" - } - return "inet" - } - } - return "" -} - -// Peer returns attributes for a network peer address. -func (c *netConv) Peer(address string) []attribute.KeyValue { - h, p := splitHostPort(address) - var n int - if h != "" { - n++ - if p > 0 { - n++ - } - } - - if n == 0 { - return nil - } - - attrs := make([]attribute.KeyValue, 0, n) - attrs = append(attrs, c.PeerName(h)) - if p > 0 { - attrs = append(attrs, c.PeerPort(p)) - } - return attrs -} - -func (c *netConv) PeerName(name string) attribute.KeyValue { - return c.NetPeerNameKey.String(name) -} - -func (c *netConv) PeerPort(port int) attribute.KeyValue { - return c.NetPeerPortKey.Int(port) -} - -func (c *netConv) SockPeerAddr(addr string) attribute.KeyValue { - return c.NetSockPeerAddrKey.String(addr) -} - -func (c *netConv) SockPeerPort(port int) attribute.KeyValue { - return c.NetSockPeerPortKey.Int(port) -} - -// splitHostPort splits a network address hostport of the form "host", -// "host%zone", "[host]", "[host%zone], "host:port", "host%zone:port", -// "[host]:port", "[host%zone]:port", or ":port" into host or host%zone and -// port. -// -// An empty host is returned if it is not provided or unparsable. A negative -// port is returned if it is not provided or unparsable. -func splitHostPort(hostport string) (host string, port int) { - port = -1 - - if strings.HasPrefix(hostport, "[") { - addrEnd := strings.LastIndex(hostport, "]") - if addrEnd < 0 { - // Invalid hostport. - return - } - if i := strings.LastIndex(hostport[addrEnd:], ":"); i < 0 { - host = hostport[1:addrEnd] - return - } - } else { - if i := strings.LastIndex(hostport, ":"); i < 0 { - host = hostport - return - } - } - - host, pStr, err := net.SplitHostPort(hostport) - if err != nil { - return - } - - p, err := strconv.ParseUint(pStr, 10, 16) - if err != nil { - return - } - return host, int(p) -} - -func netProtocol(proto string) (name string, version string) { - name, version, _ = strings.Cut(proto, "/") - name = strings.ToLower(name) - return name, version -} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/labeler.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/labeler.go deleted file mode 100644 index ea504e39..00000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/labeler.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" - -import ( - "context" - "sync" - - "go.opentelemetry.io/otel/attribute" -) - -// Labeler is used to allow instrumented HTTP handlers to add custom attributes to -// the metrics recorded by the net/http instrumentation. -type Labeler struct { - mu sync.Mutex - attributes []attribute.KeyValue -} - -// Add attributes to a Labeler. -func (l *Labeler) Add(ls ...attribute.KeyValue) { - l.mu.Lock() - defer l.mu.Unlock() - l.attributes = append(l.attributes, ls...) -} - -// Get returns a copy of the attributes added to the Labeler. -func (l *Labeler) Get() []attribute.KeyValue { - l.mu.Lock() - defer l.mu.Unlock() - ret := make([]attribute.KeyValue, len(l.attributes)) - copy(ret, l.attributes) - return ret -} - -type labelerContextKeyType int - -const lablelerContextKey labelerContextKeyType = 0 - -// ContextWithLabeler returns a new context with the provided Labeler instance. -// Attributes added to the specified labeler will be injected into metrics -// emitted by the instrumentation. Only one labeller can be injected into the -// context. Injecting it multiple times will override the previous calls. -func ContextWithLabeler(parent context.Context, l *Labeler) context.Context { - return context.WithValue(parent, lablelerContextKey, l) -} - -// LabelerFromContext retrieves a Labeler instance from the provided context if -// one is available. If no Labeler was found in the provided context a new, empty -// Labeler is returned and the second return value is false. In this case it is -// safe to use the Labeler but any attributes added to it will not be used. -func LabelerFromContext(ctx context.Context) (*Labeler, bool) { - l, ok := ctx.Value(lablelerContextKey).(*Labeler) - if !ok { - l = &Labeler{} - } - return l, ok -} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go deleted file mode 100644 index 0d3cb2e4..00000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/transport.go +++ /dev/null @@ -1,277 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" - -import ( - "context" - "io" - "net/http" - "net/http/httptrace" - "sync/atomic" - "time" - - "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil" - "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/codes" - "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/propagation" - semconv "go.opentelemetry.io/otel/semconv/v1.20.0" - "go.opentelemetry.io/otel/trace" -) - -// Transport implements the http.RoundTripper interface and wraps -// outbound HTTP(S) requests with a span and enriches it with metrics. -type Transport struct { - rt http.RoundTripper - - tracer trace.Tracer - meter metric.Meter - propagators propagation.TextMapPropagator - spanStartOptions []trace.SpanStartOption - filters []Filter - spanNameFormatter func(string, *http.Request) string - clientTrace func(context.Context) *httptrace.ClientTrace - - requestBytesCounter metric.Int64Counter - responseBytesCounter metric.Int64Counter - latencyMeasure metric.Float64Histogram -} - -var _ http.RoundTripper = &Transport{} - -// NewTransport wraps the provided http.RoundTripper with one that -// starts a span, injects the span context into the outbound request headers, -// and enriches it with metrics. -// -// If the provided http.RoundTripper is nil, http.DefaultTransport will be used -// as the base http.RoundTripper. -func NewTransport(base http.RoundTripper, opts ...Option) *Transport { - if base == nil { - base = http.DefaultTransport - } - - t := Transport{ - rt: base, - } - - defaultOpts := []Option{ - WithSpanOptions(trace.WithSpanKind(trace.SpanKindClient)), - WithSpanNameFormatter(defaultTransportFormatter), - } - - c := newConfig(append(defaultOpts, opts...)...) - t.applyConfig(c) - t.createMeasures() - - return &t -} - -func (t *Transport) applyConfig(c *config) { - t.tracer = c.Tracer - t.meter = c.Meter - t.propagators = c.Propagators - t.spanStartOptions = c.SpanStartOptions - t.filters = c.Filters - t.spanNameFormatter = c.SpanNameFormatter - t.clientTrace = c.ClientTrace -} - -func (t *Transport) createMeasures() { - var err error - t.requestBytesCounter, err = t.meter.Int64Counter( - clientRequestSize, - metric.WithUnit("By"), - metric.WithDescription("Measures the size of HTTP request messages."), - ) - handleErr(err) - - t.responseBytesCounter, err = t.meter.Int64Counter( - clientResponseSize, - metric.WithUnit("By"), - metric.WithDescription("Measures the size of HTTP response messages."), - ) - handleErr(err) - - t.latencyMeasure, err = t.meter.Float64Histogram( - clientDuration, - metric.WithUnit("ms"), - metric.WithDescription("Measures the duration of outbound HTTP requests."), - ) - handleErr(err) -} - -func defaultTransportFormatter(_ string, r *http.Request) string { - return "HTTP " + r.Method -} - -// RoundTrip creates a Span and propagates its context via the provided request's headers -// before handing the request to the configured base RoundTripper. The created span will -// end when the response body is closed or when a read from the body returns io.EOF. -func (t *Transport) RoundTrip(r *http.Request) (*http.Response, error) { - requestStartTime := time.Now() - for _, f := range t.filters { - if !f(r) { - // Simply pass through to the base RoundTripper if a filter rejects the request - return t.rt.RoundTrip(r) - } - } - - tracer := t.tracer - - if tracer == nil { - if span := trace.SpanFromContext(r.Context()); span.SpanContext().IsValid() { - tracer = newTracer(span.TracerProvider()) - } else { - tracer = newTracer(otel.GetTracerProvider()) - } - } - - opts := append([]trace.SpanStartOption{}, t.spanStartOptions...) // start with the configured options - - ctx, span := tracer.Start(r.Context(), t.spanNameFormatter("", r), opts...) - - if t.clientTrace != nil { - ctx = httptrace.WithClientTrace(ctx, t.clientTrace(ctx)) - } - - labeler, found := LabelerFromContext(ctx) - if !found { - ctx = ContextWithLabeler(ctx, labeler) - } - - r = r.Clone(ctx) // According to RoundTripper spec, we shouldn't modify the origin request. - - // use a body wrapper to determine the request size - var bw bodyWrapper - // if request body is nil or NoBody, we don't want to mutate the body as it - // will affect the identity of it in an unforeseeable way because we assert - // ReadCloser fulfills a certain interface and it is indeed nil or NoBody. - if r.Body != nil && r.Body != http.NoBody { - bw.ReadCloser = r.Body - // noop to prevent nil panic. not using this record fun yet. - bw.record = func(int64) {} - r.Body = &bw - } - - span.SetAttributes(semconvutil.HTTPClientRequest(r)...) - t.propagators.Inject(ctx, propagation.HeaderCarrier(r.Header)) - - res, err := t.rt.RoundTrip(r) - if err != nil { - span.RecordError(err) - span.SetStatus(codes.Error, err.Error()) - span.End() - return res, err - } - - // metrics - metricAttrs := append(labeler.Get(), semconvutil.HTTPClientRequestMetrics(r)...) - if res.StatusCode > 0 { - metricAttrs = append(metricAttrs, semconv.HTTPStatusCode(res.StatusCode)) - } - o := metric.WithAttributeSet(attribute.NewSet(metricAttrs...)) - addOpts := []metric.AddOption{o} // Allocate vararg slice once. - t.requestBytesCounter.Add(ctx, bw.read.Load(), addOpts...) - // For handling response bytes we leverage a callback when the client reads the http response - readRecordFunc := func(n int64) { - t.responseBytesCounter.Add(ctx, n, addOpts...) - } - - // traces - span.SetAttributes(semconvutil.HTTPClientResponse(res)...) - span.SetStatus(semconvutil.HTTPClientStatus(res.StatusCode)) - - res.Body = newWrappedBody(span, readRecordFunc, res.Body) - - // Use floating point division here for higher precision (instead of Millisecond method). - elapsedTime := float64(time.Since(requestStartTime)) / float64(time.Millisecond) - - t.latencyMeasure.Record(ctx, elapsedTime, o) - - return res, err -} - -// newWrappedBody returns a new and appropriately scoped *wrappedBody as an -// io.ReadCloser. If the passed body implements io.Writer, the returned value -// will implement io.ReadWriteCloser. -func newWrappedBody(span trace.Span, record func(n int64), body io.ReadCloser) io.ReadCloser { - // The successful protocol switch responses will have a body that - // implement an io.ReadWriteCloser. Ensure this interface type continues - // to be satisfied if that is the case. - if _, ok := body.(io.ReadWriteCloser); ok { - return &wrappedBody{span: span, record: record, body: body} - } - - // Remove the implementation of the io.ReadWriteCloser and only implement - // the io.ReadCloser. - return struct{ io.ReadCloser }{&wrappedBody{span: span, record: record, body: body}} -} - -// wrappedBody is the response body type returned by the transport -// instrumentation to complete a span. Errors encountered when using the -// response body are recorded in span tracking the response. -// -// The span tracking the response is ended when this body is closed. -// -// If the response body implements the io.Writer interface (i.e. for -// successful protocol switches), the wrapped body also will. -type wrappedBody struct { - span trace.Span - recorded atomic.Bool - record func(n int64) - body io.ReadCloser - read atomic.Int64 -} - -var _ io.ReadWriteCloser = &wrappedBody{} - -func (wb *wrappedBody) Write(p []byte) (int, error) { - // This will not panic given the guard in newWrappedBody. - n, err := wb.body.(io.Writer).Write(p) - if err != nil { - wb.span.RecordError(err) - wb.span.SetStatus(codes.Error, err.Error()) - } - return n, err -} - -func (wb *wrappedBody) Read(b []byte) (int, error) { - n, err := wb.body.Read(b) - // Record the number of bytes read - wb.read.Add(int64(n)) - - switch err { - case nil: - // nothing to do here but fall through to the return - case io.EOF: - wb.recordBytesRead() - wb.span.End() - default: - wb.span.RecordError(err) - wb.span.SetStatus(codes.Error, err.Error()) - } - return n, err -} - -// recordBytesRead is a function that ensures the number of bytes read is recorded once and only once. -func (wb *wrappedBody) recordBytesRead() { - // note: it is more performant (and equally correct) to use atomic.Bool over sync.Once here. In the event that - // two goroutines are racing to call this method, the number of bytes read will no longer increase. Using - // CompareAndSwap allows later goroutines to return quickly and not block waiting for the race winner to finish - // calling wb.record(wb.read.Load()). - if wb.recorded.CompareAndSwap(false, true) { - // Record the total number of bytes read - wb.record(wb.read.Load()) - } -} - -func (wb *wrappedBody) Close() error { - wb.recordBytesRead() - wb.span.End() - if wb.body != nil { - return wb.body.Close() - } - return nil -} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go deleted file mode 100644 index b0957f28..00000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/version.go +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" - -// Version is the current release version of the otelhttp instrumentation. -func Version() string { - return "0.53.0" - // This string is updated by the pre_release.sh script during release -} - -// SemVersion is the semantic version to be supplied to tracer/meter creation. -// -// Deprecated: Use [Version] instead. -func SemVersion() string { - return Version() -} diff --git a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/wrap.go b/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/wrap.go deleted file mode 100644 index 948f8406..00000000 --- a/vendor/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/wrap.go +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package otelhttp // import "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" - -import ( - "context" - "io" - "net/http" - "sync/atomic" - - "go.opentelemetry.io/otel/propagation" -) - -var _ io.ReadCloser = &bodyWrapper{} - -// bodyWrapper wraps a http.Request.Body (an io.ReadCloser) to track the number -// of bytes read and the last error. -type bodyWrapper struct { - io.ReadCloser - record func(n int64) // must not be nil - - read atomic.Int64 - err error -} - -func (w *bodyWrapper) Read(b []byte) (int, error) { - n, err := w.ReadCloser.Read(b) - n1 := int64(n) - w.read.Add(n1) - w.err = err - w.record(n1) - return n, err -} - -func (w *bodyWrapper) Close() error { - return w.ReadCloser.Close() -} - -var _ http.ResponseWriter = &respWriterWrapper{} - -// respWriterWrapper wraps a http.ResponseWriter in order to track the number of -// bytes written, the last error, and to catch the first written statusCode. -// TODO: The wrapped http.ResponseWriter doesn't implement any of the optional -// types (http.Hijacker, http.Pusher, http.CloseNotifier, http.Flusher, etc) -// that may be useful when using it in real life situations. -type respWriterWrapper struct { - http.ResponseWriter - record func(n int64) // must not be nil - - // used to inject the header - ctx context.Context - - props propagation.TextMapPropagator - - written int64 - statusCode int - err error - wroteHeader bool -} - -func (w *respWriterWrapper) Header() http.Header { - return w.ResponseWriter.Header() -} - -func (w *respWriterWrapper) Write(p []byte) (int, error) { - if !w.wroteHeader { - w.WriteHeader(http.StatusOK) - } - n, err := w.ResponseWriter.Write(p) - n1 := int64(n) - w.record(n1) - w.written += n1 - w.err = err - return n, err -} - -// WriteHeader persists initial statusCode for span attribution. -// All calls to WriteHeader will be propagated to the underlying ResponseWriter -// and will persist the statusCode from the first call. -// Blocking consecutive calls to WriteHeader alters expected behavior and will -// remove warning logs from net/http where developers will notice incorrect handler implementations. -func (w *respWriterWrapper) WriteHeader(statusCode int) { - if !w.wroteHeader { - w.wroteHeader = true - w.statusCode = statusCode - } - w.ResponseWriter.WriteHeader(statusCode) -} - -func (w *respWriterWrapper) Flush() { - if !w.wroteHeader { - w.WriteHeader(http.StatusOK) - } - - if f, ok := w.ResponseWriter.(http.Flusher); ok { - f.Flush() - } -} diff --git a/vendor/go.opentelemetry.io/otel/.codespellignore b/vendor/go.opentelemetry.io/otel/.codespellignore deleted file mode 100644 index 6bf3abc4..00000000 --- a/vendor/go.opentelemetry.io/otel/.codespellignore +++ /dev/null @@ -1,9 +0,0 @@ -ot -fo -te -collison -consequentially -ans -nam -valu -thirdparty diff --git a/vendor/go.opentelemetry.io/otel/.codespellrc b/vendor/go.opentelemetry.io/otel/.codespellrc deleted file mode 100644 index e2cb3ea9..00000000 --- a/vendor/go.opentelemetry.io/otel/.codespellrc +++ /dev/null @@ -1,10 +0,0 @@ -# https://github.com/codespell-project/codespell -[codespell] -builtin = clear,rare,informal -check-filenames = -check-hidden = -ignore-words = .codespellignore -interactive = 1 -skip = .git,go.mod,go.sum,go.work,go.work.sum,semconv,venv,.tools -uri-ignore-words-list = * -write = diff --git a/vendor/go.opentelemetry.io/otel/.gitattributes b/vendor/go.opentelemetry.io/otel/.gitattributes deleted file mode 100644 index 314766e9..00000000 --- a/vendor/go.opentelemetry.io/otel/.gitattributes +++ /dev/null @@ -1,3 +0,0 @@ -* text=auto eol=lf -*.{cmd,[cC][mM][dD]} text eol=crlf -*.{bat,[bB][aA][tT]} text eol=crlf diff --git a/vendor/go.opentelemetry.io/otel/.gitignore b/vendor/go.opentelemetry.io/otel/.gitignore deleted file mode 100644 index 895c7664..00000000 --- a/vendor/go.opentelemetry.io/otel/.gitignore +++ /dev/null @@ -1,22 +0,0 @@ -.DS_Store -Thumbs.db - -.tools/ -venv/ -.idea/ -.vscode/ -*.iml -*.so -coverage.* -go.work -go.work.sum - -gen/ - -/example/dice/dice -/example/namedtracer/namedtracer -/example/otel-collector/otel-collector -/example/opencensus/opencensus -/example/passthrough/passthrough -/example/prometheus/prometheus -/example/zipkin/zipkin diff --git a/vendor/go.opentelemetry.io/otel/.golangci.yml b/vendor/go.opentelemetry.io/otel/.golangci.yml deleted file mode 100644 index 6d9c8b64..00000000 --- a/vendor/go.opentelemetry.io/otel/.golangci.yml +++ /dev/null @@ -1,302 +0,0 @@ -# See https://github.com/golangci/golangci-lint#config-file -run: - issues-exit-code: 1 #Default - tests: true #Default - -linters: - # Disable everything by default so upgrades to not include new "default - # enabled" linters. - disable-all: true - # Specifically enable linters we want to use. - enable: - - depguard - - errcheck - - errorlint - - godot - - gofumpt - - goimports - - gosec - - gosimple - - govet - - ineffassign - - misspell - - revive - - staticcheck - - tenv - - typecheck - - unconvert - - unused - - unparam - -issues: - # Maximum issues count per one linter. - # Set to 0 to disable. - # Default: 50 - # Setting to unlimited so the linter only is run once to debug all issues. - max-issues-per-linter: 0 - # Maximum count of issues with the same text. - # Set to 0 to disable. - # Default: 3 - # Setting to unlimited so the linter only is run once to debug all issues. - max-same-issues: 0 - # Excluding configuration per-path, per-linter, per-text and per-source. - exclude-rules: - # TODO: Having appropriate comments for exported objects helps development, - # even for objects in internal packages. Appropriate comments for all - # exported objects should be added and this exclusion removed. - - path: '.*internal/.*' - text: "exported (method|function|type|const) (.+) should have comment or be unexported" - linters: - - revive - # Yes, they are, but it's okay in a test. - - path: _test\.go - text: "exported func.*returns unexported type.*which can be annoying to use" - linters: - - revive - # Example test functions should be treated like main. - - path: example.*_test\.go - text: "calls to (.+) only in main[(][)] or init[(][)] functions" - linters: - - revive - # It's okay to not run gosec in a test. - - path: _test\.go - linters: - - gosec - # Igonoring gosec G404: Use of weak random number generator (math/rand instead of crypto/rand) - # as we commonly use it in tests and examples. - - text: "G404:" - linters: - - gosec - # Igonoring gosec G402: TLS MinVersion too low - # as the https://pkg.go.dev/crypto/tls#Config handles MinVersion default well. - - text: "G402: TLS MinVersion too low." - linters: - - gosec - include: - # revive exported should have comment or be unexported. - - EXC0012 - # revive package comment should be of the form ... - - EXC0013 - -linters-settings: - depguard: - rules: - non-tests: - files: - - "!$test" - - "!**/*test/*.go" - - "!**/internal/matchers/*.go" - deny: - - pkg: "testing" - - pkg: "github.com/stretchr/testify" - - pkg: "crypto/md5" - - pkg: "crypto/sha1" - - pkg: "crypto/**/pkix" - otlp-internal: - files: - - "!**/exporters/otlp/internal/**/*.go" - deny: - - pkg: "go.opentelemetry.io/otel/exporters/otlp/internal" - desc: Do not use cross-module internal packages. - otlptrace-internal: - files: - - "!**/exporters/otlp/otlptrace/*.go" - - "!**/exporters/otlp/otlptrace/internal/**.go" - deny: - - pkg: "go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal" - desc: Do not use cross-module internal packages. - otlpmetric-internal: - files: - - "!**/exporters/otlp/otlpmetric/internal/*.go" - - "!**/exporters/otlp/otlpmetric/internal/**/*.go" - deny: - - pkg: "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal" - desc: Do not use cross-module internal packages. - otel-internal: - files: - - "**/sdk/*.go" - - "**/sdk/**/*.go" - - "**/exporters/*.go" - - "**/exporters/**/*.go" - - "**/schema/*.go" - - "**/schema/**/*.go" - - "**/metric/*.go" - - "**/metric/**/*.go" - - "**/bridge/*.go" - - "**/bridge/**/*.go" - - "**/example/*.go" - - "**/example/**/*.go" - - "**/trace/*.go" - - "**/trace/**/*.go" - - "**/log/*.go" - - "**/log/**/*.go" - deny: - - pkg: "go.opentelemetry.io/otel/internal$" - desc: Do not use cross-module internal packages. - - pkg: "go.opentelemetry.io/otel/internal/attribute" - desc: Do not use cross-module internal packages. - - pkg: "go.opentelemetry.io/otel/internal/internaltest" - desc: Do not use cross-module internal packages. - - pkg: "go.opentelemetry.io/otel/internal/matchers" - desc: Do not use cross-module internal packages. - godot: - exclude: - # Exclude links. - - '^ *\[[^]]+\]:' - # Exclude sentence fragments for lists. - - '^[ ]*[-•]' - # Exclude sentences prefixing a list. - - ':$' - goimports: - local-prefixes: go.opentelemetry.io - misspell: - locale: US - ignore-words: - - cancelled - revive: - # Sets the default failure confidence. - # This means that linting errors with less than 0.8 confidence will be ignored. - # Default: 0.8 - confidence: 0.01 - rules: - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#blank-imports - - name: blank-imports - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#bool-literal-in-expr - - name: bool-literal-in-expr - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#constant-logical-expr - - name: constant-logical-expr - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#context-as-argument - # TODO (#3372) re-enable linter when it is compatible. https://github.com/golangci/golangci-lint/issues/3280 - - name: context-as-argument - disabled: true - arguments: - allowTypesBefore: "*testing.T" - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#context-keys-type - - name: context-keys-type - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#deep-exit - - name: deep-exit - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#defer - - name: defer - disabled: false - arguments: - - ["call-chain", "loop"] - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#dot-imports - - name: dot-imports - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#duplicated-imports - - name: duplicated-imports - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#early-return - - name: early-return - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#empty-block - - name: empty-block - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#empty-lines - - name: empty-lines - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#error-naming - - name: error-naming - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#error-return - - name: error-return - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#error-strings - - name: error-strings - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#errorf - - name: errorf - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#exported - - name: exported - disabled: false - arguments: - - "sayRepetitiveInsteadOfStutters" - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#flag-parameter - - name: flag-parameter - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#identical-branches - - name: identical-branches - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#if-return - - name: if-return - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#increment-decrement - - name: increment-decrement - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#indent-error-flow - - name: indent-error-flow - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#import-shadowing - - name: import-shadowing - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#package-comments - - name: package-comments - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#range - - name: range - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#range-val-in-closure - - name: range-val-in-closure - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#range-val-address - - name: range-val-address - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#redefines-builtin-id - - name: redefines-builtin-id - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#string-format - - name: string-format - disabled: false - arguments: - - - panic - - '/^[^\n]*$/' - - must not contain line breaks - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#struct-tag - - name: struct-tag - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#superfluous-else - - name: superfluous-else - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#time-equal - - name: time-equal - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#var-naming - - name: var-naming - disabled: false - arguments: - - ["ID"] # AllowList - - ["Otel", "Aws", "Gcp"] # DenyList - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#var-declaration - - name: var-declaration - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unconditional-recursion - - name: unconditional-recursion - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unexported-return - - name: unexported-return - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unhandled-error - - name: unhandled-error - disabled: false - arguments: - - "fmt.Fprint" - - "fmt.Fprintf" - - "fmt.Fprintln" - - "fmt.Print" - - "fmt.Printf" - - "fmt.Println" - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#unnecessary-stmt - - name: unnecessary-stmt - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#useless-break - - name: useless-break - disabled: false - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md#waitgroup-by-value - - name: waitgroup-by-value - disabled: false diff --git a/vendor/go.opentelemetry.io/otel/.lycheeignore b/vendor/go.opentelemetry.io/otel/.lycheeignore deleted file mode 100644 index 40d62fa2..00000000 --- a/vendor/go.opentelemetry.io/otel/.lycheeignore +++ /dev/null @@ -1,6 +0,0 @@ -http://localhost -http://jaeger-collector -https://github.com/open-telemetry/opentelemetry-go/milestone/ -https://github.com/open-telemetry/opentelemetry-go/projects -file:///home/runner/work/opentelemetry-go/opentelemetry-go/libraries -file:///home/runner/work/opentelemetry-go/opentelemetry-go/manual diff --git a/vendor/go.opentelemetry.io/otel/.markdownlint.yaml b/vendor/go.opentelemetry.io/otel/.markdownlint.yaml deleted file mode 100644 index 3202496c..00000000 --- a/vendor/go.opentelemetry.io/otel/.markdownlint.yaml +++ /dev/null @@ -1,29 +0,0 @@ -# Default state for all rules -default: true - -# ul-style -MD004: false - -# hard-tabs -MD010: false - -# line-length -MD013: false - -# no-duplicate-header -MD024: - siblings_only: true - -#single-title -MD025: false - -# ol-prefix -MD029: - style: ordered - -# no-inline-html -MD033: false - -# fenced-code-language -MD040: false - diff --git a/vendor/go.opentelemetry.io/otel/CHANGELOG.md b/vendor/go.opentelemetry.io/otel/CHANGELOG.md deleted file mode 100644 index c01e6998..00000000 --- a/vendor/go.opentelemetry.io/otel/CHANGELOG.md +++ /dev/null @@ -1,3099 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - -This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [Unreleased] - -## [1.28.0/0.50.0/0.4.0] 2024-07-02 - -### Added - -- The `IsEmpty` method is added to the `Instrument` type in `go.opentelemetry.io/otel/sdk/metric`. - This method is used to check if an `Instrument` instance is a zero-value. (#5431) -- Store and provide the emitted `context.Context` in `ScopeRecords` of `go.opentelemetry.io/otel/sdk/log/logtest`. (#5468) -- The `go.opentelemetry.io/otel/semconv/v1.26.0` package. - The package contains semantic conventions from the `v1.26.0` version of the OpenTelemetry Semantic Conventions. (#5476) -- The `AssertRecordEqual` method to `go.opentelemetry.io/otel/log/logtest` to allow comparison of two log records in tests. (#5499) -- The `WithHeaders` option to `go.opentelemetry.io/otel/exporters/zipkin` to allow configuring custom http headers while exporting spans. (#5530) - -### Changed - -- `Tracer.Start` in `go.opentelemetry.io/otel/trace/noop` no longer allocates a span for empty span context. (#5457) -- Upgrade `go.opentelemetry.io/otel/semconv/v1.25.0` to `go.opentelemetry.io/otel/semconv/v1.26.0` in `go.opentelemetry.io/otel/example/otel-collector`. (#5490) -- Upgrade `go.opentelemetry.io/otel/semconv/v1.25.0` to `go.opentelemetry.io/otel/semconv/v1.26.0` in `go.opentelemetry.io/otel/example/zipkin`. (#5490) -- Upgrade `go.opentelemetry.io/otel/semconv/v1.25.0` to `go.opentelemetry.io/otel/semconv/v1.26.0` in `go.opentelemetry.io/otel/exporters/zipkin`. (#5490) - - The exporter no longer exports the deprecated "otel.library.name" or "otel.library.version" attributes. -- Upgrade `go.opentelemetry.io/otel/semconv/v1.25.0` to `go.opentelemetry.io/otel/semconv/v1.26.0` in `go.opentelemetry.io/otel/sdk/resource`. (#5490) -- Upgrade `go.opentelemetry.io/otel/semconv/v1.25.0` to `go.opentelemetry.io/otel/semconv/v1.26.0` in `go.opentelemetry.io/otel/sdk/trace`. (#5490) -- `SimpleProcessor.OnEmit` in `go.opentelemetry.io/otel/sdk/log` no longer allocates a slice which makes it possible to have a zero-allocation log processing using `SimpleProcessor`. (#5493) -- Use non-generic functions in the `Start` method of `"go.opentelemetry.io/otel/sdk/trace".Trace` to reduce memory allocation. (#5497) -- `service.instance.id` is populated for a `Resource` created with `"go.opentelemetry.io/otel/sdk/resource".Default` with a default value when `OTEL_GO_X_RESOURCE` is set. (#5520) -- Improve performance of metric instruments in `go.opentelemetry.io/otel/sdk/metric` by removing unnecessary calls to `time.Now`. (#5545) - -### Fixed - -- Log a warning to the OpenTelemetry internal logger when a `Record` in `go.opentelemetry.io/otel/sdk/log` drops an attribute due to a limit being reached. (#5376) -- Identify the `Tracer` returned from the global `TracerProvider` in `go.opentelemetry.io/otel/global` with its schema URL. (#5426) -- Identify the `Meter` returned from the global `MeterProvider` in `go.opentelemetry.io/otel/global` with its schema URL. (#5426) -- Log a warning to the OpenTelemetry internal logger when a `Span` in `go.opentelemetry.io/otel/sdk/trace` drops an attribute, event, or link due to a limit being reached. (#5434) -- Document instrument name requirements in `go.opentelemetry.io/otel/metric`. (#5435) -- Prevent random number generation data-race for experimental rand exemplars in `go.opentelemetry.io/otel/sdk/metric`. (#5456) -- Fix counting number of dropped attributes of `Record` in `go.opentelemetry.io/otel/sdk/log`. (#5464) -- Fix panic in baggage creation when a member contains `0x80` char in key or value. (#5494) -- Correct comments for the priority of the `WithEndpoint` and `WithEndpointURL` options and their corresponding environment variables in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`. (#5508) -- Retry trace and span ID generation if it generated an invalid one in `go.opentelemetry.io/otel/sdk/trace`. (#5514) -- Fix stale timestamps reported by the last-value aggregation. (#5517) -- Indicate the `Exporter` in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp` must be created by the `New` method. (#5521) -- Improved performance in all `{Bool,Int64,Float64,String}SliceValue` functions of `go.opentelemetry.io/attributes` by reducing the number of allocations. (#5549) - -## [1.27.0/0.49.0/0.3.0] 2024-05-21 - -### Added - -- Add example for `go.opentelemetry.io/otel/exporters/stdout/stdoutlog`. (#5242) -- Add `RecordFactory` in `go.opentelemetry.io/otel/sdk/log/logtest` to facilitate testing exporter and processor implementations. (#5258) -- Add `RecordFactory` in `go.opentelemetry.io/otel/log/logtest` to facilitate testing bridge implementations. (#5263) -- The count of dropped records from the `BatchProcessor` in `go.opentelemetry.io/otel/sdk/log` is logged. (#5276) -- Add metrics in the `otel-collector` example. (#5283) -- Add the synchronous gauge instrument to `go.opentelemetry.io/otel/metric`. (#5304) - - An `int64` or `float64` synchronous gauge instrument can now be created from a `Meter`. - - All implementations of the API (`go.opentelemetry.io/otel/metric/noop`, `go.opentelemetry.io/otel/sdk/metric`) are updated to support this instrument. -- Add logs to `go.opentelemetry.io/otel/example/dice`. (#5349) - -### Changed - -- The `Shutdown` method of `Exporter` in `go.opentelemetry.io/otel/exporters/stdout/stdouttrace` ignores the context cancellation and always returns `nil`. (#5189) -- The `ForceFlush` and `Shutdown` methods of the exporter returned by `New` in `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` ignore the context cancellation and always return `nil`. (#5189) -- Apply the value length limits to `Record` attributes in `go.opentelemetry.io/otel/sdk/log`. (#5230) -- De-duplicate map attributes added to a `Record` in `go.opentelemetry.io/otel/sdk/log`. (#5230) -- `go.opentelemetry.io/otel/exporters/stdout/stdoutlog` won't print timestamps when `WithoutTimestamps` option is set. (#5241) -- The `go.opentelemetry.io/otel/exporters/stdout/stdoutlog` exporter won't print `AttributeValueLengthLimit` and `AttributeCountLimit` fields now, instead it prints the `DroppedAttributes` field. (#5272) -- Improved performance in the `Stringer` implementation of `go.opentelemetry.io/otel/baggage.Member` by reducing the number of allocations. (#5286) -- Set the start time for last-value aggregates in `go.opentelemetry.io/otel/sdk/metric`. (#5305) -- The `Span` in `go.opentelemetry.io/otel/sdk/trace` will record links without span context if either non-empty `TraceState` or attributes are provided. (#5315) -- Upgrade all dependencies of `go.opentelemetry.io/otel/semconv/v1.24.0` to `go.opentelemetry.io/otel/semconv/v1.25.0`. (#5374) - -### Fixed - -- Comparison of unordered maps for `go.opentelemetry.io/otel/log.KeyValue` and `go.opentelemetry.io/otel/log.Value`. (#5306) -- Fix the empty output of `go.opentelemetry.io/otel/log.Value` in `go.opentelemetry.io/otel/exporters/stdout/stdoutlog`. (#5311) -- Split the behavior of `Recorder` in `go.opentelemetry.io/otel/log/logtest` so it behaves as a `LoggerProvider` only. (#5365) -- Fix wrong package name of the error message when parsing endpoint URL in `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#5371) -- Identify the `Logger` returned from the global `LoggerProvider` in `go.opentelemetry.io/otel/log/global` with its schema URL. (#5375) - -## [1.26.0/0.48.0/0.2.0-alpha] 2024-04-24 - -### Added - -- Add `Recorder` in `go.opentelemetry.io/otel/log/logtest` to facilitate testing the log bridge implementations. (#5134) -- Add span flags to OTLP spans and links exported by `go.opentelemetry.io/otel/exporters/otlp/otlptrace`. (#5194) -- Make the initial alpha release of `go.opentelemetry.io/otel/sdk/log`. - This new module contains the Go implementation of the OpenTelemetry Logs SDK. - This module is unstable and breaking changes may be introduced. - See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. (#5240) -- Make the initial alpha release of `go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. - This new module contains an OTLP exporter that transmits log telemetry using HTTP. - This module is unstable and breaking changes may be introduced. - See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. (#5240) -- Make the initial alpha release of `go.opentelemetry.io/otel/exporters/stdout/stdoutlog`. - This new module contains an exporter prints log records to STDOUT. - This module is unstable and breaking changes may be introduced. - See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. (#5240) -- The `go.opentelemetry.io/otel/semconv/v1.25.0` package. - The package contains semantic conventions from the `v1.25.0` version of the OpenTelemetry Semantic Conventions. (#5254) - -### Changed - -- Update `go.opentelemetry.io/proto/otlp` from v1.1.0 to v1.2.0. (#5177) -- Improve performance of baggage member character validation in `go.opentelemetry.io/otel/baggage`. (#5214) -- The `otel-collector` example now uses docker compose to bring up services instead of kubernetes. (#5244) - -### Fixed - -- Slice attribute values in `go.opentelemetry.io/otel/attribute` are now emitted as their JSON representation. (#5159) - -## [1.25.0/0.47.0/0.0.8/0.1.0-alpha] 2024-04-05 - -### Added - -- Add `WithProxy` option in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#4906) -- Add `WithProxy` option in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlptracehttp`. (#4906) -- Add `AddLink` method to the `Span` interface in `go.opentelemetry.io/otel/trace`. (#5032) -- The `Enabled` method is added to the `Logger` interface in `go.opentelemetry.io/otel/log`. - This method is used to notify users if a log record will be emitted or not. (#5071) -- Add `SeverityUndefined` `const` to `go.opentelemetry.io/otel/log`. - This value represents an unset severity level. (#5072) -- Add `Empty` function in `go.opentelemetry.io/otel/log` to return a `KeyValue` for an empty value. (#5076) -- Add `go.opentelemetry.io/otel/log/global` to manage the global `LoggerProvider`. - This package is provided with the anticipation that all functionality will be migrate to `go.opentelemetry.io/otel` when `go.opentelemetry.io/otel/log` stabilizes. - At which point, users will be required to migrage their code, and this package will be deprecated then removed. (#5085) -- Add support for `Summary` metrics in the `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` exporters. (#5100) -- Add `otel.scope.name` and `otel.scope.version` tags to spans exported by `go.opentelemetry.io/otel/exporters/zipkin`. (#5108) -- Add support for `AddLink` to `go.opentelemetry.io/otel/bridge/opencensus`. (#5116) -- Add `String` method to `Value` and `KeyValue` in `go.opentelemetry.io/otel/log`. (#5117) -- Add Exemplar support to `go.opentelemetry.io/otel/exporters/prometheus`. (#5111) -- Add metric semantic conventions to `go.opentelemetry.io/otel/semconv/v1.24.0`. Future `semconv` packages will include metric semantic conventions as well. (#4528) - -### Changed - -- `SpanFromContext` and `SpanContextFromContext` in `go.opentelemetry.io/otel/trace` no longer make a heap allocation when the passed context has no span. (#5049) -- `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` now create a gRPC client in idle mode and with "dns" as the default resolver using [`grpc.NewClient`](https://pkg.go.dev/google.golang.org/grpc#NewClient). (#5151) - Because of that `WithDialOption` ignores [`grpc.WithBlock`](https://pkg.go.dev/google.golang.org/grpc#WithBlock), [`grpc.WithTimeout`](https://pkg.go.dev/google.golang.org/grpc#WithTimeout), and [`grpc.WithReturnConnectionError`](https://pkg.go.dev/google.golang.org/grpc#WithReturnConnectionError). - Notice that [`grpc.DialContext`](https://pkg.go.dev/google.golang.org/grpc#DialContext) which was used before is now deprecated. - -### Fixed - -- Clarify the documentation about equivalence guarantees for the `Set` and `Distinct` types in `go.opentelemetry.io/otel/attribute`. (#5027) -- Prevent default `ErrorHandler` self-delegation. (#5137) -- Update all dependencies to address [GO-2024-2687]. (#5139) - -### Removed - -- Drop support for [Go 1.20]. (#4967) - -### Deprecated - -- Deprecate `go.opentelemetry.io/otel/attribute.Sortable` type. (#4734) -- Deprecate `go.opentelemetry.io/otel/attribute.NewSetWithSortable` function. (#4734) -- Deprecate `go.opentelemetry.io/otel/attribute.NewSetWithSortableFiltered` function. (#4734) - -## [1.24.0/0.46.0/0.0.1-alpha] 2024-02-23 - -This release is the last to support [Go 1.20]. -The next release will require at least [Go 1.21]. - -### Added - -- Support [Go 1.22]. (#4890) -- Add exemplar support to `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`. (#4900) -- Add exemplar support to `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#4900) -- The `go.opentelemetry.io/otel/log` module is added. - This module includes OpenTelemetry Go's implementation of the Logs Bridge API. - This module is in an alpha state, it is subject to breaking changes. - See our [versioning policy](./VERSIONING.md) for more info. (#4961) -- ARM64 platform to the compatibility testing suite. (#4994) - -### Fixed - -- Fix registration of multiple callbacks when using the global meter provider from `go.opentelemetry.io/otel`. (#4945) -- Fix negative buckets in output of exponential histograms. (#4956) - -## [1.23.1] 2024-02-07 - -### Fixed - -- Register all callbacks passed during observable instrument creation instead of just the last one multiple times in `go.opentelemetry.io/otel/sdk/metric`. (#4888) - -## [1.23.0] 2024-02-06 - -This release contains the first stable, `v1`, release of the following modules: - -- `go.opentelemetry.io/otel/bridge/opencensus` -- `go.opentelemetry.io/otel/bridge/opencensus/test` -- `go.opentelemetry.io/otel/example/opencensus` -- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` -- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` -- `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` - -See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. - -### Added - -- Add `WithEndpointURL` option to the `exporters/otlp/otlpmetric/otlpmetricgrpc`, `exporters/otlp/otlpmetric/otlpmetrichttp`, `exporters/otlp/otlptrace/otlptracegrpc` and `exporters/otlp/otlptrace/otlptracehttp` packages. (#4808) -- Experimental exemplar exporting is added to the metric SDK. - See [metric documentation](./sdk/metric/internal/x/README.md#exemplars) for more information about this feature and how to enable it. (#4871) -- `ErrSchemaURLConflict` is added to `go.opentelemetry.io/otel/sdk/resource`. - This error is returned when a merge of two `Resource`s with different (non-empty) schema URL is attempted. (#4876) - -### Changed - -- The `Merge` and `New` functions in `go.opentelemetry.io/otel/sdk/resource` now returns a partial result if there is a schema URL merge conflict. - Instead of returning `nil` when two `Resource`s with different (non-empty) schema URLs are merged the merged `Resource`, along with the new `ErrSchemaURLConflict` error, is returned. - It is up to the user to decide if they want to use the returned `Resource` or not. - It may have desired attributes overwritten or include stale semantic conventions. (#4876) - -### Fixed - -- Fix `ContainerID` resource detection on systemd when cgroup path has a colon. (#4449) -- Fix `go.opentelemetry.io/otel/sdk/metric` to cache instruments to avoid leaking memory when the same instrument is created multiple times. (#4820) -- Fix missing `Mix` and `Max` values for `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` by introducing `MarshalText` and `MarshalJSON` for the `Extrema` type in `go.opentelemetry.io/sdk/metric/metricdata`. (#4827) - -## [1.23.0-rc.1] 2024-01-18 - -This is a release candidate for the v1.23.0 release. -That release is expected to include the `v1` release of the following modules: - -- `go.opentelemetry.io/otel/bridge/opencensus` -- `go.opentelemetry.io/otel/bridge/opencensus/test` -- `go.opentelemetry.io/otel/example/opencensus` -- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` -- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` -- `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` - -See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. - -## [1.22.0/0.45.0] 2024-01-17 - -### Added - -- The `go.opentelemetry.io/otel/semconv/v1.22.0` package. - The package contains semantic conventions from the `v1.22.0` version of the OpenTelemetry Semantic Conventions. (#4735) -- The `go.opentelemetry.io/otel/semconv/v1.23.0` package. - The package contains semantic conventions from the `v1.23.0` version of the OpenTelemetry Semantic Conventions. (#4746) -- The `go.opentelemetry.io/otel/semconv/v1.23.1` package. - The package contains semantic conventions from the `v1.23.1` version of the OpenTelemetry Semantic Conventions. (#4749) -- The `go.opentelemetry.io/otel/semconv/v1.24.0` package. - The package contains semantic conventions from the `v1.24.0` version of the OpenTelemetry Semantic Conventions. (#4770) -- Add `WithResourceAsConstantLabels` option to apply resource attributes for every metric emitted by the Prometheus exporter. (#4733) -- Experimental cardinality limiting is added to the metric SDK. - See [metric documentation](./sdk/metric/internal/x/README.md#cardinality-limit) for more information about this feature and how to enable it. (#4457) -- Add `NewMemberRaw` and `NewKeyValuePropertyRaw` in `go.opentelemetry.io/otel/baggage`. (#4804) - -### Changed - -- Upgrade all use of `go.opentelemetry.io/otel/semconv` to use `v1.24.0`. (#4754) -- Update transformations in `go.opentelemetry.io/otel/exporters/zipkin` to follow `v1.24.0` version of the OpenTelemetry specification. (#4754) -- Record synchronous measurements when the passed context is canceled instead of dropping in `go.opentelemetry.io/otel/sdk/metric`. - If you do not want to make a measurement when the context is cancelled, you need to handle it yourself (e.g `if ctx.Err() != nil`). (#4671) -- Improve `go.opentelemetry.io/otel/trace.TraceState`'s performance. (#4722) -- Improve `go.opentelemetry.io/otel/propagation.TraceContext`'s performance. (#4721) -- Improve `go.opentelemetry.io/otel/baggage` performance. (#4743) -- Improve performance of the `(*Set).Filter` method in `go.opentelemetry.io/otel/attribute` when the passed filter does not filter out any attributes from the set. (#4774) -- `Member.String` in `go.opentelemetry.io/otel/baggage` percent-encodes only when necessary. (#4775) -- Improve `go.opentelemetry.io/otel/trace.Span`'s performance when adding multiple attributes. (#4818) -- `Property.Value` in `go.opentelemetry.io/otel/baggage` now returns a raw string instead of a percent-encoded value. (#4804) - -### Fixed - -- Fix `Parse` in `go.opentelemetry.io/otel/baggage` to validate member value before percent-decoding. (#4755) -- Fix whitespace encoding of `Member.String` in `go.opentelemetry.io/otel/baggage`. (#4756) -- Fix observable not registered error when the asynchronous instrument has a drop aggregation in `go.opentelemetry.io/otel/sdk/metric`. (#4772) -- Fix baggage item key so that it is not canonicalized in `go.opentelemetry.io/otel/bridge/opentracing`. (#4776) -- Fix `go.opentelemetry.io/otel/bridge/opentracing` to properly handle baggage values that requires escaping during propagation. (#4804) -- Fix a bug where using multiple readers resulted in incorrect asynchronous counter values in `go.opentelemetry.io/otel/sdk/metric`. (#4742) - -## [1.21.0/0.44.0] 2023-11-16 - -### Removed - -- Remove the deprecated `go.opentelemetry.io/otel/bridge/opencensus.NewTracer`. (#4706) -- Remove the deprecated `go.opentelemetry.io/otel/exporters/otlp/otlpmetric` module. (#4707) -- Remove the deprecated `go.opentelemetry.io/otel/example/view` module. (#4708) -- Remove the deprecated `go.opentelemetry.io/otel/example/fib` module. (#4723) - -### Fixed - -- Do not parse non-protobuf responses in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#4719) -- Do not parse non-protobuf responses in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#4719) - -## [1.20.0/0.43.0] 2023-11-10 - -This release brings a breaking change for custom trace API implementations. Some interfaces (`TracerProvider`, `Tracer`, `Span`) now embed the `go.opentelemetry.io/otel/trace/embedded` types. Implementers need to update their implementations based on what they want the default behavior to be. See the "API Implementations" section of the [trace API] package documentation for more information about how to accomplish this. - -### Added - -- Add `go.opentelemetry.io/otel/bridge/opencensus.InstallTraceBridge`, which installs the OpenCensus trace bridge, and replaces `opencensus.NewTracer`. (#4567) -- Add scope version to trace and metric bridges in `go.opentelemetry.io/otel/bridge/opencensus`. (#4584) -- Add the `go.opentelemetry.io/otel/trace/embedded` package to be embedded in the exported trace API interfaces. (#4620) -- Add the `go.opentelemetry.io/otel/trace/noop` package as a default no-op implementation of the trace API. (#4620) -- Add context propagation in `go.opentelemetry.io/otel/example/dice`. (#4644) -- Add view configuration to `go.opentelemetry.io/otel/example/prometheus`. (#4649) -- Add `go.opentelemetry.io/otel/metric.WithExplicitBucketBoundaries`, which allows defining default explicit bucket boundaries when creating histogram instruments. (#4603) -- Add `Version` function in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`. (#4660) -- Add `Version` function in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#4660) -- Add Summary, SummaryDataPoint, and QuantileValue to `go.opentelemetry.io/sdk/metric/metricdata`. (#4622) -- `go.opentelemetry.io/otel/bridge/opencensus.NewMetricProducer` now supports exemplars from OpenCensus. (#4585) -- Add support for `WithExplicitBucketBoundaries` in `go.opentelemetry.io/otel/sdk/metric`. (#4605) -- Add support for Summary metrics in `go.opentelemetry.io/otel/bridge/opencensus`. (#4668) - -### Deprecated - -- Deprecate `go.opentelemetry.io/otel/bridge/opencensus.NewTracer` in favor of `opencensus.InstallTraceBridge`. (#4567) -- Deprecate `go.opentelemetry.io/otel/example/fib` package is in favor of `go.opentelemetry.io/otel/example/dice`. (#4618) -- Deprecate `go.opentelemetry.io/otel/trace.NewNoopTracerProvider`. - Use the added `NewTracerProvider` function in `go.opentelemetry.io/otel/trace/noop` instead. (#4620) -- Deprecate `go.opentelemetry.io/otel/example/view` package in favor of `go.opentelemetry.io/otel/example/prometheus`. (#4649) -- Deprecate `go.opentelemetry.io/otel/exporters/otlp/otlpmetric`. (#4693) - -### Changed - -- `go.opentelemetry.io/otel/bridge/opencensus.NewMetricProducer` returns a `*MetricProducer` struct instead of the metric.Producer interface. (#4583) -- The `TracerProvider` in `go.opentelemetry.io/otel/trace` now embeds the `go.opentelemetry.io/otel/trace/embedded.TracerProvider` type. - This extends the `TracerProvider` interface and is is a breaking change for any existing implementation. - Implementers need to update their implementations based on what they want the default behavior of the interface to be. - See the "API Implementations" section of the `go.opentelemetry.io/otel/trace` package documentation for more information about how to accomplish this. (#4620) -- The `Tracer` in `go.opentelemetry.io/otel/trace` now embeds the `go.opentelemetry.io/otel/trace/embedded.Tracer` type. - This extends the `Tracer` interface and is is a breaking change for any existing implementation. - Implementers need to update their implementations based on what they want the default behavior of the interface to be. - See the "API Implementations" section of the `go.opentelemetry.io/otel/trace` package documentation for more information about how to accomplish this. (#4620) -- The `Span` in `go.opentelemetry.io/otel/trace` now embeds the `go.opentelemetry.io/otel/trace/embedded.Span` type. - This extends the `Span` interface and is is a breaking change for any existing implementation. - Implementers need to update their implementations based on what they want the default behavior of the interface to be. - See the "API Implementations" section of the `go.opentelemetry.io/otel/trace` package documentation for more information about how to accomplish this. (#4620) -- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` does no longer depend on `go.opentelemetry.io/otel/exporters/otlp/otlpmetric`. (#4660) -- `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` does no longer depend on `go.opentelemetry.io/otel/exporters/otlp/otlpmetric`. (#4660) -- Retry for `502 Bad Gateway` and `504 Gateway Timeout` HTTP statuses in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#4670) -- Retry for `502 Bad Gateway` and `504 Gateway Timeout` HTTP statuses in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#4670) -- Retry for `RESOURCE_EXHAUSTED` only if RetryInfo is returned in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`. (#4669) -- Retry for `RESOURCE_EXHAUSTED` only if RetryInfo is returned in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`. (#4669) -- Retry temporary HTTP request failures in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#4679) -- Retry temporary HTTP request failures in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#4679) - -### Fixed - -- Fix improper parsing of characters such us `+`, `/` by `Parse` in `go.opentelemetry.io/otel/baggage` as they were rendered as a whitespace. (#4667) -- Fix improper parsing of characters such us `+`, `/` passed via `OTEL_RESOURCE_ATTRIBUTES` in `go.opentelemetry.io/otel/sdk/resource` as they were rendered as a whitespace. (#4699) -- Fix improper parsing of characters such us `+`, `/` passed via `OTEL_EXPORTER_OTLP_HEADERS` and `OTEL_EXPORTER_OTLP_METRICS_HEADERS` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` as they were rendered as a whitespace. (#4699) -- Fix improper parsing of characters such us `+`, `/` passed via `OTEL_EXPORTER_OTLP_HEADERS` and `OTEL_EXPORTER_OTLP_METRICS_HEADERS` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` as they were rendered as a whitespace. (#4699) -- Fix improper parsing of characters such us `+`, `/` passed via `OTEL_EXPORTER_OTLP_HEADERS` and `OTEL_EXPORTER_OTLP_TRACES_HEADERS` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlptracegrpc` as they were rendered as a whitespace. (#4699) -- Fix improper parsing of characters such us `+`, `/` passed via `OTEL_EXPORTER_OTLP_HEADERS` and `OTEL_EXPORTER_OTLP_TRACES_HEADERS` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlptracehttp` as they were rendered as a whitespace. (#4699) -- In `go.opentelemetry.op/otel/exporters/prometheus`, the exporter no longer `Collect`s metrics after `Shutdown` is invoked. (#4648) -- Fix documentation for `WithCompressor` in `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`. (#4695) -- Fix documentation for `WithCompressor` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`. (#4695) - -## [1.19.0/0.42.0/0.0.7] 2023-09-28 - -This release contains the first stable release of the OpenTelemetry Go [metric SDK]. -Our project stability guarantees now apply to the `go.opentelemetry.io/otel/sdk/metric` package. -See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. - -### Added - -- Add the "Roll the dice" getting started application example in `go.opentelemetry.io/otel/example/dice`. (#4539) -- The `WithWriter` and `WithPrettyPrint` options to `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` to set a custom `io.Writer`, and allow displaying the output in human-readable JSON. (#4507) - -### Changed - -- Allow '/' characters in metric instrument names. (#4501) -- The exporter in `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` does not prettify its output by default anymore. (#4507) -- Upgrade `gopkg.io/yaml` from `v2` to `v3` in `go.opentelemetry.io/otel/schema`. (#4535) - -### Fixed - -- In `go.opentelemetry.op/otel/exporters/prometheus`, don't try to create the Prometheus metric on every `Collect` if we know the scope is invalid. (#4499) - -### Removed - -- Remove `"go.opentelemetry.io/otel/bridge/opencensus".NewMetricExporter`, which is replaced by `NewMetricProducer`. (#4566) - -## [1.19.0-rc.1/0.42.0-rc.1] 2023-09-14 - -This is a release candidate for the v1.19.0/v0.42.0 release. -That release is expected to include the `v1` release of the OpenTelemetry Go metric SDK and will provide stability guarantees of that SDK. -See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. - -### Changed - -- Allow '/' characters in metric instrument names. (#4501) - -### Fixed - -- In `go.opentelemetry.op/otel/exporters/prometheus`, don't try to create the prometheus metric on every `Collect` if we know the scope is invalid. (#4499) - -## [1.18.0/0.41.0/0.0.6] 2023-09-12 - -This release drops the compatibility guarantee of [Go 1.19]. - -### Added - -- Add `WithProducer` option in `go.opentelemetry.op/otel/exporters/prometheus` to restore the ability to register producers on the prometheus exporter's manual reader. (#4473) -- Add `IgnoreValue` option in `go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest` to allow ignoring values when comparing metrics. (#4447) - -### Changed - -- Use a `TestingT` interface instead of `*testing.T` struct in `go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest`. (#4483) - -### Deprecated - -- The `NewMetricExporter` in `go.opentelemetry.io/otel/bridge/opencensus` was deprecated in `v0.35.0` (#3541). - The deprecation notice format for the function has been corrected to trigger Go documentation and build tooling. (#4470) - -### Removed - -- Removed the deprecated `go.opentelemetry.io/otel/exporters/jaeger` package. (#4467) -- Removed the deprecated `go.opentelemetry.io/otel/example/jaeger` package. (#4467) -- Removed the deprecated `go.opentelemetry.io/otel/sdk/metric/aggregation` package. (#4468) -- Removed the deprecated internal packages in `go.opentelemetry.io/otel/exporters/otlp` and its sub-packages. (#4469) -- Dropped guaranteed support for versions of Go less than 1.20. (#4481) - -## [1.17.0/0.40.0/0.0.5] 2023-08-28 - -### Added - -- Export the `ManualReader` struct in `go.opentelemetry.io/otel/sdk/metric`. (#4244) -- Export the `PeriodicReader` struct in `go.opentelemetry.io/otel/sdk/metric`. (#4244) -- Add support for exponential histogram aggregations. - A histogram can be configured as an exponential histogram using a view with `"go.opentelemetry.io/otel/sdk/metric".ExponentialHistogram` as the aggregation. (#4245) -- Export the `Exporter` struct in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`. (#4272) -- Export the `Exporter` struct in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#4272) -- The exporters in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric` now support the `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE` environment variable. (#4287) -- Add `WithoutCounterSuffixes` option in `go.opentelemetry.io/otel/exporters/prometheus` to disable addition of `_total` suffixes. (#4306) -- Add info and debug logging to the metric SDK in `go.opentelemetry.io/otel/sdk/metric`. (#4315) -- The `go.opentelemetry.io/otel/semconv/v1.21.0` package. - The package contains semantic conventions from the `v1.21.0` version of the OpenTelemetry Semantic Conventions. (#4362) -- Accept 201 to 299 HTTP status as success in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` and `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`. (#4365) -- Document the `Temporality` and `Aggregation` methods of the `"go.opentelemetry.io/otel/sdk/metric".Exporter"` need to be concurrent safe. (#4381) -- Expand the set of units supported by the Prometheus exporter, and don't add unit suffixes if they are already present in `go.opentelemetry.op/otel/exporters/prometheus` (#4374) -- Move the `Aggregation` interface and its implementations from `go.opentelemetry.io/otel/sdk/metric/aggregation` to `go.opentelemetry.io/otel/sdk/metric`. (#4435) -- The exporters in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric` now support the `OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION` environment variable. (#4437) -- Add the `NewAllowKeysFilter` and `NewDenyKeysFilter` functions to `go.opentelemetry.io/otel/attribute` to allow convenient creation of allow-keys and deny-keys filters. (#4444) -- Support Go 1.21. (#4463) - -### Changed - -- Starting from `v1.21.0` of semantic conventions, `go.opentelemetry.io/otel/semconv/{version}/httpconv` and `go.opentelemetry.io/otel/semconv/{version}/netconv` packages will no longer be published. (#4145) -- Log duplicate instrument conflict at a warning level instead of info in `go.opentelemetry.io/otel/sdk/metric`. (#4202) -- Return an error on the creation of new instruments in `go.opentelemetry.io/otel/sdk/metric` if their name doesn't pass regexp validation. (#4210) -- `NewManualReader` in `go.opentelemetry.io/otel/sdk/metric` returns `*ManualReader` instead of `Reader`. (#4244) -- `NewPeriodicReader` in `go.opentelemetry.io/otel/sdk/metric` returns `*PeriodicReader` instead of `Reader`. (#4244) -- Count the Collect time in the `PeriodicReader` timeout in `go.opentelemetry.io/otel/sdk/metric`. (#4221) -- The function `New` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` returns `*Exporter` instead of `"go.opentelemetry.io/otel/sdk/metric".Exporter`. (#4272) -- The function `New` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` returns `*Exporter` instead of `"go.opentelemetry.io/otel/sdk/metric".Exporter`. (#4272) -- If an attribute set is omitted from an async callback, the previous value will no longer be exported in `go.opentelemetry.io/otel/sdk/metric`. (#4290) -- If an attribute set is observed multiple times in an async callback in `go.opentelemetry.io/otel/sdk/metric`, the values will be summed instead of the last observation winning. (#4289) -- Allow the explicit bucket histogram aggregation to be used for the up-down counter, observable counter, observable up-down counter, and observable gauge in the `go.opentelemetry.io/otel/sdk/metric` package. (#4332) -- Restrict `Meter`s in `go.opentelemetry.io/otel/sdk/metric` to only register and collect instruments it created. (#4333) -- `PeriodicReader.Shutdown` and `PeriodicReader.ForceFlush` in `go.opentelemetry.io/otel/sdk/metric` now apply the periodic reader's timeout to the operation if the user provided context does not contain a deadline. (#4356, #4377) -- Upgrade all use of `go.opentelemetry.io/otel/semconv` to use `v1.21.0`. (#4408) -- Increase instrument name maximum length from 63 to 255 characters in `go.opentelemetry.io/otel/sdk/metric`. (#4434) -- Add `go.opentelemetry.op/otel/sdk/metric.WithProducer` as an `Option` for `"go.opentelemetry.io/otel/sdk/metric".NewManualReader` and `"go.opentelemetry.io/otel/sdk/metric".NewPeriodicReader`. (#4346) - -### Removed - -- Remove `Reader.RegisterProducer` in `go.opentelemetry.io/otel/metric`. - Use the added `WithProducer` option instead. (#4346) -- Remove `Reader.ForceFlush` in `go.opentelemetry.io/otel/metric`. - Notice that `PeriodicReader.ForceFlush` is still available. (#4375) - -### Fixed - -- Correctly format log messages from the `go.opentelemetry.io/otel/exporters/zipkin` exporter. (#4143) -- Log an error for calls to `NewView` in `go.opentelemetry.io/otel/sdk/metric` that have empty criteria. (#4307) -- Fix `"go.opentelemetry.io/otel/sdk/resource".WithHostID()` to not set an empty `host.id`. (#4317) -- Use the instrument identifying fields to cache aggregators and determine duplicate instrument registrations in `go.opentelemetry.io/otel/sdk/metric`. (#4337) -- Detect duplicate instruments for case-insensitive names in `go.opentelemetry.io/otel/sdk/metric`. (#4338) -- The `ManualReader` will not panic if `AggregationSelector` returns `nil` in `go.opentelemetry.io/otel/sdk/metric`. (#4350) -- If a `Reader`'s `AggregationSelector` returns `nil` or `DefaultAggregation` the pipeline will use the default aggregation. (#4350) -- Log a suggested view that fixes instrument conflicts in `go.opentelemetry.io/otel/sdk/metric`. (#4349) -- Fix possible panic, deadlock and race condition in batch span processor in `go.opentelemetry.io/otel/sdk/trace`. (#4353) -- Improve context cancellation handling in batch span processor's `ForceFlush` in `go.opentelemetry.io/otel/sdk/trace`. (#4369) -- Decouple `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal` from `go.opentelemetry.io/otel/exporters/otlp/internal` using gotmpl. (#4397, #3846) -- Decouple `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc/internal` from `go.opentelemetry.io/otel/exporters/otlp/internal` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal` using gotmpl. (#4404, #3846) -- Decouple `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp/internal` from `go.opentelemetry.io/otel/exporters/otlp/internal` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal` using gotmpl. (#4407, #3846) -- Decouple `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal` from `go.opentelemetry.io/otel/exporters/otlp/internal` and `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal` using gotmpl. (#4400, #3846) -- Decouple `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp/internal` from `go.opentelemetry.io/otel/exporters/otlp/internal` and `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal` using gotmpl. (#4401, #3846) -- Do not block the metric SDK when OTLP metric exports are blocked in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`. (#3925, #4395) -- Do not append `_total` if the counter already has that suffix for the Prometheus exproter in `go.opentelemetry.io/otel/exporter/prometheus`. (#4373) -- Fix resource detection data race in `go.opentelemetry.io/otel/sdk/resource`. (#4409) -- Use the first-seen instrument name during instrument name conflicts in `go.opentelemetry.io/otel/sdk/metric`. (#4428) - -### Deprecated - -- The `go.opentelemetry.io/otel/exporters/jaeger` package is deprecated. - OpenTelemetry dropped support for Jaeger exporter in July 2023. - Use `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp` - or `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` instead. (#4423) -- The `go.opentelemetry.io/otel/example/jaeger` package is deprecated. (#4423) -- The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal` package is deprecated. (#4420) -- The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/oconf` package is deprecated. (#4420) -- The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/otest` package is deprecated. (#4420) -- The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/transform` package is deprecated. (#4420) -- The `go.opentelemetry.io/otel/exporters/otlp/internal` package is deprecated. (#4421) -- The `go.opentelemetry.io/otel/exporters/otlp/internal/envconfig` package is deprecated. (#4421) -- The `go.opentelemetry.io/otel/exporters/otlp/internal/retry` package is deprecated. (#4421) -- The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal` package is deprecated. (#4425) -- The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/envconfig` package is deprecated. (#4425) -- The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/otlpconfig` package is deprecated. (#4425) -- The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/otlptracetest` package is deprecated. (#4425) -- The `go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/retry` package is deprecated. (#4425) -- The `go.opentelemetry.io/otel/sdk/metric/aggregation` package is deprecated. - Use the aggregation types added to `go.opentelemetry.io/otel/sdk/metric` instead. (#4435) - -## [1.16.0/0.39.0] 2023-05-18 - -This release contains the first stable release of the OpenTelemetry Go [metric API]. -Our project stability guarantees now apply to the `go.opentelemetry.io/otel/metric` package. -See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. - -### Added - -- The `go.opentelemetry.io/otel/semconv/v1.19.0` package. - The package contains semantic conventions from the `v1.19.0` version of the OpenTelemetry specification. (#3848) -- The `go.opentelemetry.io/otel/semconv/v1.20.0` package. - The package contains semantic conventions from the `v1.20.0` version of the OpenTelemetry specification. (#4078) -- The Exponential Histogram data types in `go.opentelemetry.io/otel/sdk/metric/metricdata`. (#4165) -- OTLP metrics exporter now supports the Exponential Histogram Data Type. (#4222) -- Fix serialization of `time.Time` zero values in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` packages. (#4271) - -### Changed - -- Use `strings.Cut()` instead of `string.SplitN()` for better readability and memory use. (#4049) -- `MeterProvider` returns noop meters once it has been shutdown. (#4154) - -### Removed - -- The deprecated `go.opentelemetry.io/otel/metric/instrument` package is removed. - Use `go.opentelemetry.io/otel/metric` instead. (#4055) - -### Fixed - -- Fix build for BSD based systems in `go.opentelemetry.io/otel/sdk/resource`. (#4077) - -## [1.16.0-rc.1/0.39.0-rc.1] 2023-05-03 - -This is a release candidate for the v1.16.0/v0.39.0 release. -That release is expected to include the `v1` release of the OpenTelemetry Go metric API and will provide stability guarantees of that API. -See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. - -### Added - -- Support global `MeterProvider` in `go.opentelemetry.io/otel`. (#4039) - - Use `Meter` for a `metric.Meter` from the global `metric.MeterProvider`. - - Use `GetMeterProivder` for a global `metric.MeterProvider`. - - Use `SetMeterProivder` to set the global `metric.MeterProvider`. - -### Changed - -- Move the `go.opentelemetry.io/otel/metric` module to the `stable-v1` module set. - This stages the metric API to be released as a stable module. (#4038) - -### Removed - -- The `go.opentelemetry.io/otel/metric/global` package is removed. - Use `go.opentelemetry.io/otel` instead. (#4039) - -## [1.15.1/0.38.1] 2023-05-02 - -### Fixed - -- Remove unused imports from `sdk/resource/host_id_bsd.go` which caused build failures. (#4040, #4041) - -## [1.15.0/0.38.0] 2023-04-27 - -### Added - -- The `go.opentelemetry.io/otel/metric/embedded` package. (#3916) -- The `Version` function to `go.opentelemetry.io/otel/sdk` to return the SDK version. (#3949) -- Add a `WithNamespace` option to `go.opentelemetry.io/otel/exporters/prometheus` to allow users to prefix metrics with a namespace. (#3970) -- The following configuration types were added to `go.opentelemetry.io/otel/metric/instrument` to be used in the configuration of measurement methods. (#3971) - - The `AddConfig` used to hold configuration for addition measurements - - `NewAddConfig` used to create a new `AddConfig` - - `AddOption` used to configure an `AddConfig` - - The `RecordConfig` used to hold configuration for recorded measurements - - `NewRecordConfig` used to create a new `RecordConfig` - - `RecordOption` used to configure a `RecordConfig` - - The `ObserveConfig` used to hold configuration for observed measurements - - `NewObserveConfig` used to create a new `ObserveConfig` - - `ObserveOption` used to configure an `ObserveConfig` -- `WithAttributeSet` and `WithAttributes` are added to `go.opentelemetry.io/otel/metric/instrument`. - They return an option used during a measurement that defines the attribute Set associated with the measurement. (#3971) -- The `Version` function to `go.opentelemetry.io/otel/exporters/otlp/otlpmetric` to return the OTLP metrics client version. (#3956) -- The `Version` function to `go.opentelemetry.io/otel/exporters/otlp/otlptrace` to return the OTLP trace client version. (#3956) - -### Changed - -- The `Extrema` in `go.opentelemetry.io/otel/sdk/metric/metricdata` is redefined with a generic argument of `[N int64 | float64]`. (#3870) -- Update all exported interfaces from `go.opentelemetry.io/otel/metric` to embed their corresponding interface from `go.opentelemetry.io/otel/metric/embedded`. - This adds an implementation requirement to set the interface default behavior for unimplemented methods. (#3916) -- Move No-Op implementation from `go.opentelemetry.io/otel/metric` into its own package `go.opentelemetry.io/otel/metric/noop`. (#3941) - - `metric.NewNoopMeterProvider` is replaced with `noop.NewMeterProvider` -- Add all the methods from `"go.opentelemetry.io/otel/trace".SpanContext` to `bridgeSpanContext` by embedding `otel.SpanContext` in `bridgeSpanContext`. (#3966) -- Wrap `UploadMetrics` error in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/` to improve error message when encountering generic grpc errors. (#3974) -- The measurement methods for all instruments in `go.opentelemetry.io/otel/metric/instrument` accept an option instead of the variadic `"go.opentelemetry.io/otel/attribute".KeyValue`. (#3971) - - The `Int64Counter.Add` method now accepts `...AddOption` - - The `Float64Counter.Add` method now accepts `...AddOption` - - The `Int64UpDownCounter.Add` method now accepts `...AddOption` - - The `Float64UpDownCounter.Add` method now accepts `...AddOption` - - The `Int64Histogram.Record` method now accepts `...RecordOption` - - The `Float64Histogram.Record` method now accepts `...RecordOption` - - The `Int64Observer.Observe` method now accepts `...ObserveOption` - - The `Float64Observer.Observe` method now accepts `...ObserveOption` -- The `Observer` methods in `go.opentelemetry.io/otel/metric` accept an option instead of the variadic `"go.opentelemetry.io/otel/attribute".KeyValue`. (#3971) - - The `Observer.ObserveInt64` method now accepts `...ObserveOption` - - The `Observer.ObserveFloat64` method now accepts `...ObserveOption` -- Move global metric back to `go.opentelemetry.io/otel/metric/global` from `go.opentelemetry.io/otel`. (#3986) - -### Fixed - -- `TracerProvider` allows calling `Tracer()` while it's shutting down. - It used to deadlock. (#3924) -- Use the SDK version for the Telemetry SDK resource detector in `go.opentelemetry.io/otel/sdk/resource`. (#3949) -- Fix a data race in `SpanProcessor` returned by `NewSimpleSpanProcessor` in `go.opentelemetry.io/otel/sdk/trace`. (#3951) -- Automatically figure out the default aggregation with `aggregation.Default`. (#3967) - -### Deprecated - -- The `go.opentelemetry.io/otel/metric/instrument` package is deprecated. - Use the equivalent types added to `go.opentelemetry.io/otel/metric` instead. (#4018) - -## [1.15.0-rc.2/0.38.0-rc.2] 2023-03-23 - -This is a release candidate for the v1.15.0/v0.38.0 release. -That release will include the `v1` release of the OpenTelemetry Go metric API and will provide stability guarantees of that API. -See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. - -### Added - -- The `WithHostID` option to `go.opentelemetry.io/otel/sdk/resource`. (#3812) -- The `WithoutTimestamps` option to `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` to sets all timestamps to zero. (#3828) -- The new `Exemplar` type is added to `go.opentelemetry.io/otel/sdk/metric/metricdata`. - Both the `DataPoint` and `HistogramDataPoint` types from that package have a new field of `Exemplars` containing the sampled exemplars for their timeseries. (#3849) -- Configuration for each metric instrument in `go.opentelemetry.io/otel/sdk/metric/instrument`. (#3895) -- The internal logging introduces a warning level verbosity equal to `V(1)`. (#3900) -- Added a log message warning about usage of `SimpleSpanProcessor` in production environments. (#3854) - -### Changed - -- Optimize memory allocation when creation a new `Set` using `NewSet` or `NewSetWithFiltered` in `go.opentelemetry.io/otel/attribute`. (#3832) -- Optimize memory allocation when creation new metric instruments in `go.opentelemetry.io/otel/sdk/metric`. (#3832) -- Avoid creating new objects on all calls to `WithDeferredSetup` and `SkipContextSetup` in OpenTracing bridge. (#3833) -- The `New` and `Detect` functions from `go.opentelemetry.io/otel/sdk/resource` return errors that wrap underlying errors instead of just containing the underlying error strings. (#3844) -- Both the `Histogram` and `HistogramDataPoint` are redefined with a generic argument of `[N int64 | float64]` in `go.opentelemetry.io/otel/sdk/metric/metricdata`. (#3849) -- The metric `Export` interface from `go.opentelemetry.io/otel/sdk/metric` accepts a `*ResourceMetrics` instead of `ResourceMetrics`. (#3853) -- Rename `Asynchronous` to `Observable` in `go.opentelemetry.io/otel/metric/instrument`. (#3892) -- Rename `Int64ObserverOption` to `Int64ObservableOption` in `go.opentelemetry.io/otel/metric/instrument`. (#3895) -- Rename `Float64ObserverOption` to `Float64ObservableOption` in `go.opentelemetry.io/otel/metric/instrument`. (#3895) -- The internal logging changes the verbosity level of info to `V(4)`, the verbosity level of debug to `V(8)`. (#3900) - -### Fixed - -- `TracerProvider` consistently doesn't allow to register a `SpanProcessor` after shutdown. (#3845) - -### Removed - -- The deprecated `go.opentelemetry.io/otel/metric/global` package is removed. (#3829) -- The unneeded `Synchronous` interface in `go.opentelemetry.io/otel/metric/instrument` was removed. (#3892) -- The `Float64ObserverConfig` and `NewFloat64ObserverConfig` in `go.opentelemetry.io/otel/sdk/metric/instrument`. - Use the added `float64` instrument configuration instead. (#3895) -- The `Int64ObserverConfig` and `NewInt64ObserverConfig` in `go.opentelemetry.io/otel/sdk/metric/instrument`. - Use the added `int64` instrument configuration instead. (#3895) -- The `NewNoopMeter` function in `go.opentelemetry.io/otel/metric`, use `NewMeterProvider().Meter("")` instead. (#3893) - -## [1.15.0-rc.1/0.38.0-rc.1] 2023-03-01 - -This is a release candidate for the v1.15.0/v0.38.0 release. -That release will include the `v1` release of the OpenTelemetry Go metric API and will provide stability guarantees of that API. -See our [versioning policy](VERSIONING.md) for more information about these stability guarantees. - -This release drops the compatibility guarantee of [Go 1.18]. - -### Added - -- Support global `MeterProvider` in `go.opentelemetry.io/otel`. (#3818) - - Use `Meter` for a `metric.Meter` from the global `metric.MeterProvider`. - - Use `GetMeterProivder` for a global `metric.MeterProvider`. - - Use `SetMeterProivder` to set the global `metric.MeterProvider`. - -### Changed - -- Dropped compatibility testing for [Go 1.18]. - The project no longer guarantees support for this version of Go. (#3813) - -### Fixed - -- Handle empty environment variable as it they were not set. (#3764) -- Clarify the `httpconv` and `netconv` packages in `go.opentelemetry.io/otel/semconv/*` provide tracing semantic conventions. (#3823) -- Fix race conditions in `go.opentelemetry.io/otel/exporters/metric/prometheus` that could cause a panic. (#3899) -- Fix sending nil `scopeInfo` to metrics channel in `go.opentelemetry.io/otel/exporters/metric/prometheus` that could cause a panic in `github.com/prometheus/client_golang/prometheus`. (#3899) - -### Deprecated - -- The `go.opentelemetry.io/otel/metric/global` package is deprecated. - Use `go.opentelemetry.io/otel` instead. (#3818) - -### Removed - -- The deprecated `go.opentelemetry.io/otel/metric/unit` package is removed. (#3814) - -## [1.14.0/0.37.0/0.0.4] 2023-02-27 - -This release is the last to support [Go 1.18]. -The next release will require at least [Go 1.19]. - -### Added - -- The `event` type semantic conventions are added to `go.opentelemetry.io/otel/semconv/v1.17.0`. (#3697) -- Support [Go 1.20]. (#3693) -- The `go.opentelemetry.io/otel/semconv/v1.18.0` package. - The package contains semantic conventions from the `v1.18.0` version of the OpenTelemetry specification. (#3719) - - The following `const` renames from `go.opentelemetry.io/otel/semconv/v1.17.0` are included: - - `OtelScopeNameKey` -> `OTelScopeNameKey` - - `OtelScopeVersionKey` -> `OTelScopeVersionKey` - - `OtelLibraryNameKey` -> `OTelLibraryNameKey` - - `OtelLibraryVersionKey` -> `OTelLibraryVersionKey` - - `OtelStatusCodeKey` -> `OTelStatusCodeKey` - - `OtelStatusDescriptionKey` -> `OTelStatusDescriptionKey` - - `OtelStatusCodeOk` -> `OTelStatusCodeOk` - - `OtelStatusCodeError` -> `OTelStatusCodeError` - - The following `func` renames from `go.opentelemetry.io/otel/semconv/v1.17.0` are included: - - `OtelScopeName` -> `OTelScopeName` - - `OtelScopeVersion` -> `OTelScopeVersion` - - `OtelLibraryName` -> `OTelLibraryName` - - `OtelLibraryVersion` -> `OTelLibraryVersion` - - `OtelStatusDescription` -> `OTelStatusDescription` -- A `IsSampled` method is added to the `SpanContext` implementation in `go.opentelemetry.io/otel/bridge/opentracing` to expose the span sampled state. - See the [README](./bridge/opentracing/README.md) for more information. (#3570) -- The `WithInstrumentationAttributes` option to `go.opentelemetry.io/otel/metric`. (#3738) -- The `WithInstrumentationAttributes` option to `go.opentelemetry.io/otel/trace`. (#3739) -- The following environment variables are supported by the periodic `Reader` in `go.opentelemetry.io/otel/sdk/metric`. (#3763) - - `OTEL_METRIC_EXPORT_INTERVAL` sets the time between collections and exports. - - `OTEL_METRIC_EXPORT_TIMEOUT` sets the timeout an export is attempted. - -### Changed - -- Fall-back to `TextMapCarrier` when it's not `HttpHeader`s in `go.opentelemetry.io/otel/bridge/opentracing`. (#3679) -- The `Collect` method of the `"go.opentelemetry.io/otel/sdk/metric".Reader` interface is updated to accept the `metricdata.ResourceMetrics` value the collection will be made into. - This change is made to enable memory reuse by SDK users. (#3732) -- The `WithUnit` option in `go.opentelemetry.io/otel/sdk/metric/instrument` is updated to accept a `string` for the unit value. (#3776) - -### Fixed - -- Ensure `go.opentelemetry.io/otel` does not use generics. (#3723, #3725) -- Multi-reader `MeterProvider`s now export metrics for all readers, instead of just the first reader. (#3720, #3724) -- Remove use of deprecated `"math/rand".Seed` in `go.opentelemetry.io/otel/example/prometheus`. (#3733) -- Do not silently drop unknown schema data with `Parse` in `go.opentelemetry.io/otel/schema/v1.1`. (#3743) -- Data race issue in OTLP exporter retry mechanism. (#3755, #3756) -- Wrapping empty errors when exporting in `go.opentelemetry.io/otel/sdk/metric`. (#3698, #3772) -- Incorrect "all" and "resource" definition for schema files in `go.opentelemetry.io/otel/schema/v1.1`. (#3777) - -### Deprecated - -- The `go.opentelemetry.io/otel/metric/unit` package is deprecated. - Use the equivalent unit string instead. (#3776) - - Use `"1"` instead of `unit.Dimensionless` - - Use `"By"` instead of `unit.Bytes` - - Use `"ms"` instead of `unit.Milliseconds` - -## [1.13.0/0.36.0] 2023-02-07 - -### Added - -- Attribute `KeyValue` creations functions to `go.opentelemetry.io/otel/semconv/v1.17.0` for all non-enum semantic conventions. - These functions ensure semantic convention type correctness. (#3675) - -### Fixed - -- Removed the `http.target` attribute from being added by `ServerRequest` in the following packages. (#3687) - - `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv` - - `go.opentelemetry.io/otel/semconv/v1.14.0/httpconv` - - `go.opentelemetry.io/otel/semconv/v1.15.0/httpconv` - - `go.opentelemetry.io/otel/semconv/v1.16.0/httpconv` - - `go.opentelemetry.io/otel/semconv/v1.17.0/httpconv` - -### Removed - -- The deprecated `go.opentelemetry.io/otel/metric/instrument/asyncfloat64` package is removed. (#3631) -- The deprecated `go.opentelemetry.io/otel/metric/instrument/asyncint64` package is removed. (#3631) -- The deprecated `go.opentelemetry.io/otel/metric/instrument/syncfloat64` package is removed. (#3631) -- The deprecated `go.opentelemetry.io/otel/metric/instrument/syncint64` package is removed. (#3631) - -## [1.12.0/0.35.0] 2023-01-28 - -### Added - -- The `WithInt64Callback` option to `go.opentelemetry.io/otel/metric/instrument`. - This options is used to configure `int64` Observer callbacks during their creation. (#3507) -- The `WithFloat64Callback` option to `go.opentelemetry.io/otel/metric/instrument`. - This options is used to configure `float64` Observer callbacks during their creation. (#3507) -- The `Producer` interface and `Reader.RegisterProducer(Producer)` to `go.opentelemetry.io/otel/sdk/metric`. - These additions are used to enable external metric Producers. (#3524) -- The `Callback` function type to `go.opentelemetry.io/otel/metric`. - This new named function type is registered with a `Meter`. (#3564) -- The `go.opentelemetry.io/otel/semconv/v1.13.0` package. - The package contains semantic conventions from the `v1.13.0` version of the OpenTelemetry specification. (#3499) - - The `EndUserAttributesFromHTTPRequest` function in `go.opentelemetry.io/otel/semconv/v1.12.0` is merged into `ClientRequest` and `ServerRequest` in `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv`. - - The `HTTPAttributesFromHTTPStatusCode` function in `go.opentelemetry.io/otel/semconv/v1.12.0` is merged into `ClientResponse` in `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv`. - - The `HTTPClientAttributesFromHTTPRequest` function in `go.opentelemetry.io/otel/semconv/v1.12.0` is replaced by `ClientRequest` in `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv`. - - The `HTTPServerAttributesFromHTTPRequest` function in `go.opentelemetry.io/otel/semconv/v1.12.0` is replaced by `ServerRequest` in `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv`. - - The `HTTPServerMetricAttributesFromHTTPRequest` function in `go.opentelemetry.io/otel/semconv/v1.12.0` is replaced by `ServerRequest` in `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv`. - - The `NetAttributesFromHTTPRequest` function in `go.opentelemetry.io/otel/semconv/v1.12.0` is split into `Transport` in `go.opentelemetry.io/otel/semconv/v1.13.0/netconv` and `ClientRequest` or `ServerRequest` in `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv`. - - The `SpanStatusFromHTTPStatusCode` function in `go.opentelemetry.io/otel/semconv/v1.12.0` is replaced by `ClientStatus` in `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv`. - - The `SpanStatusFromHTTPStatusCodeAndSpanKind` function in `go.opentelemetry.io/otel/semconv/v1.12.0` is split into `ClientStatus` and `ServerStatus` in `go.opentelemetry.io/otel/semconv/v1.13.0/httpconv`. - - The `Client` function is included in `go.opentelemetry.io/otel/semconv/v1.13.0/netconv` to generate attributes for a `net.Conn`. - - The `Server` function is included in `go.opentelemetry.io/otel/semconv/v1.13.0/netconv` to generate attributes for a `net.Listener`. -- The `go.opentelemetry.io/otel/semconv/v1.14.0` package. - The package contains semantic conventions from the `v1.14.0` version of the OpenTelemetry specification. (#3566) -- The `go.opentelemetry.io/otel/semconv/v1.15.0` package. - The package contains semantic conventions from the `v1.15.0` version of the OpenTelemetry specification. (#3578) -- The `go.opentelemetry.io/otel/semconv/v1.16.0` package. - The package contains semantic conventions from the `v1.16.0` version of the OpenTelemetry specification. (#3579) -- Metric instruments to `go.opentelemetry.io/otel/metric/instrument`. - These instruments are use as replacements of the deprecated `go.opentelemetry.io/otel/metric/instrument/{asyncfloat64,asyncint64,syncfloat64,syncint64}` packages.(#3575, #3586) - - `Float64ObservableCounter` replaces the `asyncfloat64.Counter` - - `Float64ObservableUpDownCounter` replaces the `asyncfloat64.UpDownCounter` - - `Float64ObservableGauge` replaces the `asyncfloat64.Gauge` - - `Int64ObservableCounter` replaces the `asyncint64.Counter` - - `Int64ObservableUpDownCounter` replaces the `asyncint64.UpDownCounter` - - `Int64ObservableGauge` replaces the `asyncint64.Gauge` - - `Float64Counter` replaces the `syncfloat64.Counter` - - `Float64UpDownCounter` replaces the `syncfloat64.UpDownCounter` - - `Float64Histogram` replaces the `syncfloat64.Histogram` - - `Int64Counter` replaces the `syncint64.Counter` - - `Int64UpDownCounter` replaces the `syncint64.UpDownCounter` - - `Int64Histogram` replaces the `syncint64.Histogram` -- `NewTracerProvider` to `go.opentelemetry.io/otel/bridge/opentracing`. - This is used to create `WrapperTracer` instances from a `TracerProvider`. (#3116) -- The `Extrema` type to `go.opentelemetry.io/otel/sdk/metric/metricdata`. - This type is used to represent min/max values and still be able to distinguish unset and zero values. (#3487) -- The `go.opentelemetry.io/otel/semconv/v1.17.0` package. - The package contains semantic conventions from the `v1.17.0` version of the OpenTelemetry specification. (#3599) - -### Changed - -- Jaeger and Zipkin exporter use `github.com/go-logr/logr` as the logging interface, and add the `WithLogr` option. (#3497, #3500) -- Instrument configuration in `go.opentelemetry.io/otel/metric/instrument` is split into specific options and configuration based on the instrument type. (#3507) - - Use the added `Int64Option` type to configure instruments from `go.opentelemetry.io/otel/metric/instrument/syncint64`. - - Use the added `Float64Option` type to configure instruments from `go.opentelemetry.io/otel/metric/instrument/syncfloat64`. - - Use the added `Int64ObserverOption` type to configure instruments from `go.opentelemetry.io/otel/metric/instrument/asyncint64`. - - Use the added `Float64ObserverOption` type to configure instruments from `go.opentelemetry.io/otel/metric/instrument/asyncfloat64`. -- Return a `Registration` from the `RegisterCallback` method of a `Meter` in the `go.opentelemetry.io/otel/metric` package. - This `Registration` can be used to unregister callbacks. (#3522) -- Global error handler uses an atomic value instead of a mutex. (#3543) -- Add `NewMetricProducer` to `go.opentelemetry.io/otel/bridge/opencensus`, which can be used to pass OpenCensus metrics to an OpenTelemetry Reader. (#3541) -- Global logger uses an atomic value instead of a mutex. (#3545) -- The `Shutdown` method of the `"go.opentelemetry.io/otel/sdk/trace".TracerProvider` releases all computational resources when called the first time. (#3551) -- The `Sampler` returned from `TraceIDRatioBased` `go.opentelemetry.io/otel/sdk/trace` now uses the rightmost bits for sampling decisions. - This fixes random sampling when using ID generators like `xray.IDGenerator` and increasing parity with other language implementations. (#3557) -- Errors from `go.opentelemetry.io/otel/exporters/otlp/otlptrace` exporters are wrapped in errors identifying their signal name. - Existing users of the exporters attempting to identify specific errors will need to use `errors.Unwrap()` to get the underlying error. (#3516) -- Exporters from `go.opentelemetry.io/otel/exporters/otlp` will print the final retryable error message when attempts to retry time out. (#3514) -- The instrument kind names in `go.opentelemetry.io/otel/sdk/metric` are updated to match the API. (#3562) - - `InstrumentKindSyncCounter` is renamed to `InstrumentKindCounter` - - `InstrumentKindSyncUpDownCounter` is renamed to `InstrumentKindUpDownCounter` - - `InstrumentKindSyncHistogram` is renamed to `InstrumentKindHistogram` - - `InstrumentKindAsyncCounter` is renamed to `InstrumentKindObservableCounter` - - `InstrumentKindAsyncUpDownCounter` is renamed to `InstrumentKindObservableUpDownCounter` - - `InstrumentKindAsyncGauge` is renamed to `InstrumentKindObservableGauge` -- The `RegisterCallback` method of the `Meter` in `go.opentelemetry.io/otel/metric` changed. - - The named `Callback` replaces the inline function parameter. (#3564) - - `Callback` is required to return an error. (#3576) - - `Callback` accepts the added `Observer` parameter added. - This new parameter is used by `Callback` implementations to observe values for asynchronous instruments instead of calling the `Observe` method of the instrument directly. (#3584) - - The slice of `instrument.Asynchronous` is now passed as a variadic argument. (#3587) -- The exporter from `go.opentelemetry.io/otel/exporters/zipkin` is updated to use the `v1.16.0` version of semantic conventions. - This means it no longer uses the removed `net.peer.ip` or `http.host` attributes to determine the remote endpoint. - Instead it uses the `net.sock.peer` attributes. (#3581) -- The `Min` and `Max` fields of the `HistogramDataPoint` in `go.opentelemetry.io/otel/sdk/metric/metricdata` are now defined with the added `Extrema` type instead of a `*float64`. (#3487) - -### Fixed - -- Asynchronous instruments that use sum aggregators and attribute filters correctly add values from equivalent attribute sets that have been filtered. (#3439, #3549) -- The `RegisterCallback` method of the `Meter` from `go.opentelemetry.io/otel/sdk/metric` only registers a callback for instruments created by that meter. - Trying to register a callback with instruments from a different meter will result in an error being returned. (#3584) - -### Deprecated - -- The `NewMetricExporter` in `go.opentelemetry.io/otel/bridge/opencensus` is deprecated. - Use `NewMetricProducer` instead. (#3541) -- The `go.opentelemetry.io/otel/metric/instrument/asyncfloat64` package is deprecated. - Use the instruments from `go.opentelemetry.io/otel/metric/instrument` instead. (#3575) -- The `go.opentelemetry.io/otel/metric/instrument/asyncint64` package is deprecated. - Use the instruments from `go.opentelemetry.io/otel/metric/instrument` instead. (#3575) -- The `go.opentelemetry.io/otel/metric/instrument/syncfloat64` package is deprecated. - Use the instruments from `go.opentelemetry.io/otel/metric/instrument` instead. (#3575) -- The `go.opentelemetry.io/otel/metric/instrument/syncint64` package is deprecated. - Use the instruments from `go.opentelemetry.io/otel/metric/instrument` instead. (#3575) -- The `NewWrappedTracerProvider` in `go.opentelemetry.io/otel/bridge/opentracing` is now deprecated. - Use `NewTracerProvider` instead. (#3116) - -### Removed - -- The deprecated `go.opentelemetry.io/otel/sdk/metric/view` package is removed. (#3520) -- The `InstrumentProvider` from `go.opentelemetry.io/otel/sdk/metric/asyncint64` is removed. - Use the new creation methods of the `Meter` in `go.opentelemetry.io/otel/sdk/metric` instead. (#3530) - - The `Counter` method is replaced by `Meter.Int64ObservableCounter` - - The `UpDownCounter` method is replaced by `Meter.Int64ObservableUpDownCounter` - - The `Gauge` method is replaced by `Meter.Int64ObservableGauge` -- The `InstrumentProvider` from `go.opentelemetry.io/otel/sdk/metric/asyncfloat64` is removed. - Use the new creation methods of the `Meter` in `go.opentelemetry.io/otel/sdk/metric` instead. (#3530) - - The `Counter` method is replaced by `Meter.Float64ObservableCounter` - - The `UpDownCounter` method is replaced by `Meter.Float64ObservableUpDownCounter` - - The `Gauge` method is replaced by `Meter.Float64ObservableGauge` -- The `InstrumentProvider` from `go.opentelemetry.io/otel/sdk/metric/syncint64` is removed. - Use the new creation methods of the `Meter` in `go.opentelemetry.io/otel/sdk/metric` instead. (#3530) - - The `Counter` method is replaced by `Meter.Int64Counter` - - The `UpDownCounter` method is replaced by `Meter.Int64UpDownCounter` - - The `Histogram` method is replaced by `Meter.Int64Histogram` -- The `InstrumentProvider` from `go.opentelemetry.io/otel/sdk/metric/syncfloat64` is removed. - Use the new creation methods of the `Meter` in `go.opentelemetry.io/otel/sdk/metric` instead. (#3530) - - The `Counter` method is replaced by `Meter.Float64Counter` - - The `UpDownCounter` method is replaced by `Meter.Float64UpDownCounter` - - The `Histogram` method is replaced by `Meter.Float64Histogram` - -## [1.11.2/0.34.0] 2022-12-05 - -### Added - -- The `WithView` `Option` is added to the `go.opentelemetry.io/otel/sdk/metric` package. - This option is used to configure the view(s) a `MeterProvider` will use for all `Reader`s that are registered with it. (#3387) -- Add Instrumentation Scope and Version as info metric and label in Prometheus exporter. - This can be disabled using the `WithoutScopeInfo()` option added to that package.(#3273, #3357) -- OTLP exporters now recognize: (#3363) - - `OTEL_EXPORTER_OTLP_INSECURE` - - `OTEL_EXPORTER_OTLP_TRACES_INSECURE` - - `OTEL_EXPORTER_OTLP_METRICS_INSECURE` - - `OTEL_EXPORTER_OTLP_CLIENT_KEY` - - `OTEL_EXPORTER_OTLP_TRACES_CLIENT_KEY` - - `OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY` - - `OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE` - - `OTEL_EXPORTER_OTLP_TRACES_CLIENT_CERTIFICATE` - - `OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE` -- The `View` type and related `NewView` function to create a view according to the OpenTelemetry specification are added to `go.opentelemetry.io/otel/sdk/metric`. - These additions are replacements for the `View` type and `New` function from `go.opentelemetry.io/otel/sdk/metric/view`. (#3459) -- The `Instrument` and `InstrumentKind` type are added to `go.opentelemetry.io/otel/sdk/metric`. - These additions are replacements for the `Instrument` and `InstrumentKind` types from `go.opentelemetry.io/otel/sdk/metric/view`. (#3459) -- The `Stream` type is added to `go.opentelemetry.io/otel/sdk/metric` to define a metric data stream a view will produce. (#3459) -- The `AssertHasAttributes` allows instrument authors to test that datapoints returned have appropriate attributes. (#3487) - -### Changed - -- The `"go.opentelemetry.io/otel/sdk/metric".WithReader` option no longer accepts views to associate with the `Reader`. - Instead, views are now registered directly with the `MeterProvider` via the new `WithView` option. - The views registered with the `MeterProvider` apply to all `Reader`s. (#3387) -- The `Temporality(view.InstrumentKind) metricdata.Temporality` and `Aggregation(view.InstrumentKind) aggregation.Aggregation` methods are added to the `"go.opentelemetry.io/otel/sdk/metric".Exporter` interface. (#3260) -- The `Temporality(view.InstrumentKind) metricdata.Temporality` and `Aggregation(view.InstrumentKind) aggregation.Aggregation` methods are added to the `"go.opentelemetry.io/otel/exporters/otlp/otlpmetric".Client` interface. (#3260) -- The `WithTemporalitySelector` and `WithAggregationSelector` `ReaderOption`s have been changed to `ManualReaderOption`s in the `go.opentelemetry.io/otel/sdk/metric` package. (#3260) -- The periodic reader in the `go.opentelemetry.io/otel/sdk/metric` package now uses the temporality and aggregation selectors from its configured exporter instead of accepting them as options. (#3260) - -### Fixed - -- The `go.opentelemetry.io/otel/exporters/prometheus` exporter fixes duplicated `_total` suffixes. (#3369) -- Remove comparable requirement for `Reader`s. (#3387) -- Cumulative metrics from the OpenCensus bridge (`go.opentelemetry.io/otel/bridge/opencensus`) are defined as monotonic sums, instead of non-monotonic. (#3389) -- Asynchronous counters (`Counter` and `UpDownCounter`) from the metric SDK now produce delta sums when configured with delta temporality. (#3398) -- Exported `Status` codes in the `go.opentelemetry.io/otel/exporters/zipkin` exporter are now exported as all upper case values. (#3340) -- `Aggregation`s from `go.opentelemetry.io/otel/sdk/metric` with no data are not exported. (#3394, #3436) -- Re-enabled Attribute Filters in the Metric SDK. (#3396) -- Asynchronous callbacks are only called if they are registered with at least one instrument that does not use drop aggregation. (#3408) -- Do not report empty partial-success responses in the `go.opentelemetry.io/otel/exporters/otlp` exporters. (#3438, #3432) -- Handle partial success responses in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric` exporters. (#3162, #3440) -- Prevent duplicate Prometheus description, unit, and type. (#3469) -- Prevents panic when using incorrect `attribute.Value.As[Type]Slice()`. (#3489) - -### Removed - -- The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric.Client` interface is removed. (#3486) -- The `go.opentelemetry.io/otel/exporters/otlp/otlpmetric.New` function is removed. Use the `otlpmetric[http|grpc].New` directly. (#3486) - -### Deprecated - -- The `go.opentelemetry.io/otel/sdk/metric/view` package is deprecated. - Use `Instrument`, `InstrumentKind`, `View`, and `NewView` in `go.opentelemetry.io/otel/sdk/metric` instead. (#3476) - -## [1.11.1/0.33.0] 2022-10-19 - -### Added - -- The Prometheus exporter in `go.opentelemetry.io/otel/exporters/prometheus` registers with a Prometheus registerer on creation. - By default, it will register with the default Prometheus registerer. - A non-default registerer can be used by passing the `WithRegisterer` option. (#3239) -- Added the `WithAggregationSelector` option to the `go.opentelemetry.io/otel/exporters/prometheus` package to change the default `AggregationSelector` used. (#3341) -- The Prometheus exporter in `go.opentelemetry.io/otel/exporters/prometheus` converts the `Resource` associated with metric exports into a `target_info` metric. (#3285) - -### Changed - -- The `"go.opentelemetry.io/otel/exporters/prometheus".New` function is updated to return an error. - It will return an error if the exporter fails to register with Prometheus. (#3239) - -### Fixed - -- The URL-encoded values from the `OTEL_RESOURCE_ATTRIBUTES` environment variable are decoded. (#2963) -- The `baggage.NewMember` function decodes the `value` parameter instead of directly using it. - This fixes the implementation to be compliant with the W3C specification. (#3226) -- Slice attributes of the `attribute` package are now comparable based on their value, not instance. (#3108 #3252) -- The `Shutdown` and `ForceFlush` methods of the `"go.opentelemetry.io/otel/sdk/trace".TraceProvider` no longer return an error when no processor is registered. (#3268) -- The Prometheus exporter in `go.opentelemetry.io/otel/exporters/prometheus` cumulatively sums histogram buckets. (#3281) -- The sum of each histogram data point is now uniquely exported by the `go.opentelemetry.io/otel/exporters/otlpmetric` exporters. (#3284, #3293) -- Recorded values for asynchronous counters (`Counter` and `UpDownCounter`) are interpreted as exact, not incremental, sum values by the metric SDK. (#3350, #3278) -- `UpDownCounters` are now correctly output as Prometheus gauges in the `go.opentelemetry.io/otel/exporters/prometheus` exporter. (#3358) -- The Prometheus exporter in `go.opentelemetry.io/otel/exporters/prometheus` no longer describes the metrics it will send to Prometheus on startup. - Instead the exporter is defined as an "unchecked" collector for Prometheus. - This fixes the `reader is not registered` warning currently emitted on startup. (#3291 #3342) -- The `go.opentelemetry.io/otel/exporters/prometheus` exporter now correctly adds `_total` suffixes to counter metrics. (#3360) -- The `go.opentelemetry.io/otel/exporters/prometheus` exporter now adds a unit suffix to metric names. - This can be disabled using the `WithoutUnits()` option added to that package. (#3352) - -## [1.11.0/0.32.3] 2022-10-12 - -### Added - -- Add default User-Agent header to OTLP exporter requests (`go.opentelemetry.io/otel/exporters/otlptrace/otlptracegrpc` and `go.opentelemetry.io/otel/exporters/otlptrace/otlptracehttp`). (#3261) - -### Changed - -- `span.SetStatus` has been updated such that calls that lower the status are now no-ops. (#3214) -- Upgrade `golang.org/x/sys/unix` from `v0.0.0-20210423185535-09eb48e85fd7` to `v0.0.0-20220919091848-fb04ddd9f9c8`. - This addresses [GO-2022-0493](https://pkg.go.dev/vuln/GO-2022-0493). (#3235) - -## [0.32.2] Metric SDK (Alpha) - 2022-10-11 - -### Added - -- Added an example of using metric views to customize instruments. (#3177) -- Add default User-Agent header to OTLP exporter requests (`go.opentelemetry.io/otel/exporters/otlpmetric/otlpmetricgrpc` and `go.opentelemetry.io/otel/exporters/otlpmetric/otlpmetrichttp`). (#3261) - -### Changed - -- Flush pending measurements with the `PeriodicReader` in the `go.opentelemetry.io/otel/sdk/metric` when `ForceFlush` or `Shutdown` are called. (#3220) -- Update histogram default bounds to match the requirements of the latest specification. (#3222) -- Encode the HTTP status code in the OpenTracing bridge (`go.opentelemetry.io/otel/bridge/opentracing`) as an integer. (#3265) - -### Fixed - -- Use default view if instrument does not match any registered view of a reader. (#3224, #3237) -- Return the same instrument every time a user makes the exact same instrument creation call. (#3229, #3251) -- Return the existing instrument when a view transforms a creation call to match an existing instrument. (#3240, #3251) -- Log a warning when a conflicting instrument (e.g. description, unit, data-type) is created instead of returning an error. (#3251) -- The OpenCensus bridge no longer sends empty batches of metrics. (#3263) - -## [0.32.1] Metric SDK (Alpha) - 2022-09-22 - -### Changed - -- The Prometheus exporter sanitizes OpenTelemetry instrument names when exporting. - Invalid characters are replaced with `_`. (#3212) - -### Added - -- The metric portion of the OpenCensus bridge (`go.opentelemetry.io/otel/bridge/opencensus`) has been reintroduced. (#3192) -- The OpenCensus bridge example (`go.opentelemetry.io/otel/example/opencensus`) has been reintroduced. (#3206) - -### Fixed - -- Updated go.mods to point to valid versions of the sdk. (#3216) -- Set the `MeterProvider` resource on all exported metric data. (#3218) - -## [0.32.0] Revised Metric SDK (Alpha) - 2022-09-18 - -### Changed - -- The metric SDK in `go.opentelemetry.io/otel/sdk/metric` is completely refactored to comply with the OpenTelemetry specification. - Please see the package documentation for how the new SDK is initialized and configured. (#3175) -- Update the minimum supported go version to go1.18. Removes support for go1.17 (#3179) - -### Removed - -- The metric portion of the OpenCensus bridge (`go.opentelemetry.io/otel/bridge/opencensus`) has been removed. - A new bridge compliant with the revised metric SDK will be added back in a future release. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/aggregator/aggregatortest` package is removed, see the new metric SDK. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/aggregator/histogram` package is removed, see the new metric SDK. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/aggregator/lastvalue` package is removed, see the new metric SDK. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/aggregator/sum` package is removed, see the new metric SDK. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/aggregator` package is removed, see the new metric SDK. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/controller/basic` package is removed, see the new metric SDK. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/controller/controllertest` package is removed, see the new metric SDK. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/controller/time` package is removed, see the new metric SDK. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/export/aggregation` package is removed, see the new metric SDK. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/export` package is removed, see the new metric SDK. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/metrictest` package is removed. - A replacement package that supports the new metric SDK will be added back in a future release. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/number` package is removed, see the new metric SDK. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/processor/basic` package is removed, see the new metric SDK. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/processor/processortest` package is removed, see the new metric SDK. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/processor/reducer` package is removed, see the new metric SDK. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/registry` package is removed, see the new metric SDK. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/sdkapi` package is removed, see the new metric SDK. (#3175) -- The `go.opentelemetry.io/otel/sdk/metric/selector/simple` package is removed, see the new metric SDK. (#3175) -- The `"go.opentelemetry.io/otel/sdk/metric".ErrUninitializedInstrument` variable was removed. (#3175) -- The `"go.opentelemetry.io/otel/sdk/metric".ErrBadInstrument` variable was removed. (#3175) -- The `"go.opentelemetry.io/otel/sdk/metric".Accumulator` type was removed, see the `MeterProvider`in the new metric SDK. (#3175) -- The `"go.opentelemetry.io/otel/sdk/metric".NewAccumulator` function was removed, see `NewMeterProvider`in the new metric SDK. (#3175) -- The deprecated `"go.opentelemetry.io/otel/sdk/metric".AtomicFieldOffsets` function was removed. (#3175) - -## [1.10.0] - 2022-09-09 - -### Added - -- Support Go 1.19. (#3077) - Include compatibility testing and document support. (#3077) -- Support the OTLP ExportTracePartialSuccess response; these are passed to the registered error handler. (#3106) -- Upgrade go.opentelemetry.io/proto/otlp from v0.18.0 to v0.19.0 (#3107) - -### Changed - -- Fix misidentification of OpenTelemetry `SpanKind` in OpenTracing bridge (`go.opentelemetry.io/otel/bridge/opentracing`). (#3096) -- Attempting to start a span with a nil `context` will no longer cause a panic. (#3110) -- All exporters will be shutdown even if one reports an error (#3091) -- Ensure valid UTF-8 when truncating over-length attribute values. (#3156) - -## [1.9.0/0.0.3] - 2022-08-01 - -### Added - -- Add support for Schema Files format 1.1.x (metric "split" transform) with the new `go.opentelemetry.io/otel/schema/v1.1` package. (#2999) -- Add the `go.opentelemetry.io/otel/semconv/v1.11.0` package. - The package contains semantic conventions from the `v1.11.0` version of the OpenTelemetry specification. (#3009) -- Add the `go.opentelemetry.io/otel/semconv/v1.12.0` package. - The package contains semantic conventions from the `v1.12.0` version of the OpenTelemetry specification. (#3010) -- Add the `http.method` attribute to HTTP server metric from all `go.opentelemetry.io/otel/semconv/*` packages. (#3018) - -### Fixed - -- Invalid warning for context setup being deferred in `go.opentelemetry.io/otel/bridge/opentracing` package. (#3029) - -## [1.8.0/0.31.0] - 2022-07-08 - -### Added - -- Add support for `opentracing.TextMap` format in the `Inject` and `Extract` methods -of the `"go.opentelemetry.io/otel/bridge/opentracing".BridgeTracer` type. (#2911) - -### Changed - -- The `crosslink` make target has been updated to use the `go.opentelemetry.io/build-tools/crosslink` package. (#2886) -- In the `go.opentelemetry.io/otel/sdk/instrumentation` package rename `Library` to `Scope` and alias `Library` as `Scope` (#2976) -- Move metric no-op implementation form `nonrecording` to `metric` package. (#2866) - -### Removed - -- Support for go1.16. Support is now only for go1.17 and go1.18 (#2917) - -### Deprecated - -- The `Library` struct in the `go.opentelemetry.io/otel/sdk/instrumentation` package is deprecated. - Use the equivalent `Scope` struct instead. (#2977) -- The `ReadOnlySpan.InstrumentationLibrary` method from the `go.opentelemetry.io/otel/sdk/trace` package is deprecated. - Use the equivalent `ReadOnlySpan.InstrumentationScope` method instead. (#2977) - -## [1.7.0/0.30.0] - 2022-04-28 - -### Added - -- Add the `go.opentelemetry.io/otel/semconv/v1.8.0` package. - The package contains semantic conventions from the `v1.8.0` version of the OpenTelemetry specification. (#2763) -- Add the `go.opentelemetry.io/otel/semconv/v1.9.0` package. - The package contains semantic conventions from the `v1.9.0` version of the OpenTelemetry specification. (#2792) -- Add the `go.opentelemetry.io/otel/semconv/v1.10.0` package. - The package contains semantic conventions from the `v1.10.0` version of the OpenTelemetry specification. (#2842) -- Added an in-memory exporter to metrictest to aid testing with a full SDK. (#2776) - -### Fixed - -- Globally delegated instruments are unwrapped before delegating asynchronous callbacks. (#2784) -- Remove import of `testing` package in non-tests builds of the `go.opentelemetry.io/otel` package. (#2786) - -### Changed - -- The `WithLabelEncoder` option from the `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` package is renamed to `WithAttributeEncoder`. (#2790) -- The `LabelFilterSelector` interface from `go.opentelemetry.io/otel/sdk/metric/processor/reducer` is renamed to `AttributeFilterSelector`. - The method included in the renamed interface also changed from `LabelFilterFor` to `AttributeFilterFor`. (#2790) -- The `Metadata.Labels` method from the `go.opentelemetry.io/otel/sdk/metric/export` package is renamed to `Metadata.Attributes`. - Consequentially, the `Record` type from the same package also has had the embedded method renamed. (#2790) - -### Deprecated - -- The `Iterator.Label` method in the `go.opentelemetry.io/otel/attribute` package is deprecated. - Use the equivalent `Iterator.Attribute` method instead. (#2790) -- The `Iterator.IndexedLabel` method in the `go.opentelemetry.io/otel/attribute` package is deprecated. - Use the equivalent `Iterator.IndexedAttribute` method instead. (#2790) -- The `MergeIterator.Label` method in the `go.opentelemetry.io/otel/attribute` package is deprecated. - Use the equivalent `MergeIterator.Attribute` method instead. (#2790) - -### Removed - -- Removed the `Batch` type from the `go.opentelemetry.io/otel/sdk/metric/metrictest` package. (#2864) -- Removed the `Measurement` type from the `go.opentelemetry.io/otel/sdk/metric/metrictest` package. (#2864) - -## [0.29.0] - 2022-04-11 - -### Added - -- The metrics global package was added back into several test files. (#2764) -- The `Meter` function is added back to the `go.opentelemetry.io/otel/metric/global` package. - This function is a convenience function equivalent to calling `global.MeterProvider().Meter(...)`. (#2750) - -### Removed - -- Removed module the `go.opentelemetry.io/otel/sdk/export/metric`. - Use the `go.opentelemetry.io/otel/sdk/metric` module instead. (#2720) - -### Changed - -- Don't panic anymore when setting a global MeterProvider to itself. (#2749) -- Upgrade `go.opentelemetry.io/proto/otlp` in `go.opentelemetry.io/otel/exporters/otlp/otlpmetric` from `v0.12.1` to `v0.15.0`. - This replaces the use of the now deprecated `InstrumentationLibrary` and `InstrumentationLibraryMetrics` types and fields in the proto library with the equivalent `InstrumentationScope` and `ScopeMetrics`. (#2748) - -## [1.6.3] - 2022-04-07 - -### Fixed - -- Allow non-comparable global `MeterProvider`, `TracerProvider`, and `TextMapPropagator` types to be set. (#2772, #2773) - -## [1.6.2] - 2022-04-06 - -### Changed - -- Don't panic anymore when setting a global TracerProvider or TextMapPropagator to itself. (#2749) -- Upgrade `go.opentelemetry.io/proto/otlp` in `go.opentelemetry.io/otel/exporters/otlp/otlptrace` from `v0.12.1` to `v0.15.0`. - This replaces the use of the now deprecated `InstrumentationLibrary` and `InstrumentationLibrarySpans` types and fields in the proto library with the equivalent `InstrumentationScope` and `ScopeSpans`. (#2748) - -## [1.6.1] - 2022-03-28 - -### Fixed - -- The `go.opentelemetry.io/otel/schema/*` packages now use the correct schema URL for their `SchemaURL` constant. - Instead of using `"https://opentelemetry.io/schemas/v"` they now use the correct URL without a `v` prefix, `"https://opentelemetry.io/schemas/"`. (#2743, #2744) - -### Security - -- Upgrade `go.opentelemetry.io/proto/otlp` from `v0.12.0` to `v0.12.1`. - This includes an indirect upgrade of `github.com/grpc-ecosystem/grpc-gateway` which resolves [a vulnerability](https://nvd.nist.gov/vuln/detail/CVE-2019-11254) from `gopkg.in/yaml.v2` in version `v2.2.3`. (#2724, #2728) - -## [1.6.0/0.28.0] - 2022-03-23 - -### ⚠️ Notice ⚠️ - -This update is a breaking change of the unstable Metrics API. -Code instrumented with the `go.opentelemetry.io/otel/metric` will need to be modified. - -### Added - -- Add metrics exponential histogram support. - New mapping functions have been made available in `sdk/metric/aggregator/exponential/mapping` for other OpenTelemetry projects to take dependencies on. (#2502) -- Add Go 1.18 to our compatibility tests. (#2679) -- Allow configuring the Sampler with the `OTEL_TRACES_SAMPLER` and `OTEL_TRACES_SAMPLER_ARG` environment variables. (#2305, #2517) -- Add the `metric/global` for obtaining and setting the global `MeterProvider`. (#2660) - -### Changed - -- The metrics API has been significantly changed to match the revised OpenTelemetry specification. - High-level changes include: - - - Synchronous and asynchronous instruments are now handled by independent `InstrumentProvider`s. - These `InstrumentProvider`s are managed with a `Meter`. - - Synchronous and asynchronous instruments are grouped into their own packages based on value types. - - Asynchronous callbacks can now be registered with a `Meter`. - - Be sure to check out the metric module documentation for more information on how to use the revised API. (#2587, #2660) - -### Fixed - -- Fallback to general attribute limits when span specific ones are not set in the environment. (#2675, #2677) - -## [1.5.0] - 2022-03-16 - -### Added - -- Log the Exporters configuration in the TracerProviders message. (#2578) -- Added support to configure the span limits with environment variables. - The following environment variables are supported. (#2606, #2637) - - `OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT` - - `OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT` - - `OTEL_SPAN_EVENT_COUNT_LIMIT` - - `OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT` - - `OTEL_SPAN_LINK_COUNT_LIMIT` - - `OTEL_LINK_ATTRIBUTE_COUNT_LIMIT` - - If the provided environment variables are invalid (negative), the default values would be used. -- Rename the `gc` runtime name to `go` (#2560) -- Add resource container ID detection. (#2418) -- Add span attribute value length limit. - The new `AttributeValueLengthLimit` field is added to the `"go.opentelemetry.io/otel/sdk/trace".SpanLimits` type to configure this limit for a `TracerProvider`. - The default limit for this resource is "unlimited". (#2637) -- Add the `WithRawSpanLimits` option to `go.opentelemetry.io/otel/sdk/trace`. - This option replaces the `WithSpanLimits` option. - Zero or negative values will not be changed to the default value like `WithSpanLimits` does. - Setting a limit to zero will effectively disable the related resource it limits and setting to a negative value will mean that resource is unlimited. - Consequentially, limits should be constructed using `NewSpanLimits` and updated accordingly. (#2637) - -### Changed - -- Drop oldest tracestate `Member` when capacity is reached. (#2592) -- Add event and link drop counts to the exported data from the `oltptrace` exporter. (#2601) -- Unify path cleaning functionally in the `otlpmetric` and `otlptrace` configuration. (#2639) -- Change the debug message from the `sdk/trace.BatchSpanProcessor` to reflect the count is cumulative. (#2640) -- Introduce new internal `envconfig` package for OTLP exporters. (#2608) -- If `http.Request.Host` is empty, fall back to use `URL.Host` when populating `http.host` in the `semconv` packages. (#2661) - -### Fixed - -- Remove the OTLP trace exporter limit of SpanEvents when exporting. (#2616) -- Default to port `4318` instead of `4317` for the `otlpmetrichttp` and `otlptracehttp` client. (#2614, #2625) -- Unlimited span limits are now supported (negative values). (#2636, #2637) - -### Deprecated - -- Deprecated `"go.opentelemetry.io/otel/sdk/trace".WithSpanLimits`. - Use `WithRawSpanLimits` instead. - That option allows setting unlimited and zero limits, this option does not. - This option will be kept until the next major version incremented release. (#2637) - -## [1.4.1] - 2022-02-16 - -### Fixed - -- Fix race condition in reading the dropped spans number for the `BatchSpanProcessor`. (#2615) - -## [1.4.0] - 2022-02-11 - -### Added - -- Use `OTEL_EXPORTER_ZIPKIN_ENDPOINT` environment variable to specify zipkin collector endpoint. (#2490) -- Log the configuration of `TracerProvider`s, and `Tracer`s for debugging. - To enable use a logger with Verbosity (V level) `>=1`. (#2500) -- Added support to configure the batch span-processor with environment variables. - The following environment variables are used. (#2515) - - `OTEL_BSP_SCHEDULE_DELAY` - - `OTEL_BSP_EXPORT_TIMEOUT` - - `OTEL_BSP_MAX_QUEUE_SIZE`. - - `OTEL_BSP_MAX_EXPORT_BATCH_SIZE` - -### Changed - -- Zipkin exporter exports `Resource` attributes in the `Tags` field. (#2589) - -### Deprecated - -- Deprecate module the `go.opentelemetry.io/otel/sdk/export/metric`. - Use the `go.opentelemetry.io/otel/sdk/metric` module instead. (#2382) -- Deprecate `"go.opentelemetry.io/otel/sdk/metric".AtomicFieldOffsets`. (#2445) - -### Fixed - -- Fixed the instrument kind for noop async instruments to correctly report an implementation. (#2461) -- Fix UDP packets overflowing with Jaeger payloads. (#2489, #2512) -- Change the `otlpmetric.Client` interface's `UploadMetrics` method to accept a single `ResourceMetrics` instead of a slice of them. (#2491) -- Specify explicit buckets in Prometheus example, fixing issue where example only has `+inf` bucket. (#2419, #2493) -- W3C baggage will now decode urlescaped values. (#2529) -- Baggage members are now only validated once, when calling `NewMember` and not also when adding it to the baggage itself. (#2522) -- The order attributes are dropped from spans in the `go.opentelemetry.io/otel/sdk/trace` package when capacity is reached is fixed to be in compliance with the OpenTelemetry specification. - Instead of dropping the least-recently-used attribute, the last added attribute is dropped. - This drop order still only applies to attributes with unique keys not already contained in the span. - If an attribute is added with a key already contained in the span, that attribute is updated to the new value being added. (#2576) - -### Removed - -- Updated `go.opentelemetry.io/proto/otlp` from `v0.11.0` to `v0.12.0`. This version removes a number of deprecated methods. (#2546) - - [`Metric.GetIntGauge()`](https://pkg.go.dev/go.opentelemetry.io/proto/otlp@v0.11.0/metrics/v1#Metric.GetIntGauge) - - [`Metric.GetIntHistogram()`](https://pkg.go.dev/go.opentelemetry.io/proto/otlp@v0.11.0/metrics/v1#Metric.GetIntHistogram) - - [`Metric.GetIntSum()`](https://pkg.go.dev/go.opentelemetry.io/proto/otlp@v0.11.0/metrics/v1#Metric.GetIntSum) - -## [1.3.0] - 2021-12-10 - -### ⚠️ Notice ⚠️ - -We have updated the project minimum supported Go version to 1.16 - -### Added - -- Added an internal Logger. - This can be used by the SDK and API to provide users with feedback of the internal state. - To enable verbose logs configure the logger which will print V(1) logs. For debugging information configure to print V(5) logs. (#2343) -- Add the `WithRetry` `Option` and the `RetryConfig` type to the `go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetrichttp` package to specify retry behavior consistently. (#2425) -- Add `SpanStatusFromHTTPStatusCodeAndSpanKind` to all `semconv` packages to return a span status code similar to `SpanStatusFromHTTPStatusCode`, but exclude `4XX` HTTP errors as span errors if the span is of server kind. (#2296) - -### Changed - -- The `"go.opentelemetry.io/otel/exporter/otel/otlptrace/otlptracegrpc".Client` now uses the underlying gRPC `ClientConn` to handle name resolution, TCP connection establishment (with retries and backoff) and TLS handshakes, and handling errors on established connections by re-resolving the name and reconnecting. (#2329) -- The `"go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetricgrpc".Client` now uses the underlying gRPC `ClientConn` to handle name resolution, TCP connection establishment (with retries and backoff) and TLS handshakes, and handling errors on established connections by re-resolving the name and reconnecting. (#2425) -- The `"go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetricgrpc".RetrySettings` type is renamed to `RetryConfig`. (#2425) -- The `go.opentelemetry.io/otel/exporter/otel/*` gRPC exporters now default to using the host's root CA set if none are provided by the user and `WithInsecure` is not specified. (#2432) -- Change `resource.Default` to be evaluated the first time it is called, rather than on import. This allows the caller the option to update `OTEL_RESOURCE_ATTRIBUTES` first, such as with `os.Setenv`. (#2371) - -### Fixed - -- The `go.opentelemetry.io/otel/exporter/otel/*` exporters are updated to handle per-signal and universal endpoints according to the OpenTelemetry specification. - Any per-signal endpoint set via an `OTEL_EXPORTER_OTLP__ENDPOINT` environment variable is now used without modification of the path. - When `OTEL_EXPORTER_OTLP_ENDPOINT` is set, if it contains a path, that path is used as a base path which per-signal paths are appended to. (#2433) -- Basic metric controller updated to use sync.Map to avoid blocking calls (#2381) -- The `go.opentelemetry.io/otel/exporter/jaeger` correctly sets the `otel.status_code` value to be a string of `ERROR` or `OK` instead of an integer code. (#2439, #2440) - -### Deprecated - -- Deprecated the `"go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetrichttp".WithMaxAttempts` `Option`, use the new `WithRetry` `Option` instead. (#2425) -- Deprecated the `"go.opentelemetry.io/otel/exporter/otel/otlpmetric/otlpmetrichttp".WithBackoff` `Option`, use the new `WithRetry` `Option` instead. (#2425) - -### Removed - -- Remove the metric Processor's ability to convert cumulative to delta aggregation temporality. (#2350) -- Remove the metric Bound Instruments interface and implementations. (#2399) -- Remove the metric MinMaxSumCount kind aggregation and the corresponding OTLP export path. (#2423) -- Metric SDK removes the "exact" aggregator for histogram instruments, as it performed a non-standard aggregation for OTLP export (creating repeated Gauge points) and worked its way into a number of confusing examples. (#2348) - -## [1.2.0] - 2021-11-12 - -### Changed - -- Metric SDK `export.ExportKind`, `export.ExportKindSelector` types have been renamed to `aggregation.Temporality` and `aggregation.TemporalitySelector` respectively to keep in line with current specification and protocol along with built-in selectors (e.g., `aggregation.CumulativeTemporalitySelector`, ...). (#2274) -- The Metric `Exporter` interface now requires a `TemporalitySelector` method instead of an `ExportKindSelector`. (#2274) -- Metrics API cleanup. The `metric/sdkapi` package has been created to relocate the API-to-SDK interface: - - The following interface types simply moved from `metric` to `metric/sdkapi`: `Descriptor`, `MeterImpl`, `InstrumentImpl`, `SyncImpl`, `BoundSyncImpl`, `AsyncImpl`, `AsyncRunner`, `AsyncSingleRunner`, and `AsyncBatchRunner` - - The following struct types moved and are replaced with type aliases, since they are exposed to the user: `Observation`, `Measurement`. - - The No-op implementations of sync and async instruments are no longer exported, new functions `sdkapi.NewNoopAsyncInstrument()` and `sdkapi.NewNoopSyncInstrument()` are provided instead. (#2271) -- Update the SDK `BatchSpanProcessor` to export all queued spans when `ForceFlush` is called. (#2080, #2335) - -### Added - -- Add the `"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc".WithGRPCConn` option so the exporter can reuse an existing gRPC connection. (#2002) -- Added a new `schema` module to help parse Schema Files in OTEP 0152 format. (#2267) -- Added a new `MapCarrier` to the `go.opentelemetry.io/otel/propagation` package to hold propagated cross-cutting concerns as a `map[string]string` held in memory. (#2334) - -## [1.1.0] - 2021-10-27 - -### Added - -- Add the `"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc".WithGRPCConn` option so the exporter can reuse an existing gRPC connection. (#2002) -- Add the `go.opentelemetry.io/otel/semconv/v1.7.0` package. - The package contains semantic conventions from the `v1.7.0` version of the OpenTelemetry specification. (#2320) -- Add the `go.opentelemetry.io/otel/semconv/v1.6.1` package. - The package contains semantic conventions from the `v1.6.1` version of the OpenTelemetry specification. (#2321) -- Add the `go.opentelemetry.io/otel/semconv/v1.5.0` package. - The package contains semantic conventions from the `v1.5.0` version of the OpenTelemetry specification. (#2322) - - When upgrading from the `semconv/v1.4.0` package note the following name changes: - - `K8SReplicasetUIDKey` -> `K8SReplicaSetUIDKey` - - `K8SReplicasetNameKey` -> `K8SReplicaSetNameKey` - - `K8SStatefulsetUIDKey` -> `K8SStatefulSetUIDKey` - - `k8SStatefulsetNameKey` -> `K8SStatefulSetNameKey` - - `K8SDaemonsetUIDKey` -> `K8SDaemonSetUIDKey` - - `K8SDaemonsetNameKey` -> `K8SDaemonSetNameKey` - -### Changed - -- Links added to a span will be dropped by the SDK if they contain an invalid span context (#2275). - -### Fixed - -- The `"go.opentelemetry.io/otel/semconv/v1.4.0".HTTPServerAttributesFromHTTPRequest` now correctly only sets the HTTP client IP attribute even if the connection was routed with proxies and there are multiple addresses in the `X-Forwarded-For` header. (#2282, #2284) -- The `"go.opentelemetry.io/otel/semconv/v1.4.0".NetAttributesFromHTTPRequest` function correctly handles IPv6 addresses as IP addresses and sets the correct net peer IP instead of the net peer hostname attribute. (#2283, #2285) -- The simple span processor shutdown method deterministically returns the exporter error status if it simultaneously finishes when the deadline is reached. (#2290, #2289) - -## [1.0.1] - 2021-10-01 - -### Fixed - -- json stdout exporter no longer crashes due to concurrency bug. (#2265) - -## [Metrics 0.24.0] - 2021-10-01 - -### Changed - -- NoopMeterProvider is now private and NewNoopMeterProvider must be used to obtain a noopMeterProvider. (#2237) -- The Metric SDK `Export()` function takes a new two-level reader interface for iterating over results one instrumentation library at a time. (#2197) - - The former `"go.opentelemetry.io/otel/sdk/export/metric".CheckpointSet` is renamed `Reader`. - - The new interface is named `"go.opentelemetry.io/otel/sdk/export/metric".InstrumentationLibraryReader`. - -## [1.0.0] - 2021-09-20 - -This is the first stable release for the project. -This release includes an API and SDK for the tracing signal that will comply with the stability guarantees defined by the projects [versioning policy](./VERSIONING.md). - -### Added - -- OTLP trace exporter now sets the `SchemaURL` field in the exported telemetry if the Tracer has `WithSchemaURL` option. (#2242) - -### Fixed - -- Slice-valued attributes can correctly be used as map keys. (#2223) - -### Removed - -- Removed the `"go.opentelemetry.io/otel/exporters/zipkin".WithSDKOptions` function. (#2248) -- Removed the deprecated package `go.opentelemetry.io/otel/oteltest`. (#2234) -- Removed the deprecated package `go.opentelemetry.io/otel/bridge/opencensus/utils`. (#2233) -- Removed deprecated functions, types, and methods from `go.opentelemetry.io/otel/attribute` package. - Use the typed functions and methods added to the package instead. (#2235) - - The `Key.Array` method is removed. - - The `Array` function is removed. - - The `Any` function is removed. - - The `ArrayValue` function is removed. - - The `AsArray` function is removed. - -## [1.0.0-RC3] - 2021-09-02 - -### Added - -- Added `ErrorHandlerFunc` to use a function as an `"go.opentelemetry.io/otel".ErrorHandler`. (#2149) -- Added `"go.opentelemetry.io/otel/trace".WithStackTrace` option to add a stack trace when using `span.RecordError` or when panic is handled in `span.End`. (#2163) -- Added typed slice attribute types and functionality to the `go.opentelemetry.io/otel/attribute` package to replace the existing array type and functions. (#2162) - - `BoolSlice`, `IntSlice`, `Int64Slice`, `Float64Slice`, and `StringSlice` replace the use of the `Array` function in the package. -- Added the `go.opentelemetry.io/otel/example/fib` example package. - Included is an example application that computes Fibonacci numbers. (#2203) - -### Changed - -- Metric instruments have been renamed to match the (feature-frozen) metric API specification: - - ValueRecorder becomes Histogram - - ValueObserver becomes Gauge - - SumObserver becomes CounterObserver - - UpDownSumObserver becomes UpDownCounterObserver - The API exported from this project is still considered experimental. (#2202) -- Metric SDK/API implementation type `InstrumentKind` moves into `sdkapi` sub-package. (#2091) -- The Metrics SDK export record no longer contains a Resource pointer, the SDK `"go.opentelemetry.io/otel/sdk/trace/export/metric".Exporter.Export()` function for push-based exporters now takes a single Resource argument, pull-based exporters use `"go.opentelemetry.io/otel/sdk/metric/controller/basic".Controller.Resource()`. (#2120) -- The JSON output of the `go.opentelemetry.io/otel/exporters/stdout/stdouttrace` is harmonized now such that the output is "plain" JSON objects after each other of the form `{ ... } { ... } { ... }`. Earlier the JSON objects describing a span were wrapped in a slice for each `Exporter.ExportSpans` call, like `[ { ... } ][ { ... } { ... } ]`. Outputting JSON object directly after each other is consistent with JSON loggers, and a bit easier to parse and read. (#2196) -- Update the `NewTracerConfig`, `NewSpanStartConfig`, `NewSpanEndConfig`, and `NewEventConfig` function in the `go.opentelemetry.io/otel/trace` package to return their respective configurations as structs instead of pointers to the struct. (#2212) - -### Deprecated - -- The `go.opentelemetry.io/otel/bridge/opencensus/utils` package is deprecated. - All functionality from this package now exists in the `go.opentelemetry.io/otel/bridge/opencensus` package. - The functions from that package should be used instead. (#2166) -- The `"go.opentelemetry.io/otel/attribute".Array` function and the related `ARRAY` value type is deprecated. - Use the typed `*Slice` functions and types added to the package instead. (#2162) -- The `"go.opentelemetry.io/otel/attribute".Any` function is deprecated. - Use the typed functions instead. (#2181) -- The `go.opentelemetry.io/otel/oteltest` package is deprecated. - The `"go.opentelemetry.io/otel/sdk/trace/tracetest".SpanRecorder` can be registered with the default SDK (`go.opentelemetry.io/otel/sdk/trace`) as a `SpanProcessor` and used as a replacement for this deprecated package. (#2188) - -### Removed - -- Removed metrics test package `go.opentelemetry.io/otel/sdk/export/metric/metrictest`. (#2105) - -### Fixed - -- The `fromEnv` detector no longer throws an error when `OTEL_RESOURCE_ATTRIBUTES` environment variable is not set or empty. (#2138) -- Setting the global `ErrorHandler` with `"go.opentelemetry.io/otel".SetErrorHandler` multiple times is now supported. (#2160, #2140) -- The `"go.opentelemetry.io/otel/attribute".Any` function now supports `int32` values. (#2169) -- Multiple calls to `"go.opentelemetry.io/otel/sdk/metric/controller/basic".WithResource()` are handled correctly, and when no resources are provided `"go.opentelemetry.io/otel/sdk/resource".Default()` is used. (#2120) -- The `WithoutTimestamps` option for the `go.opentelemetry.io/otel/exporters/stdout/stdouttrace` exporter causes the exporter to correctly omit timestamps. (#2195) -- Fixed typos in resources.go. (#2201) - -## [1.0.0-RC2] - 2021-07-26 - -### Added - -- Added `WithOSDescription` resource configuration option to set OS (Operating System) description resource attribute (`os.description`). (#1840) -- Added `WithOS` resource configuration option to set all OS (Operating System) resource attributes at once. (#1840) -- Added the `WithRetry` option to the `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp` package. - This option is a replacement for the removed `WithMaxAttempts` and `WithBackoff` options. (#2095) -- Added API `LinkFromContext` to return Link which encapsulates SpanContext from provided context and also encapsulates attributes. (#2115) -- Added a new `Link` type under the SDK `otel/sdk/trace` package that counts the number of attributes that were dropped for surpassing the `AttributePerLinkCountLimit` configured in the Span's `SpanLimits`. - This new type replaces the equal-named API `Link` type found in the `otel/trace` package for most usages within the SDK. - For example, instances of this type are now returned by the `Links()` function of `ReadOnlySpan`s provided in places like the `OnEnd` function of `SpanProcessor` implementations. (#2118) -- Added the `SpanRecorder` type to the `go.opentelemetry.io/otel/skd/trace/tracetest` package. - This type can be used with the default SDK as a `SpanProcessor` during testing. (#2132) - -### Changed - -- The `SpanModels` function is now exported from the `go.opentelemetry.io/otel/exporters/zipkin` package to convert OpenTelemetry spans into Zipkin model spans. (#2027) -- Rename the `"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc".RetrySettings` to `RetryConfig`. (#2095) - -### Deprecated - -- The `TextMapCarrier` and `TextMapPropagator` from the `go.opentelemetry.io/otel/oteltest` package and their associated creation functions (`TextMapCarrier`, `NewTextMapPropagator`) are deprecated. (#2114) -- The `Harness` type from the `go.opentelemetry.io/otel/oteltest` package and its associated creation function, `NewHarness` are deprecated and will be removed in the next release. (#2123) -- The `TraceStateFromKeyValues` function from the `go.opentelemetry.io/otel/oteltest` package is deprecated. - Use the `trace.ParseTraceState` function instead. (#2122) - -### Removed - -- Removed the deprecated package `go.opentelemetry.io/otel/exporters/trace/jaeger`. (#2020) -- Removed the deprecated package `go.opentelemetry.io/otel/exporters/trace/zipkin`. (#2020) -- Removed the `"go.opentelemetry.io/otel/sdk/resource".WithBuiltinDetectors` function. - The explicit `With*` options for every built-in detector should be used instead. (#2026 #2097) -- Removed the `WithMaxAttempts` and `WithBackoff` options from the `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp` package. - The retry logic of the package has been updated to match the `otlptracegrpc` package and accordingly a `WithRetry` option is added that should be used instead. (#2095) -- Removed `DroppedAttributeCount` field from `otel/trace.Link` struct. (#2118) - -### Fixed - -- When using WithNewRoot, don't use the parent context for making sampling decisions. (#2032) -- `oteltest.Tracer` now creates a valid `SpanContext` when using `WithNewRoot`. (#2073) -- OS type detector now sets the correct `dragonflybsd` value for DragonFly BSD. (#2092) -- The OTel span status is correctly transformed into the OTLP status in the `go.opentelemetry.io/otel/exporters/otlp/otlptrace` package. - This fix will by default set the status to `Unset` if it is not explicitly set to `Ok` or `Error`. (#2099 #2102) -- The `Inject` method for the `"go.opentelemetry.io/otel/propagation".TraceContext` type no longer injects empty `tracestate` values. (#2108) -- Use `6831` as default Jaeger agent port instead of `6832`. (#2131) - -## [Experimental Metrics v0.22.0] - 2021-07-19 - -### Added - -- Adds HTTP support for OTLP metrics exporter. (#2022) - -### Removed - -- Removed the deprecated package `go.opentelemetry.io/otel/exporters/metric/prometheus`. (#2020) - -## [1.0.0-RC1] / 0.21.0 - 2021-06-18 - -With this release we are introducing a split in module versions. The tracing API and SDK are entering the `v1.0.0` Release Candidate phase with `v1.0.0-RC1` -while the experimental metrics API and SDK continue with `v0.x` releases at `v0.21.0`. Modules at major version 1 or greater will not depend on modules -with major version 0. - -### Added - -- Adds `otlpgrpc.WithRetry`option for configuring the retry policy for transient errors on the otlp/gRPC exporter. (#1832) - - The following status codes are defined as transient errors: - | gRPC Status Code | Description | - | ---------------- | ----------- | - | 1 | Cancelled | - | 4 | Deadline Exceeded | - | 8 | Resource Exhausted | - | 10 | Aborted | - | 10 | Out of Range | - | 14 | Unavailable | - | 15 | Data Loss | -- Added `Status` type to the `go.opentelemetry.io/otel/sdk/trace` package to represent the status of a span. (#1874) -- Added `SpanStub` type and its associated functions to the `go.opentelemetry.io/otel/sdk/trace/tracetest` package. - This type can be used as a testing replacement for the `SpanSnapshot` that was removed from the `go.opentelemetry.io/otel/sdk/trace` package. (#1873) -- Adds support for scheme in `OTEL_EXPORTER_OTLP_ENDPOINT` according to the spec. (#1886) -- Adds `trace.WithSchemaURL` option for configuring the tracer with a Schema URL. (#1889) -- Added an example of using OpenTelemetry Go as a trace context forwarder. (#1912) -- `ParseTraceState` is added to the `go.opentelemetry.io/otel/trace` package. - It can be used to decode a `TraceState` from a `tracestate` header string value. (#1937) -- Added `Len` method to the `TraceState` type in the `go.opentelemetry.io/otel/trace` package. - This method returns the number of list-members the `TraceState` holds. (#1937) -- Creates package `go.opentelemetry.io/otel/exporters/otlp/otlptrace` that defines a trace exporter that uses a `otlptrace.Client` to send data. - Creates package `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` implementing a gRPC `otlptrace.Client` and offers convenience functions, `NewExportPipeline` and `InstallNewPipeline`, to setup and install a `otlptrace.Exporter` in tracing .(#1922) -- Added `Baggage`, `Member`, and `Property` types to the `go.opentelemetry.io/otel/baggage` package along with their related functions. (#1967) -- Added `ContextWithBaggage`, `ContextWithoutBaggage`, and `FromContext` functions to the `go.opentelemetry.io/otel/baggage` package. - These functions replace the `Set`, `Value`, `ContextWithValue`, `ContextWithoutValue`, and `ContextWithEmpty` functions from that package and directly work with the new `Baggage` type. (#1967) -- The `OTEL_SERVICE_NAME` environment variable is the preferred source for `service.name`, used by the environment resource detector if a service name is present both there and in `OTEL_RESOURCE_ATTRIBUTES`. (#1969) -- Creates package `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp` implementing an HTTP `otlptrace.Client` and offers convenience functions, `NewExportPipeline` and `InstallNewPipeline`, to setup and install a `otlptrace.Exporter` in tracing. (#1963) -- Changes `go.opentelemetry.io/otel/sdk/resource.NewWithAttributes` to require a schema URL. The old function is still available as `resource.NewSchemaless`. This is a breaking change. (#1938) -- Several builtin resource detectors now correctly populate the schema URL. (#1938) -- Creates package `go.opentelemetry.io/otel/exporters/otlp/otlpmetric` that defines a metrics exporter that uses a `otlpmetric.Client` to send data. -- Creates package `go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc` implementing a gRPC `otlpmetric.Client` and offers convenience functions, `New` and `NewUnstarted`, to create an `otlpmetric.Exporter`.(#1991) -- Added `go.opentelemetry.io/otel/exporters/stdout/stdouttrace` exporter. (#2005) -- Added `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` exporter. (#2005) -- Added a `TracerProvider()` method to the `"go.opentelemetry.io/otel/trace".Span` interface. This can be used to obtain a `TracerProvider` from a given span that utilizes the same trace processing pipeline. (#2009) - -### Changed - -- Make `NewSplitDriver` from `go.opentelemetry.io/otel/exporters/otlp` take variadic arguments instead of a `SplitConfig` item. - `NewSplitDriver` now automatically implements an internal `noopDriver` for `SplitConfig` fields that are not initialized. (#1798) -- `resource.New()` now creates a Resource without builtin detectors. Previous behavior is now achieved by using `WithBuiltinDetectors` Option. (#1810) -- Move the `Event` type from the `go.opentelemetry.io/otel` package to the `go.opentelemetry.io/otel/sdk/trace` package. (#1846) -- CI builds validate against last two versions of Go, dropping 1.14 and adding 1.16. (#1865) -- BatchSpanProcessor now report export failures when calling `ForceFlush()` method. (#1860) -- `Set.Encoded(Encoder)` no longer caches the result of an encoding. (#1855) -- Renamed `CloudZoneKey` to `CloudAvailabilityZoneKey` in Resource semantic conventions according to spec. (#1871) -- The `StatusCode` and `StatusMessage` methods of the `ReadOnlySpan` interface and the `Span` produced by the `go.opentelemetry.io/otel/sdk/trace` package have been replaced with a single `Status` method. - This method returns the status of a span using the new `Status` type. (#1874) -- Updated `ExportSpans` method of the`SpanExporter` interface type to accept `ReadOnlySpan`s instead of the removed `SpanSnapshot`. - This brings the export interface into compliance with the specification in that it now accepts an explicitly immutable type instead of just an implied one. (#1873) -- Unembed `SpanContext` in `Link`. (#1877) -- Generate Semantic conventions from the specification YAML. (#1891) -- Spans created by the global `Tracer` obtained from `go.opentelemetry.io/otel`, prior to a functioning `TracerProvider` being set, now propagate the span context from their parent if one exists. (#1901) -- The `"go.opentelemetry.io/otel".Tracer` function now accepts tracer options. (#1902) -- Move the `go.opentelemetry.io/otel/unit` package to `go.opentelemetry.io/otel/metric/unit`. (#1903) -- Changed `go.opentelemetry.io/otel/trace.TracerConfig` to conform to the [Contributing guidelines](CONTRIBUTING.md#config.) (#1921) -- Changed `go.opentelemetry.io/otel/trace.SpanConfig` to conform to the [Contributing guidelines](CONTRIBUTING.md#config). (#1921) -- Changed `span.End()` now only accepts Options that are allowed at `End()`. (#1921) -- Changed `go.opentelemetry.io/otel/metric.InstrumentConfig` to conform to the [Contributing guidelines](CONTRIBUTING.md#config). (#1921) -- Changed `go.opentelemetry.io/otel/metric.MeterConfig` to conform to the [Contributing guidelines](CONTRIBUTING.md#config). (#1921) -- Refactored option types according to the contribution style guide. (#1882) -- Move the `go.opentelemetry.io/otel/trace.TraceStateFromKeyValues` function to the `go.opentelemetry.io/otel/oteltest` package. - This function is preserved for testing purposes where it may be useful to create a `TraceState` from `attribute.KeyValue`s, but it is not intended for production use. - The new `ParseTraceState` function should be used to create a `TraceState`. (#1931) -- Updated `MarshalJSON` method of the `go.opentelemetry.io/otel/trace.TraceState` type to marshal the type into the string representation of the `TraceState`. (#1931) -- The `TraceState.Delete` method from the `go.opentelemetry.io/otel/trace` package no longer returns an error in addition to a `TraceState`. (#1931) -- Updated `Get` method of the `TraceState` type from the `go.opentelemetry.io/otel/trace` package to accept a `string` instead of an `attribute.Key` type. (#1931) -- Updated `Insert` method of the `TraceState` type from the `go.opentelemetry.io/otel/trace` package to accept a pair of `string`s instead of an `attribute.KeyValue` type. (#1931) -- Updated `Delete` method of the `TraceState` type from the `go.opentelemetry.io/otel/trace` package to accept a `string` instead of an `attribute.Key` type. (#1931) -- Renamed `NewExporter` to `New` in the `go.opentelemetry.io/otel/exporters/stdout` package. (#1985) -- Renamed `NewExporter` to `New` in the `go.opentelemetry.io/otel/exporters/metric/prometheus` package. (#1985) -- Renamed `NewExporter` to `New` in the `go.opentelemetry.io/otel/exporters/trace/jaeger` package. (#1985) -- Renamed `NewExporter` to `New` in the `go.opentelemetry.io/otel/exporters/trace/zipkin` package. (#1985) -- Renamed `NewExporter` to `New` in the `go.opentelemetry.io/otel/exporters/otlp` package. (#1985) -- Renamed `NewUnstartedExporter` to `NewUnstarted` in the `go.opentelemetry.io/otel/exporters/otlp` package. (#1985) -- The `go.opentelemetry.io/otel/semconv` package has been moved to `go.opentelemetry.io/otel/semconv/v1.4.0` to allow for multiple [telemetry schema](https://github.com/open-telemetry/oteps/blob/main/text/0152-telemetry-schemas.md) versions to be used concurrently. (#1987) -- Metrics test helpers in `go.opentelemetry.io/otel/oteltest` have been moved to `go.opentelemetry.io/otel/metric/metrictest`. (#1988) - -### Deprecated - -- The `go.opentelemetry.io/otel/exporters/metric/prometheus` is deprecated, use `go.opentelemetry.io/otel/exporters/prometheus` instead. (#1993) -- The `go.opentelemetry.io/otel/exporters/trace/jaeger` is deprecated, use `go.opentelemetry.io/otel/exporters/jaeger` instead. (#1993) -- The `go.opentelemetry.io/otel/exporters/trace/zipkin` is deprecated, use `go.opentelemetry.io/otel/exporters/zipkin` instead. (#1993) - -### Removed - -- Removed `resource.WithoutBuiltin()`. Use `resource.New()`. (#1810) -- Unexported types `resource.FromEnv`, `resource.Host`, and `resource.TelemetrySDK`, Use the corresponding `With*()` to use individually. (#1810) -- Removed the `Tracer` and `IsRecording` method from the `ReadOnlySpan` in the `go.opentelemetry.io/otel/sdk/trace`. - The `Tracer` method is not a required to be included in this interface and given the mutable nature of the tracer that is associated with a span, this method is not appropriate. - The `IsRecording` method returns if the span is recording or not. - A read-only span value does not need to know if updates to it will be recorded or not. - By definition, it cannot be updated so there is no point in communicating if an update is recorded. (#1873) -- Removed the `SpanSnapshot` type from the `go.opentelemetry.io/otel/sdk/trace` package. - The use of this type has been replaced with the use of the explicitly immutable `ReadOnlySpan` type. - When a concrete representation of a read-only span is needed for testing, the newly added `SpanStub` in the `go.opentelemetry.io/otel/sdk/trace/tracetest` package should be used. (#1873) -- Removed the `Tracer` method from the `Span` interface in the `go.opentelemetry.io/otel/trace` package. - Using the same tracer that created a span introduces the error where an instrumentation library's `Tracer` is used by other code instead of their own. - The `"go.opentelemetry.io/otel".Tracer` function or a `TracerProvider` should be used to acquire a library specific `Tracer` instead. (#1900) - - The `TracerProvider()` method on the `Span` interface may also be used to obtain a `TracerProvider` using the same trace processing pipeline. (#2009) -- The `http.url` attribute generated by `HTTPClientAttributesFromHTTPRequest` will no longer include username or password information. (#1919) -- Removed `IsEmpty` method of the `TraceState` type in the `go.opentelemetry.io/otel/trace` package in favor of using the added `TraceState.Len` method. (#1931) -- Removed `Set`, `Value`, `ContextWithValue`, `ContextWithoutValue`, and `ContextWithEmpty` functions in the `go.opentelemetry.io/otel/baggage` package. - Handling of baggage is now done using the added `Baggage` type and related context functions (`ContextWithBaggage`, `ContextWithoutBaggage`, and `FromContext`) in that package. (#1967) -- The `InstallNewPipeline` and `NewExportPipeline` creation functions in all the exporters (prometheus, otlp, stdout, jaeger, and zipkin) have been removed. - These functions were deemed premature attempts to provide convenience that did not achieve this aim. (#1985) -- The `go.opentelemetry.io/otel/exporters/otlp` exporter has been removed. Use `go.opentelemetry.io/otel/exporters/otlp/otlptrace` instead. (#1990) -- The `go.opentelemetry.io/otel/exporters/stdout` exporter has been removed. Use `go.opentelemetry.io/otel/exporters/stdout/stdouttrace` or `go.opentelemetry.io/otel/exporters/stdout/stdoutmetric` instead. (#2005) - -### Fixed - -- Only report errors from the `"go.opentelemetry.io/otel/sdk/resource".Environment` function when they are not `nil`. (#1850, #1851) -- The `Shutdown` method of the simple `SpanProcessor` in the `go.opentelemetry.io/otel/sdk/trace` package now honors the context deadline or cancellation. (#1616, #1856) -- BatchSpanProcessor now drops span batches that failed to be exported. (#1860) -- Use `http://localhost:14268/api/traces` as default Jaeger collector endpoint instead of `http://localhost:14250`. (#1898) -- Allow trailing and leading whitespace in the parsing of a `tracestate` header. (#1931) -- Add logic to determine if the channel is closed to fix Jaeger exporter test panic with close closed channel. (#1870, #1973) -- Avoid transport security when OTLP endpoint is a Unix socket. (#2001) - -### Security - -## [0.20.0] - 2021-04-23 - -### Added - -- The OTLP exporter now has two new convenience functions, `NewExportPipeline` and `InstallNewPipeline`, setup and install the exporter in tracing and metrics pipelines. (#1373) -- Adds semantic conventions for exceptions. (#1492) -- Added Jaeger Environment variables: `OTEL_EXPORTER_JAEGER_AGENT_HOST`, `OTEL_EXPORTER_JAEGER_AGENT_PORT` - These environment variables can be used to override Jaeger agent hostname and port (#1752) -- Option `ExportTimeout` was added to batch span processor. (#1755) -- `trace.TraceFlags` is now a defined type over `byte` and `WithSampled(bool) TraceFlags` and `IsSampled() bool` methods have been added to it. (#1770) -- The `Event` and `Link` struct types from the `go.opentelemetry.io/otel` package now include a `DroppedAttributeCount` field to record the number of attributes that were not recorded due to configured limits being reached. (#1771) -- The Jaeger exporter now reports dropped attributes for a Span event in the exported log. (#1771) -- Adds test to check BatchSpanProcessor ignores `OnEnd` and `ForceFlush` post `Shutdown`. (#1772) -- Extract resource attributes from the `OTEL_RESOURCE_ATTRIBUTES` environment variable and merge them with the `resource.Default` resource as well as resources provided to the `TracerProvider` and metric `Controller`. (#1785) -- Added `WithOSType` resource configuration option to set OS (Operating System) type resource attribute (`os.type`). (#1788) -- Added `WithProcess*` resource configuration options to set Process resource attributes. (#1788) - - `process.pid` - - `process.executable.name` - - `process.executable.path` - - `process.command_args` - - `process.owner` - - `process.runtime.name` - - `process.runtime.version` - - `process.runtime.description` -- Adds `k8s.node.name` and `k8s.node.uid` attribute keys to the `semconv` package. (#1789) -- Added support for configuring OTLP/HTTP and OTLP/gRPC Endpoints, TLS Certificates, Headers, Compression and Timeout via Environment Variables. (#1758, #1769 and #1811) - - `OTEL_EXPORTER_OTLP_ENDPOINT` - - `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` - - `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT` - - `OTEL_EXPORTER_OTLP_HEADERS` - - `OTEL_EXPORTER_OTLP_TRACES_HEADERS` - - `OTEL_EXPORTER_OTLP_METRICS_HEADERS` - - `OTEL_EXPORTER_OTLP_COMPRESSION` - - `OTEL_EXPORTER_OTLP_TRACES_COMPRESSION` - - `OTEL_EXPORTER_OTLP_METRICS_COMPRESSION` - - `OTEL_EXPORTER_OTLP_TIMEOUT` - - `OTEL_EXPORTER_OTLP_TRACES_TIMEOUT` - - `OTEL_EXPORTER_OTLP_METRICS_TIMEOUT` - - `OTEL_EXPORTER_OTLP_CERTIFICATE` - - `OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE` - - `OTEL_EXPORTER_OTLP_METRICS_CERTIFICATE` -- Adds `otlpgrpc.WithTimeout` option for configuring timeout to the otlp/gRPC exporter. (#1821) -- Adds `jaeger.WithMaxPacketSize` option for configuring maximum UDP packet size used when connecting to the Jaeger agent. (#1853) - -### Fixed - -- The `Span.IsRecording` implementation from `go.opentelemetry.io/otel/sdk/trace` always returns false when not being sampled. (#1750) -- The Jaeger exporter now correctly sets tags for the Span status code and message. - This means it uses the correct tag keys (`"otel.status_code"`, `"otel.status_description"`) and does not set the status message as a tag unless it is set on the span. (#1761) -- The Jaeger exporter now correctly records Span event's names using the `"event"` key for a tag. - Additionally, this tag is overridden, as specified in the OTel specification, if the event contains an attribute with that key. (#1768) -- Zipkin Exporter: Ensure mapping between OTel and Zipkin span data complies with the specification. (#1688) -- Fixed typo for default service name in Jaeger Exporter. (#1797) -- Fix flaky OTLP for the reconnnection of the client connection. (#1527, #1814) -- Fix Jaeger exporter dropping of span batches that exceed the UDP packet size limit. - Instead, the exporter now splits the batch into smaller sendable batches. (#1828) - -### Changed - -- Span `RecordError` now records an `exception` event to comply with the semantic convention specification. (#1492) -- Jaeger exporter was updated to use thrift v0.14.1. (#1712) -- Migrate from using internally built and maintained version of the OTLP to the one hosted at `go.opentelemetry.io/proto/otlp`. (#1713) -- Migrate from using `github.com/gogo/protobuf` to `google.golang.org/protobuf` to match `go.opentelemetry.io/proto/otlp`. (#1713) -- The storage of a local or remote Span in a `context.Context` using its SpanContext is unified to store just the current Span. - The Span's SpanContext can now self-identify as being remote or not. - This means that `"go.opentelemetry.io/otel/trace".ContextWithRemoteSpanContext` will now overwrite any existing current Span, not just existing remote Spans, and make it the current Span in a `context.Context`. (#1731) -- Improve OTLP/gRPC exporter connection errors. (#1737) -- Information about a parent span context in a `"go.opentelemetry.io/otel/export/trace".SpanSnapshot` is unified in a new `Parent` field. - The existing `ParentSpanID` and `HasRemoteParent` fields are removed in favor of this. (#1748) -- The `ParentContext` field of the `"go.opentelemetry.io/otel/sdk/trace".SamplingParameters` is updated to hold a `context.Context` containing the parent span. - This changes it to make `SamplingParameters` conform with the OpenTelemetry specification. (#1749) -- Updated Jaeger Environment Variables: `JAEGER_ENDPOINT`, `JAEGER_USER`, `JAEGER_PASSWORD` - to `OTEL_EXPORTER_JAEGER_ENDPOINT`, `OTEL_EXPORTER_JAEGER_USER`, `OTEL_EXPORTER_JAEGER_PASSWORD` in compliance with OTel specification. (#1752) -- Modify `BatchSpanProcessor.ForceFlush` to abort after timeout/cancellation. (#1757) -- The `DroppedAttributeCount` field of the `Span` in the `go.opentelemetry.io/otel` package now only represents the number of attributes dropped for the span itself. - It no longer is a conglomerate of itself, events, and link attributes that have been dropped. (#1771) -- Make `ExportSpans` in Jaeger Exporter honor context deadline. (#1773) -- Modify Zipkin Exporter default service name, use default resource's serviceName instead of empty. (#1777) -- The `go.opentelemetry.io/otel/sdk/export/trace` package is merged into the `go.opentelemetry.io/otel/sdk/trace` package. (#1778) -- The prometheus.InstallNewPipeline example is moved from comment to example test (#1796) -- The convenience functions for the stdout exporter have been updated to return the `TracerProvider` implementation and enable the shutdown of the exporter. (#1800) -- Replace the flush function returned from the Jaeger exporter's convenience creation functions (`InstallNewPipeline` and `NewExportPipeline`) with the `TracerProvider` implementation they create. - This enables the caller to shutdown and flush using the related `TracerProvider` methods. (#1822) -- Updated the Jaeger exporter to have a default endpoint, `http://localhost:14250`, for the collector. (#1824) -- Changed the function `WithCollectorEndpoint` in the Jaeger exporter to no longer accept an endpoint as an argument. - The endpoint can be passed with the `CollectorEndpointOption` using the `WithEndpoint` function or by setting the `OTEL_EXPORTER_JAEGER_ENDPOINT` environment variable value appropriately. (#1824) -- The Jaeger exporter no longer batches exported spans itself, instead it relies on the SDK's `BatchSpanProcessor` for this functionality. (#1830) -- The Jaeger exporter creation functions (`NewRawExporter`, `NewExportPipeline`, and `InstallNewPipeline`) no longer accept the removed `Option` type as a variadic argument. (#1830) - -### Removed - -- Removed Jaeger Environment variables: `JAEGER_SERVICE_NAME`, `JAEGER_DISABLED`, `JAEGER_TAGS` - These environment variables will no longer be used to override values of the Jaeger exporter (#1752) -- No longer set the links for a `Span` in `go.opentelemetry.io/otel/sdk/trace` that is configured to be a new root. - This is unspecified behavior that the OpenTelemetry community plans to standardize in the future. - To prevent backwards incompatible changes when it is specified, these links are removed. (#1726) -- Setting error status while recording error with Span from oteltest package. (#1729) -- The concept of a remote and local Span stored in a context is unified to just the current Span. - Because of this `"go.opentelemetry.io/otel/trace".RemoteSpanContextFromContext` is removed as it is no longer needed. - Instead, `"go.opentelemetry.io/otel/trace".SpanContextFromContex` can be used to return the current Span. - If needed, that Span's `SpanContext.IsRemote()` can then be used to determine if it is remote or not. (#1731) -- The `HasRemoteParent` field of the `"go.opentelemetry.io/otel/sdk/trace".SamplingParameters` is removed. - This field is redundant to the information returned from the `Remote` method of the `SpanContext` held in the `ParentContext` field. (#1749) -- The `trace.FlagsDebug` and `trace.FlagsDeferred` constants have been removed and will be localized to the B3 propagator. (#1770) -- Remove `Process` configuration, `WithProcessFromEnv` and `ProcessFromEnv`, and type from the Jaeger exporter package. - The information that could be configured in the `Process` struct should be configured in a `Resource` instead. (#1776, #1804) -- Remove the `WithDisabled` option from the Jaeger exporter. - To disable the exporter unregister it from the `TracerProvider` or use a no-operation `TracerProvider`. (#1806) -- Removed the functions `CollectorEndpointFromEnv` and `WithCollectorEndpointOptionFromEnv` from the Jaeger exporter. - These functions for retrieving specific environment variable values are redundant of other internal functions and - are not intended for end user use. (#1824) -- Removed the Jaeger exporter `WithSDKOptions` `Option`. - This option was used to set SDK options for the exporter creation convenience functions. - These functions are provided as a way to easily setup or install the exporter with what are deemed reasonable SDK settings for common use cases. - If the SDK needs to be configured differently, the `NewRawExporter` function and direct setup of the SDK with the desired settings should be used. (#1825) -- The `WithBufferMaxCount` and `WithBatchMaxCount` `Option`s from the Jaeger exporter are removed. - The exporter no longer batches exports, instead relying on the SDK's `BatchSpanProcessor` for this functionality. (#1830) -- The Jaeger exporter `Option` type is removed. - The type is no longer used by the exporter to configure anything. - All the previous configurations these options provided were duplicates of SDK configuration. - They have been removed in favor of using the SDK configuration and focuses the exporter configuration to be only about the endpoints it will send telemetry to. (#1830) - -## [0.19.0] - 2021-03-18 - -### Added - -- Added `Marshaler` config option to `otlphttp` to enable otlp over json or protobufs. (#1586) -- A `ForceFlush` method to the `"go.opentelemetry.io/otel/sdk/trace".TracerProvider` to flush all registered `SpanProcessor`s. (#1608) -- Added `WithSampler` and `WithSpanLimits` to tracer provider. (#1633, #1702) -- `"go.opentelemetry.io/otel/trace".SpanContext` now has a `remote` property, and `IsRemote()` predicate, that is true when the `SpanContext` has been extracted from remote context data. (#1701) -- A `Valid` method to the `"go.opentelemetry.io/otel/attribute".KeyValue` type. (#1703) - -### Changed - -- `trace.SpanContext` is now immutable and has no exported fields. (#1573) - - `trace.NewSpanContext()` can be used in conjunction with the `trace.SpanContextConfig` struct to initialize a new `SpanContext` where all values are known. -- Update the `ForceFlush` method signature to the `"go.opentelemetry.io/otel/sdk/trace".SpanProcessor` to accept a `context.Context` and return an error. (#1608) -- Update the `Shutdown` method to the `"go.opentelemetry.io/otel/sdk/trace".TracerProvider` return an error on shutdown failure. (#1608) -- The SimpleSpanProcessor will now shut down the enclosed `SpanExporter` and gracefully ignore subsequent calls to `OnEnd` after `Shutdown` is called. (#1612) -- `"go.opentelemetry.io/sdk/metric/controller.basic".WithPusher` is replaced with `WithExporter` to provide consistent naming across project. (#1656) -- Added non-empty string check for trace `Attribute` keys. (#1659) -- Add `description` to SpanStatus only when `StatusCode` is set to error. (#1662) -- Jaeger exporter falls back to `resource.Default`'s `service.name` if the exported Span does not have one. (#1673) -- Jaeger exporter populates Jaeger's Span Process from Resource. (#1673) -- Renamed the `LabelSet` method of `"go.opentelemetry.io/otel/sdk/resource".Resource` to `Set`. (#1692) -- Changed `WithSDK` to `WithSDKOptions` to accept variadic arguments of `TracerProviderOption` type in `go.opentelemetry.io/otel/exporters/trace/jaeger` package. (#1693) -- Changed `WithSDK` to `WithSDKOptions` to accept variadic arguments of `TracerProviderOption` type in `go.opentelemetry.io/otel/exporters/trace/zipkin` package. (#1693) - -### Removed - -- Removed `serviceName` parameter from Zipkin exporter and uses resource instead. (#1549) -- Removed `WithConfig` from tracer provider to avoid overriding configuration. (#1633) -- Removed the exported `SimpleSpanProcessor` and `BatchSpanProcessor` structs. - These are now returned as a SpanProcessor interface from their respective constructors. (#1638) -- Removed `WithRecord()` from `trace.SpanOption` when creating a span. (#1660) -- Removed setting status to `Error` while recording an error as a span event in `RecordError`. (#1663) -- Removed `jaeger.WithProcess` configuration option. (#1673) -- Removed `ApplyConfig` method from `"go.opentelemetry.io/otel/sdk/trace".TracerProvider` and the now unneeded `Config` struct. (#1693) - -### Fixed - -- Jaeger Exporter: Ensure mapping between OTEL and Jaeger span data complies with the specification. (#1626) -- `SamplingResult.TraceState` is correctly propagated to a newly created span's `SpanContext`. (#1655) -- The `otel-collector` example now correctly flushes metric events prior to shutting down the exporter. (#1678) -- Do not set span status message in `SpanStatusFromHTTPStatusCode` if it can be inferred from `http.status_code`. (#1681) -- Synchronization issues in global trace delegate implementation. (#1686) -- Reduced excess memory usage by global `TracerProvider`. (#1687) - -## [0.18.0] - 2021-03-03 - -### Added - -- Added `resource.Default()` for use with meter and tracer providers. (#1507) -- `AttributePerEventCountLimit` and `AttributePerLinkCountLimit` for `SpanLimits`. (#1535) -- Added `Keys()` method to `propagation.TextMapCarrier` and `propagation.HeaderCarrier` to adapt `http.Header` to this interface. (#1544) -- Added `code` attributes to `go.opentelemetry.io/otel/semconv` package. (#1558) -- Compatibility testing suite in the CI system for the following systems. (#1567) - | OS | Go Version | Architecture | - | ------- | ---------- | ------------ | - | Ubuntu | 1.15 | amd64 | - | Ubuntu | 1.14 | amd64 | - | Ubuntu | 1.15 | 386 | - | Ubuntu | 1.14 | 386 | - | MacOS | 1.15 | amd64 | - | MacOS | 1.14 | amd64 | - | Windows | 1.15 | amd64 | - | Windows | 1.14 | amd64 | - | Windows | 1.15 | 386 | - | Windows | 1.14 | 386 | - -### Changed - -- Replaced interface `oteltest.SpanRecorder` with its existing implementation - `StandardSpanRecorder`. (#1542) -- Default span limit values to 128. (#1535) -- Rename `MaxEventsPerSpan`, `MaxAttributesPerSpan` and `MaxLinksPerSpan` to `EventCountLimit`, `AttributeCountLimit` and `LinkCountLimit`, and move these fields into `SpanLimits`. (#1535) -- Renamed the `otel/label` package to `otel/attribute`. (#1541) -- Vendor the Jaeger exporter's dependency on Apache Thrift. (#1551) -- Parallelize the CI linting and testing. (#1567) -- Stagger timestamps in exact aggregator tests. (#1569) -- Changed all examples to use `WithBatchTimeout(5 * time.Second)` rather than `WithBatchTimeout(5)`. (#1621) -- Prevent end-users from implementing some interfaces (#1575) - - ``` - "otel/exporters/otlp/otlphttp".Option - "otel/exporters/stdout".Option - "otel/oteltest".Option - "otel/trace".TracerOption - "otel/trace".SpanOption - "otel/trace".EventOption - "otel/trace".LifeCycleOption - "otel/trace".InstrumentationOption - "otel/sdk/resource".Option - "otel/sdk/trace".ParentBasedSamplerOption - "otel/sdk/trace".ReadOnlySpan - "otel/sdk/trace".ReadWriteSpan - ``` - -### Removed - -- Removed attempt to resample spans upon changing the span name with `span.SetName()`. (#1545) -- The `test-benchmark` is no longer a dependency of the `precommit` make target. (#1567) -- Removed the `test-386` make target. - This was replaced with a full compatibility testing suite (i.e. multi OS/arch) in the CI system. (#1567) - -### Fixed - -- The sequential timing check of timestamps in the stdout exporter are now setup explicitly to be sequential (#1571). (#1572) -- Windows build of Jaeger tests now compiles with OS specific functions (#1576). (#1577) -- The sequential timing check of timestamps of go.opentelemetry.io/otel/sdk/metric/aggregator/lastvalue are now setup explicitly to be sequential (#1578). (#1579) -- Validate tracestate header keys with vendors according to the W3C TraceContext specification (#1475). (#1581) -- The OTLP exporter includes related labels for translations of a GaugeArray (#1563). (#1570) - -## [0.17.0] - 2021-02-12 - -### Changed - -- Rename project default branch from `master` to `main`. (#1505) -- Reverse order in which `Resource` attributes are merged, per change in spec. (#1501) -- Add tooling to maintain "replace" directives in go.mod files automatically. (#1528) -- Create new modules: otel/metric, otel/trace, otel/oteltest, otel/sdk/export/metric, otel/sdk/metric (#1528) -- Move metric-related public global APIs from otel to otel/metric/global. (#1528) - -## Fixed - -- Fixed otlpgrpc reconnection issue. -- The example code in the README.md of `go.opentelemetry.io/otel/exporters/otlp` is moved to a compiled example test and used the new `WithAddress` instead of `WithEndpoint`. (#1513) -- The otel-collector example now uses the default OTLP receiver port of the collector. - -## [0.16.0] - 2021-01-13 - -### Added - -- Add the `ReadOnlySpan` and `ReadWriteSpan` interfaces to provide better control for accessing span data. (#1360) -- `NewGRPCDriver` function returns a `ProtocolDriver` that maintains a single gRPC connection to the collector. (#1369) -- Added documentation about the project's versioning policy. (#1388) -- Added `NewSplitDriver` for OTLP exporter that allows sending traces and metrics to different endpoints. (#1418) -- Added codeql workflow to GitHub Actions (#1428) -- Added Gosec workflow to GitHub Actions (#1429) -- Add new HTTP driver for OTLP exporter in `exporters/otlp/otlphttp`. Currently it only supports the binary protobuf payloads. (#1420) -- Add an OpenCensus exporter bridge. (#1444) - -### Changed - -- Rename `internal/testing` to `internal/internaltest`. (#1449) -- Rename `export.SpanData` to `export.SpanSnapshot` and use it only for exporting spans. (#1360) -- Store the parent's full `SpanContext` rather than just its span ID in the `span` struct. (#1360) -- Improve span duration accuracy. (#1360) -- Migrated CI/CD from CircleCI to GitHub Actions (#1382) -- Remove duplicate checkout from GitHub Actions workflow (#1407) -- Metric `array` aggregator renamed `exact` to match its `aggregation.Kind` (#1412) -- Metric `exact` aggregator includes per-point timestamps (#1412) -- Metric stdout exporter uses MinMaxSumCount aggregator for ValueRecorder instruments (#1412) -- `NewExporter` from `exporters/otlp` now takes a `ProtocolDriver` as a parameter. (#1369) -- Many OTLP Exporter options became gRPC ProtocolDriver options. (#1369) -- Unify endpoint API that related to OTel exporter. (#1401) -- Optimize metric histogram aggregator to reuse its slice of buckets. (#1435) -- Metric aggregator Count() and histogram Bucket.Counts are consistently `uint64`. (1430) -- Histogram aggregator accepts functional options, uses default boundaries if none given. (#1434) -- `SamplingResult` now passed a `Tracestate` from the parent `SpanContext` (#1432) -- Moved gRPC driver for OTLP exporter to `exporters/otlp/otlpgrpc`. (#1420) -- The `TraceContext` propagator now correctly propagates `TraceState` through the `SpanContext`. (#1447) -- Metric Push and Pull Controller components are combined into a single "basic" Controller: - - `WithExporter()` and `Start()` to configure Push behavior - - `Start()` is optional; use `Collect()` and `ForEach()` for Pull behavior - - `Start()` and `Stop()` accept Context. (#1378) -- The `Event` type is moved from the `otel/sdk/export/trace` package to the `otel/trace` API package. (#1452) - -### Removed - -- Remove `errUninitializedSpan` as its only usage is now obsolete. (#1360) -- Remove Metric export functionality related to quantiles and summary data points: this is not specified (#1412) -- Remove DDSketch metric aggregator; our intention is to re-introduce this as an option of the histogram aggregator after [new OTLP histogram data types](https://github.com/open-telemetry/opentelemetry-proto/pull/226) are released (#1412) - -### Fixed - -- `BatchSpanProcessor.Shutdown()` will now shutdown underlying `export.SpanExporter`. (#1443) - -## [0.15.0] - 2020-12-10 - -### Added - -- The `WithIDGenerator` `TracerProviderOption` is added to the `go.opentelemetry.io/otel/trace` package to configure an `IDGenerator` for the `TracerProvider`. (#1363) - -### Changed - -- The Zipkin exporter now uses the Span status code to determine. (#1328) -- `NewExporter` and `Start` functions in `go.opentelemetry.io/otel/exporters/otlp` now receive `context.Context` as a first parameter. (#1357) -- Move the OpenCensus example into `example` directory. (#1359) -- Moved the SDK's `internal.IDGenerator` interface in to the `sdk/trace` package to enable support for externally-defined ID generators. (#1363) -- Bump `github.com/google/go-cmp` from 0.5.3 to 0.5.4 (#1374) -- Bump `github.com/golangci/golangci-lint` in `/internal/tools` (#1375) - -### Fixed - -- Metric SDK `SumObserver` and `UpDownSumObserver` instruments correctness fixes. (#1381) - -## [0.14.0] - 2020-11-19 - -### Added - -- An `EventOption` and the related `NewEventConfig` function are added to the `go.opentelemetry.io/otel` package to configure Span events. (#1254) -- A `TextMapPropagator` and associated `TextMapCarrier` are added to the `go.opentelemetry.io/otel/oteltest` package to test `TextMap` type propagators and their use. (#1259) -- `SpanContextFromContext` returns `SpanContext` from context. (#1255) -- `TraceState` has been added to `SpanContext`. (#1340) -- `DeploymentEnvironmentKey` added to `go.opentelemetry.io/otel/semconv` package. (#1323) -- Add an OpenCensus to OpenTelemetry tracing bridge. (#1305) -- Add a parent context argument to `SpanProcessor.OnStart` to follow the specification. (#1333) -- Add missing tests for `sdk/trace/attributes_map.go`. (#1337) - -### Changed - -- Move the `go.opentelemetry.io/otel/api/trace` package into `go.opentelemetry.io/otel/trace` with the following changes. (#1229) (#1307) - - `ID` has been renamed to `TraceID`. - - `IDFromHex` has been renamed to `TraceIDFromHex`. - - `EmptySpanContext` is removed. -- Move the `go.opentelemetry.io/otel/api/trace/tracetest` package into `go.opentelemetry.io/otel/oteltest`. (#1229) -- OTLP Exporter updates: - - supports OTLP v0.6.0 (#1230, #1354) - - supports configurable aggregation temporality (default: Cumulative, optional: Stateless). (#1296) -- The Sampler is now called on local child spans. (#1233) -- The `Kind` type from the `go.opentelemetry.io/otel/api/metric` package was renamed to `InstrumentKind` to more specifically describe what it is and avoid semantic ambiguity. (#1240) -- The `MetricKind` method of the `Descriptor` type in the `go.opentelemetry.io/otel/api/metric` package was renamed to `Descriptor.InstrumentKind`. - This matches the returned type and fixes misuse of the term metric. (#1240) -- Move test harness from the `go.opentelemetry.io/otel/api/apitest` package into `go.opentelemetry.io/otel/oteltest`. (#1241) -- Move the `go.opentelemetry.io/otel/api/metric/metrictest` package into `go.opentelemetry.io/oteltest` as part of #964. (#1252) -- Move the `go.opentelemetry.io/otel/api/metric` package into `go.opentelemetry.io/otel/metric` as part of #1303. (#1321) -- Move the `go.opentelemetry.io/otel/api/metric/registry` package into `go.opentelemetry.io/otel/metric/registry` as a part of #1303. (#1316) -- Move the `Number` type (together with related functions) from `go.opentelemetry.io/otel/api/metric` package into `go.opentelemetry.io/otel/metric/number` as a part of #1303. (#1316) -- The function signature of the Span `AddEvent` method in `go.opentelemetry.io/otel` is updated to no longer take an unused context and instead take a required name and a variable number of `EventOption`s. (#1254) -- The function signature of the Span `RecordError` method in `go.opentelemetry.io/otel` is updated to no longer take an unused context and instead take a required error value and a variable number of `EventOption`s. (#1254) -- Move the `go.opentelemetry.io/otel/api/global` package to `go.opentelemetry.io/otel`. (#1262) (#1330) -- Move the `Version` function from `go.opentelemetry.io/otel/sdk` to `go.opentelemetry.io/otel`. (#1330) -- Rename correlation context header from `"otcorrelations"` to `"baggage"` to match the OpenTelemetry specification. (#1267) -- Fix `Code.UnmarshalJSON` to work with valid JSON only. (#1276) -- The `resource.New()` method changes signature to support builtin attributes and functional options, including `telemetry.sdk.*` and - `host.name` semantic conventions; the former method is renamed `resource.NewWithAttributes`. (#1235) -- The Prometheus exporter now exports non-monotonic counters (i.e. `UpDownCounter`s) as gauges. (#1210) -- Correct the `Span.End` method documentation in the `otel` API to state updates are not allowed on a span after it has ended. (#1310) -- Updated span collection limits for attribute, event and link counts to 1000 (#1318) -- Renamed `semconv.HTTPUrlKey` to `semconv.HTTPURLKey`. (#1338) - -### Removed - -- The `ErrInvalidHexID`, `ErrInvalidTraceIDLength`, `ErrInvalidSpanIDLength`, `ErrInvalidSpanIDLength`, or `ErrNilSpanID` from the `go.opentelemetry.io/otel` package are unexported now. (#1243) -- The `AddEventWithTimestamp` method on the `Span` interface in `go.opentelemetry.io/otel` is removed due to its redundancy. - It is replaced by using the `AddEvent` method with a `WithTimestamp` option. (#1254) -- The `MockSpan` and `MockTracer` types are removed from `go.opentelemetry.io/otel/oteltest`. - `Tracer` and `Span` from the same module should be used in their place instead. (#1306) -- `WorkerCount` option is removed from `go.opentelemetry.io/otel/exporters/otlp`. (#1350) -- Remove the following labels types: INT32, UINT32, UINT64 and FLOAT32. (#1314) - -### Fixed - -- Rename `MergeItererator` to `MergeIterator` in the `go.opentelemetry.io/otel/label` package. (#1244) -- The `go.opentelemetry.io/otel/api/global` packages global TextMapPropagator now delegates functionality to a globally set delegate for all previously returned propagators. (#1258) -- Fix condition in `label.Any`. (#1299) -- Fix global `TracerProvider` to pass options to its configured provider. (#1329) -- Fix missing handler for `ExactKind` aggregator in OTLP metrics transformer (#1309) - -## [0.13.0] - 2020-10-08 - -### Added - -- OTLP Metric exporter supports Histogram aggregation. (#1209) -- The `Code` struct from the `go.opentelemetry.io/otel/codes` package now supports JSON marshaling and unmarshaling as well as implements the `Stringer` interface. (#1214) -- A Baggage API to implement the OpenTelemetry specification. (#1217) -- Add Shutdown method to sdk/trace/provider, shutdown processors in the order they were registered. (#1227) - -### Changed - -- Set default propagator to no-op propagator. (#1184) -- The `HTTPSupplier`, `HTTPExtractor`, `HTTPInjector`, and `HTTPPropagator` from the `go.opentelemetry.io/otel/api/propagation` package were replaced with unified `TextMapCarrier` and `TextMapPropagator` in the `go.opentelemetry.io/otel/propagation` package. (#1212) (#1325) -- The `New` function from the `go.opentelemetry.io/otel/api/propagation` package was replaced with `NewCompositeTextMapPropagator` in the `go.opentelemetry.io/otel` package. (#1212) -- The status codes of the `go.opentelemetry.io/otel/codes` package have been updated to match the latest OpenTelemetry specification. - They now are `Unset`, `Error`, and `Ok`. - They no longer track the gRPC codes. (#1214) -- The `StatusCode` field of the `SpanData` struct in the `go.opentelemetry.io/otel/sdk/export/trace` package now uses the codes package from this package instead of the gRPC project. (#1214) -- Move the `go.opentelemetry.io/otel/api/baggage` package into `go.opentelemetry.io/otel/baggage`. (#1217) (#1325) -- A `Shutdown` method of `SpanProcessor` and all its implementations receives a context and returns an error. (#1264) - -### Fixed - -- Copies of data from arrays and slices passed to `go.opentelemetry.io/otel/label.ArrayValue()` are now used in the returned `Value` instead of using the mutable data itself. (#1226) - -### Removed - -- The `ExtractHTTP` and `InjectHTTP` functions from the `go.opentelemetry.io/otel/api/propagation` package were removed. (#1212) -- The `Propagators` interface from the `go.opentelemetry.io/otel/api/propagation` package was removed to conform to the OpenTelemetry specification. - The explicit `TextMapPropagator` type can be used in its place as this is the `Propagator` type the specification defines. (#1212) -- The `SetAttribute` method of the `Span` from the `go.opentelemetry.io/otel/api/trace` package was removed given its redundancy with the `SetAttributes` method. (#1216) -- The internal implementation of Baggage storage is removed in favor of using the new Baggage API functionality. (#1217) -- Remove duplicate hostname key `HostHostNameKey` in Resource semantic conventions. (#1219) -- Nested array/slice support has been removed. (#1226) - -## [0.12.0] - 2020-09-24 - -### Added - -- A `SpanConfigure` function in `go.opentelemetry.io/otel/api/trace` to create a new `SpanConfig` from `SpanOption`s. (#1108) -- In the `go.opentelemetry.io/otel/api/trace` package, `NewTracerConfig` was added to construct new `TracerConfig`s. - This addition was made to conform with our project option conventions. (#1155) -- Instrumentation library information was added to the Zipkin exporter. (#1119) -- The `SpanProcessor` interface now has a `ForceFlush()` method. (#1166) -- More semantic conventions for k8s as resource attributes. (#1167) - -### Changed - -- Add reconnecting udp connection type to Jaeger exporter. - This change adds a new optional implementation of the udp conn interface used to detect changes to an agent's host dns record. - It then adopts the new destination address to ensure the exporter doesn't get stuck. This change was ported from jaegertracing/jaeger-client-go#520. (#1063) -- Replace `StartOption` and `EndOption` in `go.opentelemetry.io/otel/api/trace` with `SpanOption`. - This change is matched by replacing the `StartConfig` and `EndConfig` with a unified `SpanConfig`. (#1108) -- Replace the `LinkedTo` span option in `go.opentelemetry.io/otel/api/trace` with `WithLinks`. - This is be more consistent with our other option patterns, i.e. passing the item to be configured directly instead of its component parts, and provides a cleaner function signature. (#1108) -- The `go.opentelemetry.io/otel/api/trace` `TracerOption` was changed to an interface to conform to project option conventions. (#1109) -- Move the `B3` and `TraceContext` from within the `go.opentelemetry.io/otel/api/trace` package to their own `go.opentelemetry.io/otel/propagators` package. - This removal of the propagators is reflective of the OpenTelemetry specification for these propagators as well as cleans up the `go.opentelemetry.io/otel/api/trace` API. (#1118) -- Rename Jaeger tags used for instrumentation library information to reflect changes in OpenTelemetry specification. (#1119) -- Rename `ProbabilitySampler` to `TraceIDRatioBased` and change semantics to ignore parent span sampling status. (#1115) -- Move `tools` package under `internal`. (#1141) -- Move `go.opentelemetry.io/otel/api/correlation` package to `go.opentelemetry.io/otel/api/baggage`. (#1142) - The `correlation.CorrelationContext` propagator has been renamed `baggage.Baggage`. Other exported functions and types are unchanged. -- Rename `ParentOrElse` sampler to `ParentBased` and allow setting samplers depending on parent span. (#1153) -- In the `go.opentelemetry.io/otel/api/trace` package, `SpanConfigure` was renamed to `NewSpanConfig`. (#1155) -- Change `dependabot.yml` to add a `Skip Changelog` label to dependabot-sourced PRs. (#1161) -- The [configuration style guide](https://github.com/open-telemetry/opentelemetry-go/blob/master/CONTRIBUTING.md#config) has been updated to - recommend the use of `newConfig()` instead of `configure()`. (#1163) -- The `otlp.Config` type has been unexported and changed to `otlp.config`, along with its initializer. (#1163) -- Ensure exported interface types include parameter names and update the - Style Guide to reflect this styling rule. (#1172) -- Don't consider unset environment variable for resource detection to be an error. (#1170) -- Rename `go.opentelemetry.io/otel/api/metric.ConfigureInstrument` to `NewInstrumentConfig` and - `go.opentelemetry.io/otel/api/metric.ConfigureMeter` to `NewMeterConfig`. -- ValueObserver instruments use LastValue aggregator by default. (#1165) -- OTLP Metric exporter supports LastValue aggregation. (#1165) -- Move the `go.opentelemetry.io/otel/api/unit` package to `go.opentelemetry.io/otel/unit`. (#1185) -- Rename `Provider` to `MeterProvider` in the `go.opentelemetry.io/otel/api/metric` package. (#1190) -- Rename `NoopProvider` to `NoopMeterProvider` in the `go.opentelemetry.io/otel/api/metric` package. (#1190) -- Rename `NewProvider` to `NewMeterProvider` in the `go.opentelemetry.io/otel/api/metric/metrictest` package. (#1190) -- Rename `Provider` to `MeterProvider` in the `go.opentelemetry.io/otel/api/metric/registry` package. (#1190) -- Rename `NewProvider` to `NewMeterProvider` in the `go.opentelemetry.io/otel/api/metri/registryc` package. (#1190) -- Rename `Provider` to `TracerProvider` in the `go.opentelemetry.io/otel/api/trace` package. (#1190) -- Rename `NoopProvider` to `NoopTracerProvider` in the `go.opentelemetry.io/otel/api/trace` package. (#1190) -- Rename `Provider` to `TracerProvider` in the `go.opentelemetry.io/otel/api/trace/tracetest` package. (#1190) -- Rename `NewProvider` to `NewTracerProvider` in the `go.opentelemetry.io/otel/api/trace/tracetest` package. (#1190) -- Rename `WrapperProvider` to `WrapperTracerProvider` in the `go.opentelemetry.io/otel/bridge/opentracing` package. (#1190) -- Rename `NewWrapperProvider` to `NewWrapperTracerProvider` in the `go.opentelemetry.io/otel/bridge/opentracing` package. (#1190) -- Rename `Provider` method of the pull controller to `MeterProvider` in the `go.opentelemetry.io/otel/sdk/metric/controller/pull` package. (#1190) -- Rename `Provider` method of the push controller to `MeterProvider` in the `go.opentelemetry.io/otel/sdk/metric/controller/push` package. (#1190) -- Rename `ProviderOptions` to `TracerProviderConfig` in the `go.opentelemetry.io/otel/sdk/trace` package. (#1190) -- Rename `ProviderOption` to `TracerProviderOption` in the `go.opentelemetry.io/otel/sdk/trace` package. (#1190) -- Rename `Provider` to `TracerProvider` in the `go.opentelemetry.io/otel/sdk/trace` package. (#1190) -- Rename `NewProvider` to `NewTracerProvider` in the `go.opentelemetry.io/otel/sdk/trace` package. (#1190) -- Renamed `SamplingDecision` values to comply with OpenTelemetry specification change. (#1192) -- Renamed Zipkin attribute names from `ot.status_code & ot.status_description` to `otel.status_code & otel.status_description`. (#1201) -- The default SDK now invokes registered `SpanProcessor`s in the order they were registered with the `TracerProvider`. (#1195) -- Add test of spans being processed by the `SpanProcessor`s in the order they were registered. (#1203) - -### Removed - -- Remove the B3 propagator from `go.opentelemetry.io/otel/propagators`. It is now located in the - `go.opentelemetry.io/contrib/propagators/` module. (#1191) -- Remove the semantic convention for HTTP status text, `HTTPStatusTextKey` from package `go.opentelemetry.io/otel/semconv`. (#1194) - -### Fixed - -- Zipkin example no longer mentions `ParentSampler`, corrected to `ParentBased`. (#1171) -- Fix missing shutdown processor in otel-collector example. (#1186) -- Fix missing shutdown processor in basic and namedtracer examples. (#1197) - -## [0.11.0] - 2020-08-24 - -### Added - -- Support for exporting array-valued attributes via OTLP. (#992) -- `Noop` and `InMemory` `SpanBatcher` implementations to help with testing integrations. (#994) -- Support for filtering metric label sets. (#1047) -- A dimensionality-reducing metric Processor. (#1057) -- Integration tests for more OTel Collector Attribute types. (#1062) -- A new `WithSpanProcessor` `ProviderOption` is added to the `go.opentelemetry.io/otel/sdk/trace` package to create a `Provider` and automatically register the `SpanProcessor`. (#1078) - -### Changed - -- Rename `sdk/metric/processor/test` to `sdk/metric/processor/processortest`. (#1049) -- Rename `sdk/metric/controller/test` to `sdk/metric/controller/controllertest`. (#1049) -- Rename `api/testharness` to `api/apitest`. (#1049) -- Rename `api/trace/testtrace` to `api/trace/tracetest`. (#1049) -- Change Metric Processor to merge multiple observations. (#1024) -- The `go.opentelemetry.io/otel/bridge/opentracing` bridge package has been made into its own module. - This removes the package dependencies of this bridge from the rest of the OpenTelemetry based project. (#1038) -- Renamed `go.opentelemetry.io/otel/api/standard` package to `go.opentelemetry.io/otel/semconv` to avoid the ambiguous and generic name `standard` and better describe the package as containing OpenTelemetry semantic conventions. (#1016) -- The environment variable used for resource detection has been changed from `OTEL_RESOURCE_LABELS` to `OTEL_RESOURCE_ATTRIBUTES` (#1042) -- Replace `WithSyncer` with `WithBatcher` in examples. (#1044) -- Replace the `google.golang.org/grpc/codes` dependency in the API with an equivalent `go.opentelemetry.io/otel/codes` package. (#1046) -- Merge the `go.opentelemetry.io/otel/api/label` and `go.opentelemetry.io/otel/api/kv` into the new `go.opentelemetry.io/otel/label` package. (#1060) -- Unify Callback Function Naming. - Rename `*Callback` with `*Func`. (#1061) -- CI builds validate against last two versions of Go, dropping 1.13 and adding 1.15. (#1064) -- The `go.opentelemetry.io/otel/sdk/export/trace` interfaces `SpanSyncer` and `SpanBatcher` have been replaced with a specification compliant `Exporter` interface. - This interface still supports the export of `SpanData`, but only as a slice. - Implementation are also required now to return any error from `ExportSpans` if one occurs as well as implement a `Shutdown` method for exporter clean-up. (#1078) -- The `go.opentelemetry.io/otel/sdk/trace` `NewBatchSpanProcessor` function no longer returns an error. - If a `nil` exporter is passed as an argument to this function, instead of it returning an error, it now returns a `BatchSpanProcessor` that handles the export of `SpanData` by not taking any action. (#1078) -- The `go.opentelemetry.io/otel/sdk/trace` `NewProvider` function to create a `Provider` no longer returns an error, instead only a `*Provider`. - This change is related to `NewBatchSpanProcessor` not returning an error which was the only error this function would return. (#1078) - -### Removed - -- Duplicate, unused API sampler interface. (#999) - Use the [`Sampler` interface](https://github.com/open-telemetry/opentelemetry-go/blob/v0.11.0/sdk/trace/sampling.go) provided by the SDK instead. -- The `grpctrace` instrumentation was moved to the `go.opentelemetry.io/contrib` repository and out of this repository. - This move includes moving the `grpc` example to the `go.opentelemetry.io/contrib` as well. (#1027) -- The `WithSpan` method of the `Tracer` interface. - The functionality this method provided was limited compared to what a user can provide themselves. - It was removed with the understanding that if there is sufficient user need it can be added back based on actual user usage. (#1043) -- The `RegisterSpanProcessor` and `UnregisterSpanProcessor` functions. - These were holdovers from an approach prior to the TracerProvider design. They were not used anymore. (#1077) -- The `oterror` package. (#1026) -- The `othttp` and `httptrace` instrumentations were moved to `go.opentelemetry.io/contrib`. (#1032) - -### Fixed - -- The `semconv.HTTPServerMetricAttributesFromHTTPRequest()` function no longer generates the high-cardinality `http.request.content.length` label. (#1031) -- Correct instrumentation version tag in Jaeger exporter. (#1037) -- The SDK span will now set an error event if the `End` method is called during a panic (i.e. it was deferred). (#1043) -- Move internally generated protobuf code from the `go.opentelemetry.io/otel` to the OTLP exporter to reduce dependency overhead. (#1050) -- The `otel-collector` example referenced outdated collector processors. (#1006) - -## [0.10.0] - 2020-07-29 - -This release migrates the default OpenTelemetry SDK into its own Go module, decoupling the SDK from the API and reducing dependencies for instrumentation packages. - -### Added - -- The Zipkin exporter now has `NewExportPipeline` and `InstallNewPipeline` constructor functions to match the common pattern. - These function build a new exporter with default SDK options and register the exporter with the `global` package respectively. (#944) -- Add propagator option for gRPC instrumentation. (#986) -- The `testtrace` package now tracks the `trace.SpanKind` for each span. (#987) - -### Changed - -- Replace the `RegisterGlobal` `Option` in the Jaeger exporter with an `InstallNewPipeline` constructor function. - This matches the other exporter constructor patterns and will register a new exporter after building it with default configuration. (#944) -- The trace (`go.opentelemetry.io/otel/exporters/trace/stdout`) and metric (`go.opentelemetry.io/otel/exporters/metric/stdout`) `stdout` exporters are now merged into a single exporter at `go.opentelemetry.io/otel/exporters/stdout`. - This new exporter was made into its own Go module to follow the pattern of all exporters and decouple it from the `go.opentelemetry.io/otel` module. (#956, #963) -- Move the `go.opentelemetry.io/otel/exporters/test` test package to `go.opentelemetry.io/otel/sdk/export/metric/metrictest`. (#962) -- The `go.opentelemetry.io/otel/api/kv/value` package was merged into the parent `go.opentelemetry.io/otel/api/kv` package. (#968) - - `value.Bool` was replaced with `kv.BoolValue`. - - `value.Int64` was replaced with `kv.Int64Value`. - - `value.Uint64` was replaced with `kv.Uint64Value`. - - `value.Float64` was replaced with `kv.Float64Value`. - - `value.Int32` was replaced with `kv.Int32Value`. - - `value.Uint32` was replaced with `kv.Uint32Value`. - - `value.Float32` was replaced with `kv.Float32Value`. - - `value.String` was replaced with `kv.StringValue`. - - `value.Int` was replaced with `kv.IntValue`. - - `value.Uint` was replaced with `kv.UintValue`. - - `value.Array` was replaced with `kv.ArrayValue`. -- Rename `Infer` to `Any` in the `go.opentelemetry.io/otel/api/kv` package. (#972) -- Change `othttp` to use the `httpsnoop` package to wrap the `ResponseWriter` so that optional interfaces (`http.Hijacker`, `http.Flusher`, etc.) that are implemented by the original `ResponseWriter`are also implemented by the wrapped `ResponseWriter`. (#979) -- Rename `go.opentelemetry.io/otel/sdk/metric/aggregator/test` package to `go.opentelemetry.io/otel/sdk/metric/aggregator/aggregatortest`. (#980) -- Make the SDK into its own Go module called `go.opentelemetry.io/otel/sdk`. (#985) -- Changed the default trace `Sampler` from `AlwaysOn` to `ParentOrElse(AlwaysOn)`. (#989) - -### Removed - -- The `IndexedAttribute` function from the `go.opentelemetry.io/otel/api/label` package was removed in favor of `IndexedLabel` which it was synonymous with. (#970) - -### Fixed - -- Bump github.com/golangci/golangci-lint from 1.28.3 to 1.29.0 in /tools. (#953) -- Bump github.com/google/go-cmp from 0.5.0 to 0.5.1. (#957) -- Use `global.Handle` for span export errors in the OTLP exporter. (#946) -- Correct Go language formatting in the README documentation. (#961) -- Remove default SDK dependencies from the `go.opentelemetry.io/otel/api` package. (#977) -- Remove default SDK dependencies from the `go.opentelemetry.io/otel/instrumentation` package. (#983) -- Move documented examples for `go.opentelemetry.io/otel/instrumentation/grpctrace` interceptors into Go example tests. (#984) - -## [0.9.0] - 2020-07-20 - -### Added - -- A new Resource Detector interface is included to allow resources to be automatically detected and included. (#939) -- A Detector to automatically detect resources from an environment variable. (#939) -- Github action to generate protobuf Go bindings locally in `internal/opentelemetry-proto-gen`. (#938) -- OTLP .proto files from `open-telemetry/opentelemetry-proto` imported as a git submodule under `internal/opentelemetry-proto`. - References to `github.com/open-telemetry/opentelemetry-proto` changed to `go.opentelemetry.io/otel/internal/opentelemetry-proto-gen`. (#942) - -### Changed - -- Non-nil value `struct`s for key-value pairs will be marshalled using JSON rather than `Sprintf`. (#948) - -### Removed - -- Removed dependency on `github.com/open-telemetry/opentelemetry-collector`. (#943) - -## [0.8.0] - 2020-07-09 - -### Added - -- The `B3Encoding` type to represent the B3 encoding(s) the B3 propagator can inject. - A value for HTTP supported encodings (Multiple Header: `MultipleHeader`, Single Header: `SingleHeader`) are included. (#882) -- The `FlagsDeferred` trace flag to indicate if the trace sampling decision has been deferred. (#882) -- The `FlagsDebug` trace flag to indicate if the trace is a debug trace. (#882) -- Add `peer.service` semantic attribute. (#898) -- Add database-specific semantic attributes. (#899) -- Add semantic convention for `faas.coldstart` and `container.id`. (#909) -- Add http content size semantic conventions. (#905) -- Include `http.request_content_length` in HTTP request basic attributes. (#905) -- Add semantic conventions for operating system process resource attribute keys. (#919) -- The Jaeger exporter now has a `WithBatchMaxCount` option to specify the maximum number of spans sent in a batch. (#931) - -### Changed - -- Update `CONTRIBUTING.md` to ask for updates to `CHANGELOG.md` with each pull request. (#879) -- Use lowercase header names for B3 Multiple Headers. (#881) -- The B3 propagator `SingleHeader` field has been replaced with `InjectEncoding`. - This new field can be set to combinations of the `B3Encoding` bitmasks and will inject trace information in these encodings. - If no encoding is set, the propagator will default to `MultipleHeader` encoding. (#882) -- The B3 propagator now extracts from either HTTP encoding of B3 (Single Header or Multiple Header) based on what is contained in the header. - Preference is given to Single Header encoding with Multiple Header being the fallback if Single Header is not found or is invalid. - This behavior change is made to dynamically support all correctly encoded traces received instead of having to guess the expected encoding prior to receiving. (#882) -- Extend semantic conventions for RPC. (#900) -- To match constant naming conventions in the `api/standard` package, the `FaaS*` key names are appended with a suffix of `Key`. (#920) - - `"api/standard".FaaSName` -> `FaaSNameKey` - - `"api/standard".FaaSID` -> `FaaSIDKey` - - `"api/standard".FaaSVersion` -> `FaaSVersionKey` - - `"api/standard".FaaSInstance` -> `FaaSInstanceKey` - -### Removed - -- The `FlagsUnused` trace flag is removed. - The purpose of this flag was to act as the inverse of `FlagsSampled`, the inverse of `FlagsSampled` is used instead. (#882) -- The B3 header constants (`B3SingleHeader`, `B3DebugFlagHeader`, `B3TraceIDHeader`, `B3SpanIDHeader`, `B3SampledHeader`, `B3ParentSpanIDHeader`) are removed. - If B3 header keys are needed [the authoritative OpenZipkin package constants](https://pkg.go.dev/github.com/openzipkin/zipkin-go@v0.2.2/propagation/b3?tab=doc#pkg-constants) should be used instead. (#882) - -### Fixed - -- The B3 Single Header name is now correctly `b3` instead of the previous `X-B3`. (#881) -- The B3 propagator now correctly supports sampling only values (`b3: 0`, `b3: 1`, or `b3: d`) for a Single B3 Header. (#882) -- The B3 propagator now propagates the debug flag. - This removes the behavior of changing the debug flag into a set sampling bit. - Instead, this now follow the B3 specification and omits the `X-B3-Sampling` header. (#882) -- The B3 propagator now tracks "unset" sampling state (meaning "defer the decision") and does not set the `X-B3-Sampling` header when injecting. (#882) -- Bump github.com/itchyny/gojq from 0.10.3 to 0.10.4 in /tools. (#883) -- Bump github.com/opentracing/opentracing-go from v1.1.1-0.20190913142402-a7454ce5950e to v1.2.0. (#885) -- The tracing time conversion for OTLP spans is now correctly set to `UnixNano`. (#896) -- Ensure span status is not set to `Unknown` when no HTTP status code is provided as it is assumed to be `200 OK`. (#908) -- Ensure `httptrace.clientTracer` closes `http.headers` span. (#912) -- Prometheus exporter will not apply stale updates or forget inactive metrics. (#903) -- Add test for api.standard `HTTPClientAttributesFromHTTPRequest`. (#905) -- Bump github.com/golangci/golangci-lint from 1.27.0 to 1.28.1 in /tools. (#901, #913) -- Update otel-colector example to use the v0.5.0 collector. (#915) -- The `grpctrace` instrumentation uses a span name conforming to the OpenTelemetry semantic conventions (does not contain a leading slash (`/`)). (#922) -- The `grpctrace` instrumentation includes an `rpc.method` attribute now set to the gRPC method name. (#900, #922) -- The `grpctrace` instrumentation `rpc.service` attribute now contains the package name if one exists. - This is in accordance with OpenTelemetry semantic conventions. (#922) -- Correlation Context extractor will no longer insert an empty map into the returned context when no valid values are extracted. (#923) -- Bump google.golang.org/api from 0.28.0 to 0.29.0 in /exporters/trace/jaeger. (#925) -- Bump github.com/itchyny/gojq from 0.10.4 to 0.11.0 in /tools. (#926) -- Bump github.com/golangci/golangci-lint from 1.28.1 to 1.28.2 in /tools. (#930) - -## [0.7.0] - 2020-06-26 - -This release implements the v0.5.0 version of the OpenTelemetry specification. - -### Added - -- The othttp instrumentation now includes default metrics. (#861) -- This CHANGELOG file to track all changes in the project going forward. -- Support for array type attributes. (#798) -- Apply transitive dependabot go.mod dependency updates as part of a new automatic Github workflow. (#844) -- Timestamps are now passed to exporters for each export. (#835) -- Add new `Accumulation` type to metric SDK to transport telemetry from `Accumulator`s to `Processor`s. - This replaces the prior `Record` `struct` use for this purpose. (#835) -- New dependabot integration to automate package upgrades. (#814) -- `Meter` and `Tracer` implementations accept instrumentation version version as an optional argument. - This instrumentation version is passed on to exporters. (#811) (#805) (#802) -- The OTLP exporter includes the instrumentation version in telemetry it exports. (#811) -- Environment variables for Jaeger exporter are supported. (#796) -- New `aggregation.Kind` in the export metric API. (#808) -- New example that uses OTLP and the collector. (#790) -- Handle errors in the span `SetName` during span initialization. (#791) -- Default service config to enable retries for retry-able failed requests in the OTLP exporter and an option to override this default. (#777) -- New `go.opentelemetry.io/otel/api/oterror` package to uniformly support error handling and definitions for the project. (#778) -- New `global` default implementation of the `go.opentelemetry.io/otel/api/oterror.Handler` interface to be used to handle errors prior to an user defined `Handler`. - There is also functionality for the user to register their `Handler` as well as a convenience function `Handle` to handle an error with this global `Handler`(#778) -- Options to specify propagators for httptrace and grpctrace instrumentation. (#784) -- The required `application/json` header for the Zipkin exporter is included in all exports. (#774) -- Integrate HTTP semantics helpers from the contrib repository into the `api/standard` package. #769 - -### Changed - -- Rename `Integrator` to `Processor` in the metric SDK. (#863) -- Rename `AggregationSelector` to `AggregatorSelector`. (#859) -- Rename `SynchronizedCopy` to `SynchronizedMove`. (#858) -- Rename `simple` integrator to `basic` integrator. (#857) -- Merge otlp collector examples. (#841) -- Change the metric SDK to support cumulative, delta, and pass-through exporters directly. - With these changes, cumulative and delta specific exporters are able to request the correct kind of aggregation from the SDK. (#840) -- The `Aggregator.Checkpoint` API is renamed to `SynchronizedCopy` and adds an argument, a different `Aggregator` into which the copy is stored. (#812) -- The `export.Aggregator` contract is that `Update()` and `SynchronizedCopy()` are synchronized with each other. - All the aggregation interfaces (`Sum`, `LastValue`, ...) are not meant to be synchronized, as the caller is expected to synchronize aggregators at a higher level after the `Accumulator`. - Some of the `Aggregators` used unnecessary locking and that has been cleaned up. (#812) -- Use of `metric.Number` was replaced by `int64` now that we use `sync.Mutex` in the `MinMaxSumCount` and `Histogram` `Aggregators`. (#812) -- Replace `AlwaysParentSample` with `ParentSample(fallback)` to match the OpenTelemetry v0.5.0 specification. (#810) -- Rename `sdk/export/metric/aggregator` to `sdk/export/metric/aggregation`. #808 -- Send configured headers with every request in the OTLP exporter, instead of just on connection creation. (#806) -- Update error handling for any one off error handlers, replacing, instead, with the `global.Handle` function. (#791) -- Rename `plugin` directory to `instrumentation` to match the OpenTelemetry specification. (#779) -- Makes the argument order to Histogram and DDSketch `New()` consistent. (#781) - -### Removed - -- `Uint64NumberKind` and related functions from the API. (#864) -- Context arguments from `Aggregator.Checkpoint` and `Integrator.Process` as they were unused. (#803) -- `SpanID` is no longer included in parameters for sampling decision to match the OpenTelemetry specification. (#775) - -### Fixed - -- Upgrade OTLP exporter to opentelemetry-proto matching the opentelemetry-collector v0.4.0 release. (#866) -- Allow changes to `go.sum` and `go.mod` when running dependabot tidy-up. (#871) -- Bump github.com/stretchr/testify from 1.4.0 to 1.6.1. (#824) -- Bump github.com/prometheus/client_golang from 1.7.0 to 1.7.1 in /exporters/metric/prometheus. (#867) -- Bump google.golang.org/grpc from 1.29.1 to 1.30.0 in /exporters/trace/jaeger. (#853) -- Bump google.golang.org/grpc from 1.29.1 to 1.30.0 in /exporters/trace/zipkin. (#854) -- Bumps github.com/golang/protobuf from 1.3.2 to 1.4.2 (#848) -- Bump github.com/stretchr/testify from 1.4.0 to 1.6.1 in /exporters/otlp (#817) -- Bump github.com/golangci/golangci-lint from 1.25.1 to 1.27.0 in /tools (#828) -- Bump github.com/prometheus/client_golang from 1.5.0 to 1.7.0 in /exporters/metric/prometheus (#838) -- Bump github.com/stretchr/testify from 1.4.0 to 1.6.1 in /exporters/trace/jaeger (#829) -- Bump github.com/benbjohnson/clock from 1.0.0 to 1.0.3 (#815) -- Bump github.com/stretchr/testify from 1.4.0 to 1.6.1 in /exporters/trace/zipkin (#823) -- Bump github.com/itchyny/gojq from 0.10.1 to 0.10.3 in /tools (#830) -- Bump github.com/stretchr/testify from 1.4.0 to 1.6.1 in /exporters/metric/prometheus (#822) -- Bump google.golang.org/grpc from 1.27.1 to 1.29.1 in /exporters/trace/zipkin (#820) -- Bump google.golang.org/grpc from 1.27.1 to 1.29.1 in /exporters/trace/jaeger (#831) -- Bump github.com/google/go-cmp from 0.4.0 to 0.5.0 (#836) -- Bump github.com/google/go-cmp from 0.4.0 to 0.5.0 in /exporters/trace/jaeger (#837) -- Bump github.com/google/go-cmp from 0.4.0 to 0.5.0 in /exporters/otlp (#839) -- Bump google.golang.org/api from 0.20.0 to 0.28.0 in /exporters/trace/jaeger (#843) -- Set span status from HTTP status code in the othttp instrumentation. (#832) -- Fixed typo in push controller comment. (#834) -- The `Aggregator` testing has been updated and cleaned. (#812) -- `metric.Number(0)` expressions are replaced by `0` where possible. (#812) -- Fixed `global` `handler_test.go` test failure. #804 -- Fixed `BatchSpanProcessor.Shutdown` to wait until all spans are processed. (#766) -- Fixed OTLP example's accidental early close of exporter. (#807) -- Ensure zipkin exporter reads and closes response body. (#788) -- Update instrumentation to use `api/standard` keys instead of custom keys. (#782) -- Clean up tools and RELEASING documentation. (#762) - -## [0.6.0] - 2020-05-21 - -### Added - -- Support for `Resource`s in the prometheus exporter. (#757) -- New pull controller. (#751) -- New `UpDownSumObserver` instrument. (#750) -- OpenTelemetry collector demo. (#711) -- New `SumObserver` instrument. (#747) -- New `UpDownCounter` instrument. (#745) -- New timeout `Option` and configuration function `WithTimeout` to the push controller. (#742) -- New `api/standards` package to implement semantic conventions and standard key-value generation. (#731) - -### Changed - -- Rename `Register*` functions in the metric API to `New*` for all `Observer` instruments. (#761) -- Use `[]float64` for histogram boundaries, not `[]metric.Number`. (#758) -- Change OTLP example to use exporter as a trace `Syncer` instead of as an unneeded `Batcher`. (#756) -- Replace `WithResourceAttributes()` with `WithResource()` in the trace SDK. (#754) -- The prometheus exporter now uses the new pull controller. (#751) -- Rename `ScheduleDelayMillis` to `BatchTimeout` in the trace `BatchSpanProcessor`.(#752) -- Support use of synchronous instruments in asynchronous callbacks (#725) -- Move `Resource` from the `Export` method parameter into the metric export `Record`. (#739) -- Rename `Observer` instrument to `ValueObserver`. (#734) -- The push controller now has a method (`Provider()`) to return a `metric.Provider` instead of the old `Meter` method that acted as a `metric.Provider`. (#738) -- Replace `Measure` instrument by `ValueRecorder` instrument. (#732) -- Rename correlation context header from `"Correlation-Context"` to `"otcorrelations"` to match the OpenTelemetry specification. (#727) - -### Fixed - -- Ensure gRPC `ClientStream` override methods do not panic in grpctrace package. (#755) -- Disable parts of `BatchSpanProcessor` test until a fix is found. (#743) -- Fix `string` case in `kv` `Infer` function. (#746) -- Fix panic in grpctrace client interceptors. (#740) -- Refactor the `api/metrics` push controller and add `CheckpointSet` synchronization. (#737) -- Rewrite span batch process queue batching logic. (#719) -- Remove the push controller named Meter map. (#738) -- Fix Histogram aggregator initial state (fix #735). (#736) -- Ensure golang alpine image is running `golang-1.14` for examples. (#733) -- Added test for grpctrace `UnaryInterceptorClient`. (#695) -- Rearrange `api/metric` code layout. (#724) - -## [0.5.0] - 2020-05-13 - -### Added - -- Batch `Observer` callback support. (#717) -- Alias `api` types to root package of project. (#696) -- Create basic `othttp.Transport` for simple client instrumentation. (#678) -- `SetAttribute(string, interface{})` to the trace API. (#674) -- Jaeger exporter option that allows user to specify custom http client. (#671) -- `Stringer` and `Infer` methods to `key`s. (#662) - -### Changed - -- Rename `NewKey` in the `kv` package to just `Key`. (#721) -- Move `core` and `key` to `kv` package. (#720) -- Make the metric API `Meter` a `struct` so the abstract `MeterImpl` can be passed and simplify implementation. (#709) -- Rename SDK `Batcher` to `Integrator` to match draft OpenTelemetry SDK specification. (#710) -- Rename SDK `Ungrouped` integrator to `simple.Integrator` to match draft OpenTelemetry SDK specification. (#710) -- Rename SDK `SDK` `struct` to `Accumulator` to match draft OpenTelemetry SDK specification. (#710) -- Move `Number` from `core` to `api/metric` package. (#706) -- Move `SpanContext` from `core` to `trace` package. (#692) -- Change traceparent header from `Traceparent` to `traceparent` to implement the W3C specification. (#681) - -### Fixed - -- Update tooling to run generators in all submodules. (#705) -- gRPC interceptor regexp to match methods without a service name. (#683) -- Use a `const` for padding 64-bit B3 trace IDs. (#701) -- Update `mockZipkin` listen address from `:0` to `127.0.0.1:0`. (#700) -- Left-pad 64-bit B3 trace IDs with zero. (#698) -- Propagate at least the first W3C tracestate header. (#694) -- Remove internal `StateLocker` implementation. (#688) -- Increase instance size CI system uses. (#690) -- Add a `key` benchmark and use reflection in `key.Infer()`. (#679) -- Fix internal `global` test by using `global.Meter` with `RecordBatch()`. (#680) -- Reimplement histogram using mutex instead of `StateLocker`. (#669) -- Switch `MinMaxSumCount` to a mutex lock implementation instead of `StateLocker`. (#667) -- Update documentation to not include any references to `WithKeys`. (#672) -- Correct misspelling. (#668) -- Fix clobbering of the span context if extraction fails. (#656) -- Bump `golangci-lint` and work around the corrupting bug. (#666) (#670) - -## [0.4.3] - 2020-04-24 - -### Added - -- `Dockerfile` and `docker-compose.yml` to run example code. (#635) -- New `grpctrace` package that provides gRPC client and server interceptors for both unary and stream connections. (#621) -- New `api/label` package, providing common label set implementation. (#651) -- Support for JSON marshaling of `Resources`. (#654) -- `TraceID` and `SpanID` implementations for `Stringer` interface. (#642) -- `RemoteAddrKey` in the othttp plugin to include the HTTP client address in top-level spans. (#627) -- `WithSpanFormatter` option to the othttp plugin. (#617) -- Updated README to include section for compatible libraries and include reference to the contrib repository. (#612) -- The prometheus exporter now supports exporting histograms. (#601) -- A `String` method to the `Resource` to return a hashable identifier for a now unique resource. (#613) -- An `Iter` method to the `Resource` to return an array `AttributeIterator`. (#613) -- An `Equal` method to the `Resource` test the equivalence of resources. (#613) -- An iterable structure (`AttributeIterator`) for `Resource` attributes. - -### Changed - -- zipkin export's `NewExporter` now requires a `serviceName` argument to ensure this needed values is provided. (#644) -- Pass `Resources` through the metrics export pipeline. (#659) - -### Removed - -- `WithKeys` option from the metric API. (#639) - -### Fixed - -- Use the `label.Set.Equivalent` value instead of an encoding in the batcher. (#658) -- Correct typo `trace.Exporter` to `trace.SpanSyncer` in comments. (#653) -- Use type names for return values in jaeger exporter. (#648) -- Increase the visibility of the `api/key` package by updating comments and fixing usages locally. (#650) -- `Checkpoint` only after `Update`; Keep records in the `sync.Map` longer. (#647) -- Do not cache `reflect.ValueOf()` in metric Labels. (#649) -- Batch metrics exported from the OTLP exporter based on `Resource` and labels. (#626) -- Add error wrapping to the prometheus exporter. (#631) -- Update the OTLP exporter batching of traces to use a unique `string` representation of an associated `Resource` as the batching key. (#623) -- Update OTLP `SpanData` transform to only include the `ParentSpanID` if one exists. (#614) -- Update `Resource` internal representation to uniquely and reliably identify resources. (#613) -- Check return value from `CheckpointSet.ForEach` in prometheus exporter. (#622) -- Ensure spans created by httptrace client tracer reflect operation structure. (#618) -- Create a new recorder rather than reuse when multiple observations in same epoch for asynchronous instruments. #610 -- The default port the OTLP exporter uses to connect to the OpenTelemetry collector is updated to match the one the collector listens on by default. (#611) - -## [0.4.2] - 2020-03-31 - -### Fixed - -- Fix `pre_release.sh` to update version in `sdk/opentelemetry.go`. (#607) -- Fix time conversion from internal to OTLP in OTLP exporter. (#606) - -## [0.4.1] - 2020-03-31 - -### Fixed - -- Update `tag.sh` to create signed tags. (#604) - -## [0.4.0] - 2020-03-30 - -### Added - -- New API package `api/metric/registry` that exposes a `MeterImpl` wrapper for use by SDKs to generate unique instruments. (#580) -- Script to verify examples after a new release. (#579) - -### Removed - -- The dogstatsd exporter due to lack of support. - This additionally removes support for statsd. (#591) -- `LabelSet` from the metric API. - This is replaced by a `[]core.KeyValue` slice. (#595) -- `Labels` from the metric API's `Meter` interface. (#595) - -### Changed - -- The metric `export.Labels` became an interface which the SDK implements and the `export` package provides a simple, immutable implementation of this interface intended for testing purposes. (#574) -- Renamed `internal/metric.Meter` to `MeterImpl`. (#580) -- Renamed `api/global/internal.obsImpl` to `asyncImpl`. (#580) - -### Fixed - -- Corrected missing return in mock span. (#582) -- Update License header for all source files to match CNCF guidelines and include a test to ensure it is present. (#586) (#596) -- Update to v0.3.0 of the OTLP in the OTLP exporter. (#588) -- Update pre-release script to be compatible between GNU and BSD based systems. (#592) -- Add a `RecordBatch` benchmark. (#594) -- Moved span transforms of the OTLP exporter to the internal package. (#593) -- Build both go-1.13 and go-1.14 in circleci to test for all supported versions of Go. (#569) -- Removed unneeded allocation on empty labels in OLTP exporter. (#597) -- Update `BatchedSpanProcessor` to process the queue until no data but respect max batch size. (#599) -- Update project documentation godoc.org links to pkg.go.dev. (#602) - -## [0.3.0] - 2020-03-21 - -This is a first official beta release, which provides almost fully complete metrics, tracing, and context propagation functionality. -There is still a possibility of breaking changes. - -### Added - -- Add `Observer` metric instrument. (#474) -- Add global `Propagators` functionality to enable deferred initialization for propagators registered before the first Meter SDK is installed. (#494) -- Simplified export setup pipeline for the jaeger exporter to match other exporters. (#459) -- The zipkin trace exporter. (#495) -- The OTLP exporter to export metric and trace telemetry to the OpenTelemetry collector. (#497) (#544) (#545) -- Add `StatusMessage` field to the trace `Span`. (#524) -- Context propagation in OpenTracing bridge in terms of OpenTelemetry context propagation. (#525) -- The `Resource` type was added to the SDK. (#528) -- The global API now supports a `Tracer` and `Meter` function as shortcuts to getting a global `*Provider` and calling these methods directly. (#538) -- The metric API now defines a generic `MeterImpl` interface to support general purpose `Meter` construction. - Additionally, `SyncImpl` and `AsyncImpl` are added to support general purpose instrument construction. (#560) -- A metric `Kind` is added to represent the `MeasureKind`, `ObserverKind`, and `CounterKind`. (#560) -- Scripts to better automate the release process. (#576) - -### Changed - -- Default to to use `AlwaysSampler` instead of `ProbabilitySampler` to match OpenTelemetry specification. (#506) -- Renamed `AlwaysSampleSampler` to `AlwaysOnSampler` in the trace API. (#511) -- Renamed `NeverSampleSampler` to `AlwaysOffSampler` in the trace API. (#511) -- The `Status` field of the `Span` was changed to `StatusCode` to disambiguate with the added `StatusMessage`. (#524) -- Updated the trace `Sampler` interface conform to the OpenTelemetry specification. (#531) -- Rename metric API `Options` to `Config`. (#541) -- Rename metric `Counter` aggregator to be `Sum`. (#541) -- Unify metric options into `Option` from instrument specific options. (#541) -- The trace API's `TraceProvider` now support `Resource`s. (#545) -- Correct error in zipkin module name. (#548) -- The jaeger trace exporter now supports `Resource`s. (#551) -- Metric SDK now supports `Resource`s. - The `WithResource` option was added to configure a `Resource` on creation and the `Resource` method was added to the metric `Descriptor` to return the associated `Resource`. (#552) -- Replace `ErrNoLastValue` and `ErrEmptyDataSet` by `ErrNoData` in the metric SDK. (#557) -- The stdout trace exporter now supports `Resource`s. (#558) -- The metric `Descriptor` is now included at the API instead of the SDK. (#560) -- Replace `Ordered` with an iterator in `export.Labels`. (#567) - -### Removed - -- The vendor specific Stackdriver. It is now hosted on 3rd party vendor infrastructure. (#452) -- The `Unregister` method for metric observers as it is not in the OpenTelemetry specification. (#560) -- `GetDescriptor` from the metric SDK. (#575) -- The `Gauge` instrument from the metric API. (#537) - -### Fixed - -- Make histogram aggregator checkpoint consistent. (#438) -- Update README with import instructions and how to build and test. (#505) -- The default label encoding was updated to be unique. (#508) -- Use `NewRoot` in the othttp plugin for public endpoints. (#513) -- Fix data race in `BatchedSpanProcessor`. (#518) -- Skip test-386 for Mac OS 10.15.x (Catalina and upwards). #521 -- Use a variable-size array to represent ordered labels in maps. (#523) -- Update the OTLP protobuf and update changed import path. (#532) -- Use `StateLocker` implementation in `MinMaxSumCount`. (#546) -- Eliminate goroutine leak in histogram stress test. (#547) -- Update OTLP exporter with latest protobuf. (#550) -- Add filters to the othttp plugin. (#556) -- Provide an implementation of the `Header*` filters that do not depend on Go 1.14. (#565) -- Encode labels once during checkpoint. - The checkpoint function is executed in a single thread so we can do the encoding lazily before passing the encoded version of labels to the exporter. - This is a cheap and quick way to avoid encoding the labels on every collection interval. (#572) -- Run coverage over all packages in `COVERAGE_MOD_DIR`. (#573) - -## [0.2.3] - 2020-03-04 - -### Added - -- `RecordError` method on `Span`s in the trace API to Simplify adding error events to spans. (#473) -- Configurable push frequency for exporters setup pipeline. (#504) - -### Changed - -- Rename the `exporter` directory to `exporters`. - The `go.opentelemetry.io/otel/exporter/trace/jaeger` package was mistakenly released with a `v1.0.0` tag instead of `v0.1.0`. - This resulted in all subsequent releases not becoming the default latest. - A consequence of this was that all `go get`s pulled in the incompatible `v0.1.0` release of that package when pulling in more recent packages from other otel packages. - Renaming the `exporter` directory to `exporters` fixes this issue by renaming the package and therefore clearing any existing dependency tags. - Consequentially, this action also renames *all* exporter packages. (#502) - -### Removed - -- The `CorrelationContextHeader` constant in the `correlation` package is no longer exported. (#503) - -## [0.2.2] - 2020-02-27 - -### Added - -- `HTTPSupplier` interface in the propagation API to specify methods to retrieve and store a single value for a key to be associated with a carrier. (#467) -- `HTTPExtractor` interface in the propagation API to extract information from an `HTTPSupplier` into a context. (#467) -- `HTTPInjector` interface in the propagation API to inject information into an `HTTPSupplier.` (#467) -- `Config` and configuring `Option` to the propagator API. (#467) -- `Propagators` interface in the propagation API to contain the set of injectors and extractors for all supported carrier formats. (#467) -- `HTTPPropagator` interface in the propagation API to inject and extract from an `HTTPSupplier.` (#467) -- `WithInjectors` and `WithExtractors` functions to the propagator API to configure injectors and extractors to use. (#467) -- `ExtractHTTP` and `InjectHTTP` functions to apply configured HTTP extractors and injectors to a passed context. (#467) -- Histogram aggregator. (#433) -- `DefaultPropagator` function and have it return `trace.TraceContext` as the default context propagator. (#456) -- `AlwaysParentSample` sampler to the trace API. (#455) -- `WithNewRoot` option function to the trace API to specify the created span should be considered a root span. (#451) - -### Changed - -- Renamed `WithMap` to `ContextWithMap` in the correlation package. (#481) -- Renamed `FromContext` to `MapFromContext` in the correlation package. (#481) -- Move correlation context propagation to correlation package. (#479) -- Do not default to putting remote span context into links. (#480) -- `Tracer.WithSpan` updated to accept `StartOptions`. (#472) -- Renamed `MetricKind` to `Kind` to not stutter in the type usage. (#432) -- Renamed the `export` package to `metric` to match directory structure. (#432) -- Rename the `api/distributedcontext` package to `api/correlation`. (#444) -- Rename the `api/propagators` package to `api/propagation`. (#444) -- Move the propagators from the `propagators` package into the `trace` API package. (#444) -- Update `Float64Gauge`, `Int64Gauge`, `Float64Counter`, `Int64Counter`, `Float64Measure`, and `Int64Measure` metric methods to use value receivers instead of pointers. (#462) -- Moved all dependencies of tools package to a tools directory. (#466) - -### Removed - -- Binary propagators. (#467) -- NOOP propagator. (#467) - -### Fixed - -- Upgraded `github.com/golangci/golangci-lint` from `v1.21.0` to `v1.23.6` in `tools/`. (#492) -- Fix a possible nil-dereference crash (#478) -- Correct comments for `InstallNewPipeline` in the stdout exporter. (#483) -- Correct comments for `InstallNewPipeline` in the dogstatsd exporter. (#484) -- Correct comments for `InstallNewPipeline` in the prometheus exporter. (#482) -- Initialize `onError` based on `Config` in prometheus exporter. (#486) -- Correct module name in prometheus exporter README. (#475) -- Removed tracer name prefix from span names. (#430) -- Fix `aggregator_test.go` import package comment. (#431) -- Improved detail in stdout exporter. (#436) -- Fix a dependency issue (generate target should depend on stringer, not lint target) in Makefile. (#442) -- Reorders the Makefile targets within `precommit` target so we generate files and build the code before doing linting, so we can get much nicer errors about syntax errors from the compiler. (#442) -- Reword function documentation in gRPC plugin. (#446) -- Send the `span.kind` tag to Jaeger from the jaeger exporter. (#441) -- Fix `metadataSupplier` in the jaeger exporter to overwrite the header if existing instead of appending to it. (#441) -- Upgraded to Go 1.13 in CI. (#465) -- Correct opentelemetry.io URL in trace SDK documentation. (#464) -- Refactored reference counting logic in SDK determination of stale records. (#468) -- Add call to `runtime.Gosched` in instrument `acquireHandle` logic to not block the collector. (#469) - -## [0.2.1.1] - 2020-01-13 - -### Fixed - -- Use stateful batcher on Prometheus exporter fixing regression introduced in #395. (#428) - -## [0.2.1] - 2020-01-08 - -### Added - -- Global meter forwarding implementation. - This enables deferred initialization for metric instruments registered before the first Meter SDK is installed. (#392) -- Global trace forwarding implementation. - This enables deferred initialization for tracers registered before the first Trace SDK is installed. (#406) -- Standardize export pipeline creation in all exporters. (#395) -- A testing, organization, and comments for 64-bit field alignment. (#418) -- Script to tag all modules in the project. (#414) - -### Changed - -- Renamed `propagation` package to `propagators`. (#362) -- Renamed `B3Propagator` propagator to `B3`. (#362) -- Renamed `TextFormatPropagator` propagator to `TextFormat`. (#362) -- Renamed `BinaryPropagator` propagator to `Binary`. (#362) -- Renamed `BinaryFormatPropagator` propagator to `BinaryFormat`. (#362) -- Renamed `NoopTextFormatPropagator` propagator to `NoopTextFormat`. (#362) -- Renamed `TraceContextPropagator` propagator to `TraceContext`. (#362) -- Renamed `SpanOption` to `StartOption` in the trace API. (#369) -- Renamed `StartOptions` to `StartConfig` in the trace API. (#369) -- Renamed `EndOptions` to `EndConfig` in the trace API. (#369) -- `Number` now has a pointer receiver for its methods. (#375) -- Renamed `CurrentSpan` to `SpanFromContext` in the trace API. (#379) -- Renamed `SetCurrentSpan` to `ContextWithSpan` in the trace API. (#379) -- Renamed `Message` in Event to `Name` in the trace API. (#389) -- Prometheus exporter no longer aggregates metrics, instead it only exports them. (#385) -- Renamed `HandleImpl` to `BoundInstrumentImpl` in the metric API. (#400) -- Renamed `Float64CounterHandle` to `Float64CounterBoundInstrument` in the metric API. (#400) -- Renamed `Int64CounterHandle` to `Int64CounterBoundInstrument` in the metric API. (#400) -- Renamed `Float64GaugeHandle` to `Float64GaugeBoundInstrument` in the metric API. (#400) -- Renamed `Int64GaugeHandle` to `Int64GaugeBoundInstrument` in the metric API. (#400) -- Renamed `Float64MeasureHandle` to `Float64MeasureBoundInstrument` in the metric API. (#400) -- Renamed `Int64MeasureHandle` to `Int64MeasureBoundInstrument` in the metric API. (#400) -- Renamed `Release` method for bound instruments in the metric API to `Unbind`. (#400) -- Renamed `AcquireHandle` method for bound instruments in the metric API to `Bind`. (#400) -- Renamed the `File` option in the stdout exporter to `Writer`. (#404) -- Renamed all `Options` to `Config` for all metric exports where this wasn't already the case. - -### Fixed - -- Aggregator import path corrected. (#421) -- Correct links in README. (#368) -- The README was updated to match latest code changes in its examples. (#374) -- Don't capitalize error statements. (#375) -- Fix ignored errors. (#375) -- Fix ambiguous variable naming. (#375) -- Removed unnecessary type casting. (#375) -- Use named parameters. (#375) -- Updated release schedule. (#378) -- Correct http-stackdriver example module name. (#394) -- Removed the `http.request` span in `httptrace` package. (#397) -- Add comments in the metrics SDK (#399) -- Initialize checkpoint when creating ddsketch aggregator to prevent panic when merging into a empty one. (#402) (#403) -- Add documentation of compatible exporters in the README. (#405) -- Typo fix. (#408) -- Simplify span check logic in SDK tracer implementation. (#419) - -## [0.2.0] - 2019-12-03 - -### Added - -- Unary gRPC tracing example. (#351) -- Prometheus exporter. (#334) -- Dogstatsd metrics exporter. (#326) - -### Changed - -- Rename `MaxSumCount` aggregation to `MinMaxSumCount` and add the `Min` interface for this aggregation. (#352) -- Rename `GetMeter` to `Meter`. (#357) -- Rename `HTTPTraceContextPropagator` to `TraceContextPropagator`. (#355) -- Rename `HTTPB3Propagator` to `B3Propagator`. (#355) -- Rename `HTTPTraceContextPropagator` to `TraceContextPropagator`. (#355) -- Move `/global` package to `/api/global`. (#356) -- Rename `GetTracer` to `Tracer`. (#347) - -### Removed - -- `SetAttribute` from the `Span` interface in the trace API. (#361) -- `AddLink` from the `Span` interface in the trace API. (#349) -- `Link` from the `Span` interface in the trace API. (#349) - -### Fixed - -- Exclude example directories from coverage report. (#365) -- Lint make target now implements automatic fixes with `golangci-lint` before a second run to report the remaining issues. (#360) -- Drop `GO111MODULE` environment variable in Makefile as Go 1.13 is the project specified minimum version and this is environment variable is not needed for that version of Go. (#359) -- Run the race checker for all test. (#354) -- Redundant commands in the Makefile are removed. (#354) -- Split the `generate` and `lint` targets of the Makefile. (#354) -- Renames `circle-ci` target to more generic `ci` in Makefile. (#354) -- Add example Prometheus binary to gitignore. (#358) -- Support negative numbers with the `MaxSumCount`. (#335) -- Resolve race conditions in `push_test.go` identified in #339. (#340) -- Use `/usr/bin/env bash` as a shebang in scripts rather than `/bin/bash`. (#336) -- Trace benchmark now tests both `AlwaysSample` and `NeverSample`. - Previously it was testing `AlwaysSample` twice. (#325) -- Trace benchmark now uses a `[]byte` for `TraceID` to fix failing test. (#325) -- Added a trace benchmark to test variadic functions in `setAttribute` vs `setAttributes` (#325) -- The `defaultkeys` batcher was only using the encoded label set as its map key while building a checkpoint. - This allowed distinct label sets through, but any metrics sharing a label set could be overwritten or merged incorrectly. - This was corrected. (#333) - -## [0.1.2] - 2019-11-18 - -### Fixed - -- Optimized the `simplelru` map for attributes to reduce the number of allocations. (#328) -- Removed unnecessary unslicing of parameters that are already a slice. (#324) - -## [0.1.1] - 2019-11-18 - -This release contains a Metrics SDK with stdout exporter and supports basic aggregations such as counter, gauges, array, maxsumcount, and ddsketch. - -### Added - -- Metrics stdout export pipeline. (#265) -- Array aggregation for raw measure metrics. (#282) -- The core.Value now have a `MarshalJSON` method. (#281) - -### Removed - -- `WithService`, `WithResources`, and `WithComponent` methods of tracers. (#314) -- Prefix slash in `Tracer.Start()` for the Jaeger example. (#292) - -### Changed - -- Allocation in LabelSet construction to reduce GC overhead. (#318) -- `trace.WithAttributes` to append values instead of replacing (#315) -- Use a formula for tolerance in sampling tests. (#298) -- Move export types into trace and metric-specific sub-directories. (#289) -- `SpanKind` back to being based on an `int` type. (#288) - -### Fixed - -- URL to OpenTelemetry website in README. (#323) -- Name of othttp default tracer. (#321) -- `ExportSpans` for the stackdriver exporter now handles `nil` context. (#294) -- CI modules cache to correctly restore/save from/to the cache. (#316) -- Fix metric SDK race condition between `LoadOrStore` and the assignment `rec.recorder = i.meter.exporter.AggregatorFor(rec)`. (#293) -- README now reflects the new code structure introduced with these changes. (#291) -- Make the basic example work. (#279) - -## [0.1.0] - 2019-11-04 - -This is the first release of open-telemetry go library. -It contains api and sdk for trace and meter. - -### Added - -- Initial OpenTelemetry trace and metric API prototypes. -- Initial OpenTelemetry trace, metric, and export SDK packages. -- A wireframe bridge to support compatibility with OpenTracing. -- Example code for a basic, http-stackdriver, http, jaeger, and named tracer setup. -- Exporters for Jaeger, Stackdriver, and stdout. -- Propagators for binary, B3, and trace-context protocols. -- Project information and guidelines in the form of a README and CONTRIBUTING. -- Tools to build the project and a Makefile to automate the process. -- Apache-2.0 license. -- CircleCI build CI manifest files. -- CODEOWNERS file to track owners of this project. - -[Unreleased]: https://github.com/open-telemetry/opentelemetry-go/compare/v1.28.0...HEAD -[1.28.0/0.50.0/0.4.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.28.0 -[1.27.0/0.49.0/0.3.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.27.0 -[1.26.0/0.48.0/0.2.0-alpha]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.26.0 -[1.25.0/0.47.0/0.0.8/0.1.0-alpha]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.25.0 -[1.24.0/0.46.0/0.0.1-alpha]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.24.0 -[1.23.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.23.1 -[1.23.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.23.0 -[1.23.0-rc.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.23.0-rc.1 -[1.22.0/0.45.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.22.0 -[1.21.0/0.44.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.21.0 -[1.20.0/0.43.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.20.0 -[1.19.0/0.42.0/0.0.7]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.19.0 -[1.19.0-rc.1/0.42.0-rc.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.19.0-rc.1 -[1.18.0/0.41.0/0.0.6]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.18.0 -[1.17.0/0.40.0/0.0.5]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.17.0 -[1.16.0/0.39.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.16.0 -[1.16.0-rc.1/0.39.0-rc.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.16.0-rc.1 -[1.15.1/0.38.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.15.1 -[1.15.0/0.38.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.15.0 -[1.15.0-rc.2/0.38.0-rc.2]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.15.0-rc.2 -[1.15.0-rc.1/0.38.0-rc.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.15.0-rc.1 -[1.14.0/0.37.0/0.0.4]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.14.0 -[1.13.0/0.36.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.13.0 -[1.12.0/0.35.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.12.0 -[1.11.2/0.34.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.11.2 -[1.11.1/0.33.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.11.1 -[1.11.0/0.32.3]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.11.0 -[0.32.2]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/sdk/metric/v0.32.2 -[0.32.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/sdk/metric/v0.32.1 -[0.32.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/sdk/metric/v0.32.0 -[1.10.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.10.0 -[1.9.0/0.0.3]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.9.0 -[1.8.0/0.31.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.8.0 -[1.7.0/0.30.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.7.0 -[0.29.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/metric/v0.29.0 -[1.6.3]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.6.3 -[1.6.2]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.6.2 -[1.6.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.6.1 -[1.6.0/0.28.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.6.0 -[1.5.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.5.0 -[1.4.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.4.1 -[1.4.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.4.0 -[1.3.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.3.0 -[1.2.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.2.0 -[1.1.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.1.0 -[1.0.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.0.1 -[Metrics 0.24.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/metric/v0.24.0 -[1.0.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.0.0 -[1.0.0-RC3]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.0.0-RC3 -[1.0.0-RC2]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.0.0-RC2 -[Experimental Metrics v0.22.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/metric/v0.22.0 -[1.0.0-RC1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.0.0-RC1 -[0.20.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.20.0 -[0.19.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.19.0 -[0.18.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.18.0 -[0.17.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.17.0 -[0.16.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.16.0 -[0.15.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.15.0 -[0.14.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.14.0 -[0.13.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.13.0 -[0.12.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.12.0 -[0.11.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.11.0 -[0.10.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.10.0 -[0.9.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.9.0 -[0.8.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.8.0 -[0.7.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.7.0 -[0.6.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.6.0 -[0.5.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.5.0 -[0.4.3]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.4.3 -[0.4.2]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.4.2 -[0.4.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.4.1 -[0.4.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.4.0 -[0.3.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.3.0 -[0.2.3]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.2.3 -[0.2.2]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.2.2 -[0.2.1.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.2.1.1 -[0.2.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.2.1 -[0.2.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.2.0 -[0.1.2]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.1.2 -[0.1.1]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.1.1 -[0.1.0]: https://github.com/open-telemetry/opentelemetry-go/releases/tag/v0.1.0 - -[Go 1.22]: https://go.dev/doc/go1.22 -[Go 1.21]: https://go.dev/doc/go1.21 -[Go 1.20]: https://go.dev/doc/go1.20 -[Go 1.19]: https://go.dev/doc/go1.19 -[Go 1.18]: https://go.dev/doc/go1.18 - -[metric API]:https://pkg.go.dev/go.opentelemetry.io/otel/metric -[metric SDK]:https://pkg.go.dev/go.opentelemetry.io/otel/sdk/metric -[trace API]:https://pkg.go.dev/go.opentelemetry.io/otel/trace - -[GO-2024-2687]: https://pkg.go.dev/vuln/GO-2024-2687 diff --git a/vendor/go.opentelemetry.io/otel/CODEOWNERS b/vendor/go.opentelemetry.io/otel/CODEOWNERS deleted file mode 100644 index 20255493..00000000 --- a/vendor/go.opentelemetry.io/otel/CODEOWNERS +++ /dev/null @@ -1,17 +0,0 @@ -##################################################### -# -# List of approvers for this repository -# -##################################################### -# -# Learn about membership in OpenTelemetry community: -# https://github.com/open-telemetry/community/blob/main/community-membership.md -# -# -# Learn about CODEOWNERS file format: -# https://help.github.com/en/articles/about-code-owners -# - -* @MrAlias @XSAM @dashpole @MadVikingGod @pellared @hanyuancheung @dmathieu - -CODEOWNERS @MrAlias @MadVikingGod @pellared @dashpole @XSAM @dmathieu diff --git a/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md b/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md deleted file mode 100644 index b86572f5..00000000 --- a/vendor/go.opentelemetry.io/otel/CONTRIBUTING.md +++ /dev/null @@ -1,658 +0,0 @@ -# Contributing to opentelemetry-go - -The Go special interest group (SIG) meets regularly. See the -OpenTelemetry -[community](https://github.com/open-telemetry/community#golang-sdk) -repo for information on this and other language SIGs. - -See the [public meeting -notes](https://docs.google.com/document/d/1E5e7Ld0NuU1iVvf-42tOBpu2VBBLYnh73GJuITGJTTU/edit) -for a summary description of past meetings. To request edit access, -join the meeting or get in touch on -[Slack](https://cloud-native.slack.com/archives/C01NPAXACKT). - -## Development - -You can view and edit the source code by cloning this repository: - -```sh -git clone https://github.com/open-telemetry/opentelemetry-go.git -``` - -Run `make test` to run the tests instead of `go test`. - -There are some generated files checked into the repo. To make sure -that the generated files are up-to-date, run `make` (or `make -precommit` - the `precommit` target is the default). - -The `precommit` target also fixes the formatting of the code and -checks the status of the go module files. - -Additionally, there is a `codespell` target that checks for common -typos in the code. It is not run by default, but you can run it -manually with `make codespell`. It will set up a virtual environment -in `venv` and install `codespell` there. - -If after running `make precommit` the output of `git status` contains -`nothing to commit, working tree clean` then it means that everything -is up-to-date and properly formatted. - -## Pull Requests - -### How to Send Pull Requests - -Everyone is welcome to contribute code to `opentelemetry-go` via -GitHub pull requests (PRs). - -To create a new PR, fork the project in GitHub and clone the upstream -repo: - -```sh -go get -d go.opentelemetry.io/otel -``` - -(This may print some warning about "build constraints exclude all Go -files", just ignore it.) - -This will put the project in `${GOPATH}/src/go.opentelemetry.io/otel`. You -can alternatively use `git` directly with: - -```sh -git clone https://github.com/open-telemetry/opentelemetry-go -``` - -(Note that `git clone` is *not* using the `go.opentelemetry.io/otel` name - -that name is a kind of a redirector to GitHub that `go get` can -understand, but `git` does not.) - -This would put the project in the `opentelemetry-go` directory in -current working directory. - -Enter the newly created directory and add your fork as a new remote: - -```sh -git remote add git@github.com:/opentelemetry-go -``` - -Check out a new branch, make modifications, run linters and tests, update -`CHANGELOG.md`, and push the branch to your fork: - -```sh -git checkout -b -# edit files -# update changelog -make precommit -git add -p -git commit -git push -``` - -Open a pull request against the main `opentelemetry-go` repo. Be sure to add the pull -request ID to the entry you added to `CHANGELOG.md`. - -Avoid rebasing and force-pushing to your branch to facilitate reviewing the pull request. -Rewriting Git history makes it difficult to keep track of iterations during code review. -All pull requests are squashed to a single commit upon merge to `main`. - -### How to Receive Comments - -* If the PR is not ready for review, please put `[WIP]` in the title, - tag it as `work-in-progress`, or mark it as - [`draft`](https://github.blog/2019-02-14-introducing-draft-pull-requests/). -* Make sure CLA is signed and CI is clear. - -### How to Get PRs Merged - -A PR is considered **ready to merge** when: - -* It has received two qualified approvals[^1]. - - This is not enforced through automation, but needs to be validated by the - maintainer merging. - * The qualified approvals need to be from [Approver]s/[Maintainer]s - affiliated with different companies. Two qualified approvals from - [Approver]s or [Maintainer]s affiliated with the same company counts as a - single qualified approval. - * PRs introducing changes that have already been discussed and consensus - reached only need one qualified approval. The discussion and resolution - needs to be linked to the PR. - * Trivial changes[^2] only need one qualified approval. - -* All feedback has been addressed. - * All PR comments and suggestions are resolved. - * All GitHub Pull Request reviews with a status of "Request changes" have - been addressed. Another review by the objecting reviewer with a different - status can be submitted to clear the original review, or the review can be - dismissed by a [Maintainer] when the issues from the original review have - been addressed. - * Any comments or reviews that cannot be resolved between the PR author and - reviewers can be submitted to the community [Approver]s and [Maintainer]s - during the weekly SIG meeting. If consensus is reached among the - [Approver]s and [Maintainer]s during the SIG meeting the objections to the - PR may be dismissed or resolved or the PR closed by a [Maintainer]. - * Any substantive changes to the PR require existing Approval reviews be - cleared unless the approver explicitly states that their approval persists - across changes. This includes changes resulting from other feedback. - [Approver]s and [Maintainer]s can help in clearing reviews and they should - be consulted if there are any questions. - -* The PR branch is up to date with the base branch it is merging into. - * To ensure this does not block the PR, it should be configured to allow - maintainers to update it. - -* It has been open for review for at least one working day. This gives people - reasonable time to review. - * Trivial changes[^2] do not have to wait for one day and may be merged with - a single [Maintainer]'s approval. - -* All required GitHub workflows have succeeded. -* Urgent fix can take exception as long as it has been actively communicated - among [Maintainer]s. - -Any [Maintainer] can merge the PR once the above criteria have been met. - -[^1]: A qualified approval is a GitHub Pull Request review with "Approve" - status from an OpenTelemetry Go [Approver] or [Maintainer]. -[^2]: Trivial changes include: typo corrections, cosmetic non-substantive - changes, documentation corrections or updates, dependency updates, etc. - -## Design Choices - -As with other OpenTelemetry clients, opentelemetry-go follows the -[OpenTelemetry Specification](https://opentelemetry.io/docs/specs/otel). - -It's especially valuable to read through the [library -guidelines](https://opentelemetry.io/docs/specs/otel/library-guidelines). - -### Focus on Capabilities, Not Structure Compliance - -OpenTelemetry is an evolving specification, one where the desires and -use cases are clear, but the method to satisfy those uses cases are -not. - -As such, Contributions should provide functionality and behavior that -conforms to the specification, but the interface and structure is -flexible. - -It is preferable to have contributions follow the idioms of the -language rather than conform to specific API names or argument -patterns in the spec. - -For a deeper discussion, see -[this](https://github.com/open-telemetry/opentelemetry-specification/issues/165). - -## Documentation - -Each (non-internal, non-test) package must be documented using -[Go Doc Comments](https://go.dev/doc/comment), -preferably in a `doc.go` file. - -Prefer using [Examples](https://pkg.go.dev/testing#hdr-Examples) -instead of putting code snippets in Go doc comments. -In some cases, you can even create [Testable Examples](https://go.dev/blog/examples). - -You can install and run a "local Go Doc site" in the following way: - - ```sh - go install golang.org/x/pkgsite/cmd/pkgsite@latest - pkgsite - ``` - -[`go.opentelemetry.io/otel/metric`](https://pkg.go.dev/go.opentelemetry.io/otel/metric) -is an example of a very well-documented package. - -### README files - -Each (non-internal, non-test, non-documentation) package must contain a -`README.md` file containing at least a title, and a `pkg.go.dev` badge. - -The README should not be a repetition of Go doc comments. - -You can verify the presence of all README files with the `make verify-readmes` -command. - -## Style Guide - -One of the primary goals of this project is that it is actually used by -developers. With this goal in mind the project strives to build -user-friendly and idiomatic Go code adhering to the Go community's best -practices. - -For a non-comprehensive but foundational overview of these best practices -the [Effective Go](https://golang.org/doc/effective_go.html) documentation -is an excellent starting place. - -As a convenience for developers building this project the `make precommit` -will format, lint, validate, and in some cases fix the changes you plan to -submit. This check will need to pass for your changes to be able to be -merged. - -In addition to idiomatic Go, the project has adopted certain standards for -implementations of common patterns. These standards should be followed as a -default, and if they are not followed documentation needs to be included as -to the reasons why. - -### Configuration - -When creating an instantiation function for a complex `type T struct`, it is -useful to allow variable number of options to be applied. However, the strong -type system of Go restricts the function design options. There are a few ways -to solve this problem, but we have landed on the following design. - -#### `config` - -Configuration should be held in a `struct` named `config`, or prefixed with -specific type name this Configuration applies to if there are multiple -`config` in the package. This type must contain configuration options. - -```go -// config contains configuration options for a thing. -type config struct { - // options ... -} -``` - -In general the `config` type will not need to be used externally to the -package and should be unexported. If, however, it is expected that the user -will likely want to build custom options for the configuration, the `config` -should be exported. Please, include in the documentation for the `config` -how the user can extend the configuration. - -It is important that internal `config` are not shared across package boundaries. -Meaning a `config` from one package should not be directly used by another. The -one exception is the API packages. The configs from the base API, eg. -`go.opentelemetry.io/otel/trace.TracerConfig` and -`go.opentelemetry.io/otel/metric.InstrumentConfig`, are intended to be consumed -by the SDK therefore it is expected that these are exported. - -When a config is exported we want to maintain forward and backward -compatibility, to achieve this no fields should be exported but should -instead be accessed by methods. - -Optionally, it is common to include a `newConfig` function (with the same -naming scheme). This function wraps any defaults setting and looping over -all options to create a configured `config`. - -```go -// newConfig returns an appropriately configured config. -func newConfig(options ...Option) config { - // Set default values for config. - config := config{/* […] */} - for _, option := range options { - config = option.apply(config) - } - // Perform any validation here. - return config -} -``` - -If validation of the `config` options is also performed this can return an -error as well that is expected to be handled by the instantiation function -or propagated to the user. - -Given the design goal of not having the user need to work with the `config`, -the `newConfig` function should also be unexported. - -#### `Option` - -To set the value of the options a `config` contains, a corresponding -`Option` interface type should be used. - -```go -type Option interface { - apply(config) config -} -``` - -Having `apply` unexported makes sure that it will not be used externally. -Moreover, the interface becomes sealed so the user cannot easily implement -the interface on its own. - -The `apply` method should return a modified version of the passed config. -This approach, instead of passing a pointer, is used to prevent the config from being allocated to the heap. - -The name of the interface should be prefixed in the same way the -corresponding `config` is (if at all). - -#### Options - -All user configurable options for a `config` must have a related unexported -implementation of the `Option` interface and an exported configuration -function that wraps this implementation. - -The wrapping function name should be prefixed with `With*` (or in the -special case of a boolean options `Without*`) and should have the following -function signature. - -```go -func With*(…) Option { … } -``` - -##### `bool` Options - -```go -type defaultFalseOption bool - -func (o defaultFalseOption) apply(c config) config { - c.Bool = bool(o) - return c -} - -// WithOption sets a T to have an option included. -func WithOption() Option { - return defaultFalseOption(true) -} -``` - -```go -type defaultTrueOption bool - -func (o defaultTrueOption) apply(c config) config { - c.Bool = bool(o) - return c -} - -// WithoutOption sets a T to have Bool option excluded. -func WithoutOption() Option { - return defaultTrueOption(false) -} -``` - -##### Declared Type Options - -```go -type myTypeOption struct { - MyType MyType -} - -func (o myTypeOption) apply(c config) config { - c.MyType = o.MyType - return c -} - -// WithMyType sets T to have include MyType. -func WithMyType(t MyType) Option { - return myTypeOption{t} -} -``` - -##### Functional Options - -```go -type optionFunc func(config) config - -func (fn optionFunc) apply(c config) config { - return fn(c) -} - -// WithMyType sets t as MyType. -func WithMyType(t MyType) Option { - return optionFunc(func(c config) config { - c.MyType = t - return c - }) -} -``` - -#### Instantiation - -Using this configuration pattern to configure instantiation with a `NewT` -function. - -```go -func NewT(options ...Option) T {…} -``` - -Any required parameters can be declared before the variadic `options`. - -#### Dealing with Overlap - -Sometimes there are multiple complex `struct` that share common -configuration and also have distinct configuration. To avoid repeated -portions of `config`s, a common `config` can be used with the union of -options being handled with the `Option` interface. - -For example. - -```go -// config holds options for all animals. -type config struct { - Weight float64 - Color string - MaxAltitude float64 -} - -// DogOption apply Dog specific options. -type DogOption interface { - applyDog(config) config -} - -// BirdOption apply Bird specific options. -type BirdOption interface { - applyBird(config) config -} - -// Option apply options for all animals. -type Option interface { - BirdOption - DogOption -} - -type weightOption float64 - -func (o weightOption) applyDog(c config) config { - c.Weight = float64(o) - return c -} - -func (o weightOption) applyBird(c config) config { - c.Weight = float64(o) - return c -} - -func WithWeight(w float64) Option { return weightOption(w) } - -type furColorOption string - -func (o furColorOption) applyDog(c config) config { - c.Color = string(o) - return c -} - -func WithFurColor(c string) DogOption { return furColorOption(c) } - -type maxAltitudeOption float64 - -func (o maxAltitudeOption) applyBird(c config) config { - c.MaxAltitude = float64(o) - return c -} - -func WithMaxAltitude(a float64) BirdOption { return maxAltitudeOption(a) } - -func NewDog(name string, o ...DogOption) Dog {…} -func NewBird(name string, o ...BirdOption) Bird {…} -``` - -### Interfaces - -To allow other developers to better comprehend the code, it is important -to ensure it is sufficiently documented. One simple measure that contributes -to this aim is self-documenting by naming method parameters. Therefore, -where appropriate, methods of every exported interface type should have -their parameters appropriately named. - -#### Interface Stability - -All exported stable interfaces that include the following warning in their -documentation are allowed to be extended with additional methods. - -> Warning: methods may be added to this interface in minor releases. - -These interfaces are defined by the OpenTelemetry specification and will be -updated as the specification evolves. - -Otherwise, stable interfaces MUST NOT be modified. - -#### How to Change Specification Interfaces - -When an API change must be made, we will update the SDK with the new method one -release before the API change. This will allow the SDK one version before the -API change to work seamlessly with the new API. - -If an incompatible version of the SDK is used with the new API the application -will fail to compile. - -#### How Not to Change Specification Interfaces - -We have explored using a v2 of the API to change interfaces and found that there -was no way to introduce a v2 and have it work seamlessly with the v1 of the API. -Problems happened with libraries that upgraded to v2 when an application did not, -and would not produce any telemetry. - -More detail of the approaches considered and their limitations can be found in -the [Use a V2 API to evolve interfaces](https://github.com/open-telemetry/opentelemetry-go/issues/3920) -issue. - -#### How to Change Other Interfaces - -If new functionality is needed for an interface that cannot be changed it MUST -be added by including an additional interface. That added interface can be a -simple interface for the specific functionality that you want to add or it can -be a super-set of the original interface. For example, if you wanted to a -`Close` method to the `Exporter` interface: - -```go -type Exporter interface { - Export() -} -``` - -A new interface, `Closer`, can be added: - -```go -type Closer interface { - Close() -} -``` - -Code that is passed the `Exporter` interface can now check to see if the passed -value also satisfies the new interface. E.g. - -```go -func caller(e Exporter) { - /* ... */ - if c, ok := e.(Closer); ok { - c.Close() - } - /* ... */ -} -``` - -Alternatively, a new type that is the super-set of an `Exporter` can be created. - -```go -type ClosingExporter struct { - Exporter - Close() -} -``` - -This new type can be used similar to the simple interface above in that a -passed `Exporter` type can be asserted to satisfy the `ClosingExporter` type -and the `Close` method called. - -This super-set approach can be useful if there is explicit behavior that needs -to be coupled with the original type and passed as a unified type to a new -function, but, because of this coupling, it also limits the applicability of -the added functionality. If there exist other interfaces where this -functionality should be added, each one will need their own super-set -interfaces and will duplicate the pattern. For this reason, the simple targeted -interface that defines the specific functionality should be preferred. - -See also: -[Keeping Your Modules Compatible: Working with interfaces](https://go.dev/blog/module-compatibility#working-with-interfaces). - -### Testing - -The tests should never leak goroutines. - -Use the term `ConcurrentSafe` in the test name when it aims to verify the -absence of race conditions. - -### Internal packages - -The use of internal packages should be scoped to a single module. A sub-module -should never import from a parent internal package. This creates a coupling -between the two modules where a user can upgrade the parent without the child -and if the internal package API has changed it will fail to upgrade[^3]. - -There are two known exceptions to this rule: - -- `go.opentelemetry.io/otel/internal/global` - - This package manages global state for all of opentelemetry-go. It needs to - be a single package in order to ensure the uniqueness of the global state. -- `go.opentelemetry.io/otel/internal/baggage` - - This package provides values in a `context.Context` that need to be - recognized by `go.opentelemetry.io/otel/baggage` and - `go.opentelemetry.io/otel/bridge/opentracing` but remain private. - -If you have duplicate code in multiple modules, make that code into a Go -template stored in `go.opentelemetry.io/otel/internal/shared` and use [gotmpl] -to render the templates in the desired locations. See [#4404] for an example of -this. - -[^3]: https://github.com/open-telemetry/opentelemetry-go/issues/3548 - -### Ignoring context cancellation - -OpenTelemetry API implementations need to ignore the cancellation of the context that are -passed when recording a value (e.g. starting a span, recording a measurement, emitting a log). -Recording methods should not return an error describing the cancellation state of the context -when they complete, nor should they abort any work. - -This rule may not apply if the OpenTelemetry specification defines a timeout mechanism for -the method. In that case the context cancellation can be used for the timeout with the -restriction that this behavior is documented for the method. Otherwise, timeouts -are expected to be handled by the user calling the API, not the implementation. - -Stoppage of the telemetry pipeline is handled by calling the appropriate `Shutdown` method -of a provider. It is assumed the context passed from a user is not used for this purpose. - -Outside of the direct recording of telemetry from the API (e.g. exporting telemetry, -force flushing telemetry, shutting down a signal provider) the context cancellation -should be honored. This means all work done on behalf of the user provided context -should be canceled. - -## Approvers and Maintainers - -### Approvers - -- [Chester Cheung](https://github.com/hanyuancheung), Tencent - -### Maintainers - -- [Aaron Clawson](https://github.com/MadVikingGod), LightStep -- [Damien Mathieu](https://github.com/dmathieu), Elastic -- [David Ashpole](https://github.com/dashpole), Google -- [Robert Pająk](https://github.com/pellared), Splunk -- [Sam Xie](https://github.com/XSAM), Cisco/AppDynamics -- [Tyler Yahn](https://github.com/MrAlias), Splunk - -### Emeritus - -- [Liz Fong-Jones](https://github.com/lizthegrey), Honeycomb -- [Gustavo Silva Paiva](https://github.com/paivagustavo), LightStep -- [Josh MacDonald](https://github.com/jmacd), LightStep -- [Anthony Mirabella](https://github.com/Aneurysm9), AWS -- [Evan Torrie](https://github.com/evantorrie), Yahoo - -### Become an Approver or a Maintainer - -See the [community membership document in OpenTelemetry community -repo](https://github.com/open-telemetry/community/blob/main/community-membership.md). - -[Approver]: #approvers -[Maintainer]: #maintainers -[gotmpl]: https://pkg.go.dev/go.opentelemetry.io/build-tools/gotmpl -[#4404]: https://github.com/open-telemetry/opentelemetry-go/pull/4404 diff --git a/vendor/go.opentelemetry.io/otel/LICENSE b/vendor/go.opentelemetry.io/otel/LICENSE deleted file mode 100644 index 261eeb9e..00000000 --- a/vendor/go.opentelemetry.io/otel/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/go.opentelemetry.io/otel/Makefile b/vendor/go.opentelemetry.io/otel/Makefile deleted file mode 100644 index f33619f7..00000000 --- a/vendor/go.opentelemetry.io/otel/Makefile +++ /dev/null @@ -1,301 +0,0 @@ -# Copyright The OpenTelemetry Authors -# SPDX-License-Identifier: Apache-2.0 - -TOOLS_MOD_DIR := ./internal/tools - -ALL_DOCS := $(shell find . -name '*.md' -type f | sort) -ALL_GO_MOD_DIRS := $(shell find . -type f -name 'go.mod' -exec dirname {} \; | sort) -OTEL_GO_MOD_DIRS := $(filter-out $(TOOLS_MOD_DIR), $(ALL_GO_MOD_DIRS)) -ALL_COVERAGE_MOD_DIRS := $(shell find . -type f -name 'go.mod' -exec dirname {} \; | grep -E -v '^./example|^$(TOOLS_MOD_DIR)' | sort) - -GO = go -TIMEOUT = 60 - -.DEFAULT_GOAL := precommit - -.PHONY: precommit ci -precommit: generate license-check misspell go-mod-tidy golangci-lint-fix verify-readmes verify-mods test-default -ci: generate license-check lint vanity-import-check verify-readmes verify-mods build test-default check-clean-work-tree test-coverage - -# Tools - -TOOLS = $(CURDIR)/.tools - -$(TOOLS): - @mkdir -p $@ -$(TOOLS)/%: $(TOOLS_MOD_DIR)/go.mod | $(TOOLS) - cd $(TOOLS_MOD_DIR) && \ - $(GO) build -o $@ $(PACKAGE) - -MULTIMOD = $(TOOLS)/multimod -$(TOOLS)/multimod: PACKAGE=go.opentelemetry.io/build-tools/multimod - -SEMCONVGEN = $(TOOLS)/semconvgen -$(TOOLS)/semconvgen: PACKAGE=go.opentelemetry.io/build-tools/semconvgen - -CROSSLINK = $(TOOLS)/crosslink -$(TOOLS)/crosslink: PACKAGE=go.opentelemetry.io/build-tools/crosslink - -SEMCONVKIT = $(TOOLS)/semconvkit -$(TOOLS)/semconvkit: PACKAGE=go.opentelemetry.io/otel/$(TOOLS_MOD_DIR)/semconvkit - -GOLANGCI_LINT = $(TOOLS)/golangci-lint -$(TOOLS)/golangci-lint: PACKAGE=github.com/golangci/golangci-lint/cmd/golangci-lint - -MISSPELL = $(TOOLS)/misspell -$(TOOLS)/misspell: PACKAGE=github.com/client9/misspell/cmd/misspell - -GOCOVMERGE = $(TOOLS)/gocovmerge -$(TOOLS)/gocovmerge: PACKAGE=github.com/wadey/gocovmerge - -STRINGER = $(TOOLS)/stringer -$(TOOLS)/stringer: PACKAGE=golang.org/x/tools/cmd/stringer - -PORTO = $(TOOLS)/porto -$(TOOLS)/porto: PACKAGE=github.com/jcchavezs/porto/cmd/porto - -GOJQ = $(TOOLS)/gojq -$(TOOLS)/gojq: PACKAGE=github.com/itchyny/gojq/cmd/gojq - -GOTMPL = $(TOOLS)/gotmpl -$(GOTMPL): PACKAGE=go.opentelemetry.io/build-tools/gotmpl - -GORELEASE = $(TOOLS)/gorelease -$(GORELEASE): PACKAGE=golang.org/x/exp/cmd/gorelease - -GOVULNCHECK = $(TOOLS)/govulncheck -$(TOOLS)/govulncheck: PACKAGE=golang.org/x/vuln/cmd/govulncheck - -.PHONY: tools -tools: $(CROSSLINK) $(GOLANGCI_LINT) $(MISSPELL) $(GOCOVMERGE) $(STRINGER) $(PORTO) $(GOJQ) $(SEMCONVGEN) $(MULTIMOD) $(SEMCONVKIT) $(GOTMPL) $(GORELEASE) - -# Virtualized python tools via docker - -# The directory where the virtual environment is created. -VENVDIR := venv - -# The directory where the python tools are installed. -PYTOOLS := $(VENVDIR)/bin - -# The pip executable in the virtual environment. -PIP := $(PYTOOLS)/pip - -# The directory in the docker image where the current directory is mounted. -WORKDIR := /workdir - -# The python image to use for the virtual environment. -PYTHONIMAGE := python:3.11.3-slim-bullseye - -# Run the python image with the current directory mounted. -DOCKERPY := docker run --rm -v "$(CURDIR):$(WORKDIR)" -w $(WORKDIR) $(PYTHONIMAGE) - -# Create a virtual environment for Python tools. -$(PYTOOLS): -# The `--upgrade` flag is needed to ensure that the virtual environment is -# created with the latest pip version. - @$(DOCKERPY) bash -c "python3 -m venv $(VENVDIR) && $(PIP) install --upgrade pip" - -# Install python packages into the virtual environment. -$(PYTOOLS)/%: $(PYTOOLS) - @$(DOCKERPY) $(PIP) install -r requirements.txt - -CODESPELL = $(PYTOOLS)/codespell -$(CODESPELL): PACKAGE=codespell - -# Generate - -.PHONY: generate -generate: go-generate vanity-import-fix - -.PHONY: go-generate -go-generate: $(OTEL_GO_MOD_DIRS:%=go-generate/%) -go-generate/%: DIR=$* -go-generate/%: $(STRINGER) $(GOTMPL) - @echo "$(GO) generate $(DIR)/..." \ - && cd $(DIR) \ - && PATH="$(TOOLS):$${PATH}" $(GO) generate ./... - -.PHONY: vanity-import-fix -vanity-import-fix: $(PORTO) - @$(PORTO) --include-internal -w . - -# Generate go.work file for local development. -.PHONY: go-work -go-work: $(CROSSLINK) - $(CROSSLINK) work --root=$(shell pwd) - -# Build - -.PHONY: build - -build: $(OTEL_GO_MOD_DIRS:%=build/%) $(OTEL_GO_MOD_DIRS:%=build-tests/%) -build/%: DIR=$* -build/%: - @echo "$(GO) build $(DIR)/..." \ - && cd $(DIR) \ - && $(GO) build ./... - -build-tests/%: DIR=$* -build-tests/%: - @echo "$(GO) build tests $(DIR)/..." \ - && cd $(DIR) \ - && $(GO) list ./... \ - | grep -v third_party \ - | xargs $(GO) test -vet=off -run xxxxxMatchNothingxxxxx >/dev/null - -# Tests - -TEST_TARGETS := test-default test-bench test-short test-verbose test-race -.PHONY: $(TEST_TARGETS) test -test-default test-race: ARGS=-race -test-bench: ARGS=-run=xxxxxMatchNothingxxxxx -test.benchtime=1ms -bench=. -test-short: ARGS=-short -test-verbose: ARGS=-v -race -$(TEST_TARGETS): test -test: $(OTEL_GO_MOD_DIRS:%=test/%) -test/%: DIR=$* -test/%: - @echo "$(GO) test -timeout $(TIMEOUT)s $(ARGS) $(DIR)/..." \ - && cd $(DIR) \ - && $(GO) list ./... \ - | grep -v third_party \ - | xargs $(GO) test -timeout $(TIMEOUT)s $(ARGS) - -COVERAGE_MODE = atomic -COVERAGE_PROFILE = coverage.out -.PHONY: test-coverage -test-coverage: $(GOCOVMERGE) - @set -e; \ - printf "" > coverage.txt; \ - for dir in $(ALL_COVERAGE_MOD_DIRS); do \ - echo "$(GO) test -coverpkg=go.opentelemetry.io/otel/... -covermode=$(COVERAGE_MODE) -coverprofile="$(COVERAGE_PROFILE)" $${dir}/..."; \ - (cd "$${dir}" && \ - $(GO) list ./... \ - | grep -v third_party \ - | grep -v 'semconv/v.*' \ - | xargs $(GO) test -coverpkg=./... -covermode=$(COVERAGE_MODE) -coverprofile="$(COVERAGE_PROFILE)" && \ - $(GO) tool cover -html=coverage.out -o coverage.html); \ - done; \ - $(GOCOVMERGE) $$(find . -name coverage.out) > coverage.txt - -# Adding a directory will include all benchmarks in that directory if a filter is not specified. -BENCHMARK_TARGETS := sdk/trace -.PHONY: benchmark -benchmark: $(BENCHMARK_TARGETS:%=benchmark/%) -BENCHMARK_FILTER = . -# You can override the filter for a particular directory by adding a rule here. -benchmark/sdk/trace: BENCHMARK_FILTER = SpanWithAttributes_8/AlwaysSample -benchmark/%: - @echo "$(GO) test -timeout $(TIMEOUT)s -run=xxxxxMatchNothingxxxxx -bench=$(BENCHMARK_FILTER) $*..." \ - && cd $* \ - $(foreach filter, $(BENCHMARK_FILTER), && $(GO) test -timeout $(TIMEOUT)s -run=xxxxxMatchNothingxxxxx -bench=$(filter)) - -.PHONY: golangci-lint golangci-lint-fix -golangci-lint-fix: ARGS=--fix -golangci-lint-fix: golangci-lint -golangci-lint: $(OTEL_GO_MOD_DIRS:%=golangci-lint/%) -golangci-lint/%: DIR=$* -golangci-lint/%: $(GOLANGCI_LINT) - @echo 'golangci-lint $(if $(ARGS),$(ARGS) ,)$(DIR)' \ - && cd $(DIR) \ - && $(GOLANGCI_LINT) run --allow-serial-runners $(ARGS) - -.PHONY: crosslink -crosslink: $(CROSSLINK) - @echo "Updating intra-repository dependencies in all go modules" \ - && $(CROSSLINK) --root=$(shell pwd) --prune - -.PHONY: go-mod-tidy -go-mod-tidy: $(ALL_GO_MOD_DIRS:%=go-mod-tidy/%) -go-mod-tidy/%: DIR=$* -go-mod-tidy/%: crosslink - @echo "$(GO) mod tidy in $(DIR)" \ - && cd $(DIR) \ - && $(GO) mod tidy -compat=1.21 - -.PHONY: lint-modules -lint-modules: go-mod-tidy - -.PHONY: lint -lint: misspell lint-modules golangci-lint govulncheck - -.PHONY: vanity-import-check -vanity-import-check: $(PORTO) - @$(PORTO) --include-internal -l . || ( echo "(run: make vanity-import-fix)"; exit 1 ) - -.PHONY: misspell -misspell: $(MISSPELL) - @$(MISSPELL) -w $(ALL_DOCS) - -.PHONY: govulncheck -govulncheck: $(OTEL_GO_MOD_DIRS:%=govulncheck/%) -govulncheck/%: DIR=$* -govulncheck/%: $(GOVULNCHECK) - @echo "govulncheck ./... in $(DIR)" \ - && cd $(DIR) \ - && $(GOVULNCHECK) ./... - -.PHONY: codespell -codespell: $(CODESPELL) - @$(DOCKERPY) $(CODESPELL) - -.PHONY: license-check -license-check: - @licRes=$$(for f in $$(find . -type f \( -iname '*.go' -o -iname '*.sh' \) ! -path '**/third_party/*' ! -path './.git/*' ) ; do \ - awk '/Copyright The OpenTelemetry Authors|generated|GENERATED/ && NR<=4 { found=1; next } END { if (!found) print FILENAME }' $$f; \ - done); \ - if [ -n "$${licRes}" ]; then \ - echo "license header checking failed:"; echo "$${licRes}"; \ - exit 1; \ - fi - -.PHONY: check-clean-work-tree -check-clean-work-tree: - @if ! git diff --quiet; then \ - echo; \ - echo 'Working tree is not clean, did you forget to run "make precommit"?'; \ - echo; \ - git status; \ - exit 1; \ - fi - -SEMCONVPKG ?= "semconv/" -.PHONY: semconv-generate -semconv-generate: $(SEMCONVGEN) $(SEMCONVKIT) - [ "$(TAG)" ] || ( echo "TAG unset: missing opentelemetry semantic-conventions tag"; exit 1 ) - [ "$(OTEL_SEMCONV_REPO)" ] || ( echo "OTEL_SEMCONV_REPO unset: missing path to opentelemetry semantic-conventions repo"; exit 1 ) - $(SEMCONVGEN) -i "$(OTEL_SEMCONV_REPO)/model/." --only=attribute_group -p conventionType=trace -f attribute_group.go -t "$(SEMCONVPKG)/template.j2" -s "$(TAG)" - $(SEMCONVGEN) -i "$(OTEL_SEMCONV_REPO)/model/." --only=metric -f metric.go -t "$(SEMCONVPKG)/metric_template.j2" -s "$(TAG)" - $(SEMCONVKIT) -output "$(SEMCONVPKG)/$(TAG)" -tag "$(TAG)" - -.PHONY: gorelease -gorelease: $(OTEL_GO_MOD_DIRS:%=gorelease/%) -gorelease/%: DIR=$* -gorelease/%:| $(GORELEASE) - @echo "gorelease in $(DIR):" \ - && cd $(DIR) \ - && $(GORELEASE) \ - || echo "" - -.PHONY: verify-mods -verify-mods: $(MULTIMOD) - $(MULTIMOD) verify - -.PHONY: prerelease -prerelease: verify-mods - @[ "${MODSET}" ] || ( echo ">> env var MODSET is not set"; exit 1 ) - $(MULTIMOD) prerelease -m ${MODSET} - -COMMIT ?= "HEAD" -.PHONY: add-tags -add-tags: verify-mods - @[ "${MODSET}" ] || ( echo ">> env var MODSET is not set"; exit 1 ) - $(MULTIMOD) tag -m ${MODSET} -c ${COMMIT} - -.PHONY: lint-markdown -lint-markdown: - docker run -v "$(CURDIR):$(WORKDIR)" avtodev/markdown-lint:v1 -c $(WORKDIR)/.markdownlint.yaml $(WORKDIR)/**/*.md - -.PHONY: verify-readmes -verify-readmes: - ./verify_readmes.sh diff --git a/vendor/go.opentelemetry.io/otel/README.md b/vendor/go.opentelemetry.io/otel/README.md deleted file mode 100644 index 5a890931..00000000 --- a/vendor/go.opentelemetry.io/otel/README.md +++ /dev/null @@ -1,109 +0,0 @@ -# OpenTelemetry-Go - -[![CI](https://github.com/open-telemetry/opentelemetry-go/workflows/ci/badge.svg)](https://github.com/open-telemetry/opentelemetry-go/actions?query=workflow%3Aci+branch%3Amain) -[![codecov.io](https://codecov.io/gh/open-telemetry/opentelemetry-go/coverage.svg?branch=main)](https://app.codecov.io/gh/open-telemetry/opentelemetry-go?branch=main) -[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel)](https://pkg.go.dev/go.opentelemetry.io/otel) -[![Go Report Card](https://goreportcard.com/badge/go.opentelemetry.io/otel)](https://goreportcard.com/report/go.opentelemetry.io/otel) -[![Slack](https://img.shields.io/badge/slack-@cncf/otel--go-brightgreen.svg?logo=slack)](https://cloud-native.slack.com/archives/C01NPAXACKT) - -OpenTelemetry-Go is the [Go](https://golang.org/) implementation of [OpenTelemetry](https://opentelemetry.io/). -It provides a set of APIs to directly measure performance and behavior of your software and send this data to observability platforms. - -## Project Status - -| Signal | Status | -|---------|--------------------| -| Traces | Stable | -| Metrics | Stable | -| Logs | Beta[^1] | - -Progress and status specific to this repository is tracked in our -[project boards](https://github.com/open-telemetry/opentelemetry-go/projects) -and -[milestones](https://github.com/open-telemetry/opentelemetry-go/milestones). - -Project versioning information and stability guarantees can be found in the -[versioning documentation](VERSIONING.md). - -[^1]: https://github.com/orgs/open-telemetry/projects/43 - -### Compatibility - -OpenTelemetry-Go ensures compatibility with the current supported versions of -the [Go language](https://golang.org/doc/devel/release#policy): - -> Each major Go release is supported until there are two newer major releases. -> For example, Go 1.5 was supported until the Go 1.7 release, and Go 1.6 was supported until the Go 1.8 release. - -For versions of Go that are no longer supported upstream, opentelemetry-go will -stop ensuring compatibility with these versions in the following manner: - -- A minor release of opentelemetry-go will be made to add support for the new - supported release of Go. -- The following minor release of opentelemetry-go will remove compatibility - testing for the oldest (now archived upstream) version of Go. This, and - future, releases of opentelemetry-go may include features only supported by - the currently supported versions of Go. - -Currently, this project supports the following environments. - -| OS | Go Version | Architecture | -|---------|------------|--------------| -| Ubuntu | 1.22 | amd64 | -| Ubuntu | 1.21 | amd64 | -| Ubuntu | 1.22 | 386 | -| Ubuntu | 1.21 | 386 | -| Linux | 1.22 | arm64 | -| Linux | 1.21 | arm64 | -| MacOS | 1.22 | amd64 | -| MacOS | 1.21 | amd64 | -| Windows | 1.22 | amd64 | -| Windows | 1.21 | amd64 | -| Windows | 1.22 | 386 | -| Windows | 1.21 | 386 | - -While this project should work for other systems, no compatibility guarantees -are made for those systems currently. - -## Getting Started - -You can find a getting started guide on [opentelemetry.io](https://opentelemetry.io/docs/languages/go/getting-started/). - -OpenTelemetry's goal is to provide a single set of APIs to capture distributed -traces and metrics from your application and send them to an observability -platform. This project allows you to do just that for applications written in -Go. There are two steps to this process: instrument your application, and -configure an exporter. - -### Instrumentation - -To start capturing distributed traces and metric events from your application -it first needs to be instrumented. The easiest way to do this is by using an -instrumentation library for your code. Be sure to check out [the officially -supported instrumentation -libraries](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/main/instrumentation). - -If you need to extend the telemetry an instrumentation library provides or want -to build your own instrumentation for your application directly you will need -to use the -[Go otel](https://pkg.go.dev/go.opentelemetry.io/otel) -package. The included [examples](./example/) are a good way to see some -practical uses of this process. - -### Export - -Now that your application is instrumented to collect telemetry, it needs an -export pipeline to send that telemetry to an observability platform. - -All officially supported exporters for the OpenTelemetry project are contained in the [exporters directory](./exporters). - -| Exporter | Logs | Metrics | Traces | -|---------------------------------------|:----:|:-------:|:------:| -| [OTLP](./exporters/otlp/) | ✓ | ✓ | ✓ | -| [Prometheus](./exporters/prometheus/) | | ✓ | | -| [stdout](./exporters/stdout/) | ✓ | ✓ | ✓ | -| [Zipkin](./exporters/zipkin/) | | | ✓ | - -## Contributing - -See the [contributing documentation](CONTRIBUTING.md). diff --git a/vendor/go.opentelemetry.io/otel/RELEASING.md b/vendor/go.opentelemetry.io/otel/RELEASING.md deleted file mode 100644 index 940f57f3..00000000 --- a/vendor/go.opentelemetry.io/otel/RELEASING.md +++ /dev/null @@ -1,145 +0,0 @@ -# Release Process - -## Semantic Convention Generation - -New versions of the [OpenTelemetry Semantic Conventions] mean new versions of the `semconv` package need to be generated. -The `semconv-generate` make target is used for this. - -1. Checkout a local copy of the [OpenTelemetry Semantic Conventions] to the desired release tag. -2. Pull the latest `otel/semconvgen` image: `docker pull otel/semconvgen:latest` -3. Run the `make semconv-generate ...` target from this repository. - -For example, - -```sh -export TAG="v1.21.0" # Change to the release version you are generating. -export OTEL_SEMCONV_REPO="/absolute/path/to/opentelemetry/semantic-conventions" -docker pull otel/semconvgen:latest -make semconv-generate # Uses the exported TAG and OTEL_SEMCONV_REPO. -``` - -This should create a new sub-package of [`semconv`](./semconv). -Ensure things look correct before submitting a pull request to include the addition. - -## Breaking changes validation - -You can run `make gorelease` that runs [gorelease](https://pkg.go.dev/golang.org/x/exp/cmd/gorelease) to ensure that there are no unwanted changes done in the public API. - -You can check/report problems with `gorelease` [here](https://golang.org/issues/26420). - -## Verify changes for contrib repository - -If the changes in the main repository are going to affect the contrib repository, it is important to verify that the changes are compatible with the contrib repository. - -Follow [the steps](https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/RELEASING.md#verify-otel-changes) in the contrib repository to verify OTel changes. - -## Pre-Release - -First, decide which module sets will be released and update their versions -in `versions.yaml`. Commit this change to a new branch. - -Update go.mod for submodules to depend on the new release which will happen in the next step. - -1. Run the `prerelease` make target. It creates a branch - `prerelease__` that will contain all release changes. - - ``` - make prerelease MODSET= - ``` - -2. Verify the changes. - - ``` - git diff ...prerelease__ - ``` - - This should have changed the version for all modules to be ``. - If these changes look correct, merge them into your pre-release branch: - - ```go - git merge prerelease__ - ``` - -3. Update the [Changelog](./CHANGELOG.md). - - Make sure all relevant changes for this release are included and are in language that non-contributors to the project can understand. - To verify this, you can look directly at the commits since the ``. - - ``` - git --no-pager log --pretty=oneline "..HEAD" - ``` - - - Move all the `Unreleased` changes into a new section following the title scheme (`[] - `). - - Update all the appropriate links at the bottom. - -4. Push the changes to upstream and create a Pull Request on GitHub. - Be sure to include the curated changes from the [Changelog](./CHANGELOG.md) in the description. - -## Tag - -Once the Pull Request with all the version changes has been approved and merged it is time to tag the merged commit. - -***IMPORTANT***: It is critical you use the same tag that you used in the Pre-Release step! -Failure to do so will leave things in a broken state. As long as you do not -change `versions.yaml` between pre-release and this step, things should be fine. - -***IMPORTANT***: [There is currently no way to remove an incorrectly tagged version of a Go module](https://github.com/golang/go/issues/34189). -It is critical you make sure the version you push upstream is correct. -[Failure to do so will lead to minor emergencies and tough to work around](https://github.com/open-telemetry/opentelemetry-go/issues/331). - -1. For each module set that will be released, run the `add-tags` make target - using the `` of the commit on the main branch for the merged Pull Request. - - ``` - make add-tags MODSET= COMMIT= - ``` - - It should only be necessary to provide an explicit `COMMIT` value if the - current `HEAD` of your working directory is not the correct commit. - -2. Push tags to the upstream remote (not your fork: `github.com/open-telemetry/opentelemetry-go.git`). - Make sure you push all sub-modules as well. - - ``` - git push upstream - git push upstream - ... - ``` - -## Release - -Finally create a Release for the new `` on GitHub. -The release body should include all the release notes from the Changelog for this release. - -## Verify Examples - -After releasing verify that examples build outside of the repository. - -``` -./verify_examples.sh -``` - -The script copies examples into a different directory removes any `replace` declarations in `go.mod` and builds them. -This ensures they build with the published release, not the local copy. - -## Post-Release - -### Contrib Repository - -Once verified be sure to [make a release for the `contrib` repository](https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/RELEASING.md) that uses this release. - -### Website Documentation - -Update the [Go instrumentation documentation] in the OpenTelemetry website under [content/en/docs/languages/go]. -Importantly, bump any package versions referenced to be the latest one you just released and ensure all code examples still compile and are accurate. - -[OpenTelemetry Semantic Conventions]: https://github.com/open-telemetry/semantic-conventions -[Go instrumentation documentation]: https://opentelemetry.io/docs/languages/go/ -[content/en/docs/languages/go]: https://github.com/open-telemetry/opentelemetry.io/tree/main/content/en/docs/languages/go - -### Demo Repository - -Bump the dependencies in the following Go services: - -- [`accountingservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/accountingservice) -- [`checkoutservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/checkoutservice) -- [`productcatalogservice`](https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/productcatalogservice) diff --git a/vendor/go.opentelemetry.io/otel/VERSIONING.md b/vendor/go.opentelemetry.io/otel/VERSIONING.md deleted file mode 100644 index 412f1e36..00000000 --- a/vendor/go.opentelemetry.io/otel/VERSIONING.md +++ /dev/null @@ -1,224 +0,0 @@ -# Versioning - -This document describes the versioning policy for this repository. This policy -is designed so the following goals can be achieved. - -**Users are provided a codebase of value that is stable and secure.** - -## Policy - -* Versioning of this project will be idiomatic of a Go project using [Go - modules](https://github.com/golang/go/wiki/Modules). - * [Semantic import - versioning](https://github.com/golang/go/wiki/Modules#semantic-import-versioning) - will be used. - * Versions will comply with [semver - 2.0](https://semver.org/spec/v2.0.0.html) with the following exceptions. - * New methods may be added to exported API interfaces. All exported - interfaces that fall within this exception will include the following - paragraph in their public documentation. - - > Warning: methods may be added to this interface in minor releases. - - * If a module is version `v2` or higher, the major version of the module - must be included as a `/vN` at the end of the module paths used in - `go.mod` files (e.g., `module go.opentelemetry.io/otel/v2`, `require - go.opentelemetry.io/otel/v2 v2.0.1`) and in the package import path - (e.g., `import "go.opentelemetry.io/otel/v2/trace"`). This includes the - paths used in `go get` commands (e.g., `go get - go.opentelemetry.io/otel/v2@v2.0.1`. Note there is both a `/v2` and a - `@v2.0.1` in that example. One way to think about it is that the module - name now includes the `/v2`, so include `/v2` whenever you are using the - module name). - * If a module is version `v0` or `v1`, do not include the major version in - either the module path or the import path. - * Modules will be used to encapsulate signals and components. - * Experimental modules still under active development will be versioned at - `v0` to imply the stability guarantee defined by - [semver](https://semver.org/spec/v2.0.0.html#spec-item-4). - - > Major version zero (0.y.z) is for initial development. Anything MAY - > change at any time. The public API SHOULD NOT be considered stable. - - * Mature modules for which we guarantee a stable public API will be versioned - with a major version greater than `v0`. - * The decision to make a module stable will be made on a case-by-case - basis by the maintainers of this project. - * Experimental modules will start their versioning at `v0.0.0` and will - increment their minor version when backwards incompatible changes are - released and increment their patch version when backwards compatible - changes are released. - * All stable modules that use the same major version number will use the - same entire version number. - * Stable modules may be released with an incremented minor or patch - version even though that module has not been changed, but rather so - that it will remain at the same version as other stable modules that - did undergo change. - * When an experimental module becomes stable a new stable module version - will be released and will include this now stable module. The new - stable module version will be an increment of the minor version number - and will be applied to all existing stable modules as well as the newly - stable module being released. -* Versioning of the associated [contrib - repository](https://github.com/open-telemetry/opentelemetry-go-contrib) of - this project will be idiomatic of a Go project using [Go - modules](https://github.com/golang/go/wiki/Modules). - * [Semantic import - versioning](https://github.com/golang/go/wiki/Modules#semantic-import-versioning) - will be used. - * Versions will comply with [semver 2.0](https://semver.org/spec/v2.0.0.html). - * If a module is version `v2` or higher, the - major version of the module must be included as a `/vN` at the end of the - module paths used in `go.mod` files (e.g., `module - go.opentelemetry.io/contrib/instrumentation/host/v2`, `require - go.opentelemetry.io/contrib/instrumentation/host/v2 v2.0.1`) and in the - package import path (e.g., `import - "go.opentelemetry.io/contrib/instrumentation/host/v2"`). This includes - the paths used in `go get` commands (e.g., `go get - go.opentelemetry.io/contrib/instrumentation/host/v2@v2.0.1`. Note there - is both a `/v2` and a `@v2.0.1` in that example. One way to think about - it is that the module name now includes the `/v2`, so include `/v2` - whenever you are using the module name). - * If a module is version `v0` or `v1`, do not include the major version - in either the module path or the import path. - * In addition to public APIs, telemetry produced by stable instrumentation - will remain stable and backwards compatible. This is to avoid breaking - alerts and dashboard. - * Modules will be used to encapsulate instrumentation, detectors, exporters, - propagators, and any other independent sets of related components. - * Experimental modules still under active development will be versioned at - `v0` to imply the stability guarantee defined by - [semver](https://semver.org/spec/v2.0.0.html#spec-item-4). - - > Major version zero (0.y.z) is for initial development. Anything MAY - > change at any time. The public API SHOULD NOT be considered stable. - - * Mature modules for which we guarantee a stable public API and telemetry will - be versioned with a major version greater than `v0`. - * Experimental modules will start their versioning at `v0.0.0` and will - increment their minor version when backwards incompatible changes are - released and increment their patch version when backwards compatible - changes are released. - * Stable contrib modules cannot depend on experimental modules from this - project. - * All stable contrib modules of the same major version with this project - will use the same entire version as this project. - * Stable modules may be released with an incremented minor or patch - version even though that module's code has not been changed. Instead - the only change that will have been included is to have updated that - modules dependency on this project's stable APIs. - * When an experimental module in contrib becomes stable a new stable - module version will be released and will include this now stable - module. The new stable module version will be an increment of the minor - version number and will be applied to all existing stable contrib - modules, this project's modules, and the newly stable module being - released. - * Contrib modules will be kept up to date with this project's releases. - * Due to the dependency contrib modules will implicitly have on this - project's modules the release of stable contrib modules to match the - released version number will be staggered after this project's release. - There is no explicit time guarantee for how long after this projects - release the contrib release will be. Effort should be made to keep them - as close in time as possible. - * No additional stable release in this project can be made until the - contrib repository has a matching stable release. - * No release can be made in the contrib repository after this project's - stable release except for a stable release of the contrib repository. -* GitHub releases will be made for all releases. -* Go modules will be made available at Go package mirrors. - -## Example Versioning Lifecycle - -To better understand the implementation of the above policy the following -example is provided. This project is simplified to include only the following -modules and their versions: - -* `otel`: `v0.14.0` -* `otel/trace`: `v0.14.0` -* `otel/metric`: `v0.14.0` -* `otel/baggage`: `v0.14.0` -* `otel/sdk/trace`: `v0.14.0` -* `otel/sdk/metric`: `v0.14.0` - -These modules have been developed to a point where the `otel/trace`, -`otel/baggage`, and `otel/sdk/trace` modules have reached a point that they -should be considered for a stable release. The `otel/metric` and -`otel/sdk/metric` are still under active development and the `otel` module -depends on both `otel/trace` and `otel/metric`. - -The `otel` package is refactored to remove its dependencies on `otel/metric` so -it can be released as stable as well. With that done the following release -candidates are made: - -* `otel`: `v1.0.0-RC1` -* `otel/trace`: `v1.0.0-RC1` -* `otel/baggage`: `v1.0.0-RC1` -* `otel/sdk/trace`: `v1.0.0-RC1` - -The `otel/metric` and `otel/sdk/metric` modules remain at `v0.14.0`. - -A few minor issues are discovered in the `otel/trace` package. These issues are -resolved with some minor, but backwards incompatible, changes and are released -as a second release candidate: - -* `otel`: `v1.0.0-RC2` -* `otel/trace`: `v1.0.0-RC2` -* `otel/baggage`: `v1.0.0-RC2` -* `otel/sdk/trace`: `v1.0.0-RC2` - -Notice that all module version numbers are incremented to adhere to our -versioning policy. - -After these release candidates have been evaluated to satisfaction, they are -released as version `v1.0.0`. - -* `otel`: `v1.0.0` -* `otel/trace`: `v1.0.0` -* `otel/baggage`: `v1.0.0` -* `otel/sdk/trace`: `v1.0.0` - -Since both the `go` utility and the Go module system support [the semantic -versioning definition of -precedence](https://semver.org/spec/v2.0.0.html#spec-item-11), this release -will correctly be interpreted as the successor to the previous release -candidates. - -Active development of this project continues. The `otel/metric` module now has -backwards incompatible changes to its API that need to be released and the -`otel/baggage` module has a minor bug fix that needs to be released. The -following release is made: - -* `otel`: `v1.0.1` -* `otel/trace`: `v1.0.1` -* `otel/metric`: `v0.15.0` -* `otel/baggage`: `v1.0.1` -* `otel/sdk/trace`: `v1.0.1` -* `otel/sdk/metric`: `v0.15.0` - -Notice that, again, all stable module versions are incremented in unison and -the `otel/sdk/metric` package, which depends on the `otel/metric` package, also -bumped its version. This bump of the `otel/sdk/metric` package makes sense -given their coupling, though it is not explicitly required by our versioning -policy. - -As we progress, the `otel/metric` and `otel/sdk/metric` packages have reached a -point where they should be evaluated for stability. The `otel` module is -reintegrated with the `otel/metric` package and the following release is made: - -* `otel`: `v1.1.0-RC1` -* `otel/trace`: `v1.1.0-RC1` -* `otel/metric`: `v1.1.0-RC1` -* `otel/baggage`: `v1.1.0-RC1` -* `otel/sdk/trace`: `v1.1.0-RC1` -* `otel/sdk/metric`: `v1.1.0-RC1` - -All the modules are evaluated and determined to a viable stable release. They -are then released as version `v1.1.0` (the minor version is incremented to -indicate the addition of new signal). - -* `otel`: `v1.1.0` -* `otel/trace`: `v1.1.0` -* `otel/metric`: `v1.1.0` -* `otel/baggage`: `v1.1.0` -* `otel/sdk/trace`: `v1.1.0` -* `otel/sdk/metric`: `v1.1.0` diff --git a/vendor/go.opentelemetry.io/otel/attribute/README.md b/vendor/go.opentelemetry.io/otel/attribute/README.md deleted file mode 100644 index 5b3da8f1..00000000 --- a/vendor/go.opentelemetry.io/otel/attribute/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Attribute - -[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/attribute)](https://pkg.go.dev/go.opentelemetry.io/otel/attribute) diff --git a/vendor/go.opentelemetry.io/otel/attribute/doc.go b/vendor/go.opentelemetry.io/otel/attribute/doc.go deleted file mode 100644 index eef51ebc..00000000 --- a/vendor/go.opentelemetry.io/otel/attribute/doc.go +++ /dev/null @@ -1,5 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Package attribute provides key and value attributes. -package attribute // import "go.opentelemetry.io/otel/attribute" diff --git a/vendor/go.opentelemetry.io/otel/attribute/encoder.go b/vendor/go.opentelemetry.io/otel/attribute/encoder.go deleted file mode 100644 index 318e42fc..00000000 --- a/vendor/go.opentelemetry.io/otel/attribute/encoder.go +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package attribute // import "go.opentelemetry.io/otel/attribute" - -import ( - "bytes" - "sync" - "sync/atomic" -) - -type ( - // Encoder is a mechanism for serializing an attribute set into a specific - // string representation that supports caching, to avoid repeated - // serialization. An example could be an exporter encoding the attribute - // set into a wire representation. - Encoder interface { - // Encode returns the serialized encoding of the attribute set using - // its Iterator. This result may be cached by a attribute.Set. - Encode(iterator Iterator) string - - // ID returns a value that is unique for each class of attribute - // encoder. Attribute encoders allocate these using `NewEncoderID`. - ID() EncoderID - } - - // EncoderID is used to identify distinct Encoder - // implementations, for caching encoded results. - EncoderID struct { - value uint64 - } - - // defaultAttrEncoder uses a sync.Pool of buffers to reduce the number of - // allocations used in encoding attributes. This implementation encodes a - // comma-separated list of key=value, with '/'-escaping of '=', ',', and - // '\'. - defaultAttrEncoder struct { - // pool is a pool of attribute set builders. The buffers in this pool - // grow to a size that most attribute encodings will not allocate new - // memory. - pool sync.Pool // *bytes.Buffer - } -) - -// escapeChar is used to ensure uniqueness of the attribute encoding where -// keys or values contain either '=' or ','. Since there is no parser needed -// for this encoding and its only requirement is to be unique, this choice is -// arbitrary. Users will see these in some exporters (e.g., stdout), so the -// backslash ('\') is used as a conventional choice. -const escapeChar = '\\' - -var ( - _ Encoder = &defaultAttrEncoder{} - - // encoderIDCounter is for generating IDs for other attribute encoders. - encoderIDCounter uint64 - - defaultEncoderOnce sync.Once - defaultEncoderID = NewEncoderID() - defaultEncoderInstance *defaultAttrEncoder -) - -// NewEncoderID returns a unique attribute encoder ID. It should be called -// once per each type of attribute encoder. Preferably in init() or in var -// definition. -func NewEncoderID() EncoderID { - return EncoderID{value: atomic.AddUint64(&encoderIDCounter, 1)} -} - -// DefaultEncoder returns an attribute encoder that encodes attributes in such -// a way that each escaped attribute's key is followed by an equal sign and -// then by an escaped attribute's value. All key-value pairs are separated by -// a comma. -// -// Escaping is done by prepending a backslash before either a backslash, equal -// sign or a comma. -func DefaultEncoder() Encoder { - defaultEncoderOnce.Do(func() { - defaultEncoderInstance = &defaultAttrEncoder{ - pool: sync.Pool{ - New: func() interface{} { - return &bytes.Buffer{} - }, - }, - } - }) - return defaultEncoderInstance -} - -// Encode is a part of an implementation of the AttributeEncoder interface. -func (d *defaultAttrEncoder) Encode(iter Iterator) string { - buf := d.pool.Get().(*bytes.Buffer) - defer d.pool.Put(buf) - buf.Reset() - - for iter.Next() { - i, keyValue := iter.IndexedAttribute() - if i > 0 { - _, _ = buf.WriteRune(',') - } - copyAndEscape(buf, string(keyValue.Key)) - - _, _ = buf.WriteRune('=') - - if keyValue.Value.Type() == STRING { - copyAndEscape(buf, keyValue.Value.AsString()) - } else { - _, _ = buf.WriteString(keyValue.Value.Emit()) - } - } - return buf.String() -} - -// ID is a part of an implementation of the AttributeEncoder interface. -func (*defaultAttrEncoder) ID() EncoderID { - return defaultEncoderID -} - -// copyAndEscape escapes `=`, `,` and its own escape character (`\`), -// making the default encoding unique. -func copyAndEscape(buf *bytes.Buffer, val string) { - for _, ch := range val { - switch ch { - case '=', ',', escapeChar: - _, _ = buf.WriteRune(escapeChar) - } - _, _ = buf.WriteRune(ch) - } -} - -// Valid returns true if this encoder ID was allocated by -// `NewEncoderID`. Invalid encoder IDs will not be cached. -func (id EncoderID) Valid() bool { - return id.value != 0 -} diff --git a/vendor/go.opentelemetry.io/otel/attribute/filter.go b/vendor/go.opentelemetry.io/otel/attribute/filter.go deleted file mode 100644 index be9cd922..00000000 --- a/vendor/go.opentelemetry.io/otel/attribute/filter.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package attribute // import "go.opentelemetry.io/otel/attribute" - -// Filter supports removing certain attributes from attribute sets. When -// the filter returns true, the attribute will be kept in the filtered -// attribute set. When the filter returns false, the attribute is excluded -// from the filtered attribute set, and the attribute instead appears in -// the removed list of excluded attributes. -type Filter func(KeyValue) bool - -// NewAllowKeysFilter returns a Filter that only allows attributes with one of -// the provided keys. -// -// If keys is empty a deny-all filter is returned. -func NewAllowKeysFilter(keys ...Key) Filter { - if len(keys) <= 0 { - return func(kv KeyValue) bool { return false } - } - - allowed := make(map[Key]struct{}) - for _, k := range keys { - allowed[k] = struct{}{} - } - return func(kv KeyValue) bool { - _, ok := allowed[kv.Key] - return ok - } -} - -// NewDenyKeysFilter returns a Filter that only allows attributes -// that do not have one of the provided keys. -// -// If keys is empty an allow-all filter is returned. -func NewDenyKeysFilter(keys ...Key) Filter { - if len(keys) <= 0 { - return func(kv KeyValue) bool { return true } - } - - forbid := make(map[Key]struct{}) - for _, k := range keys { - forbid[k] = struct{}{} - } - return func(kv KeyValue) bool { - _, ok := forbid[kv.Key] - return !ok - } -} diff --git a/vendor/go.opentelemetry.io/otel/attribute/iterator.go b/vendor/go.opentelemetry.io/otel/attribute/iterator.go deleted file mode 100644 index f2ba89ce..00000000 --- a/vendor/go.opentelemetry.io/otel/attribute/iterator.go +++ /dev/null @@ -1,150 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package attribute // import "go.opentelemetry.io/otel/attribute" - -// Iterator allows iterating over the set of attributes in order, sorted by -// key. -type Iterator struct { - storage *Set - idx int -} - -// MergeIterator supports iterating over two sets of attributes while -// eliminating duplicate values from the combined set. The first iterator -// value takes precedence. -type MergeIterator struct { - one oneIterator - two oneIterator - current KeyValue -} - -type oneIterator struct { - iter Iterator - done bool - attr KeyValue -} - -// Next moves the iterator to the next position. Returns false if there are no -// more attributes. -func (i *Iterator) Next() bool { - i.idx++ - return i.idx < i.Len() -} - -// Label returns current KeyValue. Must be called only after Next returns -// true. -// -// Deprecated: Use Attribute instead. -func (i *Iterator) Label() KeyValue { - return i.Attribute() -} - -// Attribute returns the current KeyValue of the Iterator. It must be called -// only after Next returns true. -func (i *Iterator) Attribute() KeyValue { - kv, _ := i.storage.Get(i.idx) - return kv -} - -// IndexedLabel returns current index and attribute. Must be called only -// after Next returns true. -// -// Deprecated: Use IndexedAttribute instead. -func (i *Iterator) IndexedLabel() (int, KeyValue) { - return i.idx, i.Attribute() -} - -// IndexedAttribute returns current index and attribute. Must be called only -// after Next returns true. -func (i *Iterator) IndexedAttribute() (int, KeyValue) { - return i.idx, i.Attribute() -} - -// Len returns a number of attributes in the iterated set. -func (i *Iterator) Len() int { - return i.storage.Len() -} - -// ToSlice is a convenience function that creates a slice of attributes from -// the passed iterator. The iterator is set up to start from the beginning -// before creating the slice. -func (i *Iterator) ToSlice() []KeyValue { - l := i.Len() - if l == 0 { - return nil - } - i.idx = -1 - slice := make([]KeyValue, 0, l) - for i.Next() { - slice = append(slice, i.Attribute()) - } - return slice -} - -// NewMergeIterator returns a MergeIterator for merging two attribute sets. -// Duplicates are resolved by taking the value from the first set. -func NewMergeIterator(s1, s2 *Set) MergeIterator { - mi := MergeIterator{ - one: makeOne(s1.Iter()), - two: makeOne(s2.Iter()), - } - return mi -} - -func makeOne(iter Iterator) oneIterator { - oi := oneIterator{ - iter: iter, - } - oi.advance() - return oi -} - -func (oi *oneIterator) advance() { - if oi.done = !oi.iter.Next(); !oi.done { - oi.attr = oi.iter.Attribute() - } -} - -// Next returns true if there is another attribute available. -func (m *MergeIterator) Next() bool { - if m.one.done && m.two.done { - return false - } - if m.one.done { - m.current = m.two.attr - m.two.advance() - return true - } - if m.two.done { - m.current = m.one.attr - m.one.advance() - return true - } - if m.one.attr.Key == m.two.attr.Key { - m.current = m.one.attr // first iterator attribute value wins - m.one.advance() - m.two.advance() - return true - } - if m.one.attr.Key < m.two.attr.Key { - m.current = m.one.attr - m.one.advance() - return true - } - m.current = m.two.attr - m.two.advance() - return true -} - -// Label returns the current value after Next() returns true. -// -// Deprecated: Use Attribute instead. -func (m *MergeIterator) Label() KeyValue { - return m.current -} - -// Attribute returns the current value after Next() returns true. -func (m *MergeIterator) Attribute() KeyValue { - return m.current -} diff --git a/vendor/go.opentelemetry.io/otel/attribute/key.go b/vendor/go.opentelemetry.io/otel/attribute/key.go deleted file mode 100644 index d9a22c65..00000000 --- a/vendor/go.opentelemetry.io/otel/attribute/key.go +++ /dev/null @@ -1,123 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package attribute // import "go.opentelemetry.io/otel/attribute" - -// Key represents the key part in key-value pairs. It's a string. The -// allowed character set in the key depends on the use of the key. -type Key string - -// Bool creates a KeyValue instance with a BOOL Value. -// -// If creating both a key and value at the same time, use the provided -// convenience function instead -- Bool(name, value). -func (k Key) Bool(v bool) KeyValue { - return KeyValue{ - Key: k, - Value: BoolValue(v), - } -} - -// BoolSlice creates a KeyValue instance with a BOOLSLICE Value. -// -// If creating both a key and value at the same time, use the provided -// convenience function instead -- BoolSlice(name, value). -func (k Key) BoolSlice(v []bool) KeyValue { - return KeyValue{ - Key: k, - Value: BoolSliceValue(v), - } -} - -// Int creates a KeyValue instance with an INT64 Value. -// -// If creating both a key and value at the same time, use the provided -// convenience function instead -- Int(name, value). -func (k Key) Int(v int) KeyValue { - return KeyValue{ - Key: k, - Value: IntValue(v), - } -} - -// IntSlice creates a KeyValue instance with an INT64SLICE Value. -// -// If creating both a key and value at the same time, use the provided -// convenience function instead -- IntSlice(name, value). -func (k Key) IntSlice(v []int) KeyValue { - return KeyValue{ - Key: k, - Value: IntSliceValue(v), - } -} - -// Int64 creates a KeyValue instance with an INT64 Value. -// -// If creating both a key and value at the same time, use the provided -// convenience function instead -- Int64(name, value). -func (k Key) Int64(v int64) KeyValue { - return KeyValue{ - Key: k, - Value: Int64Value(v), - } -} - -// Int64Slice creates a KeyValue instance with an INT64SLICE Value. -// -// If creating both a key and value at the same time, use the provided -// convenience function instead -- Int64Slice(name, value). -func (k Key) Int64Slice(v []int64) KeyValue { - return KeyValue{ - Key: k, - Value: Int64SliceValue(v), - } -} - -// Float64 creates a KeyValue instance with a FLOAT64 Value. -// -// If creating both a key and value at the same time, use the provided -// convenience function instead -- Float64(name, value). -func (k Key) Float64(v float64) KeyValue { - return KeyValue{ - Key: k, - Value: Float64Value(v), - } -} - -// Float64Slice creates a KeyValue instance with a FLOAT64SLICE Value. -// -// If creating both a key and value at the same time, use the provided -// convenience function instead -- Float64(name, value). -func (k Key) Float64Slice(v []float64) KeyValue { - return KeyValue{ - Key: k, - Value: Float64SliceValue(v), - } -} - -// String creates a KeyValue instance with a STRING Value. -// -// If creating both a key and value at the same time, use the provided -// convenience function instead -- String(name, value). -func (k Key) String(v string) KeyValue { - return KeyValue{ - Key: k, - Value: StringValue(v), - } -} - -// StringSlice creates a KeyValue instance with a STRINGSLICE Value. -// -// If creating both a key and value at the same time, use the provided -// convenience function instead -- StringSlice(name, value). -func (k Key) StringSlice(v []string) KeyValue { - return KeyValue{ - Key: k, - Value: StringSliceValue(v), - } -} - -// Defined returns true for non-empty keys. -func (k Key) Defined() bool { - return len(k) != 0 -} diff --git a/vendor/go.opentelemetry.io/otel/attribute/kv.go b/vendor/go.opentelemetry.io/otel/attribute/kv.go deleted file mode 100644 index 3028f9a4..00000000 --- a/vendor/go.opentelemetry.io/otel/attribute/kv.go +++ /dev/null @@ -1,75 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package attribute // import "go.opentelemetry.io/otel/attribute" - -import ( - "fmt" -) - -// KeyValue holds a key and value pair. -type KeyValue struct { - Key Key - Value Value -} - -// Valid returns if kv is a valid OpenTelemetry attribute. -func (kv KeyValue) Valid() bool { - return kv.Key.Defined() && kv.Value.Type() != INVALID -} - -// Bool creates a KeyValue with a BOOL Value type. -func Bool(k string, v bool) KeyValue { - return Key(k).Bool(v) -} - -// BoolSlice creates a KeyValue with a BOOLSLICE Value type. -func BoolSlice(k string, v []bool) KeyValue { - return Key(k).BoolSlice(v) -} - -// Int creates a KeyValue with an INT64 Value type. -func Int(k string, v int) KeyValue { - return Key(k).Int(v) -} - -// IntSlice creates a KeyValue with an INT64SLICE Value type. -func IntSlice(k string, v []int) KeyValue { - return Key(k).IntSlice(v) -} - -// Int64 creates a KeyValue with an INT64 Value type. -func Int64(k string, v int64) KeyValue { - return Key(k).Int64(v) -} - -// Int64Slice creates a KeyValue with an INT64SLICE Value type. -func Int64Slice(k string, v []int64) KeyValue { - return Key(k).Int64Slice(v) -} - -// Float64 creates a KeyValue with a FLOAT64 Value type. -func Float64(k string, v float64) KeyValue { - return Key(k).Float64(v) -} - -// Float64Slice creates a KeyValue with a FLOAT64SLICE Value type. -func Float64Slice(k string, v []float64) KeyValue { - return Key(k).Float64Slice(v) -} - -// String creates a KeyValue with a STRING Value type. -func String(k, v string) KeyValue { - return Key(k).String(v) -} - -// StringSlice creates a KeyValue with a STRINGSLICE Value type. -func StringSlice(k string, v []string) KeyValue { - return Key(k).StringSlice(v) -} - -// Stringer creates a new key-value pair with a passed name and a string -// value generated by the passed Stringer interface. -func Stringer(k string, v fmt.Stringer) KeyValue { - return Key(k).String(v.String()) -} diff --git a/vendor/go.opentelemetry.io/otel/attribute/set.go b/vendor/go.opentelemetry.io/otel/attribute/set.go deleted file mode 100644 index bff9c7fd..00000000 --- a/vendor/go.opentelemetry.io/otel/attribute/set.go +++ /dev/null @@ -1,431 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package attribute // import "go.opentelemetry.io/otel/attribute" - -import ( - "cmp" - "encoding/json" - "reflect" - "slices" - "sort" -) - -type ( - // Set is the representation for a distinct attribute set. It manages an - // immutable set of attributes, with an internal cache for storing - // attribute encodings. - // - // This type will remain comparable for backwards compatibility. The - // equivalence of Sets across versions is not guaranteed to be stable. - // Prior versions may find two Sets to be equal or not when compared - // directly (i.e. ==), but subsequent versions may not. Users should use - // the Equals method to ensure stable equivalence checking. - // - // Users should also use the Distinct returned from Equivalent as a map key - // instead of a Set directly. In addition to that type providing guarantees - // on stable equivalence, it may also provide performance improvements. - Set struct { - equivalent Distinct - } - - // Distinct is a unique identifier of a Set. - // - // Distinct is designed to be ensures equivalence stability: comparisons - // will return the save value across versions. For this reason, Distinct - // should always be used as a map key instead of a Set. - Distinct struct { - iface interface{} - } - - // Sortable implements sort.Interface, used for sorting KeyValue. - // - // Deprecated: This type is no longer used. It was added as a performance - // optimization for Go < 1.21 that is no longer needed (Go < 1.21 is no - // longer supported by the module). - Sortable []KeyValue -) - -var ( - // keyValueType is used in computeDistinctReflect. - keyValueType = reflect.TypeOf(KeyValue{}) - - // emptySet is returned for empty attribute sets. - emptySet = &Set{ - equivalent: Distinct{ - iface: [0]KeyValue{}, - }, - } -) - -// EmptySet returns a reference to a Set with no elements. -// -// This is a convenience provided for optimized calling utility. -func EmptySet() *Set { - return emptySet -} - -// reflectValue abbreviates reflect.ValueOf(d). -func (d Distinct) reflectValue() reflect.Value { - return reflect.ValueOf(d.iface) -} - -// Valid returns true if this value refers to a valid Set. -func (d Distinct) Valid() bool { - return d.iface != nil -} - -// Len returns the number of attributes in this set. -func (l *Set) Len() int { - if l == nil || !l.equivalent.Valid() { - return 0 - } - return l.equivalent.reflectValue().Len() -} - -// Get returns the KeyValue at ordered position idx in this set. -func (l *Set) Get(idx int) (KeyValue, bool) { - if l == nil || !l.equivalent.Valid() { - return KeyValue{}, false - } - value := l.equivalent.reflectValue() - - if idx >= 0 && idx < value.Len() { - // Note: The Go compiler successfully avoids an allocation for - // the interface{} conversion here: - return value.Index(idx).Interface().(KeyValue), true - } - - return KeyValue{}, false -} - -// Value returns the value of a specified key in this set. -func (l *Set) Value(k Key) (Value, bool) { - if l == nil || !l.equivalent.Valid() { - return Value{}, false - } - rValue := l.equivalent.reflectValue() - vlen := rValue.Len() - - idx := sort.Search(vlen, func(idx int) bool { - return rValue.Index(idx).Interface().(KeyValue).Key >= k - }) - if idx >= vlen { - return Value{}, false - } - keyValue := rValue.Index(idx).Interface().(KeyValue) - if k == keyValue.Key { - return keyValue.Value, true - } - return Value{}, false -} - -// HasValue tests whether a key is defined in this set. -func (l *Set) HasValue(k Key) bool { - if l == nil { - return false - } - _, ok := l.Value(k) - return ok -} - -// Iter returns an iterator for visiting the attributes in this set. -func (l *Set) Iter() Iterator { - return Iterator{ - storage: l, - idx: -1, - } -} - -// ToSlice returns the set of attributes belonging to this set, sorted, where -// keys appear no more than once. -func (l *Set) ToSlice() []KeyValue { - iter := l.Iter() - return iter.ToSlice() -} - -// Equivalent returns a value that may be used as a map key. The Distinct type -// guarantees that the result will equal the equivalent. Distinct value of any -// attribute set with the same elements as this, where sets are made unique by -// choosing the last value in the input for any given key. -func (l *Set) Equivalent() Distinct { - if l == nil || !l.equivalent.Valid() { - return emptySet.equivalent - } - return l.equivalent -} - -// Equals returns true if the argument set is equivalent to this set. -func (l *Set) Equals(o *Set) bool { - return l.Equivalent() == o.Equivalent() -} - -// Encoded returns the encoded form of this set, according to encoder. -func (l *Set) Encoded(encoder Encoder) string { - if l == nil || encoder == nil { - return "" - } - - return encoder.Encode(l.Iter()) -} - -func empty() Set { - return Set{ - equivalent: emptySet.equivalent, - } -} - -// NewSet returns a new Set. See the documentation for -// NewSetWithSortableFiltered for more details. -// -// Except for empty sets, this method adds an additional allocation compared -// with calls that include a Sortable. -func NewSet(kvs ...KeyValue) Set { - s, _ := NewSetWithFiltered(kvs, nil) - return s -} - -// NewSetWithSortable returns a new Set. See the documentation for -// NewSetWithSortableFiltered for more details. -// -// This call includes a Sortable option as a memory optimization. -// -// Deprecated: Use [NewSet] instead. -func NewSetWithSortable(kvs []KeyValue, _ *Sortable) Set { - s, _ := NewSetWithFiltered(kvs, nil) - return s -} - -// NewSetWithFiltered returns a new Set. See the documentation for -// NewSetWithSortableFiltered for more details. -// -// This call includes a Filter to include/exclude attribute keys from the -// return value. Excluded keys are returned as a slice of attribute values. -func NewSetWithFiltered(kvs []KeyValue, filter Filter) (Set, []KeyValue) { - // Check for empty set. - if len(kvs) == 0 { - return empty(), nil - } - - // Stable sort so the following de-duplication can implement - // last-value-wins semantics. - slices.SortStableFunc(kvs, func(a, b KeyValue) int { - return cmp.Compare(a.Key, b.Key) - }) - - position := len(kvs) - 1 - offset := position - 1 - - // The requirements stated above require that the stable - // result be placed in the end of the input slice, while - // overwritten values are swapped to the beginning. - // - // De-duplicate with last-value-wins semantics. Preserve - // duplicate values at the beginning of the input slice. - for ; offset >= 0; offset-- { - if kvs[offset].Key == kvs[position].Key { - continue - } - position-- - kvs[offset], kvs[position] = kvs[position], kvs[offset] - } - kvs = kvs[position:] - - if filter != nil { - if div := filteredToFront(kvs, filter); div != 0 { - return Set{equivalent: computeDistinct(kvs[div:])}, kvs[:div] - } - } - return Set{equivalent: computeDistinct(kvs)}, nil -} - -// NewSetWithSortableFiltered returns a new Set. -// -// Duplicate keys are eliminated by taking the last value. This -// re-orders the input slice so that unique last-values are contiguous -// at the end of the slice. -// -// This ensures the following: -// -// - Last-value-wins semantics -// - Caller sees the reordering, but doesn't lose values -// - Repeated call preserve last-value wins. -// -// Note that methods are defined on Set, although this returns Set. Callers -// can avoid memory allocations by: -// -// - allocating a Sortable for use as a temporary in this method -// - allocating a Set for storing the return value of this constructor. -// -// The result maintains a cache of encoded attributes, by attribute.EncoderID. -// This value should not be copied after its first use. -// -// The second []KeyValue return value is a list of attributes that were -// excluded by the Filter (if non-nil). -// -// Deprecated: Use [NewSetWithFiltered] instead. -func NewSetWithSortableFiltered(kvs []KeyValue, _ *Sortable, filter Filter) (Set, []KeyValue) { - return NewSetWithFiltered(kvs, filter) -} - -// filteredToFront filters slice in-place using keep function. All KeyValues that need to -// be removed are moved to the front. All KeyValues that need to be kept are -// moved (in-order) to the back. The index for the first KeyValue to be kept is -// returned. -func filteredToFront(slice []KeyValue, keep Filter) int { - n := len(slice) - j := n - for i := n - 1; i >= 0; i-- { - if keep(slice[i]) { - j-- - slice[i], slice[j] = slice[j], slice[i] - } - } - return j -} - -// Filter returns a filtered copy of this Set. See the documentation for -// NewSetWithSortableFiltered for more details. -func (l *Set) Filter(re Filter) (Set, []KeyValue) { - if re == nil { - return *l, nil - } - - // Iterate in reverse to the first attribute that will be filtered out. - n := l.Len() - first := n - 1 - for ; first >= 0; first-- { - kv, _ := l.Get(first) - if !re(kv) { - break - } - } - - // No attributes will be dropped, return the immutable Set l and nil. - if first < 0 { - return *l, nil - } - - // Copy now that we know we need to return a modified set. - // - // Do not do this in-place on the underlying storage of *Set l. Sets are - // immutable and filtering should not change this. - slice := l.ToSlice() - - // Don't re-iterate the slice if only slice[0] is filtered. - if first == 0 { - // It is safe to assume len(slice) >= 1 given we found at least one - // attribute above that needs to be filtered out. - return Set{equivalent: computeDistinct(slice[1:])}, slice[:1] - } - - // Move the filtered slice[first] to the front (preserving order). - kv := slice[first] - copy(slice[1:first+1], slice[:first]) - slice[0] = kv - - // Do not re-evaluate re(slice[first+1:]). - div := filteredToFront(slice[1:first+1], re) + 1 - return Set{equivalent: computeDistinct(slice[div:])}, slice[:div] -} - -// computeDistinct returns a Distinct using either the fixed- or -// reflect-oriented code path, depending on the size of the input. The input -// slice is assumed to already be sorted and de-duplicated. -func computeDistinct(kvs []KeyValue) Distinct { - iface := computeDistinctFixed(kvs) - if iface == nil { - iface = computeDistinctReflect(kvs) - } - return Distinct{ - iface: iface, - } -} - -// computeDistinctFixed computes a Distinct for small slices. It returns nil -// if the input is too large for this code path. -func computeDistinctFixed(kvs []KeyValue) interface{} { - switch len(kvs) { - case 1: - ptr := new([1]KeyValue) - copy((*ptr)[:], kvs) - return *ptr - case 2: - ptr := new([2]KeyValue) - copy((*ptr)[:], kvs) - return *ptr - case 3: - ptr := new([3]KeyValue) - copy((*ptr)[:], kvs) - return *ptr - case 4: - ptr := new([4]KeyValue) - copy((*ptr)[:], kvs) - return *ptr - case 5: - ptr := new([5]KeyValue) - copy((*ptr)[:], kvs) - return *ptr - case 6: - ptr := new([6]KeyValue) - copy((*ptr)[:], kvs) - return *ptr - case 7: - ptr := new([7]KeyValue) - copy((*ptr)[:], kvs) - return *ptr - case 8: - ptr := new([8]KeyValue) - copy((*ptr)[:], kvs) - return *ptr - case 9: - ptr := new([9]KeyValue) - copy((*ptr)[:], kvs) - return *ptr - case 10: - ptr := new([10]KeyValue) - copy((*ptr)[:], kvs) - return *ptr - default: - return nil - } -} - -// computeDistinctReflect computes a Distinct using reflection, works for any -// size input. -func computeDistinctReflect(kvs []KeyValue) interface{} { - at := reflect.New(reflect.ArrayOf(len(kvs), keyValueType)).Elem() - for i, keyValue := range kvs { - *(at.Index(i).Addr().Interface().(*KeyValue)) = keyValue - } - return at.Interface() -} - -// MarshalJSON returns the JSON encoding of the Set. -func (l *Set) MarshalJSON() ([]byte, error) { - return json.Marshal(l.equivalent.iface) -} - -// MarshalLog is the marshaling function used by the logging system to represent this Set. -func (l Set) MarshalLog() interface{} { - kvs := make(map[string]string) - for _, kv := range l.ToSlice() { - kvs[string(kv.Key)] = kv.Value.Emit() - } - return kvs -} - -// Len implements sort.Interface. -func (l *Sortable) Len() int { - return len(*l) -} - -// Swap implements sort.Interface. -func (l *Sortable) Swap(i, j int) { - (*l)[i], (*l)[j] = (*l)[j], (*l)[i] -} - -// Less implements sort.Interface. -func (l *Sortable) Less(i, j int) bool { - return (*l)[i].Key < (*l)[j].Key -} diff --git a/vendor/go.opentelemetry.io/otel/attribute/type_string.go b/vendor/go.opentelemetry.io/otel/attribute/type_string.go deleted file mode 100644 index e584b247..00000000 --- a/vendor/go.opentelemetry.io/otel/attribute/type_string.go +++ /dev/null @@ -1,31 +0,0 @@ -// Code generated by "stringer -type=Type"; DO NOT EDIT. - -package attribute - -import "strconv" - -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[INVALID-0] - _ = x[BOOL-1] - _ = x[INT64-2] - _ = x[FLOAT64-3] - _ = x[STRING-4] - _ = x[BOOLSLICE-5] - _ = x[INT64SLICE-6] - _ = x[FLOAT64SLICE-7] - _ = x[STRINGSLICE-8] -} - -const _Type_name = "INVALIDBOOLINT64FLOAT64STRINGBOOLSLICEINT64SLICEFLOAT64SLICESTRINGSLICE" - -var _Type_index = [...]uint8{0, 7, 11, 16, 23, 29, 38, 48, 60, 71} - -func (i Type) String() string { - if i < 0 || i >= Type(len(_Type_index)-1) { - return "Type(" + strconv.FormatInt(int64(i), 10) + ")" - } - return _Type_name[_Type_index[i]:_Type_index[i+1]] -} diff --git a/vendor/go.opentelemetry.io/otel/attribute/value.go b/vendor/go.opentelemetry.io/otel/attribute/value.go deleted file mode 100644 index 9ea0ecbb..00000000 --- a/vendor/go.opentelemetry.io/otel/attribute/value.go +++ /dev/null @@ -1,271 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package attribute // import "go.opentelemetry.io/otel/attribute" - -import ( - "encoding/json" - "fmt" - "reflect" - "strconv" - - "go.opentelemetry.io/otel/internal" - "go.opentelemetry.io/otel/internal/attribute" -) - -//go:generate stringer -type=Type - -// Type describes the type of the data Value holds. -type Type int // nolint: revive // redefines builtin Type. - -// Value represents the value part in key-value pairs. -type Value struct { - vtype Type - numeric uint64 - stringly string - slice interface{} -} - -const ( - // INVALID is used for a Value with no value set. - INVALID Type = iota - // BOOL is a boolean Type Value. - BOOL - // INT64 is a 64-bit signed integral Type Value. - INT64 - // FLOAT64 is a 64-bit floating point Type Value. - FLOAT64 - // STRING is a string Type Value. - STRING - // BOOLSLICE is a slice of booleans Type Value. - BOOLSLICE - // INT64SLICE is a slice of 64-bit signed integral numbers Type Value. - INT64SLICE - // FLOAT64SLICE is a slice of 64-bit floating point numbers Type Value. - FLOAT64SLICE - // STRINGSLICE is a slice of strings Type Value. - STRINGSLICE -) - -// BoolValue creates a BOOL Value. -func BoolValue(v bool) Value { - return Value{ - vtype: BOOL, - numeric: internal.BoolToRaw(v), - } -} - -// BoolSliceValue creates a BOOLSLICE Value. -func BoolSliceValue(v []bool) Value { - return Value{vtype: BOOLSLICE, slice: attribute.BoolSliceValue(v)} -} - -// IntValue creates an INT64 Value. -func IntValue(v int) Value { - return Int64Value(int64(v)) -} - -// IntSliceValue creates an INTSLICE Value. -func IntSliceValue(v []int) Value { - var int64Val int64 - cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(int64Val))) - for i, val := range v { - cp.Elem().Index(i).SetInt(int64(val)) - } - return Value{ - vtype: INT64SLICE, - slice: cp.Elem().Interface(), - } -} - -// Int64Value creates an INT64 Value. -func Int64Value(v int64) Value { - return Value{ - vtype: INT64, - numeric: internal.Int64ToRaw(v), - } -} - -// Int64SliceValue creates an INT64SLICE Value. -func Int64SliceValue(v []int64) Value { - return Value{vtype: INT64SLICE, slice: attribute.Int64SliceValue(v)} -} - -// Float64Value creates a FLOAT64 Value. -func Float64Value(v float64) Value { - return Value{ - vtype: FLOAT64, - numeric: internal.Float64ToRaw(v), - } -} - -// Float64SliceValue creates a FLOAT64SLICE Value. -func Float64SliceValue(v []float64) Value { - return Value{vtype: FLOAT64SLICE, slice: attribute.Float64SliceValue(v)} -} - -// StringValue creates a STRING Value. -func StringValue(v string) Value { - return Value{ - vtype: STRING, - stringly: v, - } -} - -// StringSliceValue creates a STRINGSLICE Value. -func StringSliceValue(v []string) Value { - return Value{vtype: STRINGSLICE, slice: attribute.StringSliceValue(v)} -} - -// Type returns a type of the Value. -func (v Value) Type() Type { - return v.vtype -} - -// AsBool returns the bool value. Make sure that the Value's type is -// BOOL. -func (v Value) AsBool() bool { - return internal.RawToBool(v.numeric) -} - -// AsBoolSlice returns the []bool value. Make sure that the Value's type is -// BOOLSLICE. -func (v Value) AsBoolSlice() []bool { - if v.vtype != BOOLSLICE { - return nil - } - return v.asBoolSlice() -} - -func (v Value) asBoolSlice() []bool { - return attribute.AsBoolSlice(v.slice) -} - -// AsInt64 returns the int64 value. Make sure that the Value's type is -// INT64. -func (v Value) AsInt64() int64 { - return internal.RawToInt64(v.numeric) -} - -// AsInt64Slice returns the []int64 value. Make sure that the Value's type is -// INT64SLICE. -func (v Value) AsInt64Slice() []int64 { - if v.vtype != INT64SLICE { - return nil - } - return v.asInt64Slice() -} - -func (v Value) asInt64Slice() []int64 { - return attribute.AsInt64Slice(v.slice) -} - -// AsFloat64 returns the float64 value. Make sure that the Value's -// type is FLOAT64. -func (v Value) AsFloat64() float64 { - return internal.RawToFloat64(v.numeric) -} - -// AsFloat64Slice returns the []float64 value. Make sure that the Value's type is -// FLOAT64SLICE. -func (v Value) AsFloat64Slice() []float64 { - if v.vtype != FLOAT64SLICE { - return nil - } - return v.asFloat64Slice() -} - -func (v Value) asFloat64Slice() []float64 { - return attribute.AsFloat64Slice(v.slice) -} - -// AsString returns the string value. Make sure that the Value's type -// is STRING. -func (v Value) AsString() string { - return v.stringly -} - -// AsStringSlice returns the []string value. Make sure that the Value's type is -// STRINGSLICE. -func (v Value) AsStringSlice() []string { - if v.vtype != STRINGSLICE { - return nil - } - return v.asStringSlice() -} - -func (v Value) asStringSlice() []string { - return attribute.AsStringSlice(v.slice) -} - -type unknownValueType struct{} - -// AsInterface returns Value's data as interface{}. -func (v Value) AsInterface() interface{} { - switch v.Type() { - case BOOL: - return v.AsBool() - case BOOLSLICE: - return v.asBoolSlice() - case INT64: - return v.AsInt64() - case INT64SLICE: - return v.asInt64Slice() - case FLOAT64: - return v.AsFloat64() - case FLOAT64SLICE: - return v.asFloat64Slice() - case STRING: - return v.stringly - case STRINGSLICE: - return v.asStringSlice() - } - return unknownValueType{} -} - -// Emit returns a string representation of Value's data. -func (v Value) Emit() string { - switch v.Type() { - case BOOLSLICE: - return fmt.Sprint(v.asBoolSlice()) - case BOOL: - return strconv.FormatBool(v.AsBool()) - case INT64SLICE: - j, err := json.Marshal(v.asInt64Slice()) - if err != nil { - return fmt.Sprintf("invalid: %v", v.asInt64Slice()) - } - return string(j) - case INT64: - return strconv.FormatInt(v.AsInt64(), 10) - case FLOAT64SLICE: - j, err := json.Marshal(v.asFloat64Slice()) - if err != nil { - return fmt.Sprintf("invalid: %v", v.asFloat64Slice()) - } - return string(j) - case FLOAT64: - return fmt.Sprint(v.AsFloat64()) - case STRINGSLICE: - j, err := json.Marshal(v.asStringSlice()) - if err != nil { - return fmt.Sprintf("invalid: %v", v.asStringSlice()) - } - return string(j) - case STRING: - return v.stringly - default: - return "unknown" - } -} - -// MarshalJSON returns the JSON encoding of the Value. -func (v Value) MarshalJSON() ([]byte, error) { - var jsonVal struct { - Type string - Value interface{} - } - jsonVal.Type = v.Type().String() - jsonVal.Value = v.AsInterface() - return json.Marshal(jsonVal) -} diff --git a/vendor/go.opentelemetry.io/otel/baggage/README.md b/vendor/go.opentelemetry.io/otel/baggage/README.md deleted file mode 100644 index 7d798435..00000000 --- a/vendor/go.opentelemetry.io/otel/baggage/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Baggage - -[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/baggage)](https://pkg.go.dev/go.opentelemetry.io/otel/baggage) diff --git a/vendor/go.opentelemetry.io/otel/baggage/baggage.go b/vendor/go.opentelemetry.io/otel/baggage/baggage.go deleted file mode 100644 index c40c896c..00000000 --- a/vendor/go.opentelemetry.io/otel/baggage/baggage.go +++ /dev/null @@ -1,910 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package baggage // import "go.opentelemetry.io/otel/baggage" - -import ( - "errors" - "fmt" - "net/url" - "strings" - "unicode/utf8" - - "go.opentelemetry.io/otel/internal/baggage" -) - -const ( - maxMembers = 180 - maxBytesPerMembers = 4096 - maxBytesPerBaggageString = 8192 - - listDelimiter = "," - keyValueDelimiter = "=" - propertyDelimiter = ";" -) - -var ( - errInvalidKey = errors.New("invalid key") - errInvalidValue = errors.New("invalid value") - errInvalidProperty = errors.New("invalid baggage list-member property") - errInvalidMember = errors.New("invalid baggage list-member") - errMemberNumber = errors.New("too many list-members in baggage-string") - errMemberBytes = errors.New("list-member too large") - errBaggageBytes = errors.New("baggage-string too large") -) - -// Property is an additional metadata entry for a baggage list-member. -type Property struct { - key, value string - - // hasValue indicates if a zero-value value means the property does not - // have a value or if it was the zero-value. - hasValue bool -} - -// NewKeyProperty returns a new Property for key. -// -// If key is invalid, an error will be returned. -func NewKeyProperty(key string) (Property, error) { - if !validateKey(key) { - return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidKey, key) - } - - p := Property{key: key} - return p, nil -} - -// NewKeyValueProperty returns a new Property for key with value. -// -// The passed key must be compliant with W3C Baggage specification. -// The passed value must be percent-encoded as defined in W3C Baggage specification. -// -// Notice: Consider using [NewKeyValuePropertyRaw] instead -// that does not require percent-encoding of the value. -func NewKeyValueProperty(key, value string) (Property, error) { - if !validateValue(value) { - return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidValue, value) - } - decodedValue, err := url.PathUnescape(value) - if err != nil { - return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidValue, value) - } - return NewKeyValuePropertyRaw(key, decodedValue) -} - -// NewKeyValuePropertyRaw returns a new Property for key with value. -// -// The passed key must be compliant with W3C Baggage specification. -func NewKeyValuePropertyRaw(key, value string) (Property, error) { - if !validateKey(key) { - return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidKey, key) - } - - p := Property{ - key: key, - value: value, - hasValue: true, - } - return p, nil -} - -func newInvalidProperty() Property { - return Property{} -} - -// parseProperty attempts to decode a Property from the passed string. It -// returns an error if the input is invalid according to the W3C Baggage -// specification. -func parseProperty(property string) (Property, error) { - if property == "" { - return newInvalidProperty(), nil - } - - p, ok := parsePropertyInternal(property) - if !ok { - return newInvalidProperty(), fmt.Errorf("%w: %q", errInvalidProperty, property) - } - - return p, nil -} - -// validate ensures p conforms to the W3C Baggage specification, returning an -// error otherwise. -func (p Property) validate() error { - errFunc := func(err error) error { - return fmt.Errorf("invalid property: %w", err) - } - - if !validateKey(p.key) { - return errFunc(fmt.Errorf("%w: %q", errInvalidKey, p.key)) - } - if !p.hasValue && p.value != "" { - return errFunc(errors.New("inconsistent value")) - } - return nil -} - -// Key returns the Property key. -func (p Property) Key() string { - return p.key -} - -// Value returns the Property value. Additionally, a boolean value is returned -// indicating if the returned value is the empty if the Property has a value -// that is empty or if the value is not set. -func (p Property) Value() (string, bool) { - return p.value, p.hasValue -} - -// String encodes Property into a header string compliant with the W3C Baggage -// specification. -func (p Property) String() string { - if p.hasValue { - return fmt.Sprintf("%s%s%v", p.key, keyValueDelimiter, valueEscape(p.value)) - } - return p.key -} - -type properties []Property - -func fromInternalProperties(iProps []baggage.Property) properties { - if len(iProps) == 0 { - return nil - } - - props := make(properties, len(iProps)) - for i, p := range iProps { - props[i] = Property{ - key: p.Key, - value: p.Value, - hasValue: p.HasValue, - } - } - return props -} - -func (p properties) asInternal() []baggage.Property { - if len(p) == 0 { - return nil - } - - iProps := make([]baggage.Property, len(p)) - for i, prop := range p { - iProps[i] = baggage.Property{ - Key: prop.key, - Value: prop.value, - HasValue: prop.hasValue, - } - } - return iProps -} - -func (p properties) Copy() properties { - if len(p) == 0 { - return nil - } - - props := make(properties, len(p)) - copy(props, p) - return props -} - -// validate ensures each Property in p conforms to the W3C Baggage -// specification, returning an error otherwise. -func (p properties) validate() error { - for _, prop := range p { - if err := prop.validate(); err != nil { - return err - } - } - return nil -} - -// String encodes properties into a header string compliant with the W3C Baggage -// specification. -func (p properties) String() string { - props := make([]string, len(p)) - for i, prop := range p { - props[i] = prop.String() - } - return strings.Join(props, propertyDelimiter) -} - -// Member is a list-member of a baggage-string as defined by the W3C Baggage -// specification. -type Member struct { - key, value string - properties properties - - // hasData indicates whether the created property contains data or not. - // Properties that do not contain data are invalid with no other check - // required. - hasData bool -} - -// NewMember returns a new Member from the passed arguments. -// -// The passed key must be compliant with W3C Baggage specification. -// The passed value must be percent-encoded as defined in W3C Baggage specification. -// -// Notice: Consider using [NewMemberRaw] instead -// that does not require percent-encoding of the value. -func NewMember(key, value string, props ...Property) (Member, error) { - if !validateValue(value) { - return newInvalidMember(), fmt.Errorf("%w: %q", errInvalidValue, value) - } - decodedValue, err := url.PathUnescape(value) - if err != nil { - return newInvalidMember(), fmt.Errorf("%w: %q", errInvalidValue, value) - } - return NewMemberRaw(key, decodedValue, props...) -} - -// NewMemberRaw returns a new Member from the passed arguments. -// -// The passed key must be compliant with W3C Baggage specification. -func NewMemberRaw(key, value string, props ...Property) (Member, error) { - m := Member{ - key: key, - value: value, - properties: properties(props).Copy(), - hasData: true, - } - if err := m.validate(); err != nil { - return newInvalidMember(), err - } - return m, nil -} - -func newInvalidMember() Member { - return Member{} -} - -// parseMember attempts to decode a Member from the passed string. It returns -// an error if the input is invalid according to the W3C Baggage -// specification. -func parseMember(member string) (Member, error) { - if n := len(member); n > maxBytesPerMembers { - return newInvalidMember(), fmt.Errorf("%w: %d", errMemberBytes, n) - } - - var props properties - keyValue, properties, found := strings.Cut(member, propertyDelimiter) - if found { - // Parse the member properties. - for _, pStr := range strings.Split(properties, propertyDelimiter) { - p, err := parseProperty(pStr) - if err != nil { - return newInvalidMember(), err - } - props = append(props, p) - } - } - // Parse the member key/value pair. - - // Take into account a value can contain equal signs (=). - k, v, found := strings.Cut(keyValue, keyValueDelimiter) - if !found { - return newInvalidMember(), fmt.Errorf("%w: %q", errInvalidMember, member) - } - // "Leading and trailing whitespaces are allowed but MUST be trimmed - // when converting the header into a data structure." - key := strings.TrimSpace(k) - if !validateKey(key) { - return newInvalidMember(), fmt.Errorf("%w: %q", errInvalidKey, key) - } - - val := strings.TrimSpace(v) - if !validateValue(val) { - return newInvalidMember(), fmt.Errorf("%w: %q", errInvalidValue, v) - } - - // Decode a percent-encoded value. - value, err := url.PathUnescape(val) - if err != nil { - return newInvalidMember(), fmt.Errorf("%w: %w", errInvalidValue, err) - } - return Member{key: key, value: value, properties: props, hasData: true}, nil -} - -// validate ensures m conforms to the W3C Baggage specification. -// A key must be an ASCII string, returning an error otherwise. -func (m Member) validate() error { - if !m.hasData { - return fmt.Errorf("%w: %q", errInvalidMember, m) - } - - if !validateKey(m.key) { - return fmt.Errorf("%w: %q", errInvalidKey, m.key) - } - return m.properties.validate() -} - -// Key returns the Member key. -func (m Member) Key() string { return m.key } - -// Value returns the Member value. -func (m Member) Value() string { return m.value } - -// Properties returns a copy of the Member properties. -func (m Member) Properties() []Property { return m.properties.Copy() } - -// String encodes Member into a header string compliant with the W3C Baggage -// specification. -func (m Member) String() string { - // A key is just an ASCII string. A value is restricted to be - // US-ASCII characters excluding CTLs, whitespace, - // DQUOTE, comma, semicolon, and backslash. - s := m.key + keyValueDelimiter + valueEscape(m.value) - if len(m.properties) > 0 { - s += propertyDelimiter + m.properties.String() - } - return s -} - -// Baggage is a list of baggage members representing the baggage-string as -// defined by the W3C Baggage specification. -type Baggage struct { //nolint:golint - list baggage.List -} - -// New returns a new valid Baggage. It returns an error if it results in a -// Baggage exceeding limits set in that specification. -// -// It expects all the provided members to have already been validated. -func New(members ...Member) (Baggage, error) { - if len(members) == 0 { - return Baggage{}, nil - } - - b := make(baggage.List) - for _, m := range members { - if !m.hasData { - return Baggage{}, errInvalidMember - } - - // OpenTelemetry resolves duplicates by last-one-wins. - b[m.key] = baggage.Item{ - Value: m.value, - Properties: m.properties.asInternal(), - } - } - - // Check member numbers after deduplication. - if len(b) > maxMembers { - return Baggage{}, errMemberNumber - } - - bag := Baggage{b} - if n := len(bag.String()); n > maxBytesPerBaggageString { - return Baggage{}, fmt.Errorf("%w: %d", errBaggageBytes, n) - } - - return bag, nil -} - -// Parse attempts to decode a baggage-string from the passed string. It -// returns an error if the input is invalid according to the W3C Baggage -// specification. -// -// If there are duplicate list-members contained in baggage, the last one -// defined (reading left-to-right) will be the only one kept. This diverges -// from the W3C Baggage specification which allows duplicate list-members, but -// conforms to the OpenTelemetry Baggage specification. -func Parse(bStr string) (Baggage, error) { - if bStr == "" { - return Baggage{}, nil - } - - if n := len(bStr); n > maxBytesPerBaggageString { - return Baggage{}, fmt.Errorf("%w: %d", errBaggageBytes, n) - } - - b := make(baggage.List) - for _, memberStr := range strings.Split(bStr, listDelimiter) { - m, err := parseMember(memberStr) - if err != nil { - return Baggage{}, err - } - // OpenTelemetry resolves duplicates by last-one-wins. - b[m.key] = baggage.Item{ - Value: m.value, - Properties: m.properties.asInternal(), - } - } - - // OpenTelemetry does not allow for duplicate list-members, but the W3C - // specification does. Now that we have deduplicated, ensure the baggage - // does not exceed list-member limits. - if len(b) > maxMembers { - return Baggage{}, errMemberNumber - } - - return Baggage{b}, nil -} - -// Member returns the baggage list-member identified by key. -// -// If there is no list-member matching the passed key the returned Member will -// be a zero-value Member. -// The returned member is not validated, as we assume the validation happened -// when it was added to the Baggage. -func (b Baggage) Member(key string) Member { - v, ok := b.list[key] - if !ok { - // We do not need to worry about distinguishing between the situation - // where a zero-valued Member is included in the Baggage because a - // zero-valued Member is invalid according to the W3C Baggage - // specification (it has an empty key). - return newInvalidMember() - } - - return Member{ - key: key, - value: v.Value, - properties: fromInternalProperties(v.Properties), - hasData: true, - } -} - -// Members returns all the baggage list-members. -// The order of the returned list-members does not have significance. -// -// The returned members are not validated, as we assume the validation happened -// when they were added to the Baggage. -func (b Baggage) Members() []Member { - if len(b.list) == 0 { - return nil - } - - members := make([]Member, 0, len(b.list)) - for k, v := range b.list { - members = append(members, Member{ - key: k, - value: v.Value, - properties: fromInternalProperties(v.Properties), - hasData: true, - }) - } - return members -} - -// SetMember returns a copy the Baggage with the member included. If the -// baggage contains a Member with the same key the existing Member is -// replaced. -// -// If member is invalid according to the W3C Baggage specification, an error -// is returned with the original Baggage. -func (b Baggage) SetMember(member Member) (Baggage, error) { - if !member.hasData { - return b, errInvalidMember - } - - n := len(b.list) - if _, ok := b.list[member.key]; !ok { - n++ - } - list := make(baggage.List, n) - - for k, v := range b.list { - // Do not copy if we are just going to overwrite. - if k == member.key { - continue - } - list[k] = v - } - - list[member.key] = baggage.Item{ - Value: member.value, - Properties: member.properties.asInternal(), - } - - return Baggage{list: list}, nil -} - -// DeleteMember returns a copy of the Baggage with the list-member identified -// by key removed. -func (b Baggage) DeleteMember(key string) Baggage { - n := len(b.list) - if _, ok := b.list[key]; ok { - n-- - } - list := make(baggage.List, n) - - for k, v := range b.list { - if k == key { - continue - } - list[k] = v - } - - return Baggage{list: list} -} - -// Len returns the number of list-members in the Baggage. -func (b Baggage) Len() int { - return len(b.list) -} - -// String encodes Baggage into a header string compliant with the W3C Baggage -// specification. -func (b Baggage) String() string { - members := make([]string, 0, len(b.list)) - for k, v := range b.list { - members = append(members, Member{ - key: k, - value: v.Value, - properties: fromInternalProperties(v.Properties), - }.String()) - } - return strings.Join(members, listDelimiter) -} - -// parsePropertyInternal attempts to decode a Property from the passed string. -// It follows the spec at https://www.w3.org/TR/baggage/#definition. -func parsePropertyInternal(s string) (p Property, ok bool) { - // For the entire function we will use " key = value " as an example. - // Attempting to parse the key. - // First skip spaces at the beginning "< >key = value " (they could be empty). - index := skipSpace(s, 0) - - // Parse the key: " = value ". - keyStart := index - keyEnd := index - for _, c := range s[keyStart:] { - if !validateKeyChar(c) { - break - } - keyEnd++ - } - - // If we couldn't find any valid key character, - // it means the key is either empty or invalid. - if keyStart == keyEnd { - return - } - - // Skip spaces after the key: " key< >= value ". - index = skipSpace(s, keyEnd) - - if index == len(s) { - // A key can have no value, like: " key ". - ok = true - p.key = s[keyStart:keyEnd] - return - } - - // If we have not reached the end and we can't find the '=' delimiter, - // it means the property is invalid. - if s[index] != keyValueDelimiter[0] { - return - } - - // Attempting to parse the value. - // Match: " key =< >value ". - index = skipSpace(s, index+1) - - // Match the value string: " key = ". - // A valid property can be: " key =". - // Therefore, we don't have to check if the value is empty. - valueStart := index - valueEnd := index - for _, c := range s[valueStart:] { - if !validateValueChar(c) { - break - } - valueEnd++ - } - - // Skip all trailing whitespaces: " key = value< >". - index = skipSpace(s, valueEnd) - - // If after looking for the value and skipping whitespaces - // we have not reached the end, it means the property is - // invalid, something like: " key = value value1". - if index != len(s) { - return - } - - // Decode a percent-encoded value. - value, err := url.PathUnescape(s[valueStart:valueEnd]) - if err != nil { - return - } - - ok = true - p.key = s[keyStart:keyEnd] - p.hasValue = true - - p.value = value - return -} - -func skipSpace(s string, offset int) int { - i := offset - for ; i < len(s); i++ { - c := s[i] - if c != ' ' && c != '\t' { - break - } - } - return i -} - -var safeKeyCharset = [utf8.RuneSelf]bool{ - // 0x23 to 0x27 - '#': true, - '$': true, - '%': true, - '&': true, - '\'': true, - - // 0x30 to 0x39 - '0': true, - '1': true, - '2': true, - '3': true, - '4': true, - '5': true, - '6': true, - '7': true, - '8': true, - '9': true, - - // 0x41 to 0x5a - '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, - - // 0x5e to 0x7a - '^': 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, - - // remainder - '!': true, - '*': true, - '+': true, - '-': true, - '.': true, - '|': true, - '~': true, -} - -func validateKey(s string) bool { - if len(s) == 0 { - return false - } - - for _, c := range s { - if !validateKeyChar(c) { - return false - } - } - - return true -} - -func validateKeyChar(c int32) bool { - return c >= 0 && c < int32(utf8.RuneSelf) && safeKeyCharset[c] -} - -func validateValue(s string) bool { - for _, c := range s { - if !validateValueChar(c) { - return false - } - } - - return true -} - -var safeValueCharset = [utf8.RuneSelf]bool{ - '!': true, // 0x21 - - // 0x23 to 0x2b - '#': true, - '$': true, - '%': true, - '&': true, - '\'': true, - '(': true, - ')': true, - '*': true, - '+': true, - - // 0x2d to 0x3a - '-': true, - '.': true, - '/': true, - '0': true, - '1': true, - '2': true, - '3': true, - '4': true, - '5': true, - '6': true, - '7': true, - '8': true, - '9': true, - ':': true, - - // 0x3c to 0x5b - '<': true, // 0x3C - '=': true, // 0x3D - '>': true, // 0x3E - '?': true, // 0x3F - '@': true, // 0x40 - 'A': true, // 0x41 - 'B': true, // 0x42 - 'C': true, // 0x43 - 'D': true, // 0x44 - 'E': true, // 0x45 - 'F': true, // 0x46 - 'G': true, // 0x47 - 'H': true, // 0x48 - 'I': true, // 0x49 - 'J': true, // 0x4A - 'K': true, // 0x4B - 'L': true, // 0x4C - 'M': true, // 0x4D - 'N': true, // 0x4E - 'O': true, // 0x4F - 'P': true, // 0x50 - 'Q': true, // 0x51 - 'R': true, // 0x52 - 'S': true, // 0x53 - 'T': true, // 0x54 - 'U': true, // 0x55 - 'V': true, // 0x56 - 'W': true, // 0x57 - 'X': true, // 0x58 - 'Y': true, // 0x59 - 'Z': true, // 0x5A - '[': true, // 0x5B - - // 0x5d to 0x7e - ']': true, // 0x5D - '^': true, // 0x5E - '_': true, // 0x5F - '`': true, // 0x60 - 'a': true, // 0x61 - 'b': true, // 0x62 - 'c': true, // 0x63 - 'd': true, // 0x64 - 'e': true, // 0x65 - 'f': true, // 0x66 - 'g': true, // 0x67 - 'h': true, // 0x68 - 'i': true, // 0x69 - 'j': true, // 0x6A - 'k': true, // 0x6B - 'l': true, // 0x6C - 'm': true, // 0x6D - 'n': true, // 0x6E - 'o': true, // 0x6F - 'p': true, // 0x70 - 'q': true, // 0x71 - 'r': true, // 0x72 - 's': true, // 0x73 - 't': true, // 0x74 - 'u': true, // 0x75 - 'v': true, // 0x76 - 'w': true, // 0x77 - 'x': true, // 0x78 - 'y': true, // 0x79 - 'z': true, // 0x7A - '{': true, // 0x7B - '|': true, // 0x7C - '}': true, // 0x7D - '~': true, // 0x7E -} - -func validateValueChar(c int32) bool { - return c >= 0 && c < int32(utf8.RuneSelf) && safeValueCharset[c] -} - -// valueEscape escapes the string so it can be safely placed inside a baggage value, -// replacing special characters with %XX sequences as needed. -// -// The implementation is based on: -// https://github.com/golang/go/blob/f6509cf5cdbb5787061b784973782933c47f1782/src/net/url/url.go#L285. -func valueEscape(s string) string { - hexCount := 0 - for i := 0; i < len(s); i++ { - c := s[i] - if shouldEscape(c) { - hexCount++ - } - } - - if hexCount == 0 { - return s - } - - var buf [64]byte - var t []byte - - required := len(s) + 2*hexCount - if required <= len(buf) { - t = buf[:required] - } else { - t = make([]byte, required) - } - - j := 0 - for i := 0; i < len(s); i++ { - c := s[i] - if shouldEscape(s[i]) { - const upperhex = "0123456789ABCDEF" - t[j] = '%' - t[j+1] = upperhex[c>>4] - t[j+2] = upperhex[c&15] - j += 3 - } else { - t[j] = c - j++ - } - } - - return string(t) -} - -// shouldEscape returns true if the specified byte should be escaped when -// appearing in a baggage value string. -func shouldEscape(c byte) bool { - if c == '%' { - // The percent character must be encoded so that percent-encoding can work. - return true - } - return !validateValueChar(int32(c)) -} diff --git a/vendor/go.opentelemetry.io/otel/baggage/context.go b/vendor/go.opentelemetry.io/otel/baggage/context.go deleted file mode 100644 index a572461a..00000000 --- a/vendor/go.opentelemetry.io/otel/baggage/context.go +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package baggage // import "go.opentelemetry.io/otel/baggage" - -import ( - "context" - - "go.opentelemetry.io/otel/internal/baggage" -) - -// ContextWithBaggage returns a copy of parent with baggage. -func ContextWithBaggage(parent context.Context, b Baggage) context.Context { - // Delegate so any hooks for the OpenTracing bridge are handled. - return baggage.ContextWithList(parent, b.list) -} - -// ContextWithoutBaggage returns a copy of parent with no baggage. -func ContextWithoutBaggage(parent context.Context) context.Context { - // Delegate so any hooks for the OpenTracing bridge are handled. - return baggage.ContextWithList(parent, nil) -} - -// FromContext returns the baggage contained in ctx. -func FromContext(ctx context.Context) Baggage { - // Delegate so any hooks for the OpenTracing bridge are handled. - return Baggage{list: baggage.ListFromContext(ctx)} -} diff --git a/vendor/go.opentelemetry.io/otel/baggage/doc.go b/vendor/go.opentelemetry.io/otel/baggage/doc.go deleted file mode 100644 index b51d87ca..00000000 --- a/vendor/go.opentelemetry.io/otel/baggage/doc.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -/* -Package baggage provides functionality for storing and retrieving -baggage items in Go context. For propagating the baggage, see the -go.opentelemetry.io/otel/propagation package. -*/ -package baggage // import "go.opentelemetry.io/otel/baggage" diff --git a/vendor/go.opentelemetry.io/otel/codes/README.md b/vendor/go.opentelemetry.io/otel/codes/README.md deleted file mode 100644 index 24c52b38..00000000 --- a/vendor/go.opentelemetry.io/otel/codes/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Codes - -[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/codes)](https://pkg.go.dev/go.opentelemetry.io/otel/codes) diff --git a/vendor/go.opentelemetry.io/otel/codes/codes.go b/vendor/go.opentelemetry.io/otel/codes/codes.go deleted file mode 100644 index df29d96a..00000000 --- a/vendor/go.opentelemetry.io/otel/codes/codes.go +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package codes // import "go.opentelemetry.io/otel/codes" - -import ( - "encoding/json" - "fmt" - "strconv" -) - -const ( - // Unset is the default status code. - Unset Code = 0 - - // Error indicates the operation contains an error. - // - // NOTE: The error code in OTLP is 2. - // The value of this enum is only relevant to the internals - // of the Go SDK. - Error Code = 1 - - // Ok indicates operation has been validated by an Application developers - // or Operator to have completed successfully, or contain no error. - // - // NOTE: The Ok code in OTLP is 1. - // The value of this enum is only relevant to the internals - // of the Go SDK. - Ok Code = 2 - - maxCode = 3 -) - -// Code is an 32-bit representation of a status state. -type Code uint32 - -var codeToStr = map[Code]string{ - Unset: "Unset", - Error: "Error", - Ok: "Ok", -} - -var strToCode = map[string]Code{ - `"Unset"`: Unset, - `"Error"`: Error, - `"Ok"`: Ok, -} - -// String returns the Code as a string. -func (c Code) String() string { - return codeToStr[c] -} - -// UnmarshalJSON unmarshals b into the Code. -// -// This is based on the functionality in the gRPC codes package: -// https://github.com/grpc/grpc-go/blob/bb64fee312b46ebee26be43364a7a966033521b1/codes/codes.go#L218-L244 -func (c *Code) UnmarshalJSON(b []byte) error { - // From json.Unmarshaler: By convention, to approximate the behavior of - // Unmarshal itself, Unmarshalers implement UnmarshalJSON([]byte("null")) as - // a no-op. - if string(b) == "null" { - return nil - } - if c == nil { - return fmt.Errorf("nil receiver passed to UnmarshalJSON") - } - - var x interface{} - if err := json.Unmarshal(b, &x); err != nil { - return err - } - switch x.(type) { - case string: - if jc, ok := strToCode[string(b)]; ok { - *c = jc - return nil - } - return fmt.Errorf("invalid code: %q", string(b)) - case float64: - if ci, err := strconv.ParseUint(string(b), 10, 32); err == nil { - if ci >= maxCode { - return fmt.Errorf("invalid code: %q", ci) - } - - *c = Code(ci) - return nil - } - return fmt.Errorf("invalid code: %q", string(b)) - default: - return fmt.Errorf("invalid code: %q", string(b)) - } -} - -// MarshalJSON returns c as the JSON encoding of c. -func (c *Code) MarshalJSON() ([]byte, error) { - if c == nil { - return []byte("null"), nil - } - str, ok := codeToStr[*c] - if !ok { - return nil, fmt.Errorf("invalid code: %d", *c) - } - return []byte(fmt.Sprintf("%q", str)), nil -} diff --git a/vendor/go.opentelemetry.io/otel/codes/doc.go b/vendor/go.opentelemetry.io/otel/codes/doc.go deleted file mode 100644 index ee8db448..00000000 --- a/vendor/go.opentelemetry.io/otel/codes/doc.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -/* -Package codes defines the canonical error codes used by OpenTelemetry. - -It conforms to [the OpenTelemetry -specification](https://github.com/open-telemetry/opentelemetry-specification/blob/v1.20.0/specification/trace/api.md#set-status). -*/ -package codes // import "go.opentelemetry.io/otel/codes" diff --git a/vendor/go.opentelemetry.io/otel/doc.go b/vendor/go.opentelemetry.io/otel/doc.go deleted file mode 100644 index 441c5950..00000000 --- a/vendor/go.opentelemetry.io/otel/doc.go +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -/* -Package otel provides global access to the OpenTelemetry API. The subpackages of -the otel package provide an implementation of the OpenTelemetry API. - -The provided API is used to instrument code and measure data about that code's -performance and operation. The measured data, by default, is not processed or -transmitted anywhere. An implementation of the OpenTelemetry SDK, like the -default SDK implementation (go.opentelemetry.io/otel/sdk), and associated -exporters are used to process and transport this data. - -To read the getting started guide, see https://opentelemetry.io/docs/languages/go/getting-started/. - -To read more about tracing, see go.opentelemetry.io/otel/trace. - -To read more about metrics, see go.opentelemetry.io/otel/metric. - -To read more about propagation, see go.opentelemetry.io/otel/propagation and -go.opentelemetry.io/otel/baggage. -*/ -package otel // import "go.opentelemetry.io/otel" diff --git a/vendor/go.opentelemetry.io/otel/error_handler.go b/vendor/go.opentelemetry.io/otel/error_handler.go deleted file mode 100644 index 67414c71..00000000 --- a/vendor/go.opentelemetry.io/otel/error_handler.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package otel // import "go.opentelemetry.io/otel" - -// ErrorHandler handles irremediable events. -type ErrorHandler interface { - // DO NOT CHANGE: any modification will not be backwards compatible and - // must never be done outside of a new major release. - - // Handle handles any error deemed irremediable by an OpenTelemetry - // component. - Handle(error) - // DO NOT CHANGE: any modification will not be backwards compatible and - // must never be done outside of a new major release. -} - -// ErrorHandlerFunc is a convenience adapter to allow the use of a function -// as an ErrorHandler. -type ErrorHandlerFunc func(error) - -var _ ErrorHandler = ErrorHandlerFunc(nil) - -// Handle handles the irremediable error by calling the ErrorHandlerFunc itself. -func (f ErrorHandlerFunc) Handle(err error) { - f(err) -} diff --git a/vendor/go.opentelemetry.io/otel/get_main_pkgs.sh b/vendor/go.opentelemetry.io/otel/get_main_pkgs.sh deleted file mode 100644 index 93e80ea3..00000000 --- a/vendor/go.opentelemetry.io/otel/get_main_pkgs.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -# Copyright The OpenTelemetry Authors -# SPDX-License-Identifier: Apache-2.0 - -set -euo pipefail - -top_dir='.' -if [[ $# -gt 0 ]]; then - top_dir="${1}" -fi - -p=$(pwd) -mod_dirs=() - -# Note `mapfile` does not exist in older bash versions: -# https://stackoverflow.com/questions/41475261/need-alternative-to-readarray-mapfile-for-script-on-older-version-of-bash - -while IFS= read -r line; do - mod_dirs+=("$line") -done < <(find "${top_dir}" -type f -name 'go.mod' -exec dirname {} \; | sort) - -for mod_dir in "${mod_dirs[@]}"; do - cd "${mod_dir}" - - while IFS= read -r line; do - echo ".${line#${p}}" - done < <(go list --find -f '{{.Name}}|{{.Dir}}' ./... | grep '^main|' | cut -f 2- -d '|') - cd "${p}" -done diff --git a/vendor/go.opentelemetry.io/otel/handler.go b/vendor/go.opentelemetry.io/otel/handler.go deleted file mode 100644 index 07623b67..00000000 --- a/vendor/go.opentelemetry.io/otel/handler.go +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package otel // import "go.opentelemetry.io/otel" - -import ( - "go.opentelemetry.io/otel/internal/global" -) - -// Compile-time check global.ErrDelegator implements ErrorHandler. -var _ ErrorHandler = (*global.ErrDelegator)(nil) - -// GetErrorHandler returns the global ErrorHandler instance. -// -// The default ErrorHandler instance returned will log all errors to STDERR -// until an override ErrorHandler is set with SetErrorHandler. All -// ErrorHandler returned prior to this will automatically forward errors to -// the set instance instead of logging. -// -// Subsequent calls to SetErrorHandler after the first will not forward errors -// to the new ErrorHandler for prior returned instances. -func GetErrorHandler() ErrorHandler { return global.GetErrorHandler() } - -// SetErrorHandler sets the global ErrorHandler to h. -// -// The first time this is called all ErrorHandler previously returned from -// GetErrorHandler will send errors to h instead of the default logging -// ErrorHandler. Subsequent calls will set the global ErrorHandler, but not -// delegate errors to h. -func SetErrorHandler(h ErrorHandler) { global.SetErrorHandler(h) } - -// Handle is a convenience function for GetErrorHandler().Handle(err). -func Handle(err error) { global.GetErrorHandler().Handle(err) } diff --git a/vendor/go.opentelemetry.io/otel/internal/attribute/attribute.go b/vendor/go.opentelemetry.io/otel/internal/attribute/attribute.go deleted file mode 100644 index 822d8479..00000000 --- a/vendor/go.opentelemetry.io/otel/internal/attribute/attribute.go +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -/* -Package attribute provide several helper functions for some commonly used -logic of processing attributes. -*/ -package attribute // import "go.opentelemetry.io/otel/internal/attribute" - -import ( - "reflect" -) - -// BoolSliceValue converts a bool slice into an array with same elements as slice. -func BoolSliceValue(v []bool) interface{} { - var zero bool - cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem() - reflect.Copy(cp, reflect.ValueOf(v)) - return cp.Interface() -} - -// Int64SliceValue converts an int64 slice into an array with same elements as slice. -func Int64SliceValue(v []int64) interface{} { - var zero int64 - cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem() - reflect.Copy(cp, reflect.ValueOf(v)) - return cp.Interface() -} - -// Float64SliceValue converts a float64 slice into an array with same elements as slice. -func Float64SliceValue(v []float64) interface{} { - var zero float64 - cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem() - reflect.Copy(cp, reflect.ValueOf(v)) - return cp.Interface() -} - -// StringSliceValue converts a string slice into an array with same elements as slice. -func StringSliceValue(v []string) interface{} { - var zero string - cp := reflect.New(reflect.ArrayOf(len(v), reflect.TypeOf(zero))).Elem() - reflect.Copy(cp, reflect.ValueOf(v)) - return cp.Interface() -} - -// AsBoolSlice converts a bool array into a slice into with same elements as array. -func AsBoolSlice(v interface{}) []bool { - rv := reflect.ValueOf(v) - if rv.Type().Kind() != reflect.Array { - return nil - } - var zero bool - correctLen := rv.Len() - correctType := reflect.ArrayOf(correctLen, reflect.TypeOf(zero)) - cpy := reflect.New(correctType) - _ = reflect.Copy(cpy.Elem(), rv) - return cpy.Elem().Slice(0, correctLen).Interface().([]bool) -} - -// AsInt64Slice converts an int64 array into a slice into with same elements as array. -func AsInt64Slice(v interface{}) []int64 { - rv := reflect.ValueOf(v) - if rv.Type().Kind() != reflect.Array { - return nil - } - var zero int64 - correctLen := rv.Len() - correctType := reflect.ArrayOf(correctLen, reflect.TypeOf(zero)) - cpy := reflect.New(correctType) - _ = reflect.Copy(cpy.Elem(), rv) - return cpy.Elem().Slice(0, correctLen).Interface().([]int64) -} - -// AsFloat64Slice converts a float64 array into a slice into with same elements as array. -func AsFloat64Slice(v interface{}) []float64 { - rv := reflect.ValueOf(v) - if rv.Type().Kind() != reflect.Array { - return nil - } - var zero float64 - correctLen := rv.Len() - correctType := reflect.ArrayOf(correctLen, reflect.TypeOf(zero)) - cpy := reflect.New(correctType) - _ = reflect.Copy(cpy.Elem(), rv) - return cpy.Elem().Slice(0, correctLen).Interface().([]float64) -} - -// AsStringSlice converts a string array into a slice into with same elements as array. -func AsStringSlice(v interface{}) []string { - rv := reflect.ValueOf(v) - if rv.Type().Kind() != reflect.Array { - return nil - } - var zero string - correctLen := rv.Len() - correctType := reflect.ArrayOf(correctLen, reflect.TypeOf(zero)) - cpy := reflect.New(correctType) - _ = reflect.Copy(cpy.Elem(), rv) - return cpy.Elem().Slice(0, correctLen).Interface().([]string) -} diff --git a/vendor/go.opentelemetry.io/otel/internal/baggage/baggage.go b/vendor/go.opentelemetry.io/otel/internal/baggage/baggage.go deleted file mode 100644 index b4f85f44..00000000 --- a/vendor/go.opentelemetry.io/otel/internal/baggage/baggage.go +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -/* -Package baggage provides base types and functionality to store and retrieve -baggage in Go context. This package exists because the OpenTracing bridge to -OpenTelemetry needs to synchronize state whenever baggage for a context is -modified and that context contains an OpenTracing span. If it were not for -this need this package would not need to exist and the -`go.opentelemetry.io/otel/baggage` package would be the singular place where -W3C baggage is handled. -*/ -package baggage // import "go.opentelemetry.io/otel/internal/baggage" - -// List is the collection of baggage members. The W3C allows for duplicates, -// but OpenTelemetry does not, therefore, this is represented as a map. -type List map[string]Item - -// Item is the value and metadata properties part of a list-member. -type Item struct { - Value string - Properties []Property -} - -// Property is a metadata entry for a list-member. -type Property struct { - Key, Value string - - // HasValue indicates if a zero-value value means the property does not - // have a value or if it was the zero-value. - HasValue bool -} diff --git a/vendor/go.opentelemetry.io/otel/internal/baggage/context.go b/vendor/go.opentelemetry.io/otel/internal/baggage/context.go deleted file mode 100644 index 3aea9c49..00000000 --- a/vendor/go.opentelemetry.io/otel/internal/baggage/context.go +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package baggage // import "go.opentelemetry.io/otel/internal/baggage" - -import "context" - -type baggageContextKeyType int - -const baggageKey baggageContextKeyType = iota - -// SetHookFunc is a callback called when storing baggage in the context. -type SetHookFunc func(context.Context, List) context.Context - -// GetHookFunc is a callback called when getting baggage from the context. -type GetHookFunc func(context.Context, List) List - -type baggageState struct { - list List - - setHook SetHookFunc - getHook GetHookFunc -} - -// ContextWithSetHook returns a copy of parent with hook configured to be -// invoked every time ContextWithBaggage is called. -// -// Passing nil SetHookFunc creates a context with no set hook to call. -func ContextWithSetHook(parent context.Context, hook SetHookFunc) context.Context { - var s baggageState - if v, ok := parent.Value(baggageKey).(baggageState); ok { - s = v - } - - s.setHook = hook - return context.WithValue(parent, baggageKey, s) -} - -// ContextWithGetHook returns a copy of parent with hook configured to be -// invoked every time FromContext is called. -// -// Passing nil GetHookFunc creates a context with no get hook to call. -func ContextWithGetHook(parent context.Context, hook GetHookFunc) context.Context { - var s baggageState - if v, ok := parent.Value(baggageKey).(baggageState); ok { - s = v - } - - s.getHook = hook - return context.WithValue(parent, baggageKey, s) -} - -// ContextWithList returns a copy of parent with baggage. Passing nil list -// returns a context without any baggage. -func ContextWithList(parent context.Context, list List) context.Context { - var s baggageState - if v, ok := parent.Value(baggageKey).(baggageState); ok { - s = v - } - - s.list = list - ctx := context.WithValue(parent, baggageKey, s) - if s.setHook != nil { - ctx = s.setHook(ctx, list) - } - - return ctx -} - -// ListFromContext returns the baggage contained in ctx. -func ListFromContext(ctx context.Context) List { - switch v := ctx.Value(baggageKey).(type) { - case baggageState: - if v.getHook != nil { - return v.getHook(ctx, v.list) - } - return v.list - default: - return nil - } -} diff --git a/vendor/go.opentelemetry.io/otel/internal/gen.go b/vendor/go.opentelemetry.io/otel/internal/gen.go deleted file mode 100644 index 4259f032..00000000 --- a/vendor/go.opentelemetry.io/otel/internal/gen.go +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package internal // import "go.opentelemetry.io/otel/internal" - -//go:generate gotmpl --body=./shared/matchers/expectation.go.tmpl "--data={}" --out=matchers/expectation.go -//go:generate gotmpl --body=./shared/matchers/expecter.go.tmpl "--data={}" --out=matchers/expecter.go -//go:generate gotmpl --body=./shared/matchers/temporal_matcher.go.tmpl "--data={}" --out=matchers/temporal_matcher.go - -//go:generate gotmpl --body=./shared/internaltest/alignment.go.tmpl "--data={}" --out=internaltest/alignment.go -//go:generate gotmpl --body=./shared/internaltest/env.go.tmpl "--data={}" --out=internaltest/env.go -//go:generate gotmpl --body=./shared/internaltest/env_test.go.tmpl "--data={}" --out=internaltest/env_test.go -//go:generate gotmpl --body=./shared/internaltest/errors.go.tmpl "--data={}" --out=internaltest/errors.go -//go:generate gotmpl --body=./shared/internaltest/harness.go.tmpl "--data={\"matchersImportPath\": \"go.opentelemetry.io/otel/internal/matchers\"}" --out=internaltest/harness.go -//go:generate gotmpl --body=./shared/internaltest/text_map_carrier.go.tmpl "--data={}" --out=internaltest/text_map_carrier.go -//go:generate gotmpl --body=./shared/internaltest/text_map_carrier_test.go.tmpl "--data={}" --out=internaltest/text_map_carrier_test.go -//go:generate gotmpl --body=./shared/internaltest/text_map_propagator.go.tmpl "--data={}" --out=internaltest/text_map_propagator.go -//go:generate gotmpl --body=./shared/internaltest/text_map_propagator_test.go.tmpl "--data={}" --out=internaltest/text_map_propagator_test.go diff --git a/vendor/go.opentelemetry.io/otel/internal/global/handler.go b/vendor/go.opentelemetry.io/otel/internal/global/handler.go deleted file mode 100644 index c657ff8e..00000000 --- a/vendor/go.opentelemetry.io/otel/internal/global/handler.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package global // import "go.opentelemetry.io/otel/internal/global" - -import ( - "log" - "sync/atomic" -) - -// ErrorHandler handles irremediable events. -type ErrorHandler interface { - // Handle handles any error deemed irremediable by an OpenTelemetry - // component. - Handle(error) -} - -type ErrDelegator struct { - delegate atomic.Pointer[ErrorHandler] -} - -// Compile-time check that delegator implements ErrorHandler. -var _ ErrorHandler = (*ErrDelegator)(nil) - -func (d *ErrDelegator) Handle(err error) { - if eh := d.delegate.Load(); eh != nil { - (*eh).Handle(err) - return - } - log.Print(err) -} - -// setDelegate sets the ErrorHandler delegate. -func (d *ErrDelegator) setDelegate(eh ErrorHandler) { - d.delegate.Store(&eh) -} diff --git a/vendor/go.opentelemetry.io/otel/internal/global/instruments.go b/vendor/go.opentelemetry.io/otel/internal/global/instruments.go deleted file mode 100644 index 3a0cc42f..00000000 --- a/vendor/go.opentelemetry.io/otel/internal/global/instruments.go +++ /dev/null @@ -1,412 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package global // import "go.opentelemetry.io/otel/internal/global" - -import ( - "context" - "sync/atomic" - - "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/metric/embedded" -) - -// unwrapper unwraps to return the underlying instrument implementation. -type unwrapper interface { - Unwrap() metric.Observable -} - -type afCounter struct { - embedded.Float64ObservableCounter - metric.Float64Observable - - name string - opts []metric.Float64ObservableCounterOption - - delegate atomic.Value // metric.Float64ObservableCounter -} - -var ( - _ unwrapper = (*afCounter)(nil) - _ metric.Float64ObservableCounter = (*afCounter)(nil) -) - -func (i *afCounter) setDelegate(m metric.Meter) { - ctr, err := m.Float64ObservableCounter(i.name, i.opts...) - if err != nil { - GetErrorHandler().Handle(err) - return - } - i.delegate.Store(ctr) -} - -func (i *afCounter) Unwrap() metric.Observable { - if ctr := i.delegate.Load(); ctr != nil { - return ctr.(metric.Float64ObservableCounter) - } - return nil -} - -type afUpDownCounter struct { - embedded.Float64ObservableUpDownCounter - metric.Float64Observable - - name string - opts []metric.Float64ObservableUpDownCounterOption - - delegate atomic.Value // metric.Float64ObservableUpDownCounter -} - -var ( - _ unwrapper = (*afUpDownCounter)(nil) - _ metric.Float64ObservableUpDownCounter = (*afUpDownCounter)(nil) -) - -func (i *afUpDownCounter) setDelegate(m metric.Meter) { - ctr, err := m.Float64ObservableUpDownCounter(i.name, i.opts...) - if err != nil { - GetErrorHandler().Handle(err) - return - } - i.delegate.Store(ctr) -} - -func (i *afUpDownCounter) Unwrap() metric.Observable { - if ctr := i.delegate.Load(); ctr != nil { - return ctr.(metric.Float64ObservableUpDownCounter) - } - return nil -} - -type afGauge struct { - embedded.Float64ObservableGauge - metric.Float64Observable - - name string - opts []metric.Float64ObservableGaugeOption - - delegate atomic.Value // metric.Float64ObservableGauge -} - -var ( - _ unwrapper = (*afGauge)(nil) - _ metric.Float64ObservableGauge = (*afGauge)(nil) -) - -func (i *afGauge) setDelegate(m metric.Meter) { - ctr, err := m.Float64ObservableGauge(i.name, i.opts...) - if err != nil { - GetErrorHandler().Handle(err) - return - } - i.delegate.Store(ctr) -} - -func (i *afGauge) Unwrap() metric.Observable { - if ctr := i.delegate.Load(); ctr != nil { - return ctr.(metric.Float64ObservableGauge) - } - return nil -} - -type aiCounter struct { - embedded.Int64ObservableCounter - metric.Int64Observable - - name string - opts []metric.Int64ObservableCounterOption - - delegate atomic.Value // metric.Int64ObservableCounter -} - -var ( - _ unwrapper = (*aiCounter)(nil) - _ metric.Int64ObservableCounter = (*aiCounter)(nil) -) - -func (i *aiCounter) setDelegate(m metric.Meter) { - ctr, err := m.Int64ObservableCounter(i.name, i.opts...) - if err != nil { - GetErrorHandler().Handle(err) - return - } - i.delegate.Store(ctr) -} - -func (i *aiCounter) Unwrap() metric.Observable { - if ctr := i.delegate.Load(); ctr != nil { - return ctr.(metric.Int64ObservableCounter) - } - return nil -} - -type aiUpDownCounter struct { - embedded.Int64ObservableUpDownCounter - metric.Int64Observable - - name string - opts []metric.Int64ObservableUpDownCounterOption - - delegate atomic.Value // metric.Int64ObservableUpDownCounter -} - -var ( - _ unwrapper = (*aiUpDownCounter)(nil) - _ metric.Int64ObservableUpDownCounter = (*aiUpDownCounter)(nil) -) - -func (i *aiUpDownCounter) setDelegate(m metric.Meter) { - ctr, err := m.Int64ObservableUpDownCounter(i.name, i.opts...) - if err != nil { - GetErrorHandler().Handle(err) - return - } - i.delegate.Store(ctr) -} - -func (i *aiUpDownCounter) Unwrap() metric.Observable { - if ctr := i.delegate.Load(); ctr != nil { - return ctr.(metric.Int64ObservableUpDownCounter) - } - return nil -} - -type aiGauge struct { - embedded.Int64ObservableGauge - metric.Int64Observable - - name string - opts []metric.Int64ObservableGaugeOption - - delegate atomic.Value // metric.Int64ObservableGauge -} - -var ( - _ unwrapper = (*aiGauge)(nil) - _ metric.Int64ObservableGauge = (*aiGauge)(nil) -) - -func (i *aiGauge) setDelegate(m metric.Meter) { - ctr, err := m.Int64ObservableGauge(i.name, i.opts...) - if err != nil { - GetErrorHandler().Handle(err) - return - } - i.delegate.Store(ctr) -} - -func (i *aiGauge) Unwrap() metric.Observable { - if ctr := i.delegate.Load(); ctr != nil { - return ctr.(metric.Int64ObservableGauge) - } - return nil -} - -// Sync Instruments. -type sfCounter struct { - embedded.Float64Counter - - name string - opts []metric.Float64CounterOption - - delegate atomic.Value // metric.Float64Counter -} - -var _ metric.Float64Counter = (*sfCounter)(nil) - -func (i *sfCounter) setDelegate(m metric.Meter) { - ctr, err := m.Float64Counter(i.name, i.opts...) - if err != nil { - GetErrorHandler().Handle(err) - return - } - i.delegate.Store(ctr) -} - -func (i *sfCounter) Add(ctx context.Context, incr float64, opts ...metric.AddOption) { - if ctr := i.delegate.Load(); ctr != nil { - ctr.(metric.Float64Counter).Add(ctx, incr, opts...) - } -} - -type sfUpDownCounter struct { - embedded.Float64UpDownCounter - - name string - opts []metric.Float64UpDownCounterOption - - delegate atomic.Value // metric.Float64UpDownCounter -} - -var _ metric.Float64UpDownCounter = (*sfUpDownCounter)(nil) - -func (i *sfUpDownCounter) setDelegate(m metric.Meter) { - ctr, err := m.Float64UpDownCounter(i.name, i.opts...) - if err != nil { - GetErrorHandler().Handle(err) - return - } - i.delegate.Store(ctr) -} - -func (i *sfUpDownCounter) Add(ctx context.Context, incr float64, opts ...metric.AddOption) { - if ctr := i.delegate.Load(); ctr != nil { - ctr.(metric.Float64UpDownCounter).Add(ctx, incr, opts...) - } -} - -type sfHistogram struct { - embedded.Float64Histogram - - name string - opts []metric.Float64HistogramOption - - delegate atomic.Value // metric.Float64Histogram -} - -var _ metric.Float64Histogram = (*sfHistogram)(nil) - -func (i *sfHistogram) setDelegate(m metric.Meter) { - ctr, err := m.Float64Histogram(i.name, i.opts...) - if err != nil { - GetErrorHandler().Handle(err) - return - } - i.delegate.Store(ctr) -} - -func (i *sfHistogram) Record(ctx context.Context, x float64, opts ...metric.RecordOption) { - if ctr := i.delegate.Load(); ctr != nil { - ctr.(metric.Float64Histogram).Record(ctx, x, opts...) - } -} - -type sfGauge struct { - embedded.Float64Gauge - - name string - opts []metric.Float64GaugeOption - - delegate atomic.Value // metric.Float64Gauge -} - -var _ metric.Float64Gauge = (*sfGauge)(nil) - -func (i *sfGauge) setDelegate(m metric.Meter) { - ctr, err := m.Float64Gauge(i.name, i.opts...) - if err != nil { - GetErrorHandler().Handle(err) - return - } - i.delegate.Store(ctr) -} - -func (i *sfGauge) Record(ctx context.Context, x float64, opts ...metric.RecordOption) { - if ctr := i.delegate.Load(); ctr != nil { - ctr.(metric.Float64Gauge).Record(ctx, x, opts...) - } -} - -type siCounter struct { - embedded.Int64Counter - - name string - opts []metric.Int64CounterOption - - delegate atomic.Value // metric.Int64Counter -} - -var _ metric.Int64Counter = (*siCounter)(nil) - -func (i *siCounter) setDelegate(m metric.Meter) { - ctr, err := m.Int64Counter(i.name, i.opts...) - if err != nil { - GetErrorHandler().Handle(err) - return - } - i.delegate.Store(ctr) -} - -func (i *siCounter) Add(ctx context.Context, x int64, opts ...metric.AddOption) { - if ctr := i.delegate.Load(); ctr != nil { - ctr.(metric.Int64Counter).Add(ctx, x, opts...) - } -} - -type siUpDownCounter struct { - embedded.Int64UpDownCounter - - name string - opts []metric.Int64UpDownCounterOption - - delegate atomic.Value // metric.Int64UpDownCounter -} - -var _ metric.Int64UpDownCounter = (*siUpDownCounter)(nil) - -func (i *siUpDownCounter) setDelegate(m metric.Meter) { - ctr, err := m.Int64UpDownCounter(i.name, i.opts...) - if err != nil { - GetErrorHandler().Handle(err) - return - } - i.delegate.Store(ctr) -} - -func (i *siUpDownCounter) Add(ctx context.Context, x int64, opts ...metric.AddOption) { - if ctr := i.delegate.Load(); ctr != nil { - ctr.(metric.Int64UpDownCounter).Add(ctx, x, opts...) - } -} - -type siHistogram struct { - embedded.Int64Histogram - - name string - opts []metric.Int64HistogramOption - - delegate atomic.Value // metric.Int64Histogram -} - -var _ metric.Int64Histogram = (*siHistogram)(nil) - -func (i *siHistogram) setDelegate(m metric.Meter) { - ctr, err := m.Int64Histogram(i.name, i.opts...) - if err != nil { - GetErrorHandler().Handle(err) - return - } - i.delegate.Store(ctr) -} - -func (i *siHistogram) Record(ctx context.Context, x int64, opts ...metric.RecordOption) { - if ctr := i.delegate.Load(); ctr != nil { - ctr.(metric.Int64Histogram).Record(ctx, x, opts...) - } -} - -type siGauge struct { - embedded.Int64Gauge - - name string - opts []metric.Int64GaugeOption - - delegate atomic.Value // metric.Int64Gauge -} - -var _ metric.Int64Gauge = (*siGauge)(nil) - -func (i *siGauge) setDelegate(m metric.Meter) { - ctr, err := m.Int64Gauge(i.name, i.opts...) - if err != nil { - GetErrorHandler().Handle(err) - return - } - i.delegate.Store(ctr) -} - -func (i *siGauge) Record(ctx context.Context, x int64, opts ...metric.RecordOption) { - if ctr := i.delegate.Load(); ctr != nil { - ctr.(metric.Int64Gauge).Record(ctx, x, opts...) - } -} diff --git a/vendor/go.opentelemetry.io/otel/internal/global/internal_logging.go b/vendor/go.opentelemetry.io/otel/internal/global/internal_logging.go deleted file mode 100644 index adbca7d3..00000000 --- a/vendor/go.opentelemetry.io/otel/internal/global/internal_logging.go +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package global // import "go.opentelemetry.io/otel/internal/global" - -import ( - "log" - "os" - "sync/atomic" - - "github.com/go-logr/logr" - "github.com/go-logr/stdr" -) - -// globalLogger holds a reference to the [logr.Logger] used within -// go.opentelemetry.io/otel. -// -// The default logger uses stdr which is backed by the standard `log.Logger` -// interface. This logger will only show messages at the Error Level. -var globalLogger = func() *atomic.Pointer[logr.Logger] { - l := stdr.New(log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile)) - - p := new(atomic.Pointer[logr.Logger]) - p.Store(&l) - return p -}() - -// SetLogger sets the global Logger to l. -// -// To see Warn messages use a logger with `l.V(1).Enabled() == true` -// To see Info messages use a logger with `l.V(4).Enabled() == true` -// To see Debug messages use a logger with `l.V(8).Enabled() == true`. -func SetLogger(l logr.Logger) { - globalLogger.Store(&l) -} - -// GetLogger returns the global logger. -func GetLogger() logr.Logger { - return *globalLogger.Load() -} - -// Info prints messages about the general state of the API or SDK. -// This should usually be less than 5 messages a minute. -func Info(msg string, keysAndValues ...interface{}) { - GetLogger().V(4).Info(msg, keysAndValues...) -} - -// Error prints messages about exceptional states of the API or SDK. -func Error(err error, msg string, keysAndValues ...interface{}) { - GetLogger().Error(err, msg, keysAndValues...) -} - -// Debug prints messages about all internal changes in the API or SDK. -func Debug(msg string, keysAndValues ...interface{}) { - GetLogger().V(8).Info(msg, keysAndValues...) -} - -// Warn prints messages about warnings in the API or SDK. -// Not an error but is likely more important than an informational event. -func Warn(msg string, keysAndValues ...interface{}) { - GetLogger().V(1).Info(msg, keysAndValues...) -} diff --git a/vendor/go.opentelemetry.io/otel/internal/global/meter.go b/vendor/go.opentelemetry.io/otel/internal/global/meter.go deleted file mode 100644 index cfd1df9b..00000000 --- a/vendor/go.opentelemetry.io/otel/internal/global/meter.go +++ /dev/null @@ -1,368 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package global // import "go.opentelemetry.io/otel/internal/global" - -import ( - "container/list" - "sync" - "sync/atomic" - - "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/metric/embedded" -) - -// meterProvider is a placeholder for a configured SDK MeterProvider. -// -// All MeterProvider functionality is forwarded to a delegate once -// configured. -type meterProvider struct { - embedded.MeterProvider - - mtx sync.Mutex - meters map[il]*meter - - delegate metric.MeterProvider -} - -// setDelegate configures p to delegate all MeterProvider functionality to -// provider. -// -// All Meters provided prior to this function call are switched out to be -// Meters provided by provider. All instruments and callbacks are recreated and -// delegated. -// -// It is guaranteed by the caller that this happens only once. -func (p *meterProvider) setDelegate(provider metric.MeterProvider) { - p.mtx.Lock() - defer p.mtx.Unlock() - - p.delegate = provider - - if len(p.meters) == 0 { - return - } - - for _, meter := range p.meters { - meter.setDelegate(provider) - } - - p.meters = nil -} - -// Meter implements MeterProvider. -func (p *meterProvider) Meter(name string, opts ...metric.MeterOption) metric.Meter { - p.mtx.Lock() - defer p.mtx.Unlock() - - if p.delegate != nil { - return p.delegate.Meter(name, opts...) - } - - // At this moment it is guaranteed that no sdk is installed, save the meter in the meters map. - - c := metric.NewMeterConfig(opts...) - key := il{ - name: name, - version: c.InstrumentationVersion(), - schema: c.SchemaURL(), - } - - if p.meters == nil { - p.meters = make(map[il]*meter) - } - - if val, ok := p.meters[key]; ok { - return val - } - - t := &meter{name: name, opts: opts} - p.meters[key] = t - return t -} - -// meter is a placeholder for a metric.Meter. -// -// All Meter functionality is forwarded to a delegate once configured. -// Otherwise, all functionality is forwarded to a NoopMeter. -type meter struct { - embedded.Meter - - name string - opts []metric.MeterOption - - mtx sync.Mutex - instruments []delegatedInstrument - - registry list.List - - delegate atomic.Value // metric.Meter -} - -type delegatedInstrument interface { - setDelegate(metric.Meter) -} - -// setDelegate configures m to delegate all Meter functionality to Meters -// created by provider. -// -// All subsequent calls to the Meter methods will be passed to the delegate. -// -// It is guaranteed by the caller that this happens only once. -func (m *meter) setDelegate(provider metric.MeterProvider) { - meter := provider.Meter(m.name, m.opts...) - m.delegate.Store(meter) - - m.mtx.Lock() - defer m.mtx.Unlock() - - for _, inst := range m.instruments { - inst.setDelegate(meter) - } - - var n *list.Element - for e := m.registry.Front(); e != nil; e = n { - r := e.Value.(*registration) - r.setDelegate(meter) - n = e.Next() - m.registry.Remove(e) - } - - m.instruments = nil - m.registry.Init() -} - -func (m *meter) Int64Counter(name string, options ...metric.Int64CounterOption) (metric.Int64Counter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64Counter(name, options...) - } - m.mtx.Lock() - defer m.mtx.Unlock() - i := &siCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) - return i, nil -} - -func (m *meter) Int64UpDownCounter(name string, options ...metric.Int64UpDownCounterOption) (metric.Int64UpDownCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64UpDownCounter(name, options...) - } - m.mtx.Lock() - defer m.mtx.Unlock() - i := &siUpDownCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) - return i, nil -} - -func (m *meter) Int64Histogram(name string, options ...metric.Int64HistogramOption) (metric.Int64Histogram, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64Histogram(name, options...) - } - m.mtx.Lock() - defer m.mtx.Unlock() - i := &siHistogram{name: name, opts: options} - m.instruments = append(m.instruments, i) - return i, nil -} - -func (m *meter) Int64Gauge(name string, options ...metric.Int64GaugeOption) (metric.Int64Gauge, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64Gauge(name, options...) - } - m.mtx.Lock() - defer m.mtx.Unlock() - i := &siGauge{name: name, opts: options} - m.instruments = append(m.instruments, i) - return i, nil -} - -func (m *meter) Int64ObservableCounter(name string, options ...metric.Int64ObservableCounterOption) (metric.Int64ObservableCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64ObservableCounter(name, options...) - } - m.mtx.Lock() - defer m.mtx.Unlock() - i := &aiCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) - return i, nil -} - -func (m *meter) Int64ObservableUpDownCounter(name string, options ...metric.Int64ObservableUpDownCounterOption) (metric.Int64ObservableUpDownCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64ObservableUpDownCounter(name, options...) - } - m.mtx.Lock() - defer m.mtx.Unlock() - i := &aiUpDownCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) - return i, nil -} - -func (m *meter) Int64ObservableGauge(name string, options ...metric.Int64ObservableGaugeOption) (metric.Int64ObservableGauge, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Int64ObservableGauge(name, options...) - } - m.mtx.Lock() - defer m.mtx.Unlock() - i := &aiGauge{name: name, opts: options} - m.instruments = append(m.instruments, i) - return i, nil -} - -func (m *meter) Float64Counter(name string, options ...metric.Float64CounterOption) (metric.Float64Counter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64Counter(name, options...) - } - m.mtx.Lock() - defer m.mtx.Unlock() - i := &sfCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) - return i, nil -} - -func (m *meter) Float64UpDownCounter(name string, options ...metric.Float64UpDownCounterOption) (metric.Float64UpDownCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64UpDownCounter(name, options...) - } - m.mtx.Lock() - defer m.mtx.Unlock() - i := &sfUpDownCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) - return i, nil -} - -func (m *meter) Float64Histogram(name string, options ...metric.Float64HistogramOption) (metric.Float64Histogram, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64Histogram(name, options...) - } - m.mtx.Lock() - defer m.mtx.Unlock() - i := &sfHistogram{name: name, opts: options} - m.instruments = append(m.instruments, i) - return i, nil -} - -func (m *meter) Float64Gauge(name string, options ...metric.Float64GaugeOption) (metric.Float64Gauge, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64Gauge(name, options...) - } - m.mtx.Lock() - defer m.mtx.Unlock() - i := &sfGauge{name: name, opts: options} - m.instruments = append(m.instruments, i) - return i, nil -} - -func (m *meter) Float64ObservableCounter(name string, options ...metric.Float64ObservableCounterOption) (metric.Float64ObservableCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64ObservableCounter(name, options...) - } - m.mtx.Lock() - defer m.mtx.Unlock() - i := &afCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) - return i, nil -} - -func (m *meter) Float64ObservableUpDownCounter(name string, options ...metric.Float64ObservableUpDownCounterOption) (metric.Float64ObservableUpDownCounter, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64ObservableUpDownCounter(name, options...) - } - m.mtx.Lock() - defer m.mtx.Unlock() - i := &afUpDownCounter{name: name, opts: options} - m.instruments = append(m.instruments, i) - return i, nil -} - -func (m *meter) Float64ObservableGauge(name string, options ...metric.Float64ObservableGaugeOption) (metric.Float64ObservableGauge, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - return del.Float64ObservableGauge(name, options...) - } - m.mtx.Lock() - defer m.mtx.Unlock() - i := &afGauge{name: name, opts: options} - m.instruments = append(m.instruments, i) - return i, nil -} - -// RegisterCallback captures the function that will be called during Collect. -func (m *meter) RegisterCallback(f metric.Callback, insts ...metric.Observable) (metric.Registration, error) { - if del, ok := m.delegate.Load().(metric.Meter); ok { - insts = unwrapInstruments(insts) - return del.RegisterCallback(f, insts...) - } - - m.mtx.Lock() - defer m.mtx.Unlock() - - reg := ®istration{instruments: insts, function: f} - e := m.registry.PushBack(reg) - reg.unreg = func() error { - m.mtx.Lock() - _ = m.registry.Remove(e) - m.mtx.Unlock() - return nil - } - return reg, nil -} - -type wrapped interface { - unwrap() metric.Observable -} - -func unwrapInstruments(instruments []metric.Observable) []metric.Observable { - out := make([]metric.Observable, 0, len(instruments)) - - for _, inst := range instruments { - if in, ok := inst.(wrapped); ok { - out = append(out, in.unwrap()) - } else { - out = append(out, inst) - } - } - - return out -} - -type registration struct { - embedded.Registration - - instruments []metric.Observable - function metric.Callback - - unreg func() error - unregMu sync.Mutex -} - -func (c *registration) setDelegate(m metric.Meter) { - insts := unwrapInstruments(c.instruments) - - c.unregMu.Lock() - defer c.unregMu.Unlock() - - if c.unreg == nil { - // Unregister already called. - return - } - - reg, err := m.RegisterCallback(c.function, insts...) - if err != nil { - GetErrorHandler().Handle(err) - } - - c.unreg = reg.Unregister -} - -func (c *registration) Unregister() error { - c.unregMu.Lock() - defer c.unregMu.Unlock() - if c.unreg == nil { - // Unregister already called. - return nil - } - - var err error - err, c.unreg = c.unreg(), nil - return err -} diff --git a/vendor/go.opentelemetry.io/otel/internal/global/propagator.go b/vendor/go.opentelemetry.io/otel/internal/global/propagator.go deleted file mode 100644 index 38560ff9..00000000 --- a/vendor/go.opentelemetry.io/otel/internal/global/propagator.go +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package global // import "go.opentelemetry.io/otel/internal/global" - -import ( - "context" - "sync" - - "go.opentelemetry.io/otel/propagation" -) - -// textMapPropagator is a default TextMapPropagator that delegates calls to a -// registered delegate if one is set, otherwise it defaults to delegating the -// calls to a the default no-op propagation.TextMapPropagator. -type textMapPropagator struct { - mtx sync.Mutex - once sync.Once - delegate propagation.TextMapPropagator - noop propagation.TextMapPropagator -} - -// Compile-time guarantee that textMapPropagator implements the -// propagation.TextMapPropagator interface. -var _ propagation.TextMapPropagator = (*textMapPropagator)(nil) - -func newTextMapPropagator() *textMapPropagator { - return &textMapPropagator{ - noop: propagation.NewCompositeTextMapPropagator(), - } -} - -// SetDelegate sets a delegate propagation.TextMapPropagator that all calls are -// forwarded to. Delegation can only be performed once, all subsequent calls -// perform no delegation. -func (p *textMapPropagator) SetDelegate(delegate propagation.TextMapPropagator) { - if delegate == nil { - return - } - - p.mtx.Lock() - p.once.Do(func() { p.delegate = delegate }) - p.mtx.Unlock() -} - -// effectiveDelegate returns the current delegate of p if one is set, -// otherwise the default noop TextMapPropagator is returned. This method -// can be called concurrently. -func (p *textMapPropagator) effectiveDelegate() propagation.TextMapPropagator { - p.mtx.Lock() - defer p.mtx.Unlock() - if p.delegate != nil { - return p.delegate - } - return p.noop -} - -// Inject set cross-cutting concerns from the Context into the carrier. -func (p *textMapPropagator) Inject(ctx context.Context, carrier propagation.TextMapCarrier) { - p.effectiveDelegate().Inject(ctx, carrier) -} - -// Extract reads cross-cutting concerns from the carrier into a Context. -func (p *textMapPropagator) Extract(ctx context.Context, carrier propagation.TextMapCarrier) context.Context { - return p.effectiveDelegate().Extract(ctx, carrier) -} - -// Fields returns the keys whose values are set with Inject. -func (p *textMapPropagator) Fields() []string { - return p.effectiveDelegate().Fields() -} diff --git a/vendor/go.opentelemetry.io/otel/internal/global/state.go b/vendor/go.opentelemetry.io/otel/internal/global/state.go deleted file mode 100644 index 204ea142..00000000 --- a/vendor/go.opentelemetry.io/otel/internal/global/state.go +++ /dev/null @@ -1,199 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package global // import "go.opentelemetry.io/otel/internal/global" - -import ( - "errors" - "sync" - "sync/atomic" - - "go.opentelemetry.io/otel/metric" - "go.opentelemetry.io/otel/propagation" - "go.opentelemetry.io/otel/trace" -) - -type ( - errorHandlerHolder struct { - eh ErrorHandler - } - - tracerProviderHolder struct { - tp trace.TracerProvider - } - - propagatorsHolder struct { - tm propagation.TextMapPropagator - } - - meterProviderHolder struct { - mp metric.MeterProvider - } -) - -var ( - globalErrorHandler = defaultErrorHandler() - globalTracer = defaultTracerValue() - globalPropagators = defaultPropagatorsValue() - globalMeterProvider = defaultMeterProvider() - - delegateErrorHandlerOnce sync.Once - delegateTraceOnce sync.Once - delegateTextMapPropagatorOnce sync.Once - delegateMeterOnce sync.Once -) - -// GetErrorHandler returns the global ErrorHandler instance. -// -// The default ErrorHandler instance returned will log all errors to STDERR -// until an override ErrorHandler is set with SetErrorHandler. All -// ErrorHandler returned prior to this will automatically forward errors to -// the set instance instead of logging. -// -// Subsequent calls to SetErrorHandler after the first will not forward errors -// to the new ErrorHandler for prior returned instances. -func GetErrorHandler() ErrorHandler { - return globalErrorHandler.Load().(errorHandlerHolder).eh -} - -// SetErrorHandler sets the global ErrorHandler to h. -// -// The first time this is called all ErrorHandler previously returned from -// GetErrorHandler will send errors to h instead of the default logging -// ErrorHandler. Subsequent calls will set the global ErrorHandler, but not -// delegate errors to h. -func SetErrorHandler(h ErrorHandler) { - current := GetErrorHandler() - - if _, cOk := current.(*ErrDelegator); cOk { - if _, ehOk := h.(*ErrDelegator); ehOk && current == h { - // Do not assign to the delegate of the default ErrDelegator to be - // itself. - Error( - errors.New("no ErrorHandler delegate configured"), - "ErrorHandler remains its current value.", - ) - return - } - } - - delegateErrorHandlerOnce.Do(func() { - if def, ok := current.(*ErrDelegator); ok { - def.setDelegate(h) - } - }) - globalErrorHandler.Store(errorHandlerHolder{eh: h}) -} - -// TracerProvider is the internal implementation for global.TracerProvider. -func TracerProvider() trace.TracerProvider { - return globalTracer.Load().(tracerProviderHolder).tp -} - -// SetTracerProvider is the internal implementation for global.SetTracerProvider. -func SetTracerProvider(tp trace.TracerProvider) { - current := TracerProvider() - - if _, cOk := current.(*tracerProvider); cOk { - if _, tpOk := tp.(*tracerProvider); tpOk && current == tp { - // Do not assign the default delegating TracerProvider to delegate - // to itself. - Error( - errors.New("no delegate configured in tracer provider"), - "Setting tracer provider to its current value. No delegate will be configured", - ) - return - } - } - - delegateTraceOnce.Do(func() { - if def, ok := current.(*tracerProvider); ok { - def.setDelegate(tp) - } - }) - globalTracer.Store(tracerProviderHolder{tp: tp}) -} - -// TextMapPropagator is the internal implementation for global.TextMapPropagator. -func TextMapPropagator() propagation.TextMapPropagator { - return globalPropagators.Load().(propagatorsHolder).tm -} - -// SetTextMapPropagator is the internal implementation for global.SetTextMapPropagator. -func SetTextMapPropagator(p propagation.TextMapPropagator) { - current := TextMapPropagator() - - if _, cOk := current.(*textMapPropagator); cOk { - if _, pOk := p.(*textMapPropagator); pOk && current == p { - // Do not assign the default delegating TextMapPropagator to - // delegate to itself. - Error( - errors.New("no delegate configured in text map propagator"), - "Setting text map propagator to its current value. No delegate will be configured", - ) - return - } - } - - // For the textMapPropagator already returned by TextMapPropagator - // delegate to p. - delegateTextMapPropagatorOnce.Do(func() { - if def, ok := current.(*textMapPropagator); ok { - def.SetDelegate(p) - } - }) - // Return p when subsequent calls to TextMapPropagator are made. - globalPropagators.Store(propagatorsHolder{tm: p}) -} - -// MeterProvider is the internal implementation for global.MeterProvider. -func MeterProvider() metric.MeterProvider { - return globalMeterProvider.Load().(meterProviderHolder).mp -} - -// SetMeterProvider is the internal implementation for global.SetMeterProvider. -func SetMeterProvider(mp metric.MeterProvider) { - current := MeterProvider() - if _, cOk := current.(*meterProvider); cOk { - if _, mpOk := mp.(*meterProvider); mpOk && current == mp { - // Do not assign the default delegating MeterProvider to delegate - // to itself. - Error( - errors.New("no delegate configured in meter provider"), - "Setting meter provider to its current value. No delegate will be configured", - ) - return - } - } - - delegateMeterOnce.Do(func() { - if def, ok := current.(*meterProvider); ok { - def.setDelegate(mp) - } - }) - globalMeterProvider.Store(meterProviderHolder{mp: mp}) -} - -func defaultErrorHandler() *atomic.Value { - v := &atomic.Value{} - v.Store(errorHandlerHolder{eh: &ErrDelegator{}}) - return v -} - -func defaultTracerValue() *atomic.Value { - v := &atomic.Value{} - v.Store(tracerProviderHolder{tp: &tracerProvider{}}) - return v -} - -func defaultPropagatorsValue() *atomic.Value { - v := &atomic.Value{} - v.Store(propagatorsHolder{tm: newTextMapPropagator()}) - return v -} - -func defaultMeterProvider() *atomic.Value { - v := &atomic.Value{} - v.Store(meterProviderHolder{mp: &meterProvider{}}) - return v -} diff --git a/vendor/go.opentelemetry.io/otel/internal/global/trace.go b/vendor/go.opentelemetry.io/otel/internal/global/trace.go deleted file mode 100644 index e31f442b..00000000 --- a/vendor/go.opentelemetry.io/otel/internal/global/trace.go +++ /dev/null @@ -1,189 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package global // import "go.opentelemetry.io/otel/internal/global" - -/* -This file contains the forwarding implementation of the TracerProvider used as -the default global instance. Prior to initialization of an SDK, Tracers -returned by the global TracerProvider will provide no-op functionality. This -means that all Span created prior to initialization are no-op Spans. - -Once an SDK has been initialized, all provided no-op Tracers are swapped for -Tracers provided by the SDK defined TracerProvider. However, any Span started -prior to this initialization does not change its behavior. Meaning, the Span -remains a no-op Span. - -The implementation to track and swap Tracers locks all new Tracer creation -until the swap is complete. This assumes that this operation is not -performance-critical. If that assumption is incorrect, be sure to configure an -SDK prior to any Tracer creation. -*/ - -import ( - "context" - "sync" - "sync/atomic" - - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/codes" - "go.opentelemetry.io/otel/trace" - "go.opentelemetry.io/otel/trace/embedded" -) - -// tracerProvider is a placeholder for a configured SDK TracerProvider. -// -// All TracerProvider functionality is forwarded to a delegate once -// configured. -type tracerProvider struct { - embedded.TracerProvider - - mtx sync.Mutex - tracers map[il]*tracer - delegate trace.TracerProvider -} - -// Compile-time guarantee that tracerProvider implements the TracerProvider -// interface. -var _ trace.TracerProvider = &tracerProvider{} - -// setDelegate configures p to delegate all TracerProvider functionality to -// provider. -// -// All Tracers provided prior to this function call are switched out to be -// Tracers provided by provider. -// -// It is guaranteed by the caller that this happens only once. -func (p *tracerProvider) setDelegate(provider trace.TracerProvider) { - p.mtx.Lock() - defer p.mtx.Unlock() - - p.delegate = provider - - if len(p.tracers) == 0 { - return - } - - for _, t := range p.tracers { - t.setDelegate(provider) - } - - p.tracers = nil -} - -// Tracer implements TracerProvider. -func (p *tracerProvider) Tracer(name string, opts ...trace.TracerOption) trace.Tracer { - p.mtx.Lock() - defer p.mtx.Unlock() - - if p.delegate != nil { - return p.delegate.Tracer(name, opts...) - } - - // At this moment it is guaranteed that no sdk is installed, save the tracer in the tracers map. - - c := trace.NewTracerConfig(opts...) - key := il{ - name: name, - version: c.InstrumentationVersion(), - schema: c.SchemaURL(), - } - - if p.tracers == nil { - p.tracers = make(map[il]*tracer) - } - - if val, ok := p.tracers[key]; ok { - return val - } - - t := &tracer{name: name, opts: opts, provider: p} - p.tracers[key] = t - return t -} - -type il struct{ name, version, schema string } - -// tracer is a placeholder for a trace.Tracer. -// -// All Tracer functionality is forwarded to a delegate once configured. -// Otherwise, all functionality is forwarded to a NoopTracer. -type tracer struct { - embedded.Tracer - - name string - opts []trace.TracerOption - provider *tracerProvider - - delegate atomic.Value -} - -// Compile-time guarantee that tracer implements the trace.Tracer interface. -var _ trace.Tracer = &tracer{} - -// setDelegate configures t to delegate all Tracer functionality to Tracers -// created by provider. -// -// All subsequent calls to the Tracer methods will be passed to the delegate. -// -// It is guaranteed by the caller that this happens only once. -func (t *tracer) setDelegate(provider trace.TracerProvider) { - t.delegate.Store(provider.Tracer(t.name, t.opts...)) -} - -// Start implements trace.Tracer by forwarding the call to t.delegate if -// set, otherwise it forwards the call to a NoopTracer. -func (t *tracer) Start(ctx context.Context, name string, opts ...trace.SpanStartOption) (context.Context, trace.Span) { - delegate := t.delegate.Load() - if delegate != nil { - return delegate.(trace.Tracer).Start(ctx, name, opts...) - } - - s := nonRecordingSpan{sc: trace.SpanContextFromContext(ctx), tracer: t} - ctx = trace.ContextWithSpan(ctx, s) - return ctx, s -} - -// nonRecordingSpan is a minimal implementation of a Span that wraps a -// SpanContext. It performs no operations other than to return the wrapped -// SpanContext. -type nonRecordingSpan struct { - embedded.Span - - sc trace.SpanContext - tracer *tracer -} - -var _ trace.Span = nonRecordingSpan{} - -// SpanContext returns the wrapped SpanContext. -func (s nonRecordingSpan) SpanContext() trace.SpanContext { return s.sc } - -// IsRecording always returns false. -func (nonRecordingSpan) IsRecording() bool { return false } - -// SetStatus does nothing. -func (nonRecordingSpan) SetStatus(codes.Code, string) {} - -// SetError does nothing. -func (nonRecordingSpan) SetError(bool) {} - -// SetAttributes does nothing. -func (nonRecordingSpan) SetAttributes(...attribute.KeyValue) {} - -// End does nothing. -func (nonRecordingSpan) End(...trace.SpanEndOption) {} - -// RecordError does nothing. -func (nonRecordingSpan) RecordError(error, ...trace.EventOption) {} - -// AddEvent does nothing. -func (nonRecordingSpan) AddEvent(string, ...trace.EventOption) {} - -// AddLink does nothing. -func (nonRecordingSpan) AddLink(trace.Link) {} - -// SetName does nothing. -func (nonRecordingSpan) SetName(string) {} - -func (s nonRecordingSpan) TracerProvider() trace.TracerProvider { return s.tracer.provider } diff --git a/vendor/go.opentelemetry.io/otel/internal/rawhelpers.go b/vendor/go.opentelemetry.io/otel/internal/rawhelpers.go deleted file mode 100644 index 3e7bb3b3..00000000 --- a/vendor/go.opentelemetry.io/otel/internal/rawhelpers.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package internal // import "go.opentelemetry.io/otel/internal" - -import ( - "math" - "unsafe" -) - -func BoolToRaw(b bool) uint64 { // nolint:revive // b is not a control flag. - if b { - return 1 - } - return 0 -} - -func RawToBool(r uint64) bool { - return r != 0 -} - -func Int64ToRaw(i int64) uint64 { - return uint64(i) -} - -func RawToInt64(r uint64) int64 { - return int64(r) -} - -func Float64ToRaw(f float64) uint64 { - return math.Float64bits(f) -} - -func RawToFloat64(r uint64) float64 { - return math.Float64frombits(r) -} - -func RawPtrToFloat64Ptr(r *uint64) *float64 { - return (*float64)(unsafe.Pointer(r)) -} - -func RawPtrToInt64Ptr(r *uint64) *int64 { - return (*int64)(unsafe.Pointer(r)) -} diff --git a/vendor/go.opentelemetry.io/otel/internal_logging.go b/vendor/go.opentelemetry.io/otel/internal_logging.go deleted file mode 100644 index 6de7f2e4..00000000 --- a/vendor/go.opentelemetry.io/otel/internal_logging.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package otel // import "go.opentelemetry.io/otel" - -import ( - "github.com/go-logr/logr" - - "go.opentelemetry.io/otel/internal/global" -) - -// SetLogger configures the logger used internally to opentelemetry. -func SetLogger(logger logr.Logger) { - global.SetLogger(logger) -} diff --git a/vendor/go.opentelemetry.io/otel/metric.go b/vendor/go.opentelemetry.io/otel/metric.go deleted file mode 100644 index 1e6473b3..00000000 --- a/vendor/go.opentelemetry.io/otel/metric.go +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package otel // import "go.opentelemetry.io/otel" - -import ( - "go.opentelemetry.io/otel/internal/global" - "go.opentelemetry.io/otel/metric" -) - -// Meter returns a Meter from the global MeterProvider. The name must be the -// name of the library providing instrumentation. This name may be the same as -// the instrumented code only if that code provides built-in instrumentation. -// If the name is empty, then a implementation defined default name will be -// used instead. -// -// If this is called before a global MeterProvider is registered the returned -// Meter will be a No-op implementation of a Meter. When a global MeterProvider -// is registered for the first time, the returned Meter, and all the -// instruments it has created or will create, are recreated automatically from -// the new MeterProvider. -// -// This is short for GetMeterProvider().Meter(name). -func Meter(name string, opts ...metric.MeterOption) metric.Meter { - return GetMeterProvider().Meter(name, opts...) -} - -// GetMeterProvider returns the registered global meter provider. -// -// If no global GetMeterProvider has been registered, a No-op GetMeterProvider -// implementation is returned. When a global GetMeterProvider is registered for -// the first time, the returned GetMeterProvider, and all the Meters it has -// created or will create, are recreated automatically from the new -// GetMeterProvider. -func GetMeterProvider() metric.MeterProvider { - return global.MeterProvider() -} - -// SetMeterProvider registers mp as the global MeterProvider. -func SetMeterProvider(mp metric.MeterProvider) { - global.SetMeterProvider(mp) -} diff --git a/vendor/go.opentelemetry.io/otel/metric/LICENSE b/vendor/go.opentelemetry.io/otel/metric/LICENSE deleted file mode 100644 index 261eeb9e..00000000 --- a/vendor/go.opentelemetry.io/otel/metric/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/go.opentelemetry.io/otel/metric/README.md b/vendor/go.opentelemetry.io/otel/metric/README.md deleted file mode 100644 index 0cf902e0..00000000 --- a/vendor/go.opentelemetry.io/otel/metric/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Metric API - -[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/metric)](https://pkg.go.dev/go.opentelemetry.io/otel/metric) diff --git a/vendor/go.opentelemetry.io/otel/metric/asyncfloat64.go b/vendor/go.opentelemetry.io/otel/metric/asyncfloat64.go deleted file mode 100644 index cf23db77..00000000 --- a/vendor/go.opentelemetry.io/otel/metric/asyncfloat64.go +++ /dev/null @@ -1,260 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package metric // import "go.opentelemetry.io/otel/metric" - -import ( - "context" - - "go.opentelemetry.io/otel/metric/embedded" -) - -// Float64Observable describes a set of instruments used asynchronously to -// record float64 measurements once per collection cycle. Observations of -// these instruments are only made within a callback. -// -// Warning: Methods may be added to this interface in minor releases. -type Float64Observable interface { - Observable - - float64Observable() -} - -// Float64ObservableCounter is an instrument used to asynchronously record -// increasing float64 measurements once per collection cycle. Observations are -// only made within a callback for this instrument. The value observed is -// assumed the to be the cumulative sum of the count. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for -// unimplemented methods. -type Float64ObservableCounter interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Float64ObservableCounter - - Float64Observable -} - -// Float64ObservableCounterConfig contains options for asynchronous counter -// instruments that record float64 values. -type Float64ObservableCounterConfig struct { - description string - unit string - callbacks []Float64Callback -} - -// NewFloat64ObservableCounterConfig returns a new -// [Float64ObservableCounterConfig] with all opts applied. -func NewFloat64ObservableCounterConfig(opts ...Float64ObservableCounterOption) Float64ObservableCounterConfig { - var config Float64ObservableCounterConfig - for _, o := range opts { - config = o.applyFloat64ObservableCounter(config) - } - return config -} - -// Description returns the configured description. -func (c Float64ObservableCounterConfig) Description() string { - return c.description -} - -// Unit returns the configured unit. -func (c Float64ObservableCounterConfig) Unit() string { - return c.unit -} - -// Callbacks returns the configured callbacks. -func (c Float64ObservableCounterConfig) Callbacks() []Float64Callback { - return c.callbacks -} - -// Float64ObservableCounterOption applies options to a -// [Float64ObservableCounterConfig]. See [Float64ObservableOption] and -// [InstrumentOption] for other options that can be used as a -// Float64ObservableCounterOption. -type Float64ObservableCounterOption interface { - applyFloat64ObservableCounter(Float64ObservableCounterConfig) Float64ObservableCounterConfig -} - -// Float64ObservableUpDownCounter is an instrument used to asynchronously -// record float64 measurements once per collection cycle. Observations are only -// made within a callback for this instrument. The value observed is assumed -// the to be the cumulative sum of the count. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Float64ObservableUpDownCounter interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Float64ObservableUpDownCounter - - Float64Observable -} - -// Float64ObservableUpDownCounterConfig contains options for asynchronous -// counter instruments that record float64 values. -type Float64ObservableUpDownCounterConfig struct { - description string - unit string - callbacks []Float64Callback -} - -// NewFloat64ObservableUpDownCounterConfig returns a new -// [Float64ObservableUpDownCounterConfig] with all opts applied. -func NewFloat64ObservableUpDownCounterConfig(opts ...Float64ObservableUpDownCounterOption) Float64ObservableUpDownCounterConfig { - var config Float64ObservableUpDownCounterConfig - for _, o := range opts { - config = o.applyFloat64ObservableUpDownCounter(config) - } - return config -} - -// Description returns the configured description. -func (c Float64ObservableUpDownCounterConfig) Description() string { - return c.description -} - -// Unit returns the configured unit. -func (c Float64ObservableUpDownCounterConfig) Unit() string { - return c.unit -} - -// Callbacks returns the configured callbacks. -func (c Float64ObservableUpDownCounterConfig) Callbacks() []Float64Callback { - return c.callbacks -} - -// Float64ObservableUpDownCounterOption applies options to a -// [Float64ObservableUpDownCounterConfig]. See [Float64ObservableOption] and -// [InstrumentOption] for other options that can be used as a -// Float64ObservableUpDownCounterOption. -type Float64ObservableUpDownCounterOption interface { - applyFloat64ObservableUpDownCounter(Float64ObservableUpDownCounterConfig) Float64ObservableUpDownCounterConfig -} - -// Float64ObservableGauge is an instrument used to asynchronously record -// instantaneous float64 measurements once per collection cycle. Observations -// are only made within a callback for this instrument. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Float64ObservableGauge interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Float64ObservableGauge - - Float64Observable -} - -// Float64ObservableGaugeConfig contains options for asynchronous counter -// instruments that record float64 values. -type Float64ObservableGaugeConfig struct { - description string - unit string - callbacks []Float64Callback -} - -// NewFloat64ObservableGaugeConfig returns a new [Float64ObservableGaugeConfig] -// with all opts applied. -func NewFloat64ObservableGaugeConfig(opts ...Float64ObservableGaugeOption) Float64ObservableGaugeConfig { - var config Float64ObservableGaugeConfig - for _, o := range opts { - config = o.applyFloat64ObservableGauge(config) - } - return config -} - -// Description returns the configured description. -func (c Float64ObservableGaugeConfig) Description() string { - return c.description -} - -// Unit returns the configured unit. -func (c Float64ObservableGaugeConfig) Unit() string { - return c.unit -} - -// Callbacks returns the configured callbacks. -func (c Float64ObservableGaugeConfig) Callbacks() []Float64Callback { - return c.callbacks -} - -// Float64ObservableGaugeOption applies options to a -// [Float64ObservableGaugeConfig]. See [Float64ObservableOption] and -// [InstrumentOption] for other options that can be used as a -// Float64ObservableGaugeOption. -type Float64ObservableGaugeOption interface { - applyFloat64ObservableGauge(Float64ObservableGaugeConfig) Float64ObservableGaugeConfig -} - -// Float64Observer is a recorder of float64 measurements. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Float64Observer interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Float64Observer - - // Observe records the float64 value. - // - // Use the WithAttributeSet (or, if performance is not a concern, - // the WithAttributes) option to include measurement attributes. - Observe(value float64, options ...ObserveOption) -} - -// Float64Callback is a function registered with a Meter that makes -// observations for a Float64Observerable instrument it is registered with. -// Calls to the Float64Observer record measurement values for the -// Float64Observable. -// -// The function needs to complete in a finite amount of time and the deadline -// of the passed context is expected to be honored. -// -// The function needs to make unique observations across all registered -// Float64Callbacks. Meaning, it should not report measurements with the same -// attributes as another Float64Callbacks also registered for the same -// instrument. -// -// The function needs to be concurrent safe. -type Float64Callback func(context.Context, Float64Observer) error - -// Float64ObservableOption applies options to float64 Observer instruments. -type Float64ObservableOption interface { - Float64ObservableCounterOption - Float64ObservableUpDownCounterOption - Float64ObservableGaugeOption -} - -type float64CallbackOpt struct { - cback Float64Callback -} - -func (o float64CallbackOpt) applyFloat64ObservableCounter(cfg Float64ObservableCounterConfig) Float64ObservableCounterConfig { - cfg.callbacks = append(cfg.callbacks, o.cback) - return cfg -} - -func (o float64CallbackOpt) applyFloat64ObservableUpDownCounter(cfg Float64ObservableUpDownCounterConfig) Float64ObservableUpDownCounterConfig { - cfg.callbacks = append(cfg.callbacks, o.cback) - return cfg -} - -func (o float64CallbackOpt) applyFloat64ObservableGauge(cfg Float64ObservableGaugeConfig) Float64ObservableGaugeConfig { - cfg.callbacks = append(cfg.callbacks, o.cback) - return cfg -} - -// WithFloat64Callback adds callback to be called for an instrument. -func WithFloat64Callback(callback Float64Callback) Float64ObservableOption { - return float64CallbackOpt{callback} -} diff --git a/vendor/go.opentelemetry.io/otel/metric/asyncint64.go b/vendor/go.opentelemetry.io/otel/metric/asyncint64.go deleted file mode 100644 index c82ba532..00000000 --- a/vendor/go.opentelemetry.io/otel/metric/asyncint64.go +++ /dev/null @@ -1,258 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package metric // import "go.opentelemetry.io/otel/metric" - -import ( - "context" - - "go.opentelemetry.io/otel/metric/embedded" -) - -// Int64Observable describes a set of instruments used asynchronously to record -// int64 measurements once per collection cycle. Observations of these -// instruments are only made within a callback. -// -// Warning: Methods may be added to this interface in minor releases. -type Int64Observable interface { - Observable - - int64Observable() -} - -// Int64ObservableCounter is an instrument used to asynchronously record -// increasing int64 measurements once per collection cycle. Observations are -// only made within a callback for this instrument. The value observed is -// assumed the to be the cumulative sum of the count. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Int64ObservableCounter interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Int64ObservableCounter - - Int64Observable -} - -// Int64ObservableCounterConfig contains options for asynchronous counter -// instruments that record int64 values. -type Int64ObservableCounterConfig struct { - description string - unit string - callbacks []Int64Callback -} - -// NewInt64ObservableCounterConfig returns a new [Int64ObservableCounterConfig] -// with all opts applied. -func NewInt64ObservableCounterConfig(opts ...Int64ObservableCounterOption) Int64ObservableCounterConfig { - var config Int64ObservableCounterConfig - for _, o := range opts { - config = o.applyInt64ObservableCounter(config) - } - return config -} - -// Description returns the configured description. -func (c Int64ObservableCounterConfig) Description() string { - return c.description -} - -// Unit returns the configured unit. -func (c Int64ObservableCounterConfig) Unit() string { - return c.unit -} - -// Callbacks returns the configured callbacks. -func (c Int64ObservableCounterConfig) Callbacks() []Int64Callback { - return c.callbacks -} - -// Int64ObservableCounterOption applies options to a -// [Int64ObservableCounterConfig]. See [Int64ObservableOption] and -// [InstrumentOption] for other options that can be used as an -// Int64ObservableCounterOption. -type Int64ObservableCounterOption interface { - applyInt64ObservableCounter(Int64ObservableCounterConfig) Int64ObservableCounterConfig -} - -// Int64ObservableUpDownCounter is an instrument used to asynchronously record -// int64 measurements once per collection cycle. Observations are only made -// within a callback for this instrument. The value observed is assumed the to -// be the cumulative sum of the count. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Int64ObservableUpDownCounter interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Int64ObservableUpDownCounter - - Int64Observable -} - -// Int64ObservableUpDownCounterConfig contains options for asynchronous counter -// instruments that record int64 values. -type Int64ObservableUpDownCounterConfig struct { - description string - unit string - callbacks []Int64Callback -} - -// NewInt64ObservableUpDownCounterConfig returns a new -// [Int64ObservableUpDownCounterConfig] with all opts applied. -func NewInt64ObservableUpDownCounterConfig(opts ...Int64ObservableUpDownCounterOption) Int64ObservableUpDownCounterConfig { - var config Int64ObservableUpDownCounterConfig - for _, o := range opts { - config = o.applyInt64ObservableUpDownCounter(config) - } - return config -} - -// Description returns the configured description. -func (c Int64ObservableUpDownCounterConfig) Description() string { - return c.description -} - -// Unit returns the configured unit. -func (c Int64ObservableUpDownCounterConfig) Unit() string { - return c.unit -} - -// Callbacks returns the configured callbacks. -func (c Int64ObservableUpDownCounterConfig) Callbacks() []Int64Callback { - return c.callbacks -} - -// Int64ObservableUpDownCounterOption applies options to a -// [Int64ObservableUpDownCounterConfig]. See [Int64ObservableOption] and -// [InstrumentOption] for other options that can be used as an -// Int64ObservableUpDownCounterOption. -type Int64ObservableUpDownCounterOption interface { - applyInt64ObservableUpDownCounter(Int64ObservableUpDownCounterConfig) Int64ObservableUpDownCounterConfig -} - -// Int64ObservableGauge is an instrument used to asynchronously record -// instantaneous int64 measurements once per collection cycle. Observations are -// only made within a callback for this instrument. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Int64ObservableGauge interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Int64ObservableGauge - - Int64Observable -} - -// Int64ObservableGaugeConfig contains options for asynchronous counter -// instruments that record int64 values. -type Int64ObservableGaugeConfig struct { - description string - unit string - callbacks []Int64Callback -} - -// NewInt64ObservableGaugeConfig returns a new [Int64ObservableGaugeConfig] -// with all opts applied. -func NewInt64ObservableGaugeConfig(opts ...Int64ObservableGaugeOption) Int64ObservableGaugeConfig { - var config Int64ObservableGaugeConfig - for _, o := range opts { - config = o.applyInt64ObservableGauge(config) - } - return config -} - -// Description returns the configured description. -func (c Int64ObservableGaugeConfig) Description() string { - return c.description -} - -// Unit returns the configured unit. -func (c Int64ObservableGaugeConfig) Unit() string { - return c.unit -} - -// Callbacks returns the configured callbacks. -func (c Int64ObservableGaugeConfig) Callbacks() []Int64Callback { - return c.callbacks -} - -// Int64ObservableGaugeOption applies options to a -// [Int64ObservableGaugeConfig]. See [Int64ObservableOption] and -// [InstrumentOption] for other options that can be used as an -// Int64ObservableGaugeOption. -type Int64ObservableGaugeOption interface { - applyInt64ObservableGauge(Int64ObservableGaugeConfig) Int64ObservableGaugeConfig -} - -// Int64Observer is a recorder of int64 measurements. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Int64Observer interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Int64Observer - - // Observe records the int64 value. - // - // Use the WithAttributeSet (or, if performance is not a concern, - // the WithAttributes) option to include measurement attributes. - Observe(value int64, options ...ObserveOption) -} - -// Int64Callback is a function registered with a Meter that makes observations -// for an Int64Observerable instrument it is registered with. Calls to the -// Int64Observer record measurement values for the Int64Observable. -// -// The function needs to complete in a finite amount of time and the deadline -// of the passed context is expected to be honored. -// -// The function needs to make unique observations across all registered -// Int64Callbacks. Meaning, it should not report measurements with the same -// attributes as another Int64Callbacks also registered for the same -// instrument. -// -// The function needs to be concurrent safe. -type Int64Callback func(context.Context, Int64Observer) error - -// Int64ObservableOption applies options to int64 Observer instruments. -type Int64ObservableOption interface { - Int64ObservableCounterOption - Int64ObservableUpDownCounterOption - Int64ObservableGaugeOption -} - -type int64CallbackOpt struct { - cback Int64Callback -} - -func (o int64CallbackOpt) applyInt64ObservableCounter(cfg Int64ObservableCounterConfig) Int64ObservableCounterConfig { - cfg.callbacks = append(cfg.callbacks, o.cback) - return cfg -} - -func (o int64CallbackOpt) applyInt64ObservableUpDownCounter(cfg Int64ObservableUpDownCounterConfig) Int64ObservableUpDownCounterConfig { - cfg.callbacks = append(cfg.callbacks, o.cback) - return cfg -} - -func (o int64CallbackOpt) applyInt64ObservableGauge(cfg Int64ObservableGaugeConfig) Int64ObservableGaugeConfig { - cfg.callbacks = append(cfg.callbacks, o.cback) - return cfg -} - -// WithInt64Callback adds callback to be called for an instrument. -func WithInt64Callback(callback Int64Callback) Int64ObservableOption { - return int64CallbackOpt{callback} -} diff --git a/vendor/go.opentelemetry.io/otel/metric/config.go b/vendor/go.opentelemetry.io/otel/metric/config.go deleted file mode 100644 index d9e3b13e..00000000 --- a/vendor/go.opentelemetry.io/otel/metric/config.go +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package metric // import "go.opentelemetry.io/otel/metric" - -import "go.opentelemetry.io/otel/attribute" - -// MeterConfig contains options for Meters. -type MeterConfig struct { - instrumentationVersion string - schemaURL string - attrs attribute.Set - - // Ensure forward compatibility by explicitly making this not comparable. - noCmp [0]func() //nolint: unused // This is indeed used. -} - -// InstrumentationVersion returns the version of the library providing -// instrumentation. -func (cfg MeterConfig) InstrumentationVersion() string { - return cfg.instrumentationVersion -} - -// InstrumentationAttributes returns the attributes associated with the library -// providing instrumentation. -func (cfg MeterConfig) InstrumentationAttributes() attribute.Set { - return cfg.attrs -} - -// SchemaURL is the schema_url of the library providing instrumentation. -func (cfg MeterConfig) SchemaURL() string { - return cfg.schemaURL -} - -// MeterOption is an interface for applying Meter options. -type MeterOption interface { - // applyMeter is used to set a MeterOption value of a MeterConfig. - applyMeter(MeterConfig) MeterConfig -} - -// NewMeterConfig creates a new MeterConfig and applies -// all the given options. -func NewMeterConfig(opts ...MeterOption) MeterConfig { - var config MeterConfig - for _, o := range opts { - config = o.applyMeter(config) - } - return config -} - -type meterOptionFunc func(MeterConfig) MeterConfig - -func (fn meterOptionFunc) applyMeter(cfg MeterConfig) MeterConfig { - return fn(cfg) -} - -// WithInstrumentationVersion sets the instrumentation version. -func WithInstrumentationVersion(version string) MeterOption { - return meterOptionFunc(func(config MeterConfig) MeterConfig { - config.instrumentationVersion = version - return config - }) -} - -// WithInstrumentationAttributes sets the instrumentation attributes. -// -// The passed attributes will be de-duplicated. -func WithInstrumentationAttributes(attr ...attribute.KeyValue) MeterOption { - return meterOptionFunc(func(config MeterConfig) MeterConfig { - config.attrs = attribute.NewSet(attr...) - return config - }) -} - -// WithSchemaURL sets the schema URL. -func WithSchemaURL(schemaURL string) MeterOption { - return meterOptionFunc(func(config MeterConfig) MeterConfig { - config.schemaURL = schemaURL - return config - }) -} diff --git a/vendor/go.opentelemetry.io/otel/metric/doc.go b/vendor/go.opentelemetry.io/otel/metric/doc.go deleted file mode 100644 index f153745b..00000000 --- a/vendor/go.opentelemetry.io/otel/metric/doc.go +++ /dev/null @@ -1,177 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -/* -Package metric provides the OpenTelemetry API used to measure metrics about -source code operation. - -This API is separate from its implementation so the instrumentation built from -it is reusable. See [go.opentelemetry.io/otel/sdk/metric] for the official -OpenTelemetry implementation of this API. - -All measurements made with this package are made via instruments. These -instruments are created by a [Meter] which itself is created by a -[MeterProvider]. Applications need to accept a [MeterProvider] implementation -as a starting point when instrumenting. This can be done directly, or by using -the OpenTelemetry global MeterProvider via [GetMeterProvider]. Using an -appropriately named [Meter] from the accepted [MeterProvider], instrumentation -can then be built from the [Meter]'s instruments. - -# Instruments - -Each instrument is designed to make measurements of a particular type. Broadly, -all instruments fall into two overlapping logical categories: asynchronous or -synchronous, and int64 or float64. - -All synchronous instruments ([Int64Counter], [Int64UpDownCounter], -[Int64Histogram], [Float64Counter], [Float64UpDownCounter], and -[Float64Histogram]) are used to measure the operation and performance of source -code during the source code execution. These instruments only make measurements -when the source code they instrument is run. - -All asynchronous instruments ([Int64ObservableCounter], -[Int64ObservableUpDownCounter], [Int64ObservableGauge], -[Float64ObservableCounter], [Float64ObservableUpDownCounter], and -[Float64ObservableGauge]) are used to measure metrics outside of the execution -of source code. They are said to make "observations" via a callback function -called once every measurement collection cycle. - -Each instrument is also grouped by the value type it measures. Either int64 or -float64. The value being measured will dictate which instrument in these -categories to use. - -Outside of these two broad categories, instruments are described by the -function they are designed to serve. All Counters ([Int64Counter], -[Float64Counter], [Int64ObservableCounter], and [Float64ObservableCounter]) are -designed to measure values that never decrease in value, but instead only -incrementally increase in value. UpDownCounters ([Int64UpDownCounter], -[Float64UpDownCounter], [Int64ObservableUpDownCounter], and -[Float64ObservableUpDownCounter]) on the other hand, are designed to measure -values that can increase and decrease. When more information needs to be -conveyed about all the synchronous measurements made during a collection cycle, -a Histogram ([Int64Histogram] and [Float64Histogram]) should be used. Finally, -when just the most recent measurement needs to be conveyed about an -asynchronous measurement, a Gauge ([Int64ObservableGauge] and -[Float64ObservableGauge]) should be used. - -See the [OpenTelemetry documentation] for more information about instruments -and their intended use. - -# Instrument Name - -OpenTelemetry defines an [instrument name syntax] that restricts what -instrument names are allowed. - -Instrument names should ... - - - Not be empty. - - Have an alphabetic character as their first letter. - - Have any letter after the first be an alphanumeric character, ‘_’, ‘.’, - ‘-’, or ‘/’. - - Have a maximum length of 255 letters. - -To ensure compatibility with observability platforms, all instruments created -need to conform to this syntax. Not all implementations of the API will validate -these names, it is the callers responsibility to ensure compliance. - -# Measurements - -Measurements are made by recording values and information about the values with -an instrument. How these measurements are recorded depends on the instrument. - -Measurements for synchronous instruments ([Int64Counter], [Int64UpDownCounter], -[Int64Histogram], [Float64Counter], [Float64UpDownCounter], and -[Float64Histogram]) are recorded using the instrument methods directly. All -counter instruments have an Add method that is used to measure an increment -value, and all histogram instruments have a Record method to measure a data -point. - -Asynchronous instruments ([Int64ObservableCounter], -[Int64ObservableUpDownCounter], [Int64ObservableGauge], -[Float64ObservableCounter], [Float64ObservableUpDownCounter], and -[Float64ObservableGauge]) record measurements within a callback function. The -callback is registered with the Meter which ensures the callback is called once -per collection cycle. A callback can be registered two ways: during the -instrument's creation using an option, or later using the RegisterCallback -method of the [Meter] that created the instrument. - -If the following criteria are met, an option ([WithInt64Callback] or -[WithFloat64Callback]) can be used during the asynchronous instrument's -creation to register a callback ([Int64Callback] or [Float64Callback], -respectively): - - - The measurement process is known when the instrument is created - - Only that instrument will make a measurement within the callback - - The callback never needs to be unregistered - -If the criteria are not met, use the RegisterCallback method of the [Meter] that -created the instrument to register a [Callback]. - -# API Implementations - -This package does not conform to the standard Go versioning policy, all of its -interfaces may have methods added to them without a package major version bump. -This non-standard API evolution could surprise an uninformed implementation -author. They could unknowingly build their implementation in a way that would -result in a runtime panic for their users that update to the new API. - -The API is designed to help inform an instrumentation author about this -non-standard API evolution. It requires them to choose a default behavior for -unimplemented interface methods. There are three behavior choices they can -make: - - - Compilation failure - - Panic - - Default to another implementation - -All interfaces in this API embed a corresponding interface from -[go.opentelemetry.io/otel/metric/embedded]. If an author wants the default -behavior of their implementations to be a compilation failure, signaling to -their users they need to update to the latest version of that implementation, -they need to embed the corresponding interface from -[go.opentelemetry.io/otel/metric/embedded] in their implementation. For -example, - - import "go.opentelemetry.io/otel/metric/embedded" - - type MeterProvider struct { - embedded.MeterProvider - // ... - } - -If an author wants the default behavior of their implementations to a panic, -they need to embed the API interface directly. - - import "go.opentelemetry.io/otel/metric" - - type MeterProvider struct { - metric.MeterProvider - // ... - } - -This is not a recommended behavior as it could lead to publishing packages that -contain runtime panics when users update other package that use newer versions -of [go.opentelemetry.io/otel/metric]. - -Finally, an author can embed another implementation in theirs. The embedded -implementation will be used for methods not defined by the author. For example, -an author who wants to default to silently dropping the call can use -[go.opentelemetry.io/otel/metric/noop]: - - import "go.opentelemetry.io/otel/metric/noop" - - type MeterProvider struct { - noop.MeterProvider - // ... - } - -It is strongly recommended that authors only embed -[go.opentelemetry.io/otel/metric/noop] if they choose this default behavior. -That implementation is the only one OpenTelemetry authors can guarantee will -fully implement all the API interfaces when a user updates their API. - -[instrument name syntax]: https://opentelemetry.io/docs/specs/otel/metrics/api/#instrument-name-syntax -[OpenTelemetry documentation]: https://opentelemetry.io/docs/concepts/signals/metrics/ -[GetMeterProvider]: https://pkg.go.dev/go.opentelemetry.io/otel#GetMeterProvider -*/ -package metric // import "go.opentelemetry.io/otel/metric" diff --git a/vendor/go.opentelemetry.io/otel/metric/embedded/README.md b/vendor/go.opentelemetry.io/otel/metric/embedded/README.md deleted file mode 100644 index 1f6e0efa..00000000 --- a/vendor/go.opentelemetry.io/otel/metric/embedded/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Metric Embedded - -[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/metric/embedded)](https://pkg.go.dev/go.opentelemetry.io/otel/metric/embedded) diff --git a/vendor/go.opentelemetry.io/otel/metric/embedded/embedded.go b/vendor/go.opentelemetry.io/otel/metric/embedded/embedded.go deleted file mode 100644 index 1a9dc680..00000000 --- a/vendor/go.opentelemetry.io/otel/metric/embedded/embedded.go +++ /dev/null @@ -1,243 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Package embedded provides interfaces embedded within the [OpenTelemetry -// metric API]. -// -// Implementers of the [OpenTelemetry metric API] can embed the relevant type -// from this package into their implementation directly. Doing so will result -// in a compilation error for users when the [OpenTelemetry metric API] is -// extended (which is something that can happen without a major version bump of -// the API package). -// -// [OpenTelemetry metric API]: https://pkg.go.dev/go.opentelemetry.io/otel/metric -package embedded // import "go.opentelemetry.io/otel/metric/embedded" - -// MeterProvider is embedded in -// [go.opentelemetry.io/otel/metric.MeterProvider]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.MeterProvider] if you want users to -// experience a compilation error, signaling they need to update to your latest -// implementation, when the [go.opentelemetry.io/otel/metric.MeterProvider] -// interface is extended (which is something that can happen without a major -// version bump of the API package). -type MeterProvider interface{ meterProvider() } - -// Meter is embedded in [go.opentelemetry.io/otel/metric.Meter]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Meter] if you want users to experience a -// compilation error, signaling they need to update to your latest -// implementation, when the [go.opentelemetry.io/otel/metric.Meter] interface -// is extended (which is something that can happen without a major version bump -// of the API package). -type Meter interface{ meter() } - -// Float64Observer is embedded in -// [go.opentelemetry.io/otel/metric.Float64Observer]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Float64Observer] if you want -// users to experience a compilation error, signaling they need to update to -// your latest implementation, when the -// [go.opentelemetry.io/otel/metric.Float64Observer] interface is -// extended (which is something that can happen without a major version bump of -// the API package). -type Float64Observer interface{ float64Observer() } - -// Int64Observer is embedded in -// [go.opentelemetry.io/otel/metric.Int64Observer]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Int64Observer] if you want users -// to experience a compilation error, signaling they need to update to your -// latest implementation, when the -// [go.opentelemetry.io/otel/metric.Int64Observer] interface is -// extended (which is something that can happen without a major version bump of -// the API package). -type Int64Observer interface{ int64Observer() } - -// Observer is embedded in [go.opentelemetry.io/otel/metric.Observer]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Observer] if you want users to experience a -// compilation error, signaling they need to update to your latest -// implementation, when the [go.opentelemetry.io/otel/metric.Observer] -// interface is extended (which is something that can happen without a major -// version bump of the API package). -type Observer interface{ observer() } - -// Registration is embedded in [go.opentelemetry.io/otel/metric.Registration]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Registration] if you want users to -// experience a compilation error, signaling they need to update to your latest -// implementation, when the [go.opentelemetry.io/otel/metric.Registration] -// interface is extended (which is something that can happen without a major -// version bump of the API package). -type Registration interface{ registration() } - -// Float64Counter is embedded in -// [go.opentelemetry.io/otel/metric.Float64Counter]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Float64Counter] if you want -// users to experience a compilation error, signaling they need to update to -// your latest implementation, when the -// [go.opentelemetry.io/otel/metric.Float64Counter] interface is -// extended (which is something that can happen without a major version bump of -// the API package). -type Float64Counter interface{ float64Counter() } - -// Float64Histogram is embedded in -// [go.opentelemetry.io/otel/metric.Float64Histogram]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Float64Histogram] if you want -// users to experience a compilation error, signaling they need to update to -// your latest implementation, when the -// [go.opentelemetry.io/otel/metric.Float64Histogram] interface is -// extended (which is something that can happen without a major version bump of -// the API package). -type Float64Histogram interface{ float64Histogram() } - -// Float64Gauge is embedded in [go.opentelemetry.io/otel/metric.Float64Gauge]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Float64Gauge] if you want users to -// experience a compilation error, signaling they need to update to your latest -// implementation, when the [go.opentelemetry.io/otel/metric.Float64Gauge] -// interface is extended (which is something that can happen without a major -// version bump of the API package). -type Float64Gauge interface{ float64Gauge() } - -// Float64ObservableCounter is embedded in -// [go.opentelemetry.io/otel/metric.Float64ObservableCounter]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Float64ObservableCounter] if you -// want users to experience a compilation error, signaling they need to update -// to your latest implementation, when the -// [go.opentelemetry.io/otel/metric.Float64ObservableCounter] -// interface is extended (which is something that can happen without a major -// version bump of the API package). -type Float64ObservableCounter interface{ float64ObservableCounter() } - -// Float64ObservableGauge is embedded in -// [go.opentelemetry.io/otel/metric.Float64ObservableGauge]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Float64ObservableGauge] if you -// want users to experience a compilation error, signaling they need to update -// to your latest implementation, when the -// [go.opentelemetry.io/otel/metric.Float64ObservableGauge] -// interface is extended (which is something that can happen without a major -// version bump of the API package). -type Float64ObservableGauge interface{ float64ObservableGauge() } - -// Float64ObservableUpDownCounter is embedded in -// [go.opentelemetry.io/otel/metric.Float64ObservableUpDownCounter]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Float64ObservableUpDownCounter] -// if you want users to experience a compilation error, signaling they need to -// update to your latest implementation, when the -// [go.opentelemetry.io/otel/metric.Float64ObservableUpDownCounter] -// interface is extended (which is something that can happen without a major -// version bump of the API package). -type Float64ObservableUpDownCounter interface{ float64ObservableUpDownCounter() } - -// Float64UpDownCounter is embedded in -// [go.opentelemetry.io/otel/metric.Float64UpDownCounter]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Float64UpDownCounter] if you -// want users to experience a compilation error, signaling they need to update -// to your latest implementation, when the -// [go.opentelemetry.io/otel/metric.Float64UpDownCounter] interface -// is extended (which is something that can happen without a major version bump -// of the API package). -type Float64UpDownCounter interface{ float64UpDownCounter() } - -// Int64Counter is embedded in -// [go.opentelemetry.io/otel/metric.Int64Counter]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Int64Counter] if you want users -// to experience a compilation error, signaling they need to update to your -// latest implementation, when the -// [go.opentelemetry.io/otel/metric.Int64Counter] interface is -// extended (which is something that can happen without a major version bump of -// the API package). -type Int64Counter interface{ int64Counter() } - -// Int64Histogram is embedded in -// [go.opentelemetry.io/otel/metric.Int64Histogram]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Int64Histogram] if you want -// users to experience a compilation error, signaling they need to update to -// your latest implementation, when the -// [go.opentelemetry.io/otel/metric.Int64Histogram] interface is -// extended (which is something that can happen without a major version bump of -// the API package). -type Int64Histogram interface{ int64Histogram() } - -// Int64Gauge is embedded in [go.opentelemetry.io/otel/metric.Int64Gauge]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Int64Gauge] if you want users to experience -// a compilation error, signaling they need to update to your latest -// implementation, when the [go.opentelemetry.io/otel/metric.Int64Gauge] -// interface is extended (which is something that can happen without a major -// version bump of the API package). -type Int64Gauge interface{ int64Gauge() } - -// Int64ObservableCounter is embedded in -// [go.opentelemetry.io/otel/metric.Int64ObservableCounter]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Int64ObservableCounter] if you -// want users to experience a compilation error, signaling they need to update -// to your latest implementation, when the -// [go.opentelemetry.io/otel/metric.Int64ObservableCounter] -// interface is extended (which is something that can happen without a major -// version bump of the API package). -type Int64ObservableCounter interface{ int64ObservableCounter() } - -// Int64ObservableGauge is embedded in -// [go.opentelemetry.io/otel/metric.Int64ObservableGauge]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Int64ObservableGauge] if you -// want users to experience a compilation error, signaling they need to update -// to your latest implementation, when the -// [go.opentelemetry.io/otel/metric.Int64ObservableGauge] interface -// is extended (which is something that can happen without a major version bump -// of the API package). -type Int64ObservableGauge interface{ int64ObservableGauge() } - -// Int64ObservableUpDownCounter is embedded in -// [go.opentelemetry.io/otel/metric.Int64ObservableUpDownCounter]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Int64ObservableUpDownCounter] if -// you want users to experience a compilation error, signaling they need to -// update to your latest implementation, when the -// [go.opentelemetry.io/otel/metric.Int64ObservableUpDownCounter] -// interface is extended (which is something that can happen without a major -// version bump of the API package). -type Int64ObservableUpDownCounter interface{ int64ObservableUpDownCounter() } - -// Int64UpDownCounter is embedded in -// [go.opentelemetry.io/otel/metric.Int64UpDownCounter]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/metric.Int64UpDownCounter] if you want -// users to experience a compilation error, signaling they need to update to -// your latest implementation, when the -// [go.opentelemetry.io/otel/metric.Int64UpDownCounter] interface is -// extended (which is something that can happen without a major version bump of -// the API package). -type Int64UpDownCounter interface{ int64UpDownCounter() } diff --git a/vendor/go.opentelemetry.io/otel/metric/instrument.go b/vendor/go.opentelemetry.io/otel/metric/instrument.go deleted file mode 100644 index ea52e402..00000000 --- a/vendor/go.opentelemetry.io/otel/metric/instrument.go +++ /dev/null @@ -1,368 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package metric // import "go.opentelemetry.io/otel/metric" - -import "go.opentelemetry.io/otel/attribute" - -// Observable is used as a grouping mechanism for all instruments that are -// updated within a Callback. -type Observable interface { - observable() -} - -// InstrumentOption applies options to all instruments. -type InstrumentOption interface { - Int64CounterOption - Int64UpDownCounterOption - Int64HistogramOption - Int64GaugeOption - Int64ObservableCounterOption - Int64ObservableUpDownCounterOption - Int64ObservableGaugeOption - - Float64CounterOption - Float64UpDownCounterOption - Float64HistogramOption - Float64GaugeOption - Float64ObservableCounterOption - Float64ObservableUpDownCounterOption - Float64ObservableGaugeOption -} - -// HistogramOption applies options to histogram instruments. -type HistogramOption interface { - Int64HistogramOption - Float64HistogramOption -} - -type descOpt string - -func (o descOpt) applyFloat64Counter(c Float64CounterConfig) Float64CounterConfig { - c.description = string(o) - return c -} - -func (o descOpt) applyFloat64UpDownCounter(c Float64UpDownCounterConfig) Float64UpDownCounterConfig { - c.description = string(o) - return c -} - -func (o descOpt) applyFloat64Histogram(c Float64HistogramConfig) Float64HistogramConfig { - c.description = string(o) - return c -} - -func (o descOpt) applyFloat64Gauge(c Float64GaugeConfig) Float64GaugeConfig { - c.description = string(o) - return c -} - -func (o descOpt) applyFloat64ObservableCounter(c Float64ObservableCounterConfig) Float64ObservableCounterConfig { - c.description = string(o) - return c -} - -func (o descOpt) applyFloat64ObservableUpDownCounter(c Float64ObservableUpDownCounterConfig) Float64ObservableUpDownCounterConfig { - c.description = string(o) - return c -} - -func (o descOpt) applyFloat64ObservableGauge(c Float64ObservableGaugeConfig) Float64ObservableGaugeConfig { - c.description = string(o) - return c -} - -func (o descOpt) applyInt64Counter(c Int64CounterConfig) Int64CounterConfig { - c.description = string(o) - return c -} - -func (o descOpt) applyInt64UpDownCounter(c Int64UpDownCounterConfig) Int64UpDownCounterConfig { - c.description = string(o) - return c -} - -func (o descOpt) applyInt64Histogram(c Int64HistogramConfig) Int64HistogramConfig { - c.description = string(o) - return c -} - -func (o descOpt) applyInt64Gauge(c Int64GaugeConfig) Int64GaugeConfig { - c.description = string(o) - return c -} - -func (o descOpt) applyInt64ObservableCounter(c Int64ObservableCounterConfig) Int64ObservableCounterConfig { - c.description = string(o) - return c -} - -func (o descOpt) applyInt64ObservableUpDownCounter(c Int64ObservableUpDownCounterConfig) Int64ObservableUpDownCounterConfig { - c.description = string(o) - return c -} - -func (o descOpt) applyInt64ObservableGauge(c Int64ObservableGaugeConfig) Int64ObservableGaugeConfig { - c.description = string(o) - return c -} - -// WithDescription sets the instrument description. -func WithDescription(desc string) InstrumentOption { return descOpt(desc) } - -type unitOpt string - -func (o unitOpt) applyFloat64Counter(c Float64CounterConfig) Float64CounterConfig { - c.unit = string(o) - return c -} - -func (o unitOpt) applyFloat64UpDownCounter(c Float64UpDownCounterConfig) Float64UpDownCounterConfig { - c.unit = string(o) - return c -} - -func (o unitOpt) applyFloat64Histogram(c Float64HistogramConfig) Float64HistogramConfig { - c.unit = string(o) - return c -} - -func (o unitOpt) applyFloat64Gauge(c Float64GaugeConfig) Float64GaugeConfig { - c.unit = string(o) - return c -} - -func (o unitOpt) applyFloat64ObservableCounter(c Float64ObservableCounterConfig) Float64ObservableCounterConfig { - c.unit = string(o) - return c -} - -func (o unitOpt) applyFloat64ObservableUpDownCounter(c Float64ObservableUpDownCounterConfig) Float64ObservableUpDownCounterConfig { - c.unit = string(o) - return c -} - -func (o unitOpt) applyFloat64ObservableGauge(c Float64ObservableGaugeConfig) Float64ObservableGaugeConfig { - c.unit = string(o) - return c -} - -func (o unitOpt) applyInt64Counter(c Int64CounterConfig) Int64CounterConfig { - c.unit = string(o) - return c -} - -func (o unitOpt) applyInt64UpDownCounter(c Int64UpDownCounterConfig) Int64UpDownCounterConfig { - c.unit = string(o) - return c -} - -func (o unitOpt) applyInt64Histogram(c Int64HistogramConfig) Int64HistogramConfig { - c.unit = string(o) - return c -} - -func (o unitOpt) applyInt64Gauge(c Int64GaugeConfig) Int64GaugeConfig { - c.unit = string(o) - return c -} - -func (o unitOpt) applyInt64ObservableCounter(c Int64ObservableCounterConfig) Int64ObservableCounterConfig { - c.unit = string(o) - return c -} - -func (o unitOpt) applyInt64ObservableUpDownCounter(c Int64ObservableUpDownCounterConfig) Int64ObservableUpDownCounterConfig { - c.unit = string(o) - return c -} - -func (o unitOpt) applyInt64ObservableGauge(c Int64ObservableGaugeConfig) Int64ObservableGaugeConfig { - c.unit = string(o) - return c -} - -// WithUnit sets the instrument unit. -// -// The unit u should be defined using the appropriate [UCUM](https://ucum.org) case-sensitive code. -func WithUnit(u string) InstrumentOption { return unitOpt(u) } - -// WithExplicitBucketBoundaries sets the instrument explicit bucket boundaries. -// -// This option is considered "advisory", and may be ignored by API implementations. -func WithExplicitBucketBoundaries(bounds ...float64) HistogramOption { return bucketOpt(bounds) } - -type bucketOpt []float64 - -func (o bucketOpt) applyFloat64Histogram(c Float64HistogramConfig) Float64HistogramConfig { - c.explicitBucketBoundaries = o - return c -} - -func (o bucketOpt) applyInt64Histogram(c Int64HistogramConfig) Int64HistogramConfig { - c.explicitBucketBoundaries = o - return c -} - -// AddOption applies options to an addition measurement. See -// [MeasurementOption] for other options that can be used as an AddOption. -type AddOption interface { - applyAdd(AddConfig) AddConfig -} - -// AddConfig contains options for an addition measurement. -type AddConfig struct { - attrs attribute.Set -} - -// NewAddConfig returns a new [AddConfig] with all opts applied. -func NewAddConfig(opts []AddOption) AddConfig { - config := AddConfig{attrs: *attribute.EmptySet()} - for _, o := range opts { - config = o.applyAdd(config) - } - return config -} - -// Attributes returns the configured attribute set. -func (c AddConfig) Attributes() attribute.Set { - return c.attrs -} - -// RecordOption applies options to an addition measurement. See -// [MeasurementOption] for other options that can be used as a RecordOption. -type RecordOption interface { - applyRecord(RecordConfig) RecordConfig -} - -// RecordConfig contains options for a recorded measurement. -type RecordConfig struct { - attrs attribute.Set -} - -// NewRecordConfig returns a new [RecordConfig] with all opts applied. -func NewRecordConfig(opts []RecordOption) RecordConfig { - config := RecordConfig{attrs: *attribute.EmptySet()} - for _, o := range opts { - config = o.applyRecord(config) - } - return config -} - -// Attributes returns the configured attribute set. -func (c RecordConfig) Attributes() attribute.Set { - return c.attrs -} - -// ObserveOption applies options to an addition measurement. See -// [MeasurementOption] for other options that can be used as a ObserveOption. -type ObserveOption interface { - applyObserve(ObserveConfig) ObserveConfig -} - -// ObserveConfig contains options for an observed measurement. -type ObserveConfig struct { - attrs attribute.Set -} - -// NewObserveConfig returns a new [ObserveConfig] with all opts applied. -func NewObserveConfig(opts []ObserveOption) ObserveConfig { - config := ObserveConfig{attrs: *attribute.EmptySet()} - for _, o := range opts { - config = o.applyObserve(config) - } - return config -} - -// Attributes returns the configured attribute set. -func (c ObserveConfig) Attributes() attribute.Set { - return c.attrs -} - -// MeasurementOption applies options to all instrument measurement. -type MeasurementOption interface { - AddOption - RecordOption - ObserveOption -} - -type attrOpt struct { - set attribute.Set -} - -// mergeSets returns the union of keys between a and b. Any duplicate keys will -// use the value associated with b. -func mergeSets(a, b attribute.Set) attribute.Set { - // NewMergeIterator uses the first value for any duplicates. - iter := attribute.NewMergeIterator(&b, &a) - merged := make([]attribute.KeyValue, 0, a.Len()+b.Len()) - for iter.Next() { - merged = append(merged, iter.Attribute()) - } - return attribute.NewSet(merged...) -} - -func (o attrOpt) applyAdd(c AddConfig) AddConfig { - switch { - case o.set.Len() == 0: - case c.attrs.Len() == 0: - c.attrs = o.set - default: - c.attrs = mergeSets(c.attrs, o.set) - } - return c -} - -func (o attrOpt) applyRecord(c RecordConfig) RecordConfig { - switch { - case o.set.Len() == 0: - case c.attrs.Len() == 0: - c.attrs = o.set - default: - c.attrs = mergeSets(c.attrs, o.set) - } - return c -} - -func (o attrOpt) applyObserve(c ObserveConfig) ObserveConfig { - switch { - case o.set.Len() == 0: - case c.attrs.Len() == 0: - c.attrs = o.set - default: - c.attrs = mergeSets(c.attrs, o.set) - } - return c -} - -// WithAttributeSet sets the attribute Set associated with a measurement is -// made with. -// -// If multiple WithAttributeSet or WithAttributes options are passed the -// attributes will be merged together in the order they are passed. Attributes -// with duplicate keys will use the last value passed. -func WithAttributeSet(attributes attribute.Set) MeasurementOption { - return attrOpt{set: attributes} -} - -// WithAttributes converts attributes into an attribute Set and sets the Set to -// be associated with a measurement. This is shorthand for: -// -// cp := make([]attribute.KeyValue, len(attributes)) -// copy(cp, attributes) -// WithAttributes(attribute.NewSet(cp...)) -// -// [attribute.NewSet] may modify the passed attributes so this will make a copy -// of attributes before creating a set in order to ensure this function is -// concurrent safe. This makes this option function less optimized in -// comparison to [WithAttributeSet]. Therefore, [WithAttributeSet] should be -// preferred for performance sensitive code. -// -// See [WithAttributeSet] for information about how multiple WithAttributes are -// merged. -func WithAttributes(attributes ...attribute.KeyValue) MeasurementOption { - cp := make([]attribute.KeyValue, len(attributes)) - copy(cp, attributes) - return attrOpt{set: attribute.NewSet(cp...)} -} diff --git a/vendor/go.opentelemetry.io/otel/metric/meter.go b/vendor/go.opentelemetry.io/otel/metric/meter.go deleted file mode 100644 index 6a7991e0..00000000 --- a/vendor/go.opentelemetry.io/otel/metric/meter.go +++ /dev/null @@ -1,265 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package metric // import "go.opentelemetry.io/otel/metric" - -import ( - "context" - - "go.opentelemetry.io/otel/metric/embedded" -) - -// MeterProvider provides access to named Meter instances, for instrumenting -// an application or package. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type MeterProvider interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.MeterProvider - - // Meter returns a new Meter with the provided name and configuration. - // - // A Meter should be scoped at most to a single package. The name needs to - // be unique so it does not collide with other names used by - // an application, nor other applications. To achieve this, the import path - // of the instrumentation package is recommended to be used as name. - // - // If the name is empty, then an implementation defined default name will - // be used instead. - Meter(name string, opts ...MeterOption) Meter -} - -// Meter provides access to instrument instances for recording metrics. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Meter interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Meter - - // Int64Counter returns a new Int64Counter instrument identified by name - // and configured with options. The instrument is used to synchronously - // record increasing int64 measurements during a computational operation. - // - // The name needs to conform to the OpenTelemetry instrument name syntax. - // See the Instrument Name section of the package documentation for more - // information. - Int64Counter(name string, options ...Int64CounterOption) (Int64Counter, error) - // Int64UpDownCounter returns a new Int64UpDownCounter instrument - // identified by name and configured with options. The instrument is used - // to synchronously record int64 measurements during a computational - // operation. - // - // The name needs to conform to the OpenTelemetry instrument name syntax. - // See the Instrument Name section of the package documentation for more - // information. - Int64UpDownCounter(name string, options ...Int64UpDownCounterOption) (Int64UpDownCounter, error) - // Int64Histogram returns a new Int64Histogram instrument identified by - // name and configured with options. The instrument is used to - // synchronously record the distribution of int64 measurements during a - // computational operation. - // - // The name needs to conform to the OpenTelemetry instrument name syntax. - // See the Instrument Name section of the package documentation for more - // information. - Int64Histogram(name string, options ...Int64HistogramOption) (Int64Histogram, error) - // Int64Gauge returns a new Int64Gauge instrument identified by name and - // configured with options. The instrument is used to synchronously record - // instantaneous int64 measurements during a computational operation. - // - // The name needs to conform to the OpenTelemetry instrument name syntax. - // See the Instrument Name section of the package documentation for more - // information. - Int64Gauge(name string, options ...Int64GaugeOption) (Int64Gauge, error) - // Int64ObservableCounter returns a new Int64ObservableCounter identified - // by name and configured with options. The instrument is used to - // asynchronously record increasing int64 measurements once per a - // measurement collection cycle. - // - // Measurements for the returned instrument are made via a callback. Use - // the WithInt64Callback option to register the callback here, or use the - // RegisterCallback method of this Meter to register one later. See the - // Measurements section of the package documentation for more information. - // - // The name needs to conform to the OpenTelemetry instrument name syntax. - // See the Instrument Name section of the package documentation for more - // information. - Int64ObservableCounter(name string, options ...Int64ObservableCounterOption) (Int64ObservableCounter, error) - // Int64ObservableUpDownCounter returns a new Int64ObservableUpDownCounter - // instrument identified by name and configured with options. The - // instrument is used to asynchronously record int64 measurements once per - // a measurement collection cycle. - // - // Measurements for the returned instrument are made via a callback. Use - // the WithInt64Callback option to register the callback here, or use the - // RegisterCallback method of this Meter to register one later. See the - // Measurements section of the package documentation for more information. - // - // The name needs to conform to the OpenTelemetry instrument name syntax. - // See the Instrument Name section of the package documentation for more - // information. - Int64ObservableUpDownCounter(name string, options ...Int64ObservableUpDownCounterOption) (Int64ObservableUpDownCounter, error) - // Int64ObservableGauge returns a new Int64ObservableGauge instrument - // identified by name and configured with options. The instrument is used - // to asynchronously record instantaneous int64 measurements once per a - // measurement collection cycle. - // - // Measurements for the returned instrument are made via a callback. Use - // the WithInt64Callback option to register the callback here, or use the - // RegisterCallback method of this Meter to register one later. See the - // Measurements section of the package documentation for more information. - // - // The name needs to conform to the OpenTelemetry instrument name syntax. - // See the Instrument Name section of the package documentation for more - // information. - Int64ObservableGauge(name string, options ...Int64ObservableGaugeOption) (Int64ObservableGauge, error) - - // Float64Counter returns a new Float64Counter instrument identified by - // name and configured with options. The instrument is used to - // synchronously record increasing float64 measurements during a - // computational operation. - // - // The name needs to conform to the OpenTelemetry instrument name syntax. - // See the Instrument Name section of the package documentation for more - // information. - Float64Counter(name string, options ...Float64CounterOption) (Float64Counter, error) - // Float64UpDownCounter returns a new Float64UpDownCounter instrument - // identified by name and configured with options. The instrument is used - // to synchronously record float64 measurements during a computational - // operation. - // - // The name needs to conform to the OpenTelemetry instrument name syntax. - // See the Instrument Name section of the package documentation for more - // information. - Float64UpDownCounter(name string, options ...Float64UpDownCounterOption) (Float64UpDownCounter, error) - // Float64Histogram returns a new Float64Histogram instrument identified by - // name and configured with options. The instrument is used to - // synchronously record the distribution of float64 measurements during a - // computational operation. - // - // The name needs to conform to the OpenTelemetry instrument name syntax. - // See the Instrument Name section of the package documentation for more - // information. - Float64Histogram(name string, options ...Float64HistogramOption) (Float64Histogram, error) - // Float64Gauge returns a new Float64Gauge instrument identified by name and - // configured with options. The instrument is used to synchronously record - // instantaneous float64 measurements during a computational operation. - // - // The name needs to conform to the OpenTelemetry instrument name syntax. - // See the Instrument Name section of the package documentation for more - // information. - Float64Gauge(name string, options ...Float64GaugeOption) (Float64Gauge, error) - // Float64ObservableCounter returns a new Float64ObservableCounter - // instrument identified by name and configured with options. The - // instrument is used to asynchronously record increasing float64 - // measurements once per a measurement collection cycle. - // - // Measurements for the returned instrument are made via a callback. Use - // the WithFloat64Callback option to register the callback here, or use the - // RegisterCallback method of this Meter to register one later. See the - // Measurements section of the package documentation for more information. - // - // The name needs to conform to the OpenTelemetry instrument name syntax. - // See the Instrument Name section of the package documentation for more - // information. - Float64ObservableCounter(name string, options ...Float64ObservableCounterOption) (Float64ObservableCounter, error) - // Float64ObservableUpDownCounter returns a new - // Float64ObservableUpDownCounter instrument identified by name and - // configured with options. The instrument is used to asynchronously record - // float64 measurements once per a measurement collection cycle. - // - // Measurements for the returned instrument are made via a callback. Use - // the WithFloat64Callback option to register the callback here, or use the - // RegisterCallback method of this Meter to register one later. See the - // Measurements section of the package documentation for more information. - // - // The name needs to conform to the OpenTelemetry instrument name syntax. - // See the Instrument Name section of the package documentation for more - // information. - Float64ObservableUpDownCounter(name string, options ...Float64ObservableUpDownCounterOption) (Float64ObservableUpDownCounter, error) - // Float64ObservableGauge returns a new Float64ObservableGauge instrument - // identified by name and configured with options. The instrument is used - // to asynchronously record instantaneous float64 measurements once per a - // measurement collection cycle. - // - // Measurements for the returned instrument are made via a callback. Use - // the WithFloat64Callback option to register the callback here, or use the - // RegisterCallback method of this Meter to register one later. See the - // Measurements section of the package documentation for more information. - // - // The name needs to conform to the OpenTelemetry instrument name syntax. - // See the Instrument Name section of the package documentation for more - // information. - Float64ObservableGauge(name string, options ...Float64ObservableGaugeOption) (Float64ObservableGauge, error) - - // RegisterCallback registers f to be called during the collection of a - // measurement cycle. - // - // If Unregister of the returned Registration is called, f needs to be - // unregistered and not called during collection. - // - // The instruments f is registered with are the only instruments that f may - // observe values for. - // - // If no instruments are passed, f should not be registered nor called - // during collection. - // - // The function f needs to be concurrent safe. - RegisterCallback(f Callback, instruments ...Observable) (Registration, error) -} - -// Callback is a function registered with a Meter that makes observations for -// the set of instruments it is registered with. The Observer parameter is used -// to record measurement observations for these instruments. -// -// The function needs to complete in a finite amount of time and the deadline -// of the passed context is expected to be honored. -// -// The function needs to make unique observations across all registered -// Callbacks. Meaning, it should not report measurements for an instrument with -// the same attributes as another Callback will report. -// -// The function needs to be concurrent safe. -type Callback func(context.Context, Observer) error - -// Observer records measurements for multiple instruments in a Callback. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Observer interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Observer - - // ObserveFloat64 records the float64 value for obsrv. - ObserveFloat64(obsrv Float64Observable, value float64, opts ...ObserveOption) - // ObserveInt64 records the int64 value for obsrv. - ObserveInt64(obsrv Int64Observable, value int64, opts ...ObserveOption) -} - -// Registration is an token representing the unique registration of a callback -// for a set of instruments with a Meter. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Registration interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Registration - - // Unregister removes the callback registration from a Meter. - // - // This method needs to be idempotent and concurrent safe. - Unregister() error -} diff --git a/vendor/go.opentelemetry.io/otel/metric/syncfloat64.go b/vendor/go.opentelemetry.io/otel/metric/syncfloat64.go deleted file mode 100644 index 8403a4ba..00000000 --- a/vendor/go.opentelemetry.io/otel/metric/syncfloat64.go +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package metric // import "go.opentelemetry.io/otel/metric" - -import ( - "context" - - "go.opentelemetry.io/otel/metric/embedded" -) - -// Float64Counter is an instrument that records increasing float64 values. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Float64Counter interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Float64Counter - - // Add records a change to the counter. - // - // Use the WithAttributeSet (or, if performance is not a concern, - // the WithAttributes) option to include measurement attributes. - Add(ctx context.Context, incr float64, options ...AddOption) -} - -// Float64CounterConfig contains options for synchronous counter instruments that -// record float64 values. -type Float64CounterConfig struct { - description string - unit string -} - -// NewFloat64CounterConfig returns a new [Float64CounterConfig] with all opts -// applied. -func NewFloat64CounterConfig(opts ...Float64CounterOption) Float64CounterConfig { - var config Float64CounterConfig - for _, o := range opts { - config = o.applyFloat64Counter(config) - } - return config -} - -// Description returns the configured description. -func (c Float64CounterConfig) Description() string { - return c.description -} - -// Unit returns the configured unit. -func (c Float64CounterConfig) Unit() string { - return c.unit -} - -// Float64CounterOption applies options to a [Float64CounterConfig]. See -// [InstrumentOption] for other options that can be used as a -// Float64CounterOption. -type Float64CounterOption interface { - applyFloat64Counter(Float64CounterConfig) Float64CounterConfig -} - -// Float64UpDownCounter is an instrument that records increasing or decreasing -// float64 values. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Float64UpDownCounter interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Float64UpDownCounter - - // Add records a change to the counter. - // - // Use the WithAttributeSet (or, if performance is not a concern, - // the WithAttributes) option to include measurement attributes. - Add(ctx context.Context, incr float64, options ...AddOption) -} - -// Float64UpDownCounterConfig contains options for synchronous counter -// instruments that record float64 values. -type Float64UpDownCounterConfig struct { - description string - unit string -} - -// NewFloat64UpDownCounterConfig returns a new [Float64UpDownCounterConfig] -// with all opts applied. -func NewFloat64UpDownCounterConfig(opts ...Float64UpDownCounterOption) Float64UpDownCounterConfig { - var config Float64UpDownCounterConfig - for _, o := range opts { - config = o.applyFloat64UpDownCounter(config) - } - return config -} - -// Description returns the configured description. -func (c Float64UpDownCounterConfig) Description() string { - return c.description -} - -// Unit returns the configured unit. -func (c Float64UpDownCounterConfig) Unit() string { - return c.unit -} - -// Float64UpDownCounterOption applies options to a -// [Float64UpDownCounterConfig]. See [InstrumentOption] for other options that -// can be used as a Float64UpDownCounterOption. -type Float64UpDownCounterOption interface { - applyFloat64UpDownCounter(Float64UpDownCounterConfig) Float64UpDownCounterConfig -} - -// Float64Histogram is an instrument that records a distribution of float64 -// values. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Float64Histogram interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Float64Histogram - - // Record adds an additional value to the distribution. - // - // Use the WithAttributeSet (or, if performance is not a concern, - // the WithAttributes) option to include measurement attributes. - Record(ctx context.Context, incr float64, options ...RecordOption) -} - -// Float64HistogramConfig contains options for synchronous histogram -// instruments that record float64 values. -type Float64HistogramConfig struct { - description string - unit string - explicitBucketBoundaries []float64 -} - -// NewFloat64HistogramConfig returns a new [Float64HistogramConfig] with all -// opts applied. -func NewFloat64HistogramConfig(opts ...Float64HistogramOption) Float64HistogramConfig { - var config Float64HistogramConfig - for _, o := range opts { - config = o.applyFloat64Histogram(config) - } - return config -} - -// Description returns the configured description. -func (c Float64HistogramConfig) Description() string { - return c.description -} - -// Unit returns the configured unit. -func (c Float64HistogramConfig) Unit() string { - return c.unit -} - -// ExplicitBucketBoundaries returns the configured explicit bucket boundaries. -func (c Float64HistogramConfig) ExplicitBucketBoundaries() []float64 { - return c.explicitBucketBoundaries -} - -// Float64HistogramOption applies options to a [Float64HistogramConfig]. See -// [InstrumentOption] for other options that can be used as a -// Float64HistogramOption. -type Float64HistogramOption interface { - applyFloat64Histogram(Float64HistogramConfig) Float64HistogramConfig -} - -// Float64Gauge is an instrument that records instantaneous float64 values. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Float64Gauge interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Float64Gauge - - // Record records the instantaneous value. - // - // Use the WithAttributeSet (or, if performance is not a concern, - // the WithAttributes) option to include measurement attributes. - Record(ctx context.Context, value float64, options ...RecordOption) -} - -// Float64GaugeConfig contains options for synchronous gauge instruments that -// record float64 values. -type Float64GaugeConfig struct { - description string - unit string -} - -// NewFloat64GaugeConfig returns a new [Float64GaugeConfig] with all opts -// applied. -func NewFloat64GaugeConfig(opts ...Float64GaugeOption) Float64GaugeConfig { - var config Float64GaugeConfig - for _, o := range opts { - config = o.applyFloat64Gauge(config) - } - return config -} - -// Description returns the configured description. -func (c Float64GaugeConfig) Description() string { - return c.description -} - -// Unit returns the configured unit. -func (c Float64GaugeConfig) Unit() string { - return c.unit -} - -// Float64GaugeOption applies options to a [Float64GaugeConfig]. See -// [InstrumentOption] for other options that can be used as a -// Float64GaugeOption. -type Float64GaugeOption interface { - applyFloat64Gauge(Float64GaugeConfig) Float64GaugeConfig -} diff --git a/vendor/go.opentelemetry.io/otel/metric/syncint64.go b/vendor/go.opentelemetry.io/otel/metric/syncint64.go deleted file mode 100644 index 783fdfba..00000000 --- a/vendor/go.opentelemetry.io/otel/metric/syncint64.go +++ /dev/null @@ -1,226 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package metric // import "go.opentelemetry.io/otel/metric" - -import ( - "context" - - "go.opentelemetry.io/otel/metric/embedded" -) - -// Int64Counter is an instrument that records increasing int64 values. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Int64Counter interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Int64Counter - - // Add records a change to the counter. - // - // Use the WithAttributeSet (or, if performance is not a concern, - // the WithAttributes) option to include measurement attributes. - Add(ctx context.Context, incr int64, options ...AddOption) -} - -// Int64CounterConfig contains options for synchronous counter instruments that -// record int64 values. -type Int64CounterConfig struct { - description string - unit string -} - -// NewInt64CounterConfig returns a new [Int64CounterConfig] with all opts -// applied. -func NewInt64CounterConfig(opts ...Int64CounterOption) Int64CounterConfig { - var config Int64CounterConfig - for _, o := range opts { - config = o.applyInt64Counter(config) - } - return config -} - -// Description returns the configured description. -func (c Int64CounterConfig) Description() string { - return c.description -} - -// Unit returns the configured unit. -func (c Int64CounterConfig) Unit() string { - return c.unit -} - -// Int64CounterOption applies options to a [Int64CounterConfig]. See -// [InstrumentOption] for other options that can be used as an -// Int64CounterOption. -type Int64CounterOption interface { - applyInt64Counter(Int64CounterConfig) Int64CounterConfig -} - -// Int64UpDownCounter is an instrument that records increasing or decreasing -// int64 values. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Int64UpDownCounter interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Int64UpDownCounter - - // Add records a change to the counter. - // - // Use the WithAttributeSet (or, if performance is not a concern, - // the WithAttributes) option to include measurement attributes. - Add(ctx context.Context, incr int64, options ...AddOption) -} - -// Int64UpDownCounterConfig contains options for synchronous counter -// instruments that record int64 values. -type Int64UpDownCounterConfig struct { - description string - unit string -} - -// NewInt64UpDownCounterConfig returns a new [Int64UpDownCounterConfig] with -// all opts applied. -func NewInt64UpDownCounterConfig(opts ...Int64UpDownCounterOption) Int64UpDownCounterConfig { - var config Int64UpDownCounterConfig - for _, o := range opts { - config = o.applyInt64UpDownCounter(config) - } - return config -} - -// Description returns the configured description. -func (c Int64UpDownCounterConfig) Description() string { - return c.description -} - -// Unit returns the configured unit. -func (c Int64UpDownCounterConfig) Unit() string { - return c.unit -} - -// Int64UpDownCounterOption applies options to a [Int64UpDownCounterConfig]. -// See [InstrumentOption] for other options that can be used as an -// Int64UpDownCounterOption. -type Int64UpDownCounterOption interface { - applyInt64UpDownCounter(Int64UpDownCounterConfig) Int64UpDownCounterConfig -} - -// Int64Histogram is an instrument that records a distribution of int64 -// values. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Int64Histogram interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Int64Histogram - - // Record adds an additional value to the distribution. - // - // Use the WithAttributeSet (or, if performance is not a concern, - // the WithAttributes) option to include measurement attributes. - Record(ctx context.Context, incr int64, options ...RecordOption) -} - -// Int64HistogramConfig contains options for synchronous histogram instruments -// that record int64 values. -type Int64HistogramConfig struct { - description string - unit string - explicitBucketBoundaries []float64 -} - -// NewInt64HistogramConfig returns a new [Int64HistogramConfig] with all opts -// applied. -func NewInt64HistogramConfig(opts ...Int64HistogramOption) Int64HistogramConfig { - var config Int64HistogramConfig - for _, o := range opts { - config = o.applyInt64Histogram(config) - } - return config -} - -// Description returns the configured description. -func (c Int64HistogramConfig) Description() string { - return c.description -} - -// Unit returns the configured unit. -func (c Int64HistogramConfig) Unit() string { - return c.unit -} - -// ExplicitBucketBoundaries returns the configured explicit bucket boundaries. -func (c Int64HistogramConfig) ExplicitBucketBoundaries() []float64 { - return c.explicitBucketBoundaries -} - -// Int64HistogramOption applies options to a [Int64HistogramConfig]. See -// [InstrumentOption] for other options that can be used as an -// Int64HistogramOption. -type Int64HistogramOption interface { - applyInt64Histogram(Int64HistogramConfig) Int64HistogramConfig -} - -// Int64Gauge is an instrument that records instantaneous int64 values. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Int64Gauge interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Int64Gauge - - // Record records the instantaneous value. - // - // Use the WithAttributeSet (or, if performance is not a concern, - // the WithAttributes) option to include measurement attributes. - Record(ctx context.Context, value int64, options ...RecordOption) -} - -// Int64GaugeConfig contains options for synchronous gauge instruments that -// record int64 values. -type Int64GaugeConfig struct { - description string - unit string -} - -// NewInt64GaugeConfig returns a new [Int64GaugeConfig] with all opts -// applied. -func NewInt64GaugeConfig(opts ...Int64GaugeOption) Int64GaugeConfig { - var config Int64GaugeConfig - for _, o := range opts { - config = o.applyInt64Gauge(config) - } - return config -} - -// Description returns the configured description. -func (c Int64GaugeConfig) Description() string { - return c.description -} - -// Unit returns the configured unit. -func (c Int64GaugeConfig) Unit() string { - return c.unit -} - -// Int64GaugeOption applies options to a [Int64GaugeConfig]. See -// [InstrumentOption] for other options that can be used as a -// Int64GaugeOption. -type Int64GaugeOption interface { - applyInt64Gauge(Int64GaugeConfig) Int64GaugeConfig -} diff --git a/vendor/go.opentelemetry.io/otel/propagation.go b/vendor/go.opentelemetry.io/otel/propagation.go deleted file mode 100644 index 2fd94973..00000000 --- a/vendor/go.opentelemetry.io/otel/propagation.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package otel // import "go.opentelemetry.io/otel" - -import ( - "go.opentelemetry.io/otel/internal/global" - "go.opentelemetry.io/otel/propagation" -) - -// GetTextMapPropagator returns the global TextMapPropagator. If none has been -// set, a No-Op TextMapPropagator is returned. -func GetTextMapPropagator() propagation.TextMapPropagator { - return global.TextMapPropagator() -} - -// SetTextMapPropagator sets propagator as the global TextMapPropagator. -func SetTextMapPropagator(propagator propagation.TextMapPropagator) { - global.SetTextMapPropagator(propagator) -} diff --git a/vendor/go.opentelemetry.io/otel/propagation/README.md b/vendor/go.opentelemetry.io/otel/propagation/README.md deleted file mode 100644 index e2959ac7..00000000 --- a/vendor/go.opentelemetry.io/otel/propagation/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Propagation - -[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/propagation)](https://pkg.go.dev/go.opentelemetry.io/otel/propagation) diff --git a/vendor/go.opentelemetry.io/otel/propagation/baggage.go b/vendor/go.opentelemetry.io/otel/propagation/baggage.go deleted file mode 100644 index 552263ba..00000000 --- a/vendor/go.opentelemetry.io/otel/propagation/baggage.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package propagation // import "go.opentelemetry.io/otel/propagation" - -import ( - "context" - - "go.opentelemetry.io/otel/baggage" -) - -const baggageHeader = "baggage" - -// Baggage is a propagator that supports the W3C Baggage format. -// -// This propagates user-defined baggage associated with a trace. The complete -// specification is defined at https://www.w3.org/TR/baggage/. -type Baggage struct{} - -var _ TextMapPropagator = Baggage{} - -// Inject sets baggage key-values from ctx into the carrier. -func (b Baggage) Inject(ctx context.Context, carrier TextMapCarrier) { - bStr := baggage.FromContext(ctx).String() - if bStr != "" { - carrier.Set(baggageHeader, bStr) - } -} - -// Extract returns a copy of parent with the baggage from the carrier added. -func (b Baggage) Extract(parent context.Context, carrier TextMapCarrier) context.Context { - bStr := carrier.Get(baggageHeader) - if bStr == "" { - return parent - } - - bag, err := baggage.Parse(bStr) - if err != nil { - return parent - } - return baggage.ContextWithBaggage(parent, bag) -} - -// Fields returns the keys who's values are set with Inject. -func (b Baggage) Fields() []string { - return []string{baggageHeader} -} diff --git a/vendor/go.opentelemetry.io/otel/propagation/doc.go b/vendor/go.opentelemetry.io/otel/propagation/doc.go deleted file mode 100644 index 33a3baf1..00000000 --- a/vendor/go.opentelemetry.io/otel/propagation/doc.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -/* -Package propagation contains OpenTelemetry context propagators. - -OpenTelemetry propagators are used to extract and inject context data from and -into messages exchanged by applications. The propagator supported by this -package is the W3C Trace Context encoding -(https://www.w3.org/TR/trace-context/), and W3C Baggage -(https://www.w3.org/TR/baggage/). -*/ -package propagation // import "go.opentelemetry.io/otel/propagation" diff --git a/vendor/go.opentelemetry.io/otel/propagation/propagation.go b/vendor/go.opentelemetry.io/otel/propagation/propagation.go deleted file mode 100644 index 8c8286aa..00000000 --- a/vendor/go.opentelemetry.io/otel/propagation/propagation.go +++ /dev/null @@ -1,142 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package propagation // import "go.opentelemetry.io/otel/propagation" - -import ( - "context" - "net/http" -) - -// TextMapCarrier is the storage medium used by a TextMapPropagator. -type TextMapCarrier interface { - // DO NOT CHANGE: any modification will not be backwards compatible and - // must never be done outside of a new major release. - - // Get returns the value associated with the passed key. - Get(key string) string - // DO NOT CHANGE: any modification will not be backwards compatible and - // must never be done outside of a new major release. - - // Set stores the key-value pair. - Set(key string, value string) - // DO NOT CHANGE: any modification will not be backwards compatible and - // must never be done outside of a new major release. - - // Keys lists the keys stored in this carrier. - Keys() []string - // DO NOT CHANGE: any modification will not be backwards compatible and - // must never be done outside of a new major release. -} - -// MapCarrier is a TextMapCarrier that uses a map held in memory as a storage -// medium for propagated key-value pairs. -type MapCarrier map[string]string - -// Compile time check that MapCarrier implements the TextMapCarrier. -var _ TextMapCarrier = MapCarrier{} - -// Get returns the value associated with the passed key. -func (c MapCarrier) Get(key string) string { - return c[key] -} - -// Set stores the key-value pair. -func (c MapCarrier) Set(key, value string) { - c[key] = value -} - -// Keys lists the keys stored in this carrier. -func (c MapCarrier) Keys() []string { - keys := make([]string, 0, len(c)) - for k := range c { - keys = append(keys, k) - } - return keys -} - -// HeaderCarrier adapts http.Header to satisfy the TextMapCarrier interface. -type HeaderCarrier http.Header - -// Get returns the value associated with the passed key. -func (hc HeaderCarrier) Get(key string) string { - return http.Header(hc).Get(key) -} - -// Set stores the key-value pair. -func (hc HeaderCarrier) Set(key string, value string) { - http.Header(hc).Set(key, value) -} - -// Keys lists the keys stored in this carrier. -func (hc HeaderCarrier) Keys() []string { - keys := make([]string, 0, len(hc)) - for k := range hc { - keys = append(keys, k) - } - return keys -} - -// TextMapPropagator propagates cross-cutting concerns as key-value text -// pairs within a carrier that travels in-band across process boundaries. -type TextMapPropagator interface { - // DO NOT CHANGE: any modification will not be backwards compatible and - // must never be done outside of a new major release. - - // Inject set cross-cutting concerns from the Context into the carrier. - Inject(ctx context.Context, carrier TextMapCarrier) - // DO NOT CHANGE: any modification will not be backwards compatible and - // must never be done outside of a new major release. - - // Extract reads cross-cutting concerns from the carrier into a Context. - Extract(ctx context.Context, carrier TextMapCarrier) context.Context - // DO NOT CHANGE: any modification will not be backwards compatible and - // must never be done outside of a new major release. - - // Fields returns the keys whose values are set with Inject. - Fields() []string - // DO NOT CHANGE: any modification will not be backwards compatible and - // must never be done outside of a new major release. -} - -type compositeTextMapPropagator []TextMapPropagator - -func (p compositeTextMapPropagator) Inject(ctx context.Context, carrier TextMapCarrier) { - for _, i := range p { - i.Inject(ctx, carrier) - } -} - -func (p compositeTextMapPropagator) Extract(ctx context.Context, carrier TextMapCarrier) context.Context { - for _, i := range p { - ctx = i.Extract(ctx, carrier) - } - return ctx -} - -func (p compositeTextMapPropagator) Fields() []string { - unique := make(map[string]struct{}) - for _, i := range p { - for _, k := range i.Fields() { - unique[k] = struct{}{} - } - } - - fields := make([]string, 0, len(unique)) - for k := range unique { - fields = append(fields, k) - } - return fields -} - -// NewCompositeTextMapPropagator returns a unified TextMapPropagator from the -// group of passed TextMapPropagator. This allows different cross-cutting -// concerns to be propagates in a unified manner. -// -// The returned TextMapPropagator will inject and extract cross-cutting -// concerns in the order the TextMapPropagators were provided. Additionally, -// the Fields method will return a de-duplicated slice of the keys that are -// set with the Inject method. -func NewCompositeTextMapPropagator(p ...TextMapPropagator) TextMapPropagator { - return compositeTextMapPropagator(p) -} diff --git a/vendor/go.opentelemetry.io/otel/propagation/trace_context.go b/vendor/go.opentelemetry.io/otel/propagation/trace_context.go deleted file mode 100644 index 6870e316..00000000 --- a/vendor/go.opentelemetry.io/otel/propagation/trace_context.go +++ /dev/null @@ -1,156 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package propagation // import "go.opentelemetry.io/otel/propagation" - -import ( - "context" - "encoding/hex" - "fmt" - "strings" - - "go.opentelemetry.io/otel/trace" -) - -const ( - supportedVersion = 0 - maxVersion = 254 - traceparentHeader = "traceparent" - tracestateHeader = "tracestate" - delimiter = "-" -) - -// TraceContext is a propagator that supports the W3C Trace Context format -// (https://www.w3.org/TR/trace-context/) -// -// This propagator will propagate the traceparent and tracestate headers to -// guarantee traces are not broken. It is up to the users of this propagator -// to choose if they want to participate in a trace by modifying the -// traceparent header and relevant parts of the tracestate header containing -// their proprietary information. -type TraceContext struct{} - -var ( - _ TextMapPropagator = TraceContext{} - versionPart = fmt.Sprintf("%.2X", supportedVersion) -) - -// Inject injects the trace context from ctx into carrier. -func (tc TraceContext) Inject(ctx context.Context, carrier TextMapCarrier) { - sc := trace.SpanContextFromContext(ctx) - if !sc.IsValid() { - return - } - - if ts := sc.TraceState().String(); ts != "" { - carrier.Set(tracestateHeader, ts) - } - - // Clear all flags other than the trace-context supported sampling bit. - flags := sc.TraceFlags() & trace.FlagsSampled - - var sb strings.Builder - sb.Grow(2 + 32 + 16 + 2 + 3) - _, _ = sb.WriteString(versionPart) - traceID := sc.TraceID() - spanID := sc.SpanID() - flagByte := [1]byte{byte(flags)} - var buf [32]byte - for _, src := range [][]byte{traceID[:], spanID[:], flagByte[:]} { - _ = sb.WriteByte(delimiter[0]) - n := hex.Encode(buf[:], src) - _, _ = sb.Write(buf[:n]) - } - carrier.Set(traceparentHeader, sb.String()) -} - -// Extract reads tracecontext from the carrier into a returned Context. -// -// The returned Context will be a copy of ctx and contain the extracted -// tracecontext as the remote SpanContext. If the extracted tracecontext is -// invalid, the passed ctx will be returned directly instead. -func (tc TraceContext) Extract(ctx context.Context, carrier TextMapCarrier) context.Context { - sc := tc.extract(carrier) - if !sc.IsValid() { - return ctx - } - return trace.ContextWithRemoteSpanContext(ctx, sc) -} - -func (tc TraceContext) extract(carrier TextMapCarrier) trace.SpanContext { - h := carrier.Get(traceparentHeader) - if h == "" { - return trace.SpanContext{} - } - - var ver [1]byte - if !extractPart(ver[:], &h, 2) { - return trace.SpanContext{} - } - version := int(ver[0]) - if version > maxVersion { - return trace.SpanContext{} - } - - var scc trace.SpanContextConfig - if !extractPart(scc.TraceID[:], &h, 32) { - return trace.SpanContext{} - } - if !extractPart(scc.SpanID[:], &h, 16) { - return trace.SpanContext{} - } - - var opts [1]byte - if !extractPart(opts[:], &h, 2) { - return trace.SpanContext{} - } - if version == 0 && (h != "" || opts[0] > 2) { - // version 0 not allow extra - // version 0 not allow other flag - return trace.SpanContext{} - } - - // Clear all flags other than the trace-context supported sampling bit. - scc.TraceFlags = trace.TraceFlags(opts[0]) & trace.FlagsSampled - - // Ignore the error returned here. Failure to parse tracestate MUST NOT - // affect the parsing of traceparent according to the W3C tracecontext - // specification. - scc.TraceState, _ = trace.ParseTraceState(carrier.Get(tracestateHeader)) - scc.Remote = true - - sc := trace.NewSpanContext(scc) - if !sc.IsValid() { - return trace.SpanContext{} - } - - return sc -} - -// upperHex detect hex is upper case Unicode characters. -func upperHex(v string) bool { - for _, c := range v { - if c >= 'A' && c <= 'F' { - return true - } - } - return false -} - -func extractPart(dst []byte, h *string, n int) bool { - part, left, _ := strings.Cut(*h, delimiter) - *h = left - // hex.Decode decodes unsupported upper-case characters, so exclude explicitly. - if len(part) != n || upperHex(part) { - return false - } - if p, err := hex.Decode(dst, []byte(part)); err != nil || p != n/2 { - return false - } - return true -} - -// Fields returns the keys who's values are set with Inject. -func (tc TraceContext) Fields() []string { - return []string{traceparentHeader, tracestateHeader} -} diff --git a/vendor/go.opentelemetry.io/otel/renovate.json b/vendor/go.opentelemetry.io/otel/renovate.json deleted file mode 100644 index 8c5ac55c..00000000 --- a/vendor/go.opentelemetry.io/otel/renovate.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:recommended" - ], - "ignorePaths": [], - "labels": ["Skip Changelog", "dependencies"], - "postUpdateOptions" : [ - "gomodTidy" - ], - "packageRules": [ - { - "matchManagers": ["gomod"], - "matchDepTypes": ["indirect"], - "enabled": true - }, - { - "matchFileNames": ["internal/tools/**"], - "matchManagers": ["gomod"], - "matchDepTypes": ["indirect"], - "enabled": false - } - ] -} diff --git a/vendor/go.opentelemetry.io/otel/requirements.txt b/vendor/go.opentelemetry.io/otel/requirements.txt deleted file mode 100644 index ab09daf9..00000000 --- a/vendor/go.opentelemetry.io/otel/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -codespell==2.3.0 diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/README.md b/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/README.md deleted file mode 100644 index 82e1f46b..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Semconv v1.20.0 - -[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/semconv/v1.20.0)](https://pkg.go.dev/go.opentelemetry.io/otel/semconv/v1.20.0) diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/attribute_group.go b/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/attribute_group.go deleted file mode 100644 index 6685c392..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/attribute_group.go +++ /dev/null @@ -1,1198 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Code generated from semantic convention specification. DO NOT EDIT. - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.20.0" - -import "go.opentelemetry.io/otel/attribute" - -// Describes HTTP attributes. -const ( - // HTTPMethodKey is the attribute Key conforming to the "http.method" - // semantic conventions. It represents the hTTP request method. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: 'GET', 'POST', 'HEAD' - HTTPMethodKey = attribute.Key("http.method") - - // HTTPStatusCodeKey is the attribute Key conforming to the - // "http.status_code" semantic conventions. It represents the [HTTP - // response status code](https://tools.ietf.org/html/rfc7231#section-6). - // - // Type: int - // RequirementLevel: ConditionallyRequired (If and only if one was - // received/sent.) - // Stability: stable - // Examples: 200 - HTTPStatusCodeKey = attribute.Key("http.status_code") -) - -// HTTPMethod returns an attribute KeyValue conforming to the "http.method" -// semantic conventions. It represents the hTTP request method. -func HTTPMethod(val string) attribute.KeyValue { - return HTTPMethodKey.String(val) -} - -// HTTPStatusCode returns an attribute KeyValue conforming to the -// "http.status_code" semantic conventions. It represents the [HTTP response -// status code](https://tools.ietf.org/html/rfc7231#section-6). -func HTTPStatusCode(val int) attribute.KeyValue { - return HTTPStatusCodeKey.Int(val) -} - -// HTTP Server spans attributes -const ( - // HTTPSchemeKey is the attribute Key conforming to the "http.scheme" - // semantic conventions. It represents the URI scheme identifying the used - // protocol. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: 'http', 'https' - HTTPSchemeKey = attribute.Key("http.scheme") - - // HTTPRouteKey is the attribute Key conforming to the "http.route" - // semantic conventions. It represents the matched route (path template in - // the format used by the respective server framework). See note below - // - // Type: string - // RequirementLevel: ConditionallyRequired (If and only if it's available) - // Stability: stable - // Examples: '/users/:userID?', '{controller}/{action}/{id?}' - // Note: MUST NOT be populated when this is not supported by the HTTP - // server framework as the route attribute should have low-cardinality and - // the URI path can NOT substitute it. - // SHOULD include the [application - // root](/specification/trace/semantic_conventions/http.md#http-server-definitions) - // if there is one. - HTTPRouteKey = attribute.Key("http.route") -) - -// HTTPScheme returns an attribute KeyValue conforming to the "http.scheme" -// semantic conventions. It represents the URI scheme identifying the used -// protocol. -func HTTPScheme(val string) attribute.KeyValue { - return HTTPSchemeKey.String(val) -} - -// HTTPRoute returns an attribute KeyValue conforming to the "http.route" -// semantic conventions. It represents the matched route (path template in the -// format used by the respective server framework). See note below -func HTTPRoute(val string) attribute.KeyValue { - return HTTPRouteKey.String(val) -} - -// Attributes for Events represented using Log Records. -const ( - // EventNameKey is the attribute Key conforming to the "event.name" - // semantic conventions. It represents the name identifies the event. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: 'click', 'exception' - EventNameKey = attribute.Key("event.name") - - // EventDomainKey is the attribute Key conforming to the "event.domain" - // semantic conventions. It represents the domain identifies the business - // context for the events. - // - // Type: Enum - // RequirementLevel: Required - // Stability: stable - // Note: Events across different domains may have same `event.name`, yet be - // unrelated events. - EventDomainKey = attribute.Key("event.domain") -) - -var ( - // Events from browser apps - EventDomainBrowser = EventDomainKey.String("browser") - // Events from mobile apps - EventDomainDevice = EventDomainKey.String("device") - // Events from Kubernetes - EventDomainK8S = EventDomainKey.String("k8s") -) - -// EventName returns an attribute KeyValue conforming to the "event.name" -// semantic conventions. It represents the name identifies the event. -func EventName(val string) attribute.KeyValue { - return EventNameKey.String(val) -} - -// These attributes may be used for any network related operation. -const ( - // NetTransportKey is the attribute Key conforming to the "net.transport" - // semantic conventions. It represents the transport protocol used. See - // note below. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - NetTransportKey = attribute.Key("net.transport") - - // NetProtocolNameKey is the attribute Key conforming to the - // "net.protocol.name" semantic conventions. It represents the application - // layer protocol used. The value SHOULD be normalized to lowercase. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'amqp', 'http', 'mqtt' - NetProtocolNameKey = attribute.Key("net.protocol.name") - - // NetProtocolVersionKey is the attribute Key conforming to the - // "net.protocol.version" semantic conventions. It represents the version - // of the application layer protocol used. See note below. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '3.1.1' - // Note: `net.protocol.version` refers to the version of the protocol used - // and might be different from the protocol client's version. If the HTTP - // client used has a version of `0.27.2`, but sends HTTP version `1.1`, - // this attribute should be set to `1.1`. - NetProtocolVersionKey = attribute.Key("net.protocol.version") - - // NetSockPeerNameKey is the attribute Key conforming to the - // "net.sock.peer.name" semantic conventions. It represents the remote - // socket peer name. - // - // Type: string - // RequirementLevel: Recommended (If available and different from - // `net.peer.name` and if `net.sock.peer.addr` is set.) - // Stability: stable - // Examples: 'proxy.example.com' - NetSockPeerNameKey = attribute.Key("net.sock.peer.name") - - // NetSockPeerAddrKey is the attribute Key conforming to the - // "net.sock.peer.addr" semantic conventions. It represents the remote - // socket peer address: IPv4 or IPv6 for internet protocols, path for local - // communication, - // [etc](https://man7.org/linux/man-pages/man7/address_families.7.html). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '127.0.0.1', '/tmp/mysql.sock' - NetSockPeerAddrKey = attribute.Key("net.sock.peer.addr") - - // NetSockPeerPortKey is the attribute Key conforming to the - // "net.sock.peer.port" semantic conventions. It represents the remote - // socket peer port. - // - // Type: int - // RequirementLevel: Recommended (If defined for the address family and if - // different than `net.peer.port` and if `net.sock.peer.addr` is set.) - // Stability: stable - // Examples: 16456 - NetSockPeerPortKey = attribute.Key("net.sock.peer.port") - - // NetSockFamilyKey is the attribute Key conforming to the - // "net.sock.family" semantic conventions. It represents the protocol - // [address - // family](https://man7.org/linux/man-pages/man7/address_families.7.html) - // which is used for communication. - // - // Type: Enum - // RequirementLevel: ConditionallyRequired (If different than `inet` and if - // any of `net.sock.peer.addr` or `net.sock.host.addr` are set. Consumers - // of telemetry SHOULD accept both IPv4 and IPv6 formats for the address in - // `net.sock.peer.addr` if `net.sock.family` is not set. This is to support - // instrumentations that follow previous versions of this document.) - // Stability: stable - // Examples: 'inet6', 'bluetooth' - NetSockFamilyKey = attribute.Key("net.sock.family") - - // NetPeerNameKey is the attribute Key conforming to the "net.peer.name" - // semantic conventions. It represents the logical remote hostname, see - // note below. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'example.com' - // Note: `net.peer.name` SHOULD NOT be set if capturing it would require an - // extra DNS lookup. - NetPeerNameKey = attribute.Key("net.peer.name") - - // NetPeerPortKey is the attribute Key conforming to the "net.peer.port" - // semantic conventions. It represents the logical remote port number - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 80, 8080, 443 - NetPeerPortKey = attribute.Key("net.peer.port") - - // NetHostNameKey is the attribute Key conforming to the "net.host.name" - // semantic conventions. It represents the logical local hostname or - // similar, see note below. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'localhost' - NetHostNameKey = attribute.Key("net.host.name") - - // NetHostPortKey is the attribute Key conforming to the "net.host.port" - // semantic conventions. It represents the logical local port number, - // preferably the one that the peer used to connect - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 8080 - NetHostPortKey = attribute.Key("net.host.port") - - // NetSockHostAddrKey is the attribute Key conforming to the - // "net.sock.host.addr" semantic conventions. It represents the local - // socket address. Useful in case of a multi-IP host. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '192.168.0.1' - NetSockHostAddrKey = attribute.Key("net.sock.host.addr") - - // NetSockHostPortKey is the attribute Key conforming to the - // "net.sock.host.port" semantic conventions. It represents the local - // socket port number. - // - // Type: int - // RequirementLevel: ConditionallyRequired (If defined for the address - // family and if different than `net.host.port` and if `net.sock.host.addr` - // is set. In other cases, it is still recommended to set this.) - // Stability: stable - // Examples: 35555 - NetSockHostPortKey = attribute.Key("net.sock.host.port") -) - -var ( - // ip_tcp - NetTransportTCP = NetTransportKey.String("ip_tcp") - // ip_udp - NetTransportUDP = NetTransportKey.String("ip_udp") - // Named or anonymous pipe. See note below - NetTransportPipe = NetTransportKey.String("pipe") - // In-process communication - NetTransportInProc = NetTransportKey.String("inproc") - // Something else (non IP-based) - NetTransportOther = NetTransportKey.String("other") -) - -var ( - // IPv4 address - NetSockFamilyInet = NetSockFamilyKey.String("inet") - // IPv6 address - NetSockFamilyInet6 = NetSockFamilyKey.String("inet6") - // Unix domain socket path - NetSockFamilyUnix = NetSockFamilyKey.String("unix") -) - -// NetProtocolName returns an attribute KeyValue conforming to the -// "net.protocol.name" semantic conventions. It represents the application -// layer protocol used. The value SHOULD be normalized to lowercase. -func NetProtocolName(val string) attribute.KeyValue { - return NetProtocolNameKey.String(val) -} - -// NetProtocolVersion returns an attribute KeyValue conforming to the -// "net.protocol.version" semantic conventions. It represents the version of -// the application layer protocol used. See note below. -func NetProtocolVersion(val string) attribute.KeyValue { - return NetProtocolVersionKey.String(val) -} - -// NetSockPeerName returns an attribute KeyValue conforming to the -// "net.sock.peer.name" semantic conventions. It represents the remote socket -// peer name. -func NetSockPeerName(val string) attribute.KeyValue { - return NetSockPeerNameKey.String(val) -} - -// NetSockPeerAddr returns an attribute KeyValue conforming to the -// "net.sock.peer.addr" semantic conventions. It represents the remote socket -// peer address: IPv4 or IPv6 for internet protocols, path for local -// communication, -// [etc](https://man7.org/linux/man-pages/man7/address_families.7.html). -func NetSockPeerAddr(val string) attribute.KeyValue { - return NetSockPeerAddrKey.String(val) -} - -// NetSockPeerPort returns an attribute KeyValue conforming to the -// "net.sock.peer.port" semantic conventions. It represents the remote socket -// peer port. -func NetSockPeerPort(val int) attribute.KeyValue { - return NetSockPeerPortKey.Int(val) -} - -// NetPeerName returns an attribute KeyValue conforming to the -// "net.peer.name" semantic conventions. It represents the logical remote -// hostname, see note below. -func NetPeerName(val string) attribute.KeyValue { - return NetPeerNameKey.String(val) -} - -// NetPeerPort returns an attribute KeyValue conforming to the -// "net.peer.port" semantic conventions. It represents the logical remote port -// number -func NetPeerPort(val int) attribute.KeyValue { - return NetPeerPortKey.Int(val) -} - -// NetHostName returns an attribute KeyValue conforming to the -// "net.host.name" semantic conventions. It represents the logical local -// hostname or similar, see note below. -func NetHostName(val string) attribute.KeyValue { - return NetHostNameKey.String(val) -} - -// NetHostPort returns an attribute KeyValue conforming to the -// "net.host.port" semantic conventions. It represents the logical local port -// number, preferably the one that the peer used to connect -func NetHostPort(val int) attribute.KeyValue { - return NetHostPortKey.Int(val) -} - -// NetSockHostAddr returns an attribute KeyValue conforming to the -// "net.sock.host.addr" semantic conventions. It represents the local socket -// address. Useful in case of a multi-IP host. -func NetSockHostAddr(val string) attribute.KeyValue { - return NetSockHostAddrKey.String(val) -} - -// NetSockHostPort returns an attribute KeyValue conforming to the -// "net.sock.host.port" semantic conventions. It represents the local socket -// port number. -func NetSockHostPort(val int) attribute.KeyValue { - return NetSockHostPortKey.Int(val) -} - -// These attributes may be used for any network related operation. -const ( - // NetHostConnectionTypeKey is the attribute Key conforming to the - // "net.host.connection.type" semantic conventions. It represents the - // internet connection type currently being used by the host. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - // Examples: 'wifi' - NetHostConnectionTypeKey = attribute.Key("net.host.connection.type") - - // NetHostConnectionSubtypeKey is the attribute Key conforming to the - // "net.host.connection.subtype" semantic conventions. It represents the - // this describes more details regarding the connection.type. It may be the - // type of cell technology connection, but it could be used for describing - // details about a wifi connection. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - // Examples: 'LTE' - NetHostConnectionSubtypeKey = attribute.Key("net.host.connection.subtype") - - // NetHostCarrierNameKey is the attribute Key conforming to the - // "net.host.carrier.name" semantic conventions. It represents the name of - // the mobile carrier. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'sprint' - NetHostCarrierNameKey = attribute.Key("net.host.carrier.name") - - // NetHostCarrierMccKey is the attribute Key conforming to the - // "net.host.carrier.mcc" semantic conventions. It represents the mobile - // carrier country code. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '310' - NetHostCarrierMccKey = attribute.Key("net.host.carrier.mcc") - - // NetHostCarrierMncKey is the attribute Key conforming to the - // "net.host.carrier.mnc" semantic conventions. It represents the mobile - // carrier network code. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '001' - NetHostCarrierMncKey = attribute.Key("net.host.carrier.mnc") - - // NetHostCarrierIccKey is the attribute Key conforming to the - // "net.host.carrier.icc" semantic conventions. It represents the ISO - // 3166-1 alpha-2 2-character country code associated with the mobile - // carrier network. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'DE' - NetHostCarrierIccKey = attribute.Key("net.host.carrier.icc") -) - -var ( - // wifi - NetHostConnectionTypeWifi = NetHostConnectionTypeKey.String("wifi") - // wired - NetHostConnectionTypeWired = NetHostConnectionTypeKey.String("wired") - // cell - NetHostConnectionTypeCell = NetHostConnectionTypeKey.String("cell") - // unavailable - NetHostConnectionTypeUnavailable = NetHostConnectionTypeKey.String("unavailable") - // unknown - NetHostConnectionTypeUnknown = NetHostConnectionTypeKey.String("unknown") -) - -var ( - // GPRS - NetHostConnectionSubtypeGprs = NetHostConnectionSubtypeKey.String("gprs") - // EDGE - NetHostConnectionSubtypeEdge = NetHostConnectionSubtypeKey.String("edge") - // UMTS - NetHostConnectionSubtypeUmts = NetHostConnectionSubtypeKey.String("umts") - // CDMA - NetHostConnectionSubtypeCdma = NetHostConnectionSubtypeKey.String("cdma") - // EVDO Rel. 0 - NetHostConnectionSubtypeEvdo0 = NetHostConnectionSubtypeKey.String("evdo_0") - // EVDO Rev. A - NetHostConnectionSubtypeEvdoA = NetHostConnectionSubtypeKey.String("evdo_a") - // CDMA2000 1XRTT - NetHostConnectionSubtypeCdma20001xrtt = NetHostConnectionSubtypeKey.String("cdma2000_1xrtt") - // HSDPA - NetHostConnectionSubtypeHsdpa = NetHostConnectionSubtypeKey.String("hsdpa") - // HSUPA - NetHostConnectionSubtypeHsupa = NetHostConnectionSubtypeKey.String("hsupa") - // HSPA - NetHostConnectionSubtypeHspa = NetHostConnectionSubtypeKey.String("hspa") - // IDEN - NetHostConnectionSubtypeIden = NetHostConnectionSubtypeKey.String("iden") - // EVDO Rev. B - NetHostConnectionSubtypeEvdoB = NetHostConnectionSubtypeKey.String("evdo_b") - // LTE - NetHostConnectionSubtypeLte = NetHostConnectionSubtypeKey.String("lte") - // EHRPD - NetHostConnectionSubtypeEhrpd = NetHostConnectionSubtypeKey.String("ehrpd") - // HSPAP - NetHostConnectionSubtypeHspap = NetHostConnectionSubtypeKey.String("hspap") - // GSM - NetHostConnectionSubtypeGsm = NetHostConnectionSubtypeKey.String("gsm") - // TD-SCDMA - NetHostConnectionSubtypeTdScdma = NetHostConnectionSubtypeKey.String("td_scdma") - // IWLAN - NetHostConnectionSubtypeIwlan = NetHostConnectionSubtypeKey.String("iwlan") - // 5G NR (New Radio) - NetHostConnectionSubtypeNr = NetHostConnectionSubtypeKey.String("nr") - // 5G NRNSA (New Radio Non-Standalone) - NetHostConnectionSubtypeNrnsa = NetHostConnectionSubtypeKey.String("nrnsa") - // LTE CA - NetHostConnectionSubtypeLteCa = NetHostConnectionSubtypeKey.String("lte_ca") -) - -// NetHostCarrierName returns an attribute KeyValue conforming to the -// "net.host.carrier.name" semantic conventions. It represents the name of the -// mobile carrier. -func NetHostCarrierName(val string) attribute.KeyValue { - return NetHostCarrierNameKey.String(val) -} - -// NetHostCarrierMcc returns an attribute KeyValue conforming to the -// "net.host.carrier.mcc" semantic conventions. It represents the mobile -// carrier country code. -func NetHostCarrierMcc(val string) attribute.KeyValue { - return NetHostCarrierMccKey.String(val) -} - -// NetHostCarrierMnc returns an attribute KeyValue conforming to the -// "net.host.carrier.mnc" semantic conventions. It represents the mobile -// carrier network code. -func NetHostCarrierMnc(val string) attribute.KeyValue { - return NetHostCarrierMncKey.String(val) -} - -// NetHostCarrierIcc returns an attribute KeyValue conforming to the -// "net.host.carrier.icc" semantic conventions. It represents the ISO 3166-1 -// alpha-2 2-character country code associated with the mobile carrier network. -func NetHostCarrierIcc(val string) attribute.KeyValue { - return NetHostCarrierIccKey.String(val) -} - -// Semantic conventions for HTTP client and server Spans. -const ( - // HTTPRequestContentLengthKey is the attribute Key conforming to the - // "http.request_content_length" semantic conventions. It represents the - // size of the request payload body in bytes. This is the number of bytes - // transferred excluding headers and is often, but not always, present as - // the - // [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) - // header. For requests using transport encoding, this should be the - // compressed size. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 3495 - HTTPRequestContentLengthKey = attribute.Key("http.request_content_length") - - // HTTPResponseContentLengthKey is the attribute Key conforming to the - // "http.response_content_length" semantic conventions. It represents the - // size of the response payload body in bytes. This is the number of bytes - // transferred excluding headers and is often, but not always, present as - // the - // [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) - // header. For requests using transport encoding, this should be the - // compressed size. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 3495 - HTTPResponseContentLengthKey = attribute.Key("http.response_content_length") -) - -// HTTPRequestContentLength returns an attribute KeyValue conforming to the -// "http.request_content_length" semantic conventions. It represents the size -// of the request payload body in bytes. This is the number of bytes -// transferred excluding headers and is often, but not always, present as the -// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) -// header. For requests using transport encoding, this should be the compressed -// size. -func HTTPRequestContentLength(val int) attribute.KeyValue { - return HTTPRequestContentLengthKey.Int(val) -} - -// HTTPResponseContentLength returns an attribute KeyValue conforming to the -// "http.response_content_length" semantic conventions. It represents the size -// of the response payload body in bytes. This is the number of bytes -// transferred excluding headers and is often, but not always, present as the -// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) -// header. For requests using transport encoding, this should be the compressed -// size. -func HTTPResponseContentLength(val int) attribute.KeyValue { - return HTTPResponseContentLengthKey.Int(val) -} - -// Semantic convention describing per-message attributes populated on messaging -// spans or links. -const ( - // MessagingMessageIDKey is the attribute Key conforming to the - // "messaging.message.id" semantic conventions. It represents a value used - // by the messaging system as an identifier for the message, represented as - // a string. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '452a7c7c7c7048c2f887f61572b18fc2' - MessagingMessageIDKey = attribute.Key("messaging.message.id") - - // MessagingMessageConversationIDKey is the attribute Key conforming to the - // "messaging.message.conversation_id" semantic conventions. It represents - // the [conversation ID](#conversations) identifying the conversation to - // which the message belongs, represented as a string. Sometimes called - // "Correlation ID". - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'MyConversationID' - MessagingMessageConversationIDKey = attribute.Key("messaging.message.conversation_id") - - // MessagingMessagePayloadSizeBytesKey is the attribute Key conforming to - // the "messaging.message.payload_size_bytes" semantic conventions. It - // represents the (uncompressed) size of the message payload in bytes. Also - // use this attribute if it is unknown whether the compressed or - // uncompressed payload size is reported. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 2738 - MessagingMessagePayloadSizeBytesKey = attribute.Key("messaging.message.payload_size_bytes") - - // MessagingMessagePayloadCompressedSizeBytesKey is the attribute Key - // conforming to the "messaging.message.payload_compressed_size_bytes" - // semantic conventions. It represents the compressed size of the message - // payload in bytes. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 2048 - MessagingMessagePayloadCompressedSizeBytesKey = attribute.Key("messaging.message.payload_compressed_size_bytes") -) - -// MessagingMessageID returns an attribute KeyValue conforming to the -// "messaging.message.id" semantic conventions. It represents a value used by -// the messaging system as an identifier for the message, represented as a -// string. -func MessagingMessageID(val string) attribute.KeyValue { - return MessagingMessageIDKey.String(val) -} - -// MessagingMessageConversationID returns an attribute KeyValue conforming -// to the "messaging.message.conversation_id" semantic conventions. It -// represents the [conversation ID](#conversations) identifying the -// conversation to which the message belongs, represented as a string. -// Sometimes called "Correlation ID". -func MessagingMessageConversationID(val string) attribute.KeyValue { - return MessagingMessageConversationIDKey.String(val) -} - -// MessagingMessagePayloadSizeBytes returns an attribute KeyValue conforming -// to the "messaging.message.payload_size_bytes" semantic conventions. It -// represents the (uncompressed) size of the message payload in bytes. Also use -// this attribute if it is unknown whether the compressed or uncompressed -// payload size is reported. -func MessagingMessagePayloadSizeBytes(val int) attribute.KeyValue { - return MessagingMessagePayloadSizeBytesKey.Int(val) -} - -// MessagingMessagePayloadCompressedSizeBytes returns an attribute KeyValue -// conforming to the "messaging.message.payload_compressed_size_bytes" semantic -// conventions. It represents the compressed size of the message payload in -// bytes. -func MessagingMessagePayloadCompressedSizeBytes(val int) attribute.KeyValue { - return MessagingMessagePayloadCompressedSizeBytesKey.Int(val) -} - -// Semantic convention for attributes that describe messaging destination on -// broker -const ( - // MessagingDestinationNameKey is the attribute Key conforming to the - // "messaging.destination.name" semantic conventions. It represents the - // message destination name - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'MyQueue', 'MyTopic' - // Note: Destination name SHOULD uniquely identify a specific queue, topic - // or other entity within the broker. If - // the broker does not have such notion, the destination name SHOULD - // uniquely identify the broker. - MessagingDestinationNameKey = attribute.Key("messaging.destination.name") - - // MessagingDestinationTemplateKey is the attribute Key conforming to the - // "messaging.destination.template" semantic conventions. It represents the - // low cardinality representation of the messaging destination name - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '/customers/{customerID}' - // Note: Destination names could be constructed from templates. An example - // would be a destination name involving a user name or product id. - // Although the destination name in this case is of high cardinality, the - // underlying template is of low cardinality and can be effectively used - // for grouping and aggregation. - MessagingDestinationTemplateKey = attribute.Key("messaging.destination.template") - - // MessagingDestinationTemporaryKey is the attribute Key conforming to the - // "messaging.destination.temporary" semantic conventions. It represents a - // boolean that is true if the message destination is temporary and might - // not exist anymore after messages are processed. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: stable - MessagingDestinationTemporaryKey = attribute.Key("messaging.destination.temporary") - - // MessagingDestinationAnonymousKey is the attribute Key conforming to the - // "messaging.destination.anonymous" semantic conventions. It represents a - // boolean that is true if the message destination is anonymous (could be - // unnamed or have auto-generated name). - // - // Type: boolean - // RequirementLevel: Optional - // Stability: stable - MessagingDestinationAnonymousKey = attribute.Key("messaging.destination.anonymous") -) - -// MessagingDestinationName returns an attribute KeyValue conforming to the -// "messaging.destination.name" semantic conventions. It represents the message -// destination name -func MessagingDestinationName(val string) attribute.KeyValue { - return MessagingDestinationNameKey.String(val) -} - -// MessagingDestinationTemplate returns an attribute KeyValue conforming to -// the "messaging.destination.template" semantic conventions. It represents the -// low cardinality representation of the messaging destination name -func MessagingDestinationTemplate(val string) attribute.KeyValue { - return MessagingDestinationTemplateKey.String(val) -} - -// MessagingDestinationTemporary returns an attribute KeyValue conforming to -// the "messaging.destination.temporary" semantic conventions. It represents a -// boolean that is true if the message destination is temporary and might not -// exist anymore after messages are processed. -func MessagingDestinationTemporary(val bool) attribute.KeyValue { - return MessagingDestinationTemporaryKey.Bool(val) -} - -// MessagingDestinationAnonymous returns an attribute KeyValue conforming to -// the "messaging.destination.anonymous" semantic conventions. It represents a -// boolean that is true if the message destination is anonymous (could be -// unnamed or have auto-generated name). -func MessagingDestinationAnonymous(val bool) attribute.KeyValue { - return MessagingDestinationAnonymousKey.Bool(val) -} - -// Semantic convention for attributes that describe messaging source on broker -const ( - // MessagingSourceNameKey is the attribute Key conforming to the - // "messaging.source.name" semantic conventions. It represents the message - // source name - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'MyQueue', 'MyTopic' - // Note: Source name SHOULD uniquely identify a specific queue, topic, or - // other entity within the broker. If - // the broker does not have such notion, the source name SHOULD uniquely - // identify the broker. - MessagingSourceNameKey = attribute.Key("messaging.source.name") - - // MessagingSourceTemplateKey is the attribute Key conforming to the - // "messaging.source.template" semantic conventions. It represents the low - // cardinality representation of the messaging source name - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '/customers/{customerID}' - // Note: Source names could be constructed from templates. An example would - // be a source name involving a user name or product id. Although the - // source name in this case is of high cardinality, the underlying template - // is of low cardinality and can be effectively used for grouping and - // aggregation. - MessagingSourceTemplateKey = attribute.Key("messaging.source.template") - - // MessagingSourceTemporaryKey is the attribute Key conforming to the - // "messaging.source.temporary" semantic conventions. It represents a - // boolean that is true if the message source is temporary and might not - // exist anymore after messages are processed. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: stable - MessagingSourceTemporaryKey = attribute.Key("messaging.source.temporary") - - // MessagingSourceAnonymousKey is the attribute Key conforming to the - // "messaging.source.anonymous" semantic conventions. It represents a - // boolean that is true if the message source is anonymous (could be - // unnamed or have auto-generated name). - // - // Type: boolean - // RequirementLevel: Optional - // Stability: stable - MessagingSourceAnonymousKey = attribute.Key("messaging.source.anonymous") -) - -// MessagingSourceName returns an attribute KeyValue conforming to the -// "messaging.source.name" semantic conventions. It represents the message -// source name -func MessagingSourceName(val string) attribute.KeyValue { - return MessagingSourceNameKey.String(val) -} - -// MessagingSourceTemplate returns an attribute KeyValue conforming to the -// "messaging.source.template" semantic conventions. It represents the low -// cardinality representation of the messaging source name -func MessagingSourceTemplate(val string) attribute.KeyValue { - return MessagingSourceTemplateKey.String(val) -} - -// MessagingSourceTemporary returns an attribute KeyValue conforming to the -// "messaging.source.temporary" semantic conventions. It represents a boolean -// that is true if the message source is temporary and might not exist anymore -// after messages are processed. -func MessagingSourceTemporary(val bool) attribute.KeyValue { - return MessagingSourceTemporaryKey.Bool(val) -} - -// MessagingSourceAnonymous returns an attribute KeyValue conforming to the -// "messaging.source.anonymous" semantic conventions. It represents a boolean -// that is true if the message source is anonymous (could be unnamed or have -// auto-generated name). -func MessagingSourceAnonymous(val bool) attribute.KeyValue { - return MessagingSourceAnonymousKey.Bool(val) -} - -// Attributes for RabbitMQ -const ( - // MessagingRabbitmqDestinationRoutingKeyKey is the attribute Key - // conforming to the "messaging.rabbitmq.destination.routing_key" semantic - // conventions. It represents the rabbitMQ message routing key. - // - // Type: string - // RequirementLevel: ConditionallyRequired (If not empty.) - // Stability: stable - // Examples: 'myKey' - MessagingRabbitmqDestinationRoutingKeyKey = attribute.Key("messaging.rabbitmq.destination.routing_key") -) - -// MessagingRabbitmqDestinationRoutingKey returns an attribute KeyValue -// conforming to the "messaging.rabbitmq.destination.routing_key" semantic -// conventions. It represents the rabbitMQ message routing key. -func MessagingRabbitmqDestinationRoutingKey(val string) attribute.KeyValue { - return MessagingRabbitmqDestinationRoutingKeyKey.String(val) -} - -// Attributes for Apache Kafka -const ( - // MessagingKafkaMessageKeyKey is the attribute Key conforming to the - // "messaging.kafka.message.key" semantic conventions. It represents the - // message keys in Kafka are used for grouping alike messages to ensure - // they're processed on the same partition. They differ from - // `messaging.message.id` in that they're not unique. If the key is `null`, - // the attribute MUST NOT be set. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'myKey' - // Note: If the key type is not string, it's string representation has to - // be supplied for the attribute. If the key has no unambiguous, canonical - // string form, don't include its value. - MessagingKafkaMessageKeyKey = attribute.Key("messaging.kafka.message.key") - - // MessagingKafkaConsumerGroupKey is the attribute Key conforming to the - // "messaging.kafka.consumer.group" semantic conventions. It represents the - // name of the Kafka Consumer Group that is handling the message. Only - // applies to consumers, not producers. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'my-group' - MessagingKafkaConsumerGroupKey = attribute.Key("messaging.kafka.consumer.group") - - // MessagingKafkaClientIDKey is the attribute Key conforming to the - // "messaging.kafka.client_id" semantic conventions. It represents the - // client ID for the Consumer or Producer that is handling the message. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'client-5' - MessagingKafkaClientIDKey = attribute.Key("messaging.kafka.client_id") - - // MessagingKafkaDestinationPartitionKey is the attribute Key conforming to - // the "messaging.kafka.destination.partition" semantic conventions. It - // represents the partition the message is sent to. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 2 - MessagingKafkaDestinationPartitionKey = attribute.Key("messaging.kafka.destination.partition") - - // MessagingKafkaSourcePartitionKey is the attribute Key conforming to the - // "messaging.kafka.source.partition" semantic conventions. It represents - // the partition the message is received from. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 2 - MessagingKafkaSourcePartitionKey = attribute.Key("messaging.kafka.source.partition") - - // MessagingKafkaMessageOffsetKey is the attribute Key conforming to the - // "messaging.kafka.message.offset" semantic conventions. It represents the - // offset of a record in the corresponding Kafka partition. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 42 - MessagingKafkaMessageOffsetKey = attribute.Key("messaging.kafka.message.offset") - - // MessagingKafkaMessageTombstoneKey is the attribute Key conforming to the - // "messaging.kafka.message.tombstone" semantic conventions. It represents - // a boolean that is true if the message is a tombstone. - // - // Type: boolean - // RequirementLevel: ConditionallyRequired (If value is `true`. When - // missing, the value is assumed to be `false`.) - // Stability: stable - MessagingKafkaMessageTombstoneKey = attribute.Key("messaging.kafka.message.tombstone") -) - -// MessagingKafkaMessageKey returns an attribute KeyValue conforming to the -// "messaging.kafka.message.key" semantic conventions. It represents the -// message keys in Kafka are used for grouping alike messages to ensure they're -// processed on the same partition. They differ from `messaging.message.id` in -// that they're not unique. If the key is `null`, the attribute MUST NOT be -// set. -func MessagingKafkaMessageKey(val string) attribute.KeyValue { - return MessagingKafkaMessageKeyKey.String(val) -} - -// MessagingKafkaConsumerGroup returns an attribute KeyValue conforming to -// the "messaging.kafka.consumer.group" semantic conventions. It represents the -// name of the Kafka Consumer Group that is handling the message. Only applies -// to consumers, not producers. -func MessagingKafkaConsumerGroup(val string) attribute.KeyValue { - return MessagingKafkaConsumerGroupKey.String(val) -} - -// MessagingKafkaClientID returns an attribute KeyValue conforming to the -// "messaging.kafka.client_id" semantic conventions. It represents the client -// ID for the Consumer or Producer that is handling the message. -func MessagingKafkaClientID(val string) attribute.KeyValue { - return MessagingKafkaClientIDKey.String(val) -} - -// MessagingKafkaDestinationPartition returns an attribute KeyValue -// conforming to the "messaging.kafka.destination.partition" semantic -// conventions. It represents the partition the message is sent to. -func MessagingKafkaDestinationPartition(val int) attribute.KeyValue { - return MessagingKafkaDestinationPartitionKey.Int(val) -} - -// MessagingKafkaSourcePartition returns an attribute KeyValue conforming to -// the "messaging.kafka.source.partition" semantic conventions. It represents -// the partition the message is received from. -func MessagingKafkaSourcePartition(val int) attribute.KeyValue { - return MessagingKafkaSourcePartitionKey.Int(val) -} - -// MessagingKafkaMessageOffset returns an attribute KeyValue conforming to -// the "messaging.kafka.message.offset" semantic conventions. It represents the -// offset of a record in the corresponding Kafka partition. -func MessagingKafkaMessageOffset(val int) attribute.KeyValue { - return MessagingKafkaMessageOffsetKey.Int(val) -} - -// MessagingKafkaMessageTombstone returns an attribute KeyValue conforming -// to the "messaging.kafka.message.tombstone" semantic conventions. It -// represents a boolean that is true if the message is a tombstone. -func MessagingKafkaMessageTombstone(val bool) attribute.KeyValue { - return MessagingKafkaMessageTombstoneKey.Bool(val) -} - -// Attributes for Apache RocketMQ -const ( - // MessagingRocketmqNamespaceKey is the attribute Key conforming to the - // "messaging.rocketmq.namespace" semantic conventions. It represents the - // namespace of RocketMQ resources, resources in different namespaces are - // individual. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: 'myNamespace' - MessagingRocketmqNamespaceKey = attribute.Key("messaging.rocketmq.namespace") - - // MessagingRocketmqClientGroupKey is the attribute Key conforming to the - // "messaging.rocketmq.client_group" semantic conventions. It represents - // the name of the RocketMQ producer/consumer group that is handling the - // message. The client type is identified by the SpanKind. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: 'myConsumerGroup' - MessagingRocketmqClientGroupKey = attribute.Key("messaging.rocketmq.client_group") - - // MessagingRocketmqClientIDKey is the attribute Key conforming to the - // "messaging.rocketmq.client_id" semantic conventions. It represents the - // unique identifier for each client. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: 'myhost@8742@s8083jm' - MessagingRocketmqClientIDKey = attribute.Key("messaging.rocketmq.client_id") - - // MessagingRocketmqMessageDeliveryTimestampKey is the attribute Key - // conforming to the "messaging.rocketmq.message.delivery_timestamp" - // semantic conventions. It represents the timestamp in milliseconds that - // the delay message is expected to be delivered to consumer. - // - // Type: int - // RequirementLevel: ConditionallyRequired (If the message type is delay - // and delay time level is not specified.) - // Stability: stable - // Examples: 1665987217045 - MessagingRocketmqMessageDeliveryTimestampKey = attribute.Key("messaging.rocketmq.message.delivery_timestamp") - - // MessagingRocketmqMessageDelayTimeLevelKey is the attribute Key - // conforming to the "messaging.rocketmq.message.delay_time_level" semantic - // conventions. It represents the delay time level for delay message, which - // determines the message delay time. - // - // Type: int - // RequirementLevel: ConditionallyRequired (If the message type is delay - // and delivery timestamp is not specified.) - // Stability: stable - // Examples: 3 - MessagingRocketmqMessageDelayTimeLevelKey = attribute.Key("messaging.rocketmq.message.delay_time_level") - - // MessagingRocketmqMessageGroupKey is the attribute Key conforming to the - // "messaging.rocketmq.message.group" semantic conventions. It represents - // the it is essential for FIFO message. Messages that belong to the same - // message group are always processed one by one within the same consumer - // group. - // - // Type: string - // RequirementLevel: ConditionallyRequired (If the message type is FIFO.) - // Stability: stable - // Examples: 'myMessageGroup' - MessagingRocketmqMessageGroupKey = attribute.Key("messaging.rocketmq.message.group") - - // MessagingRocketmqMessageTypeKey is the attribute Key conforming to the - // "messaging.rocketmq.message.type" semantic conventions. It represents - // the type of message. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - MessagingRocketmqMessageTypeKey = attribute.Key("messaging.rocketmq.message.type") - - // MessagingRocketmqMessageTagKey is the attribute Key conforming to the - // "messaging.rocketmq.message.tag" semantic conventions. It represents the - // secondary classifier of message besides topic. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'tagA' - MessagingRocketmqMessageTagKey = attribute.Key("messaging.rocketmq.message.tag") - - // MessagingRocketmqMessageKeysKey is the attribute Key conforming to the - // "messaging.rocketmq.message.keys" semantic conventions. It represents - // the key(s) of message, another way to mark message besides message id. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: stable - // Examples: 'keyA', 'keyB' - MessagingRocketmqMessageKeysKey = attribute.Key("messaging.rocketmq.message.keys") - - // MessagingRocketmqConsumptionModelKey is the attribute Key conforming to - // the "messaging.rocketmq.consumption_model" semantic conventions. It - // represents the model of message consumption. This only applies to - // consumer spans. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - MessagingRocketmqConsumptionModelKey = attribute.Key("messaging.rocketmq.consumption_model") -) - -var ( - // Normal message - MessagingRocketmqMessageTypeNormal = MessagingRocketmqMessageTypeKey.String("normal") - // FIFO message - MessagingRocketmqMessageTypeFifo = MessagingRocketmqMessageTypeKey.String("fifo") - // Delay message - MessagingRocketmqMessageTypeDelay = MessagingRocketmqMessageTypeKey.String("delay") - // Transaction message - MessagingRocketmqMessageTypeTransaction = MessagingRocketmqMessageTypeKey.String("transaction") -) - -var ( - // Clustering consumption model - MessagingRocketmqConsumptionModelClustering = MessagingRocketmqConsumptionModelKey.String("clustering") - // Broadcasting consumption model - MessagingRocketmqConsumptionModelBroadcasting = MessagingRocketmqConsumptionModelKey.String("broadcasting") -) - -// MessagingRocketmqNamespace returns an attribute KeyValue conforming to -// the "messaging.rocketmq.namespace" semantic conventions. It represents the -// namespace of RocketMQ resources, resources in different namespaces are -// individual. -func MessagingRocketmqNamespace(val string) attribute.KeyValue { - return MessagingRocketmqNamespaceKey.String(val) -} - -// MessagingRocketmqClientGroup returns an attribute KeyValue conforming to -// the "messaging.rocketmq.client_group" semantic conventions. It represents -// the name of the RocketMQ producer/consumer group that is handling the -// message. The client type is identified by the SpanKind. -func MessagingRocketmqClientGroup(val string) attribute.KeyValue { - return MessagingRocketmqClientGroupKey.String(val) -} - -// MessagingRocketmqClientID returns an attribute KeyValue conforming to the -// "messaging.rocketmq.client_id" semantic conventions. It represents the -// unique identifier for each client. -func MessagingRocketmqClientID(val string) attribute.KeyValue { - return MessagingRocketmqClientIDKey.String(val) -} - -// MessagingRocketmqMessageDeliveryTimestamp returns an attribute KeyValue -// conforming to the "messaging.rocketmq.message.delivery_timestamp" semantic -// conventions. It represents the timestamp in milliseconds that the delay -// message is expected to be delivered to consumer. -func MessagingRocketmqMessageDeliveryTimestamp(val int) attribute.KeyValue { - return MessagingRocketmqMessageDeliveryTimestampKey.Int(val) -} - -// MessagingRocketmqMessageDelayTimeLevel returns an attribute KeyValue -// conforming to the "messaging.rocketmq.message.delay_time_level" semantic -// conventions. It represents the delay time level for delay message, which -// determines the message delay time. -func MessagingRocketmqMessageDelayTimeLevel(val int) attribute.KeyValue { - return MessagingRocketmqMessageDelayTimeLevelKey.Int(val) -} - -// MessagingRocketmqMessageGroup returns an attribute KeyValue conforming to -// the "messaging.rocketmq.message.group" semantic conventions. It represents -// the it is essential for FIFO message. Messages that belong to the same -// message group are always processed one by one within the same consumer -// group. -func MessagingRocketmqMessageGroup(val string) attribute.KeyValue { - return MessagingRocketmqMessageGroupKey.String(val) -} - -// MessagingRocketmqMessageTag returns an attribute KeyValue conforming to -// the "messaging.rocketmq.message.tag" semantic conventions. It represents the -// secondary classifier of message besides topic. -func MessagingRocketmqMessageTag(val string) attribute.KeyValue { - return MessagingRocketmqMessageTagKey.String(val) -} - -// MessagingRocketmqMessageKeys returns an attribute KeyValue conforming to -// the "messaging.rocketmq.message.keys" semantic conventions. It represents -// the key(s) of message, another way to mark message besides message id. -func MessagingRocketmqMessageKeys(val ...string) attribute.KeyValue { - return MessagingRocketmqMessageKeysKey.StringSlice(val) -} - -// Describes user-agent attributes. -const ( - // UserAgentOriginalKey is the attribute Key conforming to the - // "user_agent.original" semantic conventions. It represents the value of - // the [HTTP - // User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) - // header sent by the client. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'CERN-LineMode/2.15 libwww/2.17b3' - UserAgentOriginalKey = attribute.Key("user_agent.original") -) - -// UserAgentOriginal returns an attribute KeyValue conforming to the -// "user_agent.original" semantic conventions. It represents the value of the -// [HTTP -// User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) -// header sent by the client. -func UserAgentOriginal(val string) attribute.KeyValue { - return UserAgentOriginalKey.String(val) -} diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/doc.go b/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/doc.go deleted file mode 100644 index 0d1f55a8..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/doc.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Package semconv implements OpenTelemetry semantic conventions. -// -// OpenTelemetry semantic conventions are agreed standardized naming -// patterns for OpenTelemetry things. This package represents the conventions -// as of the v1.20.0 version of the OpenTelemetry specification. -package semconv // import "go.opentelemetry.io/otel/semconv/v1.20.0" diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/event.go b/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/event.go deleted file mode 100644 index 63776393..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/event.go +++ /dev/null @@ -1,188 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Code generated from semantic convention specification. DO NOT EDIT. - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.20.0" - -import "go.opentelemetry.io/otel/attribute" - -// This semantic convention defines the attributes used to represent a feature -// flag evaluation as an event. -const ( - // FeatureFlagKeyKey is the attribute Key conforming to the - // "feature_flag.key" semantic conventions. It represents the unique - // identifier of the feature flag. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: 'logo-color' - FeatureFlagKeyKey = attribute.Key("feature_flag.key") - - // FeatureFlagProviderNameKey is the attribute Key conforming to the - // "feature_flag.provider_name" semantic conventions. It represents the - // name of the service provider that performs the flag evaluation. - // - // Type: string - // RequirementLevel: Recommended - // Stability: stable - // Examples: 'Flag Manager' - FeatureFlagProviderNameKey = attribute.Key("feature_flag.provider_name") - - // FeatureFlagVariantKey is the attribute Key conforming to the - // "feature_flag.variant" semantic conventions. It represents the sHOULD be - // a semantic identifier for a value. If one is unavailable, a stringified - // version of the value can be used. - // - // Type: string - // RequirementLevel: Recommended - // Stability: stable - // Examples: 'red', 'true', 'on' - // Note: A semantic identifier, commonly referred to as a variant, provides - // a means - // for referring to a value without including the value itself. This can - // provide additional context for understanding the meaning behind a value. - // For example, the variant `red` maybe be used for the value `#c05543`. - // - // A stringified version of the value can be used in situations where a - // semantic identifier is unavailable. String representation of the value - // should be determined by the implementer. - FeatureFlagVariantKey = attribute.Key("feature_flag.variant") -) - -// FeatureFlagKey returns an attribute KeyValue conforming to the -// "feature_flag.key" semantic conventions. It represents the unique identifier -// of the feature flag. -func FeatureFlagKey(val string) attribute.KeyValue { - return FeatureFlagKeyKey.String(val) -} - -// FeatureFlagProviderName returns an attribute KeyValue conforming to the -// "feature_flag.provider_name" semantic conventions. It represents the name of -// the service provider that performs the flag evaluation. -func FeatureFlagProviderName(val string) attribute.KeyValue { - return FeatureFlagProviderNameKey.String(val) -} - -// FeatureFlagVariant returns an attribute KeyValue conforming to the -// "feature_flag.variant" semantic conventions. It represents the sHOULD be a -// semantic identifier for a value. If one is unavailable, a stringified -// version of the value can be used. -func FeatureFlagVariant(val string) attribute.KeyValue { - return FeatureFlagVariantKey.String(val) -} - -// RPC received/sent message. -const ( - // MessageTypeKey is the attribute Key conforming to the "message.type" - // semantic conventions. It represents the whether this is a received or - // sent message. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - MessageTypeKey = attribute.Key("message.type") - - // MessageIDKey is the attribute Key conforming to the "message.id" - // semantic conventions. It represents the mUST be calculated as two - // different counters starting from `1` one for sent messages and one for - // received message. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Note: This way we guarantee that the values will be consistent between - // different implementations. - MessageIDKey = attribute.Key("message.id") - - // MessageCompressedSizeKey is the attribute Key conforming to the - // "message.compressed_size" semantic conventions. It represents the - // compressed size of the message in bytes. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - MessageCompressedSizeKey = attribute.Key("message.compressed_size") - - // MessageUncompressedSizeKey is the attribute Key conforming to the - // "message.uncompressed_size" semantic conventions. It represents the - // uncompressed size of the message in bytes. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - MessageUncompressedSizeKey = attribute.Key("message.uncompressed_size") -) - -var ( - // sent - MessageTypeSent = MessageTypeKey.String("SENT") - // received - MessageTypeReceived = MessageTypeKey.String("RECEIVED") -) - -// MessageID returns an attribute KeyValue conforming to the "message.id" -// semantic conventions. It represents the mUST be calculated as two different -// counters starting from `1` one for sent messages and one for received -// message. -func MessageID(val int) attribute.KeyValue { - return MessageIDKey.Int(val) -} - -// MessageCompressedSize returns an attribute KeyValue conforming to the -// "message.compressed_size" semantic conventions. It represents the compressed -// size of the message in bytes. -func MessageCompressedSize(val int) attribute.KeyValue { - return MessageCompressedSizeKey.Int(val) -} - -// MessageUncompressedSize returns an attribute KeyValue conforming to the -// "message.uncompressed_size" semantic conventions. It represents the -// uncompressed size of the message in bytes. -func MessageUncompressedSize(val int) attribute.KeyValue { - return MessageUncompressedSizeKey.Int(val) -} - -// The attributes used to report a single exception associated with a span. -const ( - // ExceptionEscapedKey is the attribute Key conforming to the - // "exception.escaped" semantic conventions. It represents the sHOULD be - // set to true if the exception event is recorded at a point where it is - // known that the exception is escaping the scope of the span. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: stable - // Note: An exception is considered to have escaped (or left) the scope of - // a span, - // if that span is ended while the exception is still logically "in - // flight". - // This may be actually "in flight" in some languages (e.g. if the - // exception - // is passed to a Context manager's `__exit__` method in Python) but will - // usually be caught at the point of recording the exception in most - // languages. - // - // It is usually not possible to determine at the point where an exception - // is thrown - // whether it will escape the scope of a span. - // However, it is trivial to know that an exception - // will escape, if one checks for an active exception just before ending - // the span, - // as done in the [example above](#recording-an-exception). - // - // It follows that an exception may still escape the scope of the span - // even if the `exception.escaped` attribute was not set or set to false, - // since the event might have been recorded at a time where it was not - // clear whether the exception will escape. - ExceptionEscapedKey = attribute.Key("exception.escaped") -) - -// ExceptionEscaped returns an attribute KeyValue conforming to the -// "exception.escaped" semantic conventions. It represents the sHOULD be set to -// true if the exception event is recorded at a point where it is known that -// the exception is escaping the scope of the span. -func ExceptionEscaped(val bool) attribute.KeyValue { - return ExceptionEscapedKey.Bool(val) -} diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/exception.go b/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/exception.go deleted file mode 100644 index f40c9782..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/exception.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.20.0" - -const ( - // ExceptionEventName is the name of the Span event representing an exception. - ExceptionEventName = "exception" -) diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/http.go b/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/http.go deleted file mode 100644 index 9c184063..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/http.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.20.0" - -// HTTP scheme attributes. -var ( - HTTPSchemeHTTP = HTTPSchemeKey.String("http") - HTTPSchemeHTTPS = HTTPSchemeKey.String("https") -) diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/resource.go b/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/resource.go deleted file mode 100644 index 3d44dae2..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/resource.go +++ /dev/null @@ -1,2060 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Code generated from semantic convention specification. DO NOT EDIT. - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.20.0" - -import "go.opentelemetry.io/otel/attribute" - -// The web browser in which the application represented by the resource is -// running. The `browser.*` attributes MUST be used only for resources that -// represent applications running in a web browser (regardless of whether -// running on a mobile or desktop device). -const ( - // BrowserBrandsKey is the attribute Key conforming to the "browser.brands" - // semantic conventions. It represents the array of brand name and version - // separated by a space - // - // Type: string[] - // RequirementLevel: Optional - // Stability: stable - // Examples: ' Not A;Brand 99', 'Chromium 99', 'Chrome 99' - // Note: This value is intended to be taken from the [UA client hints - // API](https://wicg.github.io/ua-client-hints/#interface) - // (`navigator.userAgentData.brands`). - BrowserBrandsKey = attribute.Key("browser.brands") - - // BrowserPlatformKey is the attribute Key conforming to the - // "browser.platform" semantic conventions. It represents the platform on - // which the browser is running - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'Windows', 'macOS', 'Android' - // Note: This value is intended to be taken from the [UA client hints - // API](https://wicg.github.io/ua-client-hints/#interface) - // (`navigator.userAgentData.platform`). If unavailable, the legacy - // `navigator.platform` API SHOULD NOT be used instead and this attribute - // SHOULD be left unset in order for the values to be consistent. - // The list of possible values is defined in the [W3C User-Agent Client - // Hints - // specification](https://wicg.github.io/ua-client-hints/#sec-ch-ua-platform). - // Note that some (but not all) of these values can overlap with values in - // the [`os.type` and `os.name` attributes](./os.md). However, for - // consistency, the values in the `browser.platform` attribute should - // capture the exact value that the user agent provides. - BrowserPlatformKey = attribute.Key("browser.platform") - - // BrowserMobileKey is the attribute Key conforming to the "browser.mobile" - // semantic conventions. It represents a boolean that is true if the - // browser is running on a mobile device - // - // Type: boolean - // RequirementLevel: Optional - // Stability: stable - // Note: This value is intended to be taken from the [UA client hints - // API](https://wicg.github.io/ua-client-hints/#interface) - // (`navigator.userAgentData.mobile`). If unavailable, this attribute - // SHOULD be left unset. - BrowserMobileKey = attribute.Key("browser.mobile") - - // BrowserLanguageKey is the attribute Key conforming to the - // "browser.language" semantic conventions. It represents the preferred - // language of the user using the browser - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'en', 'en-US', 'fr', 'fr-FR' - // Note: This value is intended to be taken from the Navigator API - // `navigator.language`. - BrowserLanguageKey = attribute.Key("browser.language") -) - -// BrowserBrands returns an attribute KeyValue conforming to the -// "browser.brands" semantic conventions. It represents the array of brand name -// and version separated by a space -func BrowserBrands(val ...string) attribute.KeyValue { - return BrowserBrandsKey.StringSlice(val) -} - -// BrowserPlatform returns an attribute KeyValue conforming to the -// "browser.platform" semantic conventions. It represents the platform on which -// the browser is running -func BrowserPlatform(val string) attribute.KeyValue { - return BrowserPlatformKey.String(val) -} - -// BrowserMobile returns an attribute KeyValue conforming to the -// "browser.mobile" semantic conventions. It represents a boolean that is true -// if the browser is running on a mobile device -func BrowserMobile(val bool) attribute.KeyValue { - return BrowserMobileKey.Bool(val) -} - -// BrowserLanguage returns an attribute KeyValue conforming to the -// "browser.language" semantic conventions. It represents the preferred -// language of the user using the browser -func BrowserLanguage(val string) attribute.KeyValue { - return BrowserLanguageKey.String(val) -} - -// A cloud environment (e.g. GCP, Azure, AWS) -const ( - // CloudProviderKey is the attribute Key conforming to the "cloud.provider" - // semantic conventions. It represents the name of the cloud provider. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - CloudProviderKey = attribute.Key("cloud.provider") - - // CloudAccountIDKey is the attribute Key conforming to the - // "cloud.account.id" semantic conventions. It represents the cloud account - // ID the resource is assigned to. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '111111111111', 'opentelemetry' - CloudAccountIDKey = attribute.Key("cloud.account.id") - - // CloudRegionKey is the attribute Key conforming to the "cloud.region" - // semantic conventions. It represents the geographical region the resource - // is running. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'us-central1', 'us-east-1' - // Note: Refer to your provider's docs to see the available regions, for - // example [Alibaba Cloud - // regions](https://www.alibabacloud.com/help/doc-detail/40654.htm), [AWS - // regions](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/), - // [Azure - // regions](https://azure.microsoft.com/en-us/global-infrastructure/geographies/), - // [Google Cloud regions](https://cloud.google.com/about/locations), or - // [Tencent Cloud - // regions](https://www.tencentcloud.com/document/product/213/6091). - CloudRegionKey = attribute.Key("cloud.region") - - // CloudResourceIDKey is the attribute Key conforming to the - // "cloud.resource_id" semantic conventions. It represents the cloud - // provider-specific native identifier of the monitored cloud resource - // (e.g. an - // [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) - // on AWS, a [fully qualified resource - // ID](https://learn.microsoft.com/en-us/rest/api/resources/resources/get-by-id) - // on Azure, a [full resource - // name](https://cloud.google.com/apis/design/resource_names#full_resource_name) - // on GCP) - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function', - // '//run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID', - // '/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions/' - // Note: On some cloud providers, it may not be possible to determine the - // full ID at startup, - // so it may be necessary to set `cloud.resource_id` as a span attribute - // instead. - // - // The exact value to use for `cloud.resource_id` depends on the cloud - // provider. - // The following well-known definitions MUST be used if you set this - // attribute and they apply: - // - // * **AWS Lambda:** The function - // [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html). - // Take care not to use the "invoked ARN" directly but replace any - // [alias - // suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) - // with the resolved function version, as the same runtime instance may - // be invokable with - // multiple different aliases. - // * **GCP:** The [URI of the - // resource](https://cloud.google.com/iam/docs/full-resource-names) - // * **Azure:** The [Fully Qualified Resource - // ID](https://docs.microsoft.com/en-us/rest/api/resources/resources/get-by-id) - // of the invoked function, - // *not* the function app, having the form - // `/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions/`. - // This means that a span attribute MUST be used, as an Azure function - // app can host multiple functions that would usually share - // a TracerProvider. - CloudResourceIDKey = attribute.Key("cloud.resource_id") - - // CloudAvailabilityZoneKey is the attribute Key conforming to the - // "cloud.availability_zone" semantic conventions. It represents the cloud - // regions often have multiple, isolated locations known as zones to - // increase availability. Availability zone represents the zone where the - // resource is running. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'us-east-1c' - // Note: Availability zones are called "zones" on Alibaba Cloud and Google - // Cloud. - CloudAvailabilityZoneKey = attribute.Key("cloud.availability_zone") - - // CloudPlatformKey is the attribute Key conforming to the "cloud.platform" - // semantic conventions. It represents the cloud platform in use. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - // Note: The prefix of the service SHOULD match the one specified in - // `cloud.provider`. - CloudPlatformKey = attribute.Key("cloud.platform") -) - -var ( - // Alibaba Cloud - CloudProviderAlibabaCloud = CloudProviderKey.String("alibaba_cloud") - // Amazon Web Services - CloudProviderAWS = CloudProviderKey.String("aws") - // Microsoft Azure - CloudProviderAzure = CloudProviderKey.String("azure") - // Google Cloud Platform - CloudProviderGCP = CloudProviderKey.String("gcp") - // Heroku Platform as a Service - CloudProviderHeroku = CloudProviderKey.String("heroku") - // IBM Cloud - CloudProviderIbmCloud = CloudProviderKey.String("ibm_cloud") - // Tencent Cloud - CloudProviderTencentCloud = CloudProviderKey.String("tencent_cloud") -) - -var ( - // Alibaba Cloud Elastic Compute Service - CloudPlatformAlibabaCloudECS = CloudPlatformKey.String("alibaba_cloud_ecs") - // Alibaba Cloud Function Compute - CloudPlatformAlibabaCloudFc = CloudPlatformKey.String("alibaba_cloud_fc") - // Red Hat OpenShift on Alibaba Cloud - CloudPlatformAlibabaCloudOpenshift = CloudPlatformKey.String("alibaba_cloud_openshift") - // AWS Elastic Compute Cloud - CloudPlatformAWSEC2 = CloudPlatformKey.String("aws_ec2") - // AWS Elastic Container Service - CloudPlatformAWSECS = CloudPlatformKey.String("aws_ecs") - // AWS Elastic Kubernetes Service - CloudPlatformAWSEKS = CloudPlatformKey.String("aws_eks") - // AWS Lambda - CloudPlatformAWSLambda = CloudPlatformKey.String("aws_lambda") - // AWS Elastic Beanstalk - CloudPlatformAWSElasticBeanstalk = CloudPlatformKey.String("aws_elastic_beanstalk") - // AWS App Runner - CloudPlatformAWSAppRunner = CloudPlatformKey.String("aws_app_runner") - // Red Hat OpenShift on AWS (ROSA) - CloudPlatformAWSOpenshift = CloudPlatformKey.String("aws_openshift") - // Azure Virtual Machines - CloudPlatformAzureVM = CloudPlatformKey.String("azure_vm") - // Azure Container Instances - CloudPlatformAzureContainerInstances = CloudPlatformKey.String("azure_container_instances") - // Azure Kubernetes Service - CloudPlatformAzureAKS = CloudPlatformKey.String("azure_aks") - // Azure Functions - CloudPlatformAzureFunctions = CloudPlatformKey.String("azure_functions") - // Azure App Service - CloudPlatformAzureAppService = CloudPlatformKey.String("azure_app_service") - // Azure Red Hat OpenShift - CloudPlatformAzureOpenshift = CloudPlatformKey.String("azure_openshift") - // Google Cloud Compute Engine (GCE) - CloudPlatformGCPComputeEngine = CloudPlatformKey.String("gcp_compute_engine") - // Google Cloud Run - CloudPlatformGCPCloudRun = CloudPlatformKey.String("gcp_cloud_run") - // Google Cloud Kubernetes Engine (GKE) - CloudPlatformGCPKubernetesEngine = CloudPlatformKey.String("gcp_kubernetes_engine") - // Google Cloud Functions (GCF) - CloudPlatformGCPCloudFunctions = CloudPlatformKey.String("gcp_cloud_functions") - // Google Cloud App Engine (GAE) - CloudPlatformGCPAppEngine = CloudPlatformKey.String("gcp_app_engine") - // Red Hat OpenShift on Google Cloud - CloudPlatformGCPOpenshift = CloudPlatformKey.String("gcp_openshift") - // Red Hat OpenShift on IBM Cloud - CloudPlatformIbmCloudOpenshift = CloudPlatformKey.String("ibm_cloud_openshift") - // Tencent Cloud Cloud Virtual Machine (CVM) - CloudPlatformTencentCloudCvm = CloudPlatformKey.String("tencent_cloud_cvm") - // Tencent Cloud Elastic Kubernetes Service (EKS) - CloudPlatformTencentCloudEKS = CloudPlatformKey.String("tencent_cloud_eks") - // Tencent Cloud Serverless Cloud Function (SCF) - CloudPlatformTencentCloudScf = CloudPlatformKey.String("tencent_cloud_scf") -) - -// CloudAccountID returns an attribute KeyValue conforming to the -// "cloud.account.id" semantic conventions. It represents the cloud account ID -// the resource is assigned to. -func CloudAccountID(val string) attribute.KeyValue { - return CloudAccountIDKey.String(val) -} - -// CloudRegion returns an attribute KeyValue conforming to the -// "cloud.region" semantic conventions. It represents the geographical region -// the resource is running. -func CloudRegion(val string) attribute.KeyValue { - return CloudRegionKey.String(val) -} - -// CloudResourceID returns an attribute KeyValue conforming to the -// "cloud.resource_id" semantic conventions. It represents the cloud -// provider-specific native identifier of the monitored cloud resource (e.g. an -// [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) -// on AWS, a [fully qualified resource -// ID](https://learn.microsoft.com/en-us/rest/api/resources/resources/get-by-id) -// on Azure, a [full resource -// name](https://cloud.google.com/apis/design/resource_names#full_resource_name) -// on GCP) -func CloudResourceID(val string) attribute.KeyValue { - return CloudResourceIDKey.String(val) -} - -// CloudAvailabilityZone returns an attribute KeyValue conforming to the -// "cloud.availability_zone" semantic conventions. It represents the cloud -// regions often have multiple, isolated locations known as zones to increase -// availability. Availability zone represents the zone where the resource is -// running. -func CloudAvailabilityZone(val string) attribute.KeyValue { - return CloudAvailabilityZoneKey.String(val) -} - -// Resources used by AWS Elastic Container Service (ECS). -const ( - // AWSECSContainerARNKey is the attribute Key conforming to the - // "aws.ecs.container.arn" semantic conventions. It represents the Amazon - // Resource Name (ARN) of an [ECS container - // instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: - // 'arn:aws:ecs:us-west-1:123456789123:container/32624152-9086-4f0e-acae-1a75b14fe4d9' - AWSECSContainerARNKey = attribute.Key("aws.ecs.container.arn") - - // AWSECSClusterARNKey is the attribute Key conforming to the - // "aws.ecs.cluster.arn" semantic conventions. It represents the ARN of an - // [ECS - // cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster' - AWSECSClusterARNKey = attribute.Key("aws.ecs.cluster.arn") - - // AWSECSLaunchtypeKey is the attribute Key conforming to the - // "aws.ecs.launchtype" semantic conventions. It represents the [launch - // type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) - // for an ECS task. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - AWSECSLaunchtypeKey = attribute.Key("aws.ecs.launchtype") - - // AWSECSTaskARNKey is the attribute Key conforming to the - // "aws.ecs.task.arn" semantic conventions. It represents the ARN of an - // [ECS task - // definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: - // 'arn:aws:ecs:us-west-1:123456789123:task/10838bed-421f-43ef-870a-f43feacbbb5b' - AWSECSTaskARNKey = attribute.Key("aws.ecs.task.arn") - - // AWSECSTaskFamilyKey is the attribute Key conforming to the - // "aws.ecs.task.family" semantic conventions. It represents the task - // definition family this task definition is a member of. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'opentelemetry-family' - AWSECSTaskFamilyKey = attribute.Key("aws.ecs.task.family") - - // AWSECSTaskRevisionKey is the attribute Key conforming to the - // "aws.ecs.task.revision" semantic conventions. It represents the revision - // for this task definition. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '8', '26' - AWSECSTaskRevisionKey = attribute.Key("aws.ecs.task.revision") -) - -var ( - // ec2 - AWSECSLaunchtypeEC2 = AWSECSLaunchtypeKey.String("ec2") - // fargate - AWSECSLaunchtypeFargate = AWSECSLaunchtypeKey.String("fargate") -) - -// AWSECSContainerARN returns an attribute KeyValue conforming to the -// "aws.ecs.container.arn" semantic conventions. It represents the Amazon -// Resource Name (ARN) of an [ECS container -// instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html). -func AWSECSContainerARN(val string) attribute.KeyValue { - return AWSECSContainerARNKey.String(val) -} - -// AWSECSClusterARN returns an attribute KeyValue conforming to the -// "aws.ecs.cluster.arn" semantic conventions. It represents the ARN of an [ECS -// cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html). -func AWSECSClusterARN(val string) attribute.KeyValue { - return AWSECSClusterARNKey.String(val) -} - -// AWSECSTaskARN returns an attribute KeyValue conforming to the -// "aws.ecs.task.arn" semantic conventions. It represents the ARN of an [ECS -// task -// definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html). -func AWSECSTaskARN(val string) attribute.KeyValue { - return AWSECSTaskARNKey.String(val) -} - -// AWSECSTaskFamily returns an attribute KeyValue conforming to the -// "aws.ecs.task.family" semantic conventions. It represents the task -// definition family this task definition is a member of. -func AWSECSTaskFamily(val string) attribute.KeyValue { - return AWSECSTaskFamilyKey.String(val) -} - -// AWSECSTaskRevision returns an attribute KeyValue conforming to the -// "aws.ecs.task.revision" semantic conventions. It represents the revision for -// this task definition. -func AWSECSTaskRevision(val string) attribute.KeyValue { - return AWSECSTaskRevisionKey.String(val) -} - -// Resources used by AWS Elastic Kubernetes Service (EKS). -const ( - // AWSEKSClusterARNKey is the attribute Key conforming to the - // "aws.eks.cluster.arn" semantic conventions. It represents the ARN of an - // EKS cluster. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster' - AWSEKSClusterARNKey = attribute.Key("aws.eks.cluster.arn") -) - -// AWSEKSClusterARN returns an attribute KeyValue conforming to the -// "aws.eks.cluster.arn" semantic conventions. It represents the ARN of an EKS -// cluster. -func AWSEKSClusterARN(val string) attribute.KeyValue { - return AWSEKSClusterARNKey.String(val) -} - -// Resources specific to Amazon Web Services. -const ( - // AWSLogGroupNamesKey is the attribute Key conforming to the - // "aws.log.group.names" semantic conventions. It represents the name(s) of - // the AWS log group(s) an application is writing to. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: stable - // Examples: '/aws/lambda/my-function', 'opentelemetry-service' - // Note: Multiple log groups must be supported for cases like - // multi-container applications, where a single application has sidecar - // containers, and each write to their own log group. - AWSLogGroupNamesKey = attribute.Key("aws.log.group.names") - - // AWSLogGroupARNsKey is the attribute Key conforming to the - // "aws.log.group.arns" semantic conventions. It represents the Amazon - // Resource Name(s) (ARN) of the AWS log group(s). - // - // Type: string[] - // RequirementLevel: Optional - // Stability: stable - // Examples: - // 'arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:*' - // Note: See the [log group ARN format - // documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format). - AWSLogGroupARNsKey = attribute.Key("aws.log.group.arns") - - // AWSLogStreamNamesKey is the attribute Key conforming to the - // "aws.log.stream.names" semantic conventions. It represents the name(s) - // of the AWS log stream(s) an application is writing to. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: stable - // Examples: 'logs/main/10838bed-421f-43ef-870a-f43feacbbb5b' - AWSLogStreamNamesKey = attribute.Key("aws.log.stream.names") - - // AWSLogStreamARNsKey is the attribute Key conforming to the - // "aws.log.stream.arns" semantic conventions. It represents the ARN(s) of - // the AWS log stream(s). - // - // Type: string[] - // RequirementLevel: Optional - // Stability: stable - // Examples: - // 'arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:log-stream:logs/main/10838bed-421f-43ef-870a-f43feacbbb5b' - // Note: See the [log stream ARN format - // documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format). - // One log group can contain several log streams, so these ARNs necessarily - // identify both a log group and a log stream. - AWSLogStreamARNsKey = attribute.Key("aws.log.stream.arns") -) - -// AWSLogGroupNames returns an attribute KeyValue conforming to the -// "aws.log.group.names" semantic conventions. It represents the name(s) of the -// AWS log group(s) an application is writing to. -func AWSLogGroupNames(val ...string) attribute.KeyValue { - return AWSLogGroupNamesKey.StringSlice(val) -} - -// AWSLogGroupARNs returns an attribute KeyValue conforming to the -// "aws.log.group.arns" semantic conventions. It represents the Amazon Resource -// Name(s) (ARN) of the AWS log group(s). -func AWSLogGroupARNs(val ...string) attribute.KeyValue { - return AWSLogGroupARNsKey.StringSlice(val) -} - -// AWSLogStreamNames returns an attribute KeyValue conforming to the -// "aws.log.stream.names" semantic conventions. It represents the name(s) of -// the AWS log stream(s) an application is writing to. -func AWSLogStreamNames(val ...string) attribute.KeyValue { - return AWSLogStreamNamesKey.StringSlice(val) -} - -// AWSLogStreamARNs returns an attribute KeyValue conforming to the -// "aws.log.stream.arns" semantic conventions. It represents the ARN(s) of the -// AWS log stream(s). -func AWSLogStreamARNs(val ...string) attribute.KeyValue { - return AWSLogStreamARNsKey.StringSlice(val) -} - -// Heroku dyno metadata -const ( - // HerokuReleaseCreationTimestampKey is the attribute Key conforming to the - // "heroku.release.creation_timestamp" semantic conventions. It represents - // the time and date the release was created - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '2022-10-23T18:00:42Z' - HerokuReleaseCreationTimestampKey = attribute.Key("heroku.release.creation_timestamp") - - // HerokuReleaseCommitKey is the attribute Key conforming to the - // "heroku.release.commit" semantic conventions. It represents the commit - // hash for the current release - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'e6134959463efd8966b20e75b913cafe3f5ec' - HerokuReleaseCommitKey = attribute.Key("heroku.release.commit") - - // HerokuAppIDKey is the attribute Key conforming to the "heroku.app.id" - // semantic conventions. It represents the unique identifier for the - // application - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '2daa2797-e42b-4624-9322-ec3f968df4da' - HerokuAppIDKey = attribute.Key("heroku.app.id") -) - -// HerokuReleaseCreationTimestamp returns an attribute KeyValue conforming -// to the "heroku.release.creation_timestamp" semantic conventions. It -// represents the time and date the release was created -func HerokuReleaseCreationTimestamp(val string) attribute.KeyValue { - return HerokuReleaseCreationTimestampKey.String(val) -} - -// HerokuReleaseCommit returns an attribute KeyValue conforming to the -// "heroku.release.commit" semantic conventions. It represents the commit hash -// for the current release -func HerokuReleaseCommit(val string) attribute.KeyValue { - return HerokuReleaseCommitKey.String(val) -} - -// HerokuAppID returns an attribute KeyValue conforming to the -// "heroku.app.id" semantic conventions. It represents the unique identifier -// for the application -func HerokuAppID(val string) attribute.KeyValue { - return HerokuAppIDKey.String(val) -} - -// A container instance. -const ( - // ContainerNameKey is the attribute Key conforming to the "container.name" - // semantic conventions. It represents the container name used by container - // runtime. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'opentelemetry-autoconf' - ContainerNameKey = attribute.Key("container.name") - - // ContainerIDKey is the attribute Key conforming to the "container.id" - // semantic conventions. It represents the container ID. Usually a UUID, as - // for example used to [identify Docker - // containers](https://docs.docker.com/engine/reference/run/#container-identification). - // The UUID might be abbreviated. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'a3bf90e006b2' - ContainerIDKey = attribute.Key("container.id") - - // ContainerRuntimeKey is the attribute Key conforming to the - // "container.runtime" semantic conventions. It represents the container - // runtime managing this container. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'docker', 'containerd', 'rkt' - ContainerRuntimeKey = attribute.Key("container.runtime") - - // ContainerImageNameKey is the attribute Key conforming to the - // "container.image.name" semantic conventions. It represents the name of - // the image the container was built on. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'gcr.io/opentelemetry/operator' - ContainerImageNameKey = attribute.Key("container.image.name") - - // ContainerImageTagKey is the attribute Key conforming to the - // "container.image.tag" semantic conventions. It represents the container - // image tag. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '0.1' - ContainerImageTagKey = attribute.Key("container.image.tag") -) - -// ContainerName returns an attribute KeyValue conforming to the -// "container.name" semantic conventions. It represents the container name used -// by container runtime. -func ContainerName(val string) attribute.KeyValue { - return ContainerNameKey.String(val) -} - -// ContainerID returns an attribute KeyValue conforming to the -// "container.id" semantic conventions. It represents the container ID. Usually -// a UUID, as for example used to [identify Docker -// containers](https://docs.docker.com/engine/reference/run/#container-identification). -// The UUID might be abbreviated. -func ContainerID(val string) attribute.KeyValue { - return ContainerIDKey.String(val) -} - -// ContainerRuntime returns an attribute KeyValue conforming to the -// "container.runtime" semantic conventions. It represents the container -// runtime managing this container. -func ContainerRuntime(val string) attribute.KeyValue { - return ContainerRuntimeKey.String(val) -} - -// ContainerImageName returns an attribute KeyValue conforming to the -// "container.image.name" semantic conventions. It represents the name of the -// image the container was built on. -func ContainerImageName(val string) attribute.KeyValue { - return ContainerImageNameKey.String(val) -} - -// ContainerImageTag returns an attribute KeyValue conforming to the -// "container.image.tag" semantic conventions. It represents the container -// image tag. -func ContainerImageTag(val string) attribute.KeyValue { - return ContainerImageTagKey.String(val) -} - -// The software deployment. -const ( - // DeploymentEnvironmentKey is the attribute Key conforming to the - // "deployment.environment" semantic conventions. It represents the name of - // the [deployment - // environment](https://en.wikipedia.org/wiki/Deployment_environment) (aka - // deployment tier). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'staging', 'production' - DeploymentEnvironmentKey = attribute.Key("deployment.environment") -) - -// DeploymentEnvironment returns an attribute KeyValue conforming to the -// "deployment.environment" semantic conventions. It represents the name of the -// [deployment -// environment](https://en.wikipedia.org/wiki/Deployment_environment) (aka -// deployment tier). -func DeploymentEnvironment(val string) attribute.KeyValue { - return DeploymentEnvironmentKey.String(val) -} - -// The device on which the process represented by this resource is running. -const ( - // DeviceIDKey is the attribute Key conforming to the "device.id" semantic - // conventions. It represents a unique identifier representing the device - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '2ab2916d-a51f-4ac8-80ee-45ac31a28092' - // Note: The device identifier MUST only be defined using the values - // outlined below. This value is not an advertising identifier and MUST NOT - // be used as such. On iOS (Swift or Objective-C), this value MUST be equal - // to the [vendor - // identifier](https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor). - // On Android (Java or Kotlin), this value MUST be equal to the Firebase - // Installation ID or a globally unique UUID which is persisted across - // sessions in your application. More information can be found - // [here](https://developer.android.com/training/articles/user-data-ids) on - // best practices and exact implementation details. Caution should be taken - // when storing personal data or anything which can identify a user. GDPR - // and data protection laws may apply, ensure you do your own due - // diligence. - DeviceIDKey = attribute.Key("device.id") - - // DeviceModelIdentifierKey is the attribute Key conforming to the - // "device.model.identifier" semantic conventions. It represents the model - // identifier for the device - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'iPhone3,4', 'SM-G920F' - // Note: It's recommended this value represents a machine readable version - // of the model identifier rather than the market or consumer-friendly name - // of the device. - DeviceModelIdentifierKey = attribute.Key("device.model.identifier") - - // DeviceModelNameKey is the attribute Key conforming to the - // "device.model.name" semantic conventions. It represents the marketing - // name for the device model - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'iPhone 6s Plus', 'Samsung Galaxy S6' - // Note: It's recommended this value represents a human readable version of - // the device model rather than a machine readable alternative. - DeviceModelNameKey = attribute.Key("device.model.name") - - // DeviceManufacturerKey is the attribute Key conforming to the - // "device.manufacturer" semantic conventions. It represents the name of - // the device manufacturer - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'Apple', 'Samsung' - // Note: The Android OS provides this field via - // [Build](https://developer.android.com/reference/android/os/Build#MANUFACTURER). - // iOS apps SHOULD hardcode the value `Apple`. - DeviceManufacturerKey = attribute.Key("device.manufacturer") -) - -// DeviceID returns an attribute KeyValue conforming to the "device.id" -// semantic conventions. It represents a unique identifier representing the -// device -func DeviceID(val string) attribute.KeyValue { - return DeviceIDKey.String(val) -} - -// DeviceModelIdentifier returns an attribute KeyValue conforming to the -// "device.model.identifier" semantic conventions. It represents the model -// identifier for the device -func DeviceModelIdentifier(val string) attribute.KeyValue { - return DeviceModelIdentifierKey.String(val) -} - -// DeviceModelName returns an attribute KeyValue conforming to the -// "device.model.name" semantic conventions. It represents the marketing name -// for the device model -func DeviceModelName(val string) attribute.KeyValue { - return DeviceModelNameKey.String(val) -} - -// DeviceManufacturer returns an attribute KeyValue conforming to the -// "device.manufacturer" semantic conventions. It represents the name of the -// device manufacturer -func DeviceManufacturer(val string) attribute.KeyValue { - return DeviceManufacturerKey.String(val) -} - -// A serverless instance. -const ( - // FaaSNameKey is the attribute Key conforming to the "faas.name" semantic - // conventions. It represents the name of the single function that this - // runtime instance executes. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: 'my-function', 'myazurefunctionapp/some-function-name' - // Note: This is the name of the function as configured/deployed on the - // FaaS - // platform and is usually different from the name of the callback - // function (which may be stored in the - // [`code.namespace`/`code.function`](../../trace/semantic_conventions/span-general.md#source-code-attributes) - // span attributes). - // - // For some cloud providers, the above definition is ambiguous. The - // following - // definition of function name MUST be used for this attribute - // (and consequently the span name) for the listed cloud - // providers/products: - // - // * **Azure:** The full name `/`, i.e., function app name - // followed by a forward slash followed by the function name (this form - // can also be seen in the resource JSON for the function). - // This means that a span attribute MUST be used, as an Azure function - // app can host multiple functions that would usually share - // a TracerProvider (see also the `cloud.resource_id` attribute). - FaaSNameKey = attribute.Key("faas.name") - - // FaaSVersionKey is the attribute Key conforming to the "faas.version" - // semantic conventions. It represents the immutable version of the - // function being executed. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '26', 'pinkfroid-00002' - // Note: Depending on the cloud provider and platform, use: - // - // * **AWS Lambda:** The [function - // version](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html) - // (an integer represented as a decimal string). - // * **Google Cloud Run:** The - // [revision](https://cloud.google.com/run/docs/managing/revisions) - // (i.e., the function name plus the revision suffix). - // * **Google Cloud Functions:** The value of the - // [`K_REVISION` environment - // variable](https://cloud.google.com/functions/docs/env-var#runtime_environment_variables_set_automatically). - // * **Azure Functions:** Not applicable. Do not set this attribute. - FaaSVersionKey = attribute.Key("faas.version") - - // FaaSInstanceKey is the attribute Key conforming to the "faas.instance" - // semantic conventions. It represents the execution environment ID as a - // string, that will be potentially reused for other invocations to the - // same function/function version. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '2021/06/28/[$LATEST]2f399eb14537447da05ab2a2e39309de' - // Note: * **AWS Lambda:** Use the (full) log stream name. - FaaSInstanceKey = attribute.Key("faas.instance") - - // FaaSMaxMemoryKey is the attribute Key conforming to the - // "faas.max_memory" semantic conventions. It represents the amount of - // memory available to the serverless function converted to Bytes. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 134217728 - // Note: It's recommended to set this attribute since e.g. too little - // memory can easily stop a Java AWS Lambda function from working - // correctly. On AWS Lambda, the environment variable - // `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` provides this information (which must - // be multiplied by 1,048,576). - FaaSMaxMemoryKey = attribute.Key("faas.max_memory") -) - -// FaaSName returns an attribute KeyValue conforming to the "faas.name" -// semantic conventions. It represents the name of the single function that -// this runtime instance executes. -func FaaSName(val string) attribute.KeyValue { - return FaaSNameKey.String(val) -} - -// FaaSVersion returns an attribute KeyValue conforming to the -// "faas.version" semantic conventions. It represents the immutable version of -// the function being executed. -func FaaSVersion(val string) attribute.KeyValue { - return FaaSVersionKey.String(val) -} - -// FaaSInstance returns an attribute KeyValue conforming to the -// "faas.instance" semantic conventions. It represents the execution -// environment ID as a string, that will be potentially reused for other -// invocations to the same function/function version. -func FaaSInstance(val string) attribute.KeyValue { - return FaaSInstanceKey.String(val) -} - -// FaaSMaxMemory returns an attribute KeyValue conforming to the -// "faas.max_memory" semantic conventions. It represents the amount of memory -// available to the serverless function converted to Bytes. -func FaaSMaxMemory(val int) attribute.KeyValue { - return FaaSMaxMemoryKey.Int(val) -} - -// A host is defined as a general computing instance. -const ( - // HostIDKey is the attribute Key conforming to the "host.id" semantic - // conventions. It represents the unique host ID. For Cloud, this must be - // the instance_id assigned by the cloud provider. For non-containerized - // systems, this should be the `machine-id`. See the table below for the - // sources to use to determine the `machine-id` based on operating system. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'fdbf79e8af94cb7f9e8df36789187052' - HostIDKey = attribute.Key("host.id") - - // HostNameKey is the attribute Key conforming to the "host.name" semantic - // conventions. It represents the name of the host. On Unix systems, it may - // contain what the hostname command returns, or the fully qualified - // hostname, or another name specified by the user. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'opentelemetry-test' - HostNameKey = attribute.Key("host.name") - - // HostTypeKey is the attribute Key conforming to the "host.type" semantic - // conventions. It represents the type of host. For Cloud, this must be the - // machine type. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'n1-standard-1' - HostTypeKey = attribute.Key("host.type") - - // HostArchKey is the attribute Key conforming to the "host.arch" semantic - // conventions. It represents the CPU architecture the host system is - // running on. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - HostArchKey = attribute.Key("host.arch") - - // HostImageNameKey is the attribute Key conforming to the - // "host.image.name" semantic conventions. It represents the name of the VM - // image or OS install the host was instantiated from. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'infra-ami-eks-worker-node-7d4ec78312', 'CentOS-8-x86_64-1905' - HostImageNameKey = attribute.Key("host.image.name") - - // HostImageIDKey is the attribute Key conforming to the "host.image.id" - // semantic conventions. It represents the vM image ID. For Cloud, this - // value is from the provider. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'ami-07b06b442921831e5' - HostImageIDKey = attribute.Key("host.image.id") - - // HostImageVersionKey is the attribute Key conforming to the - // "host.image.version" semantic conventions. It represents the version - // string of the VM image as defined in [Version - // Attributes](README.md#version-attributes). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '0.1' - HostImageVersionKey = attribute.Key("host.image.version") -) - -var ( - // AMD64 - HostArchAMD64 = HostArchKey.String("amd64") - // ARM32 - HostArchARM32 = HostArchKey.String("arm32") - // ARM64 - HostArchARM64 = HostArchKey.String("arm64") - // Itanium - HostArchIA64 = HostArchKey.String("ia64") - // 32-bit PowerPC - HostArchPPC32 = HostArchKey.String("ppc32") - // 64-bit PowerPC - HostArchPPC64 = HostArchKey.String("ppc64") - // IBM z/Architecture - HostArchS390x = HostArchKey.String("s390x") - // 32-bit x86 - HostArchX86 = HostArchKey.String("x86") -) - -// HostID returns an attribute KeyValue conforming to the "host.id" semantic -// conventions. It represents the unique host ID. For Cloud, this must be the -// instance_id assigned by the cloud provider. For non-containerized systems, -// this should be the `machine-id`. See the table below for the sources to use -// to determine the `machine-id` based on operating system. -func HostID(val string) attribute.KeyValue { - return HostIDKey.String(val) -} - -// HostName returns an attribute KeyValue conforming to the "host.name" -// semantic conventions. It represents the name of the host. On Unix systems, -// it may contain what the hostname command returns, or the fully qualified -// hostname, or another name specified by the user. -func HostName(val string) attribute.KeyValue { - return HostNameKey.String(val) -} - -// HostType returns an attribute KeyValue conforming to the "host.type" -// semantic conventions. It represents the type of host. For Cloud, this must -// be the machine type. -func HostType(val string) attribute.KeyValue { - return HostTypeKey.String(val) -} - -// HostImageName returns an attribute KeyValue conforming to the -// "host.image.name" semantic conventions. It represents the name of the VM -// image or OS install the host was instantiated from. -func HostImageName(val string) attribute.KeyValue { - return HostImageNameKey.String(val) -} - -// HostImageID returns an attribute KeyValue conforming to the -// "host.image.id" semantic conventions. It represents the vM image ID. For -// Cloud, this value is from the provider. -func HostImageID(val string) attribute.KeyValue { - return HostImageIDKey.String(val) -} - -// HostImageVersion returns an attribute KeyValue conforming to the -// "host.image.version" semantic conventions. It represents the version string -// of the VM image as defined in [Version -// Attributes](README.md#version-attributes). -func HostImageVersion(val string) attribute.KeyValue { - return HostImageVersionKey.String(val) -} - -// A Kubernetes Cluster. -const ( - // K8SClusterNameKey is the attribute Key conforming to the - // "k8s.cluster.name" semantic conventions. It represents the name of the - // cluster. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'opentelemetry-cluster' - K8SClusterNameKey = attribute.Key("k8s.cluster.name") -) - -// K8SClusterName returns an attribute KeyValue conforming to the -// "k8s.cluster.name" semantic conventions. It represents the name of the -// cluster. -func K8SClusterName(val string) attribute.KeyValue { - return K8SClusterNameKey.String(val) -} - -// A Kubernetes Node object. -const ( - // K8SNodeNameKey is the attribute Key conforming to the "k8s.node.name" - // semantic conventions. It represents the name of the Node. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'node-1' - K8SNodeNameKey = attribute.Key("k8s.node.name") - - // K8SNodeUIDKey is the attribute Key conforming to the "k8s.node.uid" - // semantic conventions. It represents the UID of the Node. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '1eb3a0c6-0477-4080-a9cb-0cb7db65c6a2' - K8SNodeUIDKey = attribute.Key("k8s.node.uid") -) - -// K8SNodeName returns an attribute KeyValue conforming to the -// "k8s.node.name" semantic conventions. It represents the name of the Node. -func K8SNodeName(val string) attribute.KeyValue { - return K8SNodeNameKey.String(val) -} - -// K8SNodeUID returns an attribute KeyValue conforming to the "k8s.node.uid" -// semantic conventions. It represents the UID of the Node. -func K8SNodeUID(val string) attribute.KeyValue { - return K8SNodeUIDKey.String(val) -} - -// A Kubernetes Namespace. -const ( - // K8SNamespaceNameKey is the attribute Key conforming to the - // "k8s.namespace.name" semantic conventions. It represents the name of the - // namespace that the pod is running in. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'default' - K8SNamespaceNameKey = attribute.Key("k8s.namespace.name") -) - -// K8SNamespaceName returns an attribute KeyValue conforming to the -// "k8s.namespace.name" semantic conventions. It represents the name of the -// namespace that the pod is running in. -func K8SNamespaceName(val string) attribute.KeyValue { - return K8SNamespaceNameKey.String(val) -} - -// A Kubernetes Pod object. -const ( - // K8SPodUIDKey is the attribute Key conforming to the "k8s.pod.uid" - // semantic conventions. It represents the UID of the Pod. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SPodUIDKey = attribute.Key("k8s.pod.uid") - - // K8SPodNameKey is the attribute Key conforming to the "k8s.pod.name" - // semantic conventions. It represents the name of the Pod. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'opentelemetry-pod-autoconf' - K8SPodNameKey = attribute.Key("k8s.pod.name") -) - -// K8SPodUID returns an attribute KeyValue conforming to the "k8s.pod.uid" -// semantic conventions. It represents the UID of the Pod. -func K8SPodUID(val string) attribute.KeyValue { - return K8SPodUIDKey.String(val) -} - -// K8SPodName returns an attribute KeyValue conforming to the "k8s.pod.name" -// semantic conventions. It represents the name of the Pod. -func K8SPodName(val string) attribute.KeyValue { - return K8SPodNameKey.String(val) -} - -// A container in a -// [PodTemplate](https://kubernetes.io/docs/concepts/workloads/pods/#pod-templates). -const ( - // K8SContainerNameKey is the attribute Key conforming to the - // "k8s.container.name" semantic conventions. It represents the name of the - // Container from Pod specification, must be unique within a Pod. Container - // runtime usually uses different globally unique name (`container.name`). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'redis' - K8SContainerNameKey = attribute.Key("k8s.container.name") - - // K8SContainerRestartCountKey is the attribute Key conforming to the - // "k8s.container.restart_count" semantic conventions. It represents the - // number of times the container was restarted. This attribute can be used - // to identify a particular container (running or stopped) within a - // container spec. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 0, 2 - K8SContainerRestartCountKey = attribute.Key("k8s.container.restart_count") -) - -// K8SContainerName returns an attribute KeyValue conforming to the -// "k8s.container.name" semantic conventions. It represents the name of the -// Container from Pod specification, must be unique within a Pod. Container -// runtime usually uses different globally unique name (`container.name`). -func K8SContainerName(val string) attribute.KeyValue { - return K8SContainerNameKey.String(val) -} - -// K8SContainerRestartCount returns an attribute KeyValue conforming to the -// "k8s.container.restart_count" semantic conventions. It represents the number -// of times the container was restarted. This attribute can be used to identify -// a particular container (running or stopped) within a container spec. -func K8SContainerRestartCount(val int) attribute.KeyValue { - return K8SContainerRestartCountKey.Int(val) -} - -// A Kubernetes ReplicaSet object. -const ( - // K8SReplicaSetUIDKey is the attribute Key conforming to the - // "k8s.replicaset.uid" semantic conventions. It represents the UID of the - // ReplicaSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SReplicaSetUIDKey = attribute.Key("k8s.replicaset.uid") - - // K8SReplicaSetNameKey is the attribute Key conforming to the - // "k8s.replicaset.name" semantic conventions. It represents the name of - // the ReplicaSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'opentelemetry' - K8SReplicaSetNameKey = attribute.Key("k8s.replicaset.name") -) - -// K8SReplicaSetUID returns an attribute KeyValue conforming to the -// "k8s.replicaset.uid" semantic conventions. It represents the UID of the -// ReplicaSet. -func K8SReplicaSetUID(val string) attribute.KeyValue { - return K8SReplicaSetUIDKey.String(val) -} - -// K8SReplicaSetName returns an attribute KeyValue conforming to the -// "k8s.replicaset.name" semantic conventions. It represents the name of the -// ReplicaSet. -func K8SReplicaSetName(val string) attribute.KeyValue { - return K8SReplicaSetNameKey.String(val) -} - -// A Kubernetes Deployment object. -const ( - // K8SDeploymentUIDKey is the attribute Key conforming to the - // "k8s.deployment.uid" semantic conventions. It represents the UID of the - // Deployment. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SDeploymentUIDKey = attribute.Key("k8s.deployment.uid") - - // K8SDeploymentNameKey is the attribute Key conforming to the - // "k8s.deployment.name" semantic conventions. It represents the name of - // the Deployment. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'opentelemetry' - K8SDeploymentNameKey = attribute.Key("k8s.deployment.name") -) - -// K8SDeploymentUID returns an attribute KeyValue conforming to the -// "k8s.deployment.uid" semantic conventions. It represents the UID of the -// Deployment. -func K8SDeploymentUID(val string) attribute.KeyValue { - return K8SDeploymentUIDKey.String(val) -} - -// K8SDeploymentName returns an attribute KeyValue conforming to the -// "k8s.deployment.name" semantic conventions. It represents the name of the -// Deployment. -func K8SDeploymentName(val string) attribute.KeyValue { - return K8SDeploymentNameKey.String(val) -} - -// A Kubernetes StatefulSet object. -const ( - // K8SStatefulSetUIDKey is the attribute Key conforming to the - // "k8s.statefulset.uid" semantic conventions. It represents the UID of the - // StatefulSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SStatefulSetUIDKey = attribute.Key("k8s.statefulset.uid") - - // K8SStatefulSetNameKey is the attribute Key conforming to the - // "k8s.statefulset.name" semantic conventions. It represents the name of - // the StatefulSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'opentelemetry' - K8SStatefulSetNameKey = attribute.Key("k8s.statefulset.name") -) - -// K8SStatefulSetUID returns an attribute KeyValue conforming to the -// "k8s.statefulset.uid" semantic conventions. It represents the UID of the -// StatefulSet. -func K8SStatefulSetUID(val string) attribute.KeyValue { - return K8SStatefulSetUIDKey.String(val) -} - -// K8SStatefulSetName returns an attribute KeyValue conforming to the -// "k8s.statefulset.name" semantic conventions. It represents the name of the -// StatefulSet. -func K8SStatefulSetName(val string) attribute.KeyValue { - return K8SStatefulSetNameKey.String(val) -} - -// A Kubernetes DaemonSet object. -const ( - // K8SDaemonSetUIDKey is the attribute Key conforming to the - // "k8s.daemonset.uid" semantic conventions. It represents the UID of the - // DaemonSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SDaemonSetUIDKey = attribute.Key("k8s.daemonset.uid") - - // K8SDaemonSetNameKey is the attribute Key conforming to the - // "k8s.daemonset.name" semantic conventions. It represents the name of the - // DaemonSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'opentelemetry' - K8SDaemonSetNameKey = attribute.Key("k8s.daemonset.name") -) - -// K8SDaemonSetUID returns an attribute KeyValue conforming to the -// "k8s.daemonset.uid" semantic conventions. It represents the UID of the -// DaemonSet. -func K8SDaemonSetUID(val string) attribute.KeyValue { - return K8SDaemonSetUIDKey.String(val) -} - -// K8SDaemonSetName returns an attribute KeyValue conforming to the -// "k8s.daemonset.name" semantic conventions. It represents the name of the -// DaemonSet. -func K8SDaemonSetName(val string) attribute.KeyValue { - return K8SDaemonSetNameKey.String(val) -} - -// A Kubernetes Job object. -const ( - // K8SJobUIDKey is the attribute Key conforming to the "k8s.job.uid" - // semantic conventions. It represents the UID of the Job. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SJobUIDKey = attribute.Key("k8s.job.uid") - - // K8SJobNameKey is the attribute Key conforming to the "k8s.job.name" - // semantic conventions. It represents the name of the Job. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'opentelemetry' - K8SJobNameKey = attribute.Key("k8s.job.name") -) - -// K8SJobUID returns an attribute KeyValue conforming to the "k8s.job.uid" -// semantic conventions. It represents the UID of the Job. -func K8SJobUID(val string) attribute.KeyValue { - return K8SJobUIDKey.String(val) -} - -// K8SJobName returns an attribute KeyValue conforming to the "k8s.job.name" -// semantic conventions. It represents the name of the Job. -func K8SJobName(val string) attribute.KeyValue { - return K8SJobNameKey.String(val) -} - -// A Kubernetes CronJob object. -const ( - // K8SCronJobUIDKey is the attribute Key conforming to the - // "k8s.cronjob.uid" semantic conventions. It represents the UID of the - // CronJob. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SCronJobUIDKey = attribute.Key("k8s.cronjob.uid") - - // K8SCronJobNameKey is the attribute Key conforming to the - // "k8s.cronjob.name" semantic conventions. It represents the name of the - // CronJob. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'opentelemetry' - K8SCronJobNameKey = attribute.Key("k8s.cronjob.name") -) - -// K8SCronJobUID returns an attribute KeyValue conforming to the -// "k8s.cronjob.uid" semantic conventions. It represents the UID of the -// CronJob. -func K8SCronJobUID(val string) attribute.KeyValue { - return K8SCronJobUIDKey.String(val) -} - -// K8SCronJobName returns an attribute KeyValue conforming to the -// "k8s.cronjob.name" semantic conventions. It represents the name of the -// CronJob. -func K8SCronJobName(val string) attribute.KeyValue { - return K8SCronJobNameKey.String(val) -} - -// The operating system (OS) on which the process represented by this resource -// is running. -const ( - // OSTypeKey is the attribute Key conforming to the "os.type" semantic - // conventions. It represents the operating system type. - // - // Type: Enum - // RequirementLevel: Required - // Stability: stable - OSTypeKey = attribute.Key("os.type") - - // OSDescriptionKey is the attribute Key conforming to the "os.description" - // semantic conventions. It represents the human readable (not intended to - // be parsed) OS version information, like e.g. reported by `ver` or - // `lsb_release -a` commands. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'Microsoft Windows [Version 10.0.18363.778]', 'Ubuntu 18.04.1 - // LTS' - OSDescriptionKey = attribute.Key("os.description") - - // OSNameKey is the attribute Key conforming to the "os.name" semantic - // conventions. It represents the human readable operating system name. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'iOS', 'Android', 'Ubuntu' - OSNameKey = attribute.Key("os.name") - - // OSVersionKey is the attribute Key conforming to the "os.version" - // semantic conventions. It represents the version string of the operating - // system as defined in [Version - // Attributes](../../resource/semantic_conventions/README.md#version-attributes). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '14.2.1', '18.04.1' - OSVersionKey = attribute.Key("os.version") -) - -var ( - // Microsoft Windows - OSTypeWindows = OSTypeKey.String("windows") - // Linux - OSTypeLinux = OSTypeKey.String("linux") - // Apple Darwin - OSTypeDarwin = OSTypeKey.String("darwin") - // FreeBSD - OSTypeFreeBSD = OSTypeKey.String("freebsd") - // NetBSD - OSTypeNetBSD = OSTypeKey.String("netbsd") - // OpenBSD - OSTypeOpenBSD = OSTypeKey.String("openbsd") - // DragonFly BSD - OSTypeDragonflyBSD = OSTypeKey.String("dragonflybsd") - // HP-UX (Hewlett Packard Unix) - OSTypeHPUX = OSTypeKey.String("hpux") - // AIX (Advanced Interactive eXecutive) - OSTypeAIX = OSTypeKey.String("aix") - // SunOS, Oracle Solaris - OSTypeSolaris = OSTypeKey.String("solaris") - // IBM z/OS - OSTypeZOS = OSTypeKey.String("z_os") -) - -// OSDescription returns an attribute KeyValue conforming to the -// "os.description" semantic conventions. It represents the human readable (not -// intended to be parsed) OS version information, like e.g. reported by `ver` -// or `lsb_release -a` commands. -func OSDescription(val string) attribute.KeyValue { - return OSDescriptionKey.String(val) -} - -// OSName returns an attribute KeyValue conforming to the "os.name" semantic -// conventions. It represents the human readable operating system name. -func OSName(val string) attribute.KeyValue { - return OSNameKey.String(val) -} - -// OSVersion returns an attribute KeyValue conforming to the "os.version" -// semantic conventions. It represents the version string of the operating -// system as defined in [Version -// Attributes](../../resource/semantic_conventions/README.md#version-attributes). -func OSVersion(val string) attribute.KeyValue { - return OSVersionKey.String(val) -} - -// An operating system process. -const ( - // ProcessPIDKey is the attribute Key conforming to the "process.pid" - // semantic conventions. It represents the process identifier (PID). - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 1234 - ProcessPIDKey = attribute.Key("process.pid") - - // ProcessParentPIDKey is the attribute Key conforming to the - // "process.parent_pid" semantic conventions. It represents the parent - // Process identifier (PID). - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 111 - ProcessParentPIDKey = attribute.Key("process.parent_pid") - - // ProcessExecutableNameKey is the attribute Key conforming to the - // "process.executable.name" semantic conventions. It represents the name - // of the process executable. On Linux based systems, can be set to the - // `Name` in `proc/[pid]/status`. On Windows, can be set to the base name - // of `GetProcessImageFileNameW`. - // - // Type: string - // RequirementLevel: ConditionallyRequired (See alternative attributes - // below.) - // Stability: stable - // Examples: 'otelcol' - ProcessExecutableNameKey = attribute.Key("process.executable.name") - - // ProcessExecutablePathKey is the attribute Key conforming to the - // "process.executable.path" semantic conventions. It represents the full - // path to the process executable. On Linux based systems, can be set to - // the target of `proc/[pid]/exe`. On Windows, can be set to the result of - // `GetProcessImageFileNameW`. - // - // Type: string - // RequirementLevel: ConditionallyRequired (See alternative attributes - // below.) - // Stability: stable - // Examples: '/usr/bin/cmd/otelcol' - ProcessExecutablePathKey = attribute.Key("process.executable.path") - - // ProcessCommandKey is the attribute Key conforming to the - // "process.command" semantic conventions. It represents the command used - // to launch the process (i.e. the command name). On Linux based systems, - // can be set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can - // be set to the first parameter extracted from `GetCommandLineW`. - // - // Type: string - // RequirementLevel: ConditionallyRequired (See alternative attributes - // below.) - // Stability: stable - // Examples: 'cmd/otelcol' - ProcessCommandKey = attribute.Key("process.command") - - // ProcessCommandLineKey is the attribute Key conforming to the - // "process.command_line" semantic conventions. It represents the full - // command used to launch the process as a single string representing the - // full command. On Windows, can be set to the result of `GetCommandLineW`. - // Do not set this if you have to assemble it just for monitoring; use - // `process.command_args` instead. - // - // Type: string - // RequirementLevel: ConditionallyRequired (See alternative attributes - // below.) - // Stability: stable - // Examples: 'C:\\cmd\\otecol --config="my directory\\config.yaml"' - ProcessCommandLineKey = attribute.Key("process.command_line") - - // ProcessCommandArgsKey is the attribute Key conforming to the - // "process.command_args" semantic conventions. It represents the all the - // command arguments (including the command/executable itself) as received - // by the process. On Linux-based systems (and some other Unixoid systems - // supporting procfs), can be set according to the list of null-delimited - // strings extracted from `proc/[pid]/cmdline`. For libc-based executables, - // this would be the full argv vector passed to `main`. - // - // Type: string[] - // RequirementLevel: ConditionallyRequired (See alternative attributes - // below.) - // Stability: stable - // Examples: 'cmd/otecol', '--config=config.yaml' - ProcessCommandArgsKey = attribute.Key("process.command_args") - - // ProcessOwnerKey is the attribute Key conforming to the "process.owner" - // semantic conventions. It represents the username of the user that owns - // the process. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'root' - ProcessOwnerKey = attribute.Key("process.owner") -) - -// ProcessPID returns an attribute KeyValue conforming to the "process.pid" -// semantic conventions. It represents the process identifier (PID). -func ProcessPID(val int) attribute.KeyValue { - return ProcessPIDKey.Int(val) -} - -// ProcessParentPID returns an attribute KeyValue conforming to the -// "process.parent_pid" semantic conventions. It represents the parent Process -// identifier (PID). -func ProcessParentPID(val int) attribute.KeyValue { - return ProcessParentPIDKey.Int(val) -} - -// ProcessExecutableName returns an attribute KeyValue conforming to the -// "process.executable.name" semantic conventions. It represents the name of -// the process executable. On Linux based systems, can be set to the `Name` in -// `proc/[pid]/status`. On Windows, can be set to the base name of -// `GetProcessImageFileNameW`. -func ProcessExecutableName(val string) attribute.KeyValue { - return ProcessExecutableNameKey.String(val) -} - -// ProcessExecutablePath returns an attribute KeyValue conforming to the -// "process.executable.path" semantic conventions. It represents the full path -// to the process executable. On Linux based systems, can be set to the target -// of `proc/[pid]/exe`. On Windows, can be set to the result of -// `GetProcessImageFileNameW`. -func ProcessExecutablePath(val string) attribute.KeyValue { - return ProcessExecutablePathKey.String(val) -} - -// ProcessCommand returns an attribute KeyValue conforming to the -// "process.command" semantic conventions. It represents the command used to -// launch the process (i.e. the command name). On Linux based systems, can be -// set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can be set to -// the first parameter extracted from `GetCommandLineW`. -func ProcessCommand(val string) attribute.KeyValue { - return ProcessCommandKey.String(val) -} - -// ProcessCommandLine returns an attribute KeyValue conforming to the -// "process.command_line" semantic conventions. It represents the full command -// used to launch the process as a single string representing the full command. -// On Windows, can be set to the result of `GetCommandLineW`. Do not set this -// if you have to assemble it just for monitoring; use `process.command_args` -// instead. -func ProcessCommandLine(val string) attribute.KeyValue { - return ProcessCommandLineKey.String(val) -} - -// ProcessCommandArgs returns an attribute KeyValue conforming to the -// "process.command_args" semantic conventions. It represents the all the -// command arguments (including the command/executable itself) as received by -// the process. On Linux-based systems (and some other Unixoid systems -// supporting procfs), can be set according to the list of null-delimited -// strings extracted from `proc/[pid]/cmdline`. For libc-based executables, -// this would be the full argv vector passed to `main`. -func ProcessCommandArgs(val ...string) attribute.KeyValue { - return ProcessCommandArgsKey.StringSlice(val) -} - -// ProcessOwner returns an attribute KeyValue conforming to the -// "process.owner" semantic conventions. It represents the username of the user -// that owns the process. -func ProcessOwner(val string) attribute.KeyValue { - return ProcessOwnerKey.String(val) -} - -// The single (language) runtime instance which is monitored. -const ( - // ProcessRuntimeNameKey is the attribute Key conforming to the - // "process.runtime.name" semantic conventions. It represents the name of - // the runtime of this process. For compiled native binaries, this SHOULD - // be the name of the compiler. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'OpenJDK Runtime Environment' - ProcessRuntimeNameKey = attribute.Key("process.runtime.name") - - // ProcessRuntimeVersionKey is the attribute Key conforming to the - // "process.runtime.version" semantic conventions. It represents the - // version of the runtime of this process, as returned by the runtime - // without modification. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '14.0.2' - ProcessRuntimeVersionKey = attribute.Key("process.runtime.version") - - // ProcessRuntimeDescriptionKey is the attribute Key conforming to the - // "process.runtime.description" semantic conventions. It represents an - // additional description about the runtime of the process, for example a - // specific vendor customization of the runtime environment. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0' - ProcessRuntimeDescriptionKey = attribute.Key("process.runtime.description") -) - -// ProcessRuntimeName returns an attribute KeyValue conforming to the -// "process.runtime.name" semantic conventions. It represents the name of the -// runtime of this process. For compiled native binaries, this SHOULD be the -// name of the compiler. -func ProcessRuntimeName(val string) attribute.KeyValue { - return ProcessRuntimeNameKey.String(val) -} - -// ProcessRuntimeVersion returns an attribute KeyValue conforming to the -// "process.runtime.version" semantic conventions. It represents the version of -// the runtime of this process, as returned by the runtime without -// modification. -func ProcessRuntimeVersion(val string) attribute.KeyValue { - return ProcessRuntimeVersionKey.String(val) -} - -// ProcessRuntimeDescription returns an attribute KeyValue conforming to the -// "process.runtime.description" semantic conventions. It represents an -// additional description about the runtime of the process, for example a -// specific vendor customization of the runtime environment. -func ProcessRuntimeDescription(val string) attribute.KeyValue { - return ProcessRuntimeDescriptionKey.String(val) -} - -// A service instance. -const ( - // ServiceNameKey is the attribute Key conforming to the "service.name" - // semantic conventions. It represents the logical name of the service. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: 'shoppingcart' - // Note: MUST be the same for all instances of horizontally scaled - // services. If the value was not specified, SDKs MUST fallback to - // `unknown_service:` concatenated with - // [`process.executable.name`](process.md#process), e.g. - // `unknown_service:bash`. If `process.executable.name` is not available, - // the value MUST be set to `unknown_service`. - ServiceNameKey = attribute.Key("service.name") -) - -// ServiceName returns an attribute KeyValue conforming to the -// "service.name" semantic conventions. It represents the logical name of the -// service. -func ServiceName(val string) attribute.KeyValue { - return ServiceNameKey.String(val) -} - -// A service instance. -const ( - // ServiceNamespaceKey is the attribute Key conforming to the - // "service.namespace" semantic conventions. It represents a namespace for - // `service.name`. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'Shop' - // Note: A string value having a meaning that helps to distinguish a group - // of services, for example the team name that owns a group of services. - // `service.name` is expected to be unique within the same namespace. If - // `service.namespace` is not specified in the Resource then `service.name` - // is expected to be unique for all services that have no explicit - // namespace defined (so the empty/unspecified namespace is simply one more - // valid namespace). Zero-length namespace string is assumed equal to - // unspecified namespace. - ServiceNamespaceKey = attribute.Key("service.namespace") - - // ServiceInstanceIDKey is the attribute Key conforming to the - // "service.instance.id" semantic conventions. It represents the string ID - // of the service instance. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'my-k8s-pod-deployment-1', - // '627cc493-f310-47de-96bd-71410b7dec09' - // Note: MUST be unique for each instance of the same - // `service.namespace,service.name` pair (in other words - // `service.namespace,service.name,service.instance.id` triplet MUST be - // globally unique). The ID helps to distinguish instances of the same - // service that exist at the same time (e.g. instances of a horizontally - // scaled service). It is preferable for the ID to be persistent and stay - // the same for the lifetime of the service instance, however it is - // acceptable that the ID is ephemeral and changes during important - // lifetime events for the service (e.g. service restarts). If the service - // has no inherent unique ID that can be used as the value of this - // attribute it is recommended to generate a random Version 1 or Version 4 - // RFC 4122 UUID (services aiming for reproducible UUIDs may also use - // Version 5, see RFC 4122 for more recommendations). - ServiceInstanceIDKey = attribute.Key("service.instance.id") - - // ServiceVersionKey is the attribute Key conforming to the - // "service.version" semantic conventions. It represents the version string - // of the service API or implementation. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '2.0.0' - ServiceVersionKey = attribute.Key("service.version") -) - -// ServiceNamespace returns an attribute KeyValue conforming to the -// "service.namespace" semantic conventions. It represents a namespace for -// `service.name`. -func ServiceNamespace(val string) attribute.KeyValue { - return ServiceNamespaceKey.String(val) -} - -// ServiceInstanceID returns an attribute KeyValue conforming to the -// "service.instance.id" semantic conventions. It represents the string ID of -// the service instance. -func ServiceInstanceID(val string) attribute.KeyValue { - return ServiceInstanceIDKey.String(val) -} - -// ServiceVersion returns an attribute KeyValue conforming to the -// "service.version" semantic conventions. It represents the version string of -// the service API or implementation. -func ServiceVersion(val string) attribute.KeyValue { - return ServiceVersionKey.String(val) -} - -// The telemetry SDK used to capture data recorded by the instrumentation -// libraries. -const ( - // TelemetrySDKNameKey is the attribute Key conforming to the - // "telemetry.sdk.name" semantic conventions. It represents the name of the - // telemetry SDK as defined above. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: 'opentelemetry' - TelemetrySDKNameKey = attribute.Key("telemetry.sdk.name") - - // TelemetrySDKLanguageKey is the attribute Key conforming to the - // "telemetry.sdk.language" semantic conventions. It represents the - // language of the telemetry SDK. - // - // Type: Enum - // RequirementLevel: Required - // Stability: stable - TelemetrySDKLanguageKey = attribute.Key("telemetry.sdk.language") - - // TelemetrySDKVersionKey is the attribute Key conforming to the - // "telemetry.sdk.version" semantic conventions. It represents the version - // string of the telemetry SDK. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: '1.2.3' - TelemetrySDKVersionKey = attribute.Key("telemetry.sdk.version") -) - -var ( - // cpp - TelemetrySDKLanguageCPP = TelemetrySDKLanguageKey.String("cpp") - // dotnet - TelemetrySDKLanguageDotnet = TelemetrySDKLanguageKey.String("dotnet") - // erlang - TelemetrySDKLanguageErlang = TelemetrySDKLanguageKey.String("erlang") - // go - TelemetrySDKLanguageGo = TelemetrySDKLanguageKey.String("go") - // java - TelemetrySDKLanguageJava = TelemetrySDKLanguageKey.String("java") - // nodejs - TelemetrySDKLanguageNodejs = TelemetrySDKLanguageKey.String("nodejs") - // php - TelemetrySDKLanguagePHP = TelemetrySDKLanguageKey.String("php") - // python - TelemetrySDKLanguagePython = TelemetrySDKLanguageKey.String("python") - // ruby - TelemetrySDKLanguageRuby = TelemetrySDKLanguageKey.String("ruby") - // webjs - TelemetrySDKLanguageWebjs = TelemetrySDKLanguageKey.String("webjs") - // swift - TelemetrySDKLanguageSwift = TelemetrySDKLanguageKey.String("swift") -) - -// TelemetrySDKName returns an attribute KeyValue conforming to the -// "telemetry.sdk.name" semantic conventions. It represents the name of the -// telemetry SDK as defined above. -func TelemetrySDKName(val string) attribute.KeyValue { - return TelemetrySDKNameKey.String(val) -} - -// TelemetrySDKVersion returns an attribute KeyValue conforming to the -// "telemetry.sdk.version" semantic conventions. It represents the version -// string of the telemetry SDK. -func TelemetrySDKVersion(val string) attribute.KeyValue { - return TelemetrySDKVersionKey.String(val) -} - -// The telemetry SDK used to capture data recorded by the instrumentation -// libraries. -const ( - // TelemetryAutoVersionKey is the attribute Key conforming to the - // "telemetry.auto.version" semantic conventions. It represents the version - // string of the auto instrumentation agent, if used. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '1.2.3' - TelemetryAutoVersionKey = attribute.Key("telemetry.auto.version") -) - -// TelemetryAutoVersion returns an attribute KeyValue conforming to the -// "telemetry.auto.version" semantic conventions. It represents the version -// string of the auto instrumentation agent, if used. -func TelemetryAutoVersion(val string) attribute.KeyValue { - return TelemetryAutoVersionKey.String(val) -} - -// Resource describing the packaged software running the application code. Web -// engines are typically executed using process.runtime. -const ( - // WebEngineNameKey is the attribute Key conforming to the "webengine.name" - // semantic conventions. It represents the name of the web engine. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: 'WildFly' - WebEngineNameKey = attribute.Key("webengine.name") - - // WebEngineVersionKey is the attribute Key conforming to the - // "webengine.version" semantic conventions. It represents the version of - // the web engine. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '21.0.0' - WebEngineVersionKey = attribute.Key("webengine.version") - - // WebEngineDescriptionKey is the attribute Key conforming to the - // "webengine.description" semantic conventions. It represents the - // additional description of the web engine (e.g. detailed version and - // edition information). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'WildFly Full 21.0.0.Final (WildFly Core 13.0.1.Final) - - // 2.2.2.Final' - WebEngineDescriptionKey = attribute.Key("webengine.description") -) - -// WebEngineName returns an attribute KeyValue conforming to the -// "webengine.name" semantic conventions. It represents the name of the web -// engine. -func WebEngineName(val string) attribute.KeyValue { - return WebEngineNameKey.String(val) -} - -// WebEngineVersion returns an attribute KeyValue conforming to the -// "webengine.version" semantic conventions. It represents the version of the -// web engine. -func WebEngineVersion(val string) attribute.KeyValue { - return WebEngineVersionKey.String(val) -} - -// WebEngineDescription returns an attribute KeyValue conforming to the -// "webengine.description" semantic conventions. It represents the additional -// description of the web engine (e.g. detailed version and edition -// information). -func WebEngineDescription(val string) attribute.KeyValue { - return WebEngineDescriptionKey.String(val) -} - -// Attributes used by non-OTLP exporters to represent OpenTelemetry Scope's -// concepts. -const ( - // OTelScopeNameKey is the attribute Key conforming to the - // "otel.scope.name" semantic conventions. It represents the name of the - // instrumentation scope - (`InstrumentationScope.Name` in OTLP). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'io.opentelemetry.contrib.mongodb' - OTelScopeNameKey = attribute.Key("otel.scope.name") - - // OTelScopeVersionKey is the attribute Key conforming to the - // "otel.scope.version" semantic conventions. It represents the version of - // the instrumentation scope - (`InstrumentationScope.Version` in OTLP). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '1.0.0' - OTelScopeVersionKey = attribute.Key("otel.scope.version") -) - -// OTelScopeName returns an attribute KeyValue conforming to the -// "otel.scope.name" semantic conventions. It represents the name of the -// instrumentation scope - (`InstrumentationScope.Name` in OTLP). -func OTelScopeName(val string) attribute.KeyValue { - return OTelScopeNameKey.String(val) -} - -// OTelScopeVersion returns an attribute KeyValue conforming to the -// "otel.scope.version" semantic conventions. It represents the version of the -// instrumentation scope - (`InstrumentationScope.Version` in OTLP). -func OTelScopeVersion(val string) attribute.KeyValue { - return OTelScopeVersionKey.String(val) -} - -// Span attributes used by non-OTLP exporters to represent OpenTelemetry -// Scope's concepts. -const ( - // OTelLibraryNameKey is the attribute Key conforming to the - // "otel.library.name" semantic conventions. It represents the deprecated, - // use the `otel.scope.name` attribute. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 'io.opentelemetry.contrib.mongodb' - OTelLibraryNameKey = attribute.Key("otel.library.name") - - // OTelLibraryVersionKey is the attribute Key conforming to the - // "otel.library.version" semantic conventions. It represents the - // deprecated, use the `otel.scope.version` attribute. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: '1.0.0' - OTelLibraryVersionKey = attribute.Key("otel.library.version") -) - -// OTelLibraryName returns an attribute KeyValue conforming to the -// "otel.library.name" semantic conventions. It represents the deprecated, use -// the `otel.scope.name` attribute. -func OTelLibraryName(val string) attribute.KeyValue { - return OTelLibraryNameKey.String(val) -} - -// OTelLibraryVersion returns an attribute KeyValue conforming to the -// "otel.library.version" semantic conventions. It represents the deprecated, -// use the `otel.scope.version` attribute. -func OTelLibraryVersion(val string) attribute.KeyValue { - return OTelLibraryVersionKey.String(val) -} diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/schema.go b/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/schema.go deleted file mode 100644 index 95d0210e..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/schema.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.20.0" - -// SchemaURL is the schema URL that matches the version of the semantic conventions -// that this package defines. Semconv packages starting from v1.4.0 must declare -// non-empty schema URL in the form https://opentelemetry.io/schemas/ -const SchemaURL = "https://opentelemetry.io/schemas/1.20.0" diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/trace.go b/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/trace.go deleted file mode 100644 index 90b1b045..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.20.0/trace.go +++ /dev/null @@ -1,2599 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Code generated from semantic convention specification. DO NOT EDIT. - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.20.0" - -import "go.opentelemetry.io/otel/attribute" - -// The shared attributes used to report a single exception associated with a -// span or log. -const ( - // ExceptionTypeKey is the attribute Key conforming to the "exception.type" - // semantic conventions. It represents the type of the exception (its - // fully-qualified class name, if applicable). The dynamic type of the - // exception should be preferred over the static type in languages that - // support it. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'java.net.ConnectException', 'OSError' - ExceptionTypeKey = attribute.Key("exception.type") - - // ExceptionMessageKey is the attribute Key conforming to the - // "exception.message" semantic conventions. It represents the exception - // message. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'Division by zero', "Can't convert 'int' object to str - // implicitly" - ExceptionMessageKey = attribute.Key("exception.message") - - // ExceptionStacktraceKey is the attribute Key conforming to the - // "exception.stacktrace" semantic conventions. It represents a stacktrace - // as a string in the natural representation for the language runtime. The - // representation is to be determined and documented by each language SIG. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'Exception in thread "main" java.lang.RuntimeException: Test - // exception\\n at ' - // 'com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\n at ' - // 'com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\n at ' - // 'com.example.GenerateTrace.main(GenerateTrace.java:5)' - ExceptionStacktraceKey = attribute.Key("exception.stacktrace") -) - -// ExceptionType returns an attribute KeyValue conforming to the -// "exception.type" semantic conventions. It represents the type of the -// exception (its fully-qualified class name, if applicable). The dynamic type -// of the exception should be preferred over the static type in languages that -// support it. -func ExceptionType(val string) attribute.KeyValue { - return ExceptionTypeKey.String(val) -} - -// ExceptionMessage returns an attribute KeyValue conforming to the -// "exception.message" semantic conventions. It represents the exception -// message. -func ExceptionMessage(val string) attribute.KeyValue { - return ExceptionMessageKey.String(val) -} - -// ExceptionStacktrace returns an attribute KeyValue conforming to the -// "exception.stacktrace" semantic conventions. It represents a stacktrace as a -// string in the natural representation for the language runtime. The -// representation is to be determined and documented by each language SIG. -func ExceptionStacktrace(val string) attribute.KeyValue { - return ExceptionStacktraceKey.String(val) -} - -// The attributes described in this section are rather generic. They may be -// used in any Log Record they apply to. -const ( - // LogRecordUIDKey is the attribute Key conforming to the "log.record.uid" - // semantic conventions. It represents a unique identifier for the Log - // Record. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '01ARZ3NDEKTSV4RRFFQ69G5FAV' - // Note: If an id is provided, other log records with the same id will be - // considered duplicates and can be removed safely. This means, that two - // distinguishable log records MUST have different values. - // The id MAY be an [Universally Unique Lexicographically Sortable - // Identifier (ULID)](https://github.com/ulid/spec), but other identifiers - // (e.g. UUID) may be used as needed. - LogRecordUIDKey = attribute.Key("log.record.uid") -) - -// LogRecordUID returns an attribute KeyValue conforming to the -// "log.record.uid" semantic conventions. It represents a unique identifier for -// the Log Record. -func LogRecordUID(val string) attribute.KeyValue { - return LogRecordUIDKey.String(val) -} - -// Span attributes used by AWS Lambda (in addition to general `faas` -// attributes). -const ( - // AWSLambdaInvokedARNKey is the attribute Key conforming to the - // "aws.lambda.invoked_arn" semantic conventions. It represents the full - // invoked ARN as provided on the `Context` passed to the function - // (`Lambda-Runtime-Invoked-Function-ARN` header on the - // `/runtime/invocation/next` applicable). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'arn:aws:lambda:us-east-1:123456:function:myfunction:myalias' - // Note: This may be different from `cloud.resource_id` if an alias is - // involved. - AWSLambdaInvokedARNKey = attribute.Key("aws.lambda.invoked_arn") -) - -// AWSLambdaInvokedARN returns an attribute KeyValue conforming to the -// "aws.lambda.invoked_arn" semantic conventions. It represents the full -// invoked ARN as provided on the `Context` passed to the function -// (`Lambda-Runtime-Invoked-Function-ARN` header on the -// `/runtime/invocation/next` applicable). -func AWSLambdaInvokedARN(val string) attribute.KeyValue { - return AWSLambdaInvokedARNKey.String(val) -} - -// Attributes for CloudEvents. CloudEvents is a specification on how to define -// event data in a standard way. These attributes can be attached to spans when -// performing operations with CloudEvents, regardless of the protocol being -// used. -const ( - // CloudeventsEventIDKey is the attribute Key conforming to the - // "cloudevents.event_id" semantic conventions. It represents the - // [event_id](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id) - // uniquely identifies the event. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: '123e4567-e89b-12d3-a456-426614174000', '0001' - CloudeventsEventIDKey = attribute.Key("cloudevents.event_id") - - // CloudeventsEventSourceKey is the attribute Key conforming to the - // "cloudevents.event_source" semantic conventions. It represents the - // [source](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1) - // identifies the context in which an event happened. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: 'https://github.com/cloudevents', - // '/cloudevents/spec/pull/123', 'my-service' - CloudeventsEventSourceKey = attribute.Key("cloudevents.event_source") - - // CloudeventsEventSpecVersionKey is the attribute Key conforming to the - // "cloudevents.event_spec_version" semantic conventions. It represents the - // [version of the CloudEvents - // specification](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion) - // which the event uses. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '1.0' - CloudeventsEventSpecVersionKey = attribute.Key("cloudevents.event_spec_version") - - // CloudeventsEventTypeKey is the attribute Key conforming to the - // "cloudevents.event_type" semantic conventions. It represents the - // [event_type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type) - // contains a value describing the type of event related to the originating - // occurrence. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'com.github.pull_request.opened', - // 'com.example.object.deleted.v2' - CloudeventsEventTypeKey = attribute.Key("cloudevents.event_type") - - // CloudeventsEventSubjectKey is the attribute Key conforming to the - // "cloudevents.event_subject" semantic conventions. It represents the - // [subject](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject) - // of the event in the context of the event producer (identified by - // source). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'mynewfile.jpg' - CloudeventsEventSubjectKey = attribute.Key("cloudevents.event_subject") -) - -// CloudeventsEventID returns an attribute KeyValue conforming to the -// "cloudevents.event_id" semantic conventions. It represents the -// [event_id](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id) -// uniquely identifies the event. -func CloudeventsEventID(val string) attribute.KeyValue { - return CloudeventsEventIDKey.String(val) -} - -// CloudeventsEventSource returns an attribute KeyValue conforming to the -// "cloudevents.event_source" semantic conventions. It represents the -// [source](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1) -// identifies the context in which an event happened. -func CloudeventsEventSource(val string) attribute.KeyValue { - return CloudeventsEventSourceKey.String(val) -} - -// CloudeventsEventSpecVersion returns an attribute KeyValue conforming to -// the "cloudevents.event_spec_version" semantic conventions. It represents the -// [version of the CloudEvents -// specification](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion) -// which the event uses. -func CloudeventsEventSpecVersion(val string) attribute.KeyValue { - return CloudeventsEventSpecVersionKey.String(val) -} - -// CloudeventsEventType returns an attribute KeyValue conforming to the -// "cloudevents.event_type" semantic conventions. It represents the -// [event_type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type) -// contains a value describing the type of event related to the originating -// occurrence. -func CloudeventsEventType(val string) attribute.KeyValue { - return CloudeventsEventTypeKey.String(val) -} - -// CloudeventsEventSubject returns an attribute KeyValue conforming to the -// "cloudevents.event_subject" semantic conventions. It represents the -// [subject](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject) -// of the event in the context of the event producer (identified by source). -func CloudeventsEventSubject(val string) attribute.KeyValue { - return CloudeventsEventSubjectKey.String(val) -} - -// Semantic conventions for the OpenTracing Shim -const ( - // OpentracingRefTypeKey is the attribute Key conforming to the - // "opentracing.ref_type" semantic conventions. It represents the - // parent-child Reference type - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - // Note: The causal relationship between a child Span and a parent Span. - OpentracingRefTypeKey = attribute.Key("opentracing.ref_type") -) - -var ( - // The parent Span depends on the child Span in some capacity - OpentracingRefTypeChildOf = OpentracingRefTypeKey.String("child_of") - // The parent Span does not depend in any way on the result of the child Span - OpentracingRefTypeFollowsFrom = OpentracingRefTypeKey.String("follows_from") -) - -// The attributes used to perform database client calls. -const ( - // DBSystemKey is the attribute Key conforming to the "db.system" semantic - // conventions. It represents an identifier for the database management - // system (DBMS) product being used. See below for a list of well-known - // identifiers. - // - // Type: Enum - // RequirementLevel: Required - // Stability: stable - DBSystemKey = attribute.Key("db.system") - - // DBConnectionStringKey is the attribute Key conforming to the - // "db.connection_string" semantic conventions. It represents the - // connection string used to connect to the database. It is recommended to - // remove embedded credentials. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'Server=(localdb)\\v11.0;Integrated Security=true;' - DBConnectionStringKey = attribute.Key("db.connection_string") - - // DBUserKey is the attribute Key conforming to the "db.user" semantic - // conventions. It represents the username for accessing the database. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'readonly_user', 'reporting_user' - DBUserKey = attribute.Key("db.user") - - // DBJDBCDriverClassnameKey is the attribute Key conforming to the - // "db.jdbc.driver_classname" semantic conventions. It represents the - // fully-qualified class name of the [Java Database Connectivity - // (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) - // driver used to connect. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'org.postgresql.Driver', - // 'com.microsoft.sqlserver.jdbc.SQLServerDriver' - DBJDBCDriverClassnameKey = attribute.Key("db.jdbc.driver_classname") - - // DBNameKey is the attribute Key conforming to the "db.name" semantic - // conventions. It represents the this attribute is used to report the name - // of the database being accessed. For commands that switch the database, - // this should be set to the target database (even if the command fails). - // - // Type: string - // RequirementLevel: ConditionallyRequired (If applicable.) - // Stability: stable - // Examples: 'customers', 'main' - // Note: In some SQL databases, the database name to be used is called - // "schema name". In case there are multiple layers that could be - // considered for database name (e.g. Oracle instance name and schema - // name), the database name to be used is the more specific layer (e.g. - // Oracle schema name). - DBNameKey = attribute.Key("db.name") - - // DBStatementKey is the attribute Key conforming to the "db.statement" - // semantic conventions. It represents the database statement being - // executed. - // - // Type: string - // RequirementLevel: Recommended (Should be collected by default only if - // there is sanitization that excludes sensitive information.) - // Stability: stable - // Examples: 'SELECT * FROM wuser_table', 'SET mykey "WuValue"' - DBStatementKey = attribute.Key("db.statement") - - // DBOperationKey is the attribute Key conforming to the "db.operation" - // semantic conventions. It represents the name of the operation being - // executed, e.g. the [MongoDB command - // name](https://docs.mongodb.com/manual/reference/command/#database-operations) - // such as `findAndModify`, or the SQL keyword. - // - // Type: string - // RequirementLevel: ConditionallyRequired (If `db.statement` is not - // applicable.) - // Stability: stable - // Examples: 'findAndModify', 'HMSET', 'SELECT' - // Note: When setting this to an SQL keyword, it is not recommended to - // attempt any client-side parsing of `db.statement` just to get this - // property, but it should be set if the operation name is provided by the - // library being instrumented. If the SQL statement has an ambiguous - // operation, or performs more than one operation, this value may be - // omitted. - DBOperationKey = attribute.Key("db.operation") -) - -var ( - // Some other SQL database. Fallback only. See notes - DBSystemOtherSQL = DBSystemKey.String("other_sql") - // Microsoft SQL Server - DBSystemMSSQL = DBSystemKey.String("mssql") - // Microsoft SQL Server Compact - DBSystemMssqlcompact = DBSystemKey.String("mssqlcompact") - // MySQL - DBSystemMySQL = DBSystemKey.String("mysql") - // Oracle Database - DBSystemOracle = DBSystemKey.String("oracle") - // IBM DB2 - DBSystemDB2 = DBSystemKey.String("db2") - // PostgreSQL - DBSystemPostgreSQL = DBSystemKey.String("postgresql") - // Amazon Redshift - DBSystemRedshift = DBSystemKey.String("redshift") - // Apache Hive - DBSystemHive = DBSystemKey.String("hive") - // Cloudscape - DBSystemCloudscape = DBSystemKey.String("cloudscape") - // HyperSQL DataBase - DBSystemHSQLDB = DBSystemKey.String("hsqldb") - // Progress Database - DBSystemProgress = DBSystemKey.String("progress") - // SAP MaxDB - DBSystemMaxDB = DBSystemKey.String("maxdb") - // SAP HANA - DBSystemHanaDB = DBSystemKey.String("hanadb") - // Ingres - DBSystemIngres = DBSystemKey.String("ingres") - // FirstSQL - DBSystemFirstSQL = DBSystemKey.String("firstsql") - // EnterpriseDB - DBSystemEDB = DBSystemKey.String("edb") - // InterSystems Caché - DBSystemCache = DBSystemKey.String("cache") - // Adabas (Adaptable Database System) - DBSystemAdabas = DBSystemKey.String("adabas") - // Firebird - DBSystemFirebird = DBSystemKey.String("firebird") - // Apache Derby - DBSystemDerby = DBSystemKey.String("derby") - // FileMaker - DBSystemFilemaker = DBSystemKey.String("filemaker") - // Informix - DBSystemInformix = DBSystemKey.String("informix") - // InstantDB - DBSystemInstantDB = DBSystemKey.String("instantdb") - // InterBase - DBSystemInterbase = DBSystemKey.String("interbase") - // MariaDB - DBSystemMariaDB = DBSystemKey.String("mariadb") - // Netezza - DBSystemNetezza = DBSystemKey.String("netezza") - // Pervasive PSQL - DBSystemPervasive = DBSystemKey.String("pervasive") - // PointBase - DBSystemPointbase = DBSystemKey.String("pointbase") - // SQLite - DBSystemSqlite = DBSystemKey.String("sqlite") - // Sybase - DBSystemSybase = DBSystemKey.String("sybase") - // Teradata - DBSystemTeradata = DBSystemKey.String("teradata") - // Vertica - DBSystemVertica = DBSystemKey.String("vertica") - // H2 - DBSystemH2 = DBSystemKey.String("h2") - // ColdFusion IMQ - DBSystemColdfusion = DBSystemKey.String("coldfusion") - // Apache Cassandra - DBSystemCassandra = DBSystemKey.String("cassandra") - // Apache HBase - DBSystemHBase = DBSystemKey.String("hbase") - // MongoDB - DBSystemMongoDB = DBSystemKey.String("mongodb") - // Redis - DBSystemRedis = DBSystemKey.String("redis") - // Couchbase - DBSystemCouchbase = DBSystemKey.String("couchbase") - // CouchDB - DBSystemCouchDB = DBSystemKey.String("couchdb") - // Microsoft Azure Cosmos DB - DBSystemCosmosDB = DBSystemKey.String("cosmosdb") - // Amazon DynamoDB - DBSystemDynamoDB = DBSystemKey.String("dynamodb") - // Neo4j - DBSystemNeo4j = DBSystemKey.String("neo4j") - // Apache Geode - DBSystemGeode = DBSystemKey.String("geode") - // Elasticsearch - DBSystemElasticsearch = DBSystemKey.String("elasticsearch") - // Memcached - DBSystemMemcached = DBSystemKey.String("memcached") - // CockroachDB - DBSystemCockroachdb = DBSystemKey.String("cockroachdb") - // OpenSearch - DBSystemOpensearch = DBSystemKey.String("opensearch") - // ClickHouse - DBSystemClickhouse = DBSystemKey.String("clickhouse") - // Cloud Spanner - DBSystemSpanner = DBSystemKey.String("spanner") - // Trino - DBSystemTrino = DBSystemKey.String("trino") -) - -// DBConnectionString returns an attribute KeyValue conforming to the -// "db.connection_string" semantic conventions. It represents the connection -// string used to connect to the database. It is recommended to remove embedded -// credentials. -func DBConnectionString(val string) attribute.KeyValue { - return DBConnectionStringKey.String(val) -} - -// DBUser returns an attribute KeyValue conforming to the "db.user" semantic -// conventions. It represents the username for accessing the database. -func DBUser(val string) attribute.KeyValue { - return DBUserKey.String(val) -} - -// DBJDBCDriverClassname returns an attribute KeyValue conforming to the -// "db.jdbc.driver_classname" semantic conventions. It represents the -// fully-qualified class name of the [Java Database Connectivity -// (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver -// used to connect. -func DBJDBCDriverClassname(val string) attribute.KeyValue { - return DBJDBCDriverClassnameKey.String(val) -} - -// DBName returns an attribute KeyValue conforming to the "db.name" semantic -// conventions. It represents the this attribute is used to report the name of -// the database being accessed. For commands that switch the database, this -// should be set to the target database (even if the command fails). -func DBName(val string) attribute.KeyValue { - return DBNameKey.String(val) -} - -// DBStatement returns an attribute KeyValue conforming to the -// "db.statement" semantic conventions. It represents the database statement -// being executed. -func DBStatement(val string) attribute.KeyValue { - return DBStatementKey.String(val) -} - -// DBOperation returns an attribute KeyValue conforming to the -// "db.operation" semantic conventions. It represents the name of the operation -// being executed, e.g. the [MongoDB command -// name](https://docs.mongodb.com/manual/reference/command/#database-operations) -// such as `findAndModify`, or the SQL keyword. -func DBOperation(val string) attribute.KeyValue { - return DBOperationKey.String(val) -} - -// Connection-level attributes for Microsoft SQL Server -const ( - // DBMSSQLInstanceNameKey is the attribute Key conforming to the - // "db.mssql.instance_name" semantic conventions. It represents the - // Microsoft SQL Server [instance - // name](https://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15) - // connecting to. This name is used to determine the port of a named - // instance. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'MSSQLSERVER' - // Note: If setting a `db.mssql.instance_name`, `net.peer.port` is no - // longer required (but still recommended if non-standard). - DBMSSQLInstanceNameKey = attribute.Key("db.mssql.instance_name") -) - -// DBMSSQLInstanceName returns an attribute KeyValue conforming to the -// "db.mssql.instance_name" semantic conventions. It represents the Microsoft -// SQL Server [instance -// name](https://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15) -// connecting to. This name is used to determine the port of a named instance. -func DBMSSQLInstanceName(val string) attribute.KeyValue { - return DBMSSQLInstanceNameKey.String(val) -} - -// Call-level attributes for Cassandra -const ( - // DBCassandraPageSizeKey is the attribute Key conforming to the - // "db.cassandra.page_size" semantic conventions. It represents the fetch - // size used for paging, i.e. how many rows will be returned at once. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 5000 - DBCassandraPageSizeKey = attribute.Key("db.cassandra.page_size") - - // DBCassandraConsistencyLevelKey is the attribute Key conforming to the - // "db.cassandra.consistency_level" semantic conventions. It represents the - // consistency level of the query. Based on consistency values from - // [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html). - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - DBCassandraConsistencyLevelKey = attribute.Key("db.cassandra.consistency_level") - - // DBCassandraTableKey is the attribute Key conforming to the - // "db.cassandra.table" semantic conventions. It represents the name of the - // primary table that the operation is acting upon, including the keyspace - // name (if applicable). - // - // Type: string - // RequirementLevel: Recommended - // Stability: stable - // Examples: 'mytable' - // Note: This mirrors the db.sql.table attribute but references cassandra - // rather than sql. It is not recommended to attempt any client-side - // parsing of `db.statement` just to get this property, but it should be - // set if it is provided by the library being instrumented. If the - // operation is acting upon an anonymous table, or more than one table, - // this value MUST NOT be set. - DBCassandraTableKey = attribute.Key("db.cassandra.table") - - // DBCassandraIdempotenceKey is the attribute Key conforming to the - // "db.cassandra.idempotence" semantic conventions. It represents the - // whether or not the query is idempotent. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: stable - DBCassandraIdempotenceKey = attribute.Key("db.cassandra.idempotence") - - // DBCassandraSpeculativeExecutionCountKey is the attribute Key conforming - // to the "db.cassandra.speculative_execution_count" semantic conventions. - // It represents the number of times a query was speculatively executed. - // Not set or `0` if the query was not executed speculatively. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 0, 2 - DBCassandraSpeculativeExecutionCountKey = attribute.Key("db.cassandra.speculative_execution_count") - - // DBCassandraCoordinatorIDKey is the attribute Key conforming to the - // "db.cassandra.coordinator.id" semantic conventions. It represents the ID - // of the coordinating node for a query. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'be13faa2-8574-4d71-926d-27f16cf8a7af' - DBCassandraCoordinatorIDKey = attribute.Key("db.cassandra.coordinator.id") - - // DBCassandraCoordinatorDCKey is the attribute Key conforming to the - // "db.cassandra.coordinator.dc" semantic conventions. It represents the - // data center of the coordinating node for a query. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'us-west-2' - DBCassandraCoordinatorDCKey = attribute.Key("db.cassandra.coordinator.dc") -) - -var ( - // all - DBCassandraConsistencyLevelAll = DBCassandraConsistencyLevelKey.String("all") - // each_quorum - DBCassandraConsistencyLevelEachQuorum = DBCassandraConsistencyLevelKey.String("each_quorum") - // quorum - DBCassandraConsistencyLevelQuorum = DBCassandraConsistencyLevelKey.String("quorum") - // local_quorum - DBCassandraConsistencyLevelLocalQuorum = DBCassandraConsistencyLevelKey.String("local_quorum") - // one - DBCassandraConsistencyLevelOne = DBCassandraConsistencyLevelKey.String("one") - // two - DBCassandraConsistencyLevelTwo = DBCassandraConsistencyLevelKey.String("two") - // three - DBCassandraConsistencyLevelThree = DBCassandraConsistencyLevelKey.String("three") - // local_one - DBCassandraConsistencyLevelLocalOne = DBCassandraConsistencyLevelKey.String("local_one") - // any - DBCassandraConsistencyLevelAny = DBCassandraConsistencyLevelKey.String("any") - // serial - DBCassandraConsistencyLevelSerial = DBCassandraConsistencyLevelKey.String("serial") - // local_serial - DBCassandraConsistencyLevelLocalSerial = DBCassandraConsistencyLevelKey.String("local_serial") -) - -// DBCassandraPageSize returns an attribute KeyValue conforming to the -// "db.cassandra.page_size" semantic conventions. It represents the fetch size -// used for paging, i.e. how many rows will be returned at once. -func DBCassandraPageSize(val int) attribute.KeyValue { - return DBCassandraPageSizeKey.Int(val) -} - -// DBCassandraTable returns an attribute KeyValue conforming to the -// "db.cassandra.table" semantic conventions. It represents the name of the -// primary table that the operation is acting upon, including the keyspace name -// (if applicable). -func DBCassandraTable(val string) attribute.KeyValue { - return DBCassandraTableKey.String(val) -} - -// DBCassandraIdempotence returns an attribute KeyValue conforming to the -// "db.cassandra.idempotence" semantic conventions. It represents the whether -// or not the query is idempotent. -func DBCassandraIdempotence(val bool) attribute.KeyValue { - return DBCassandraIdempotenceKey.Bool(val) -} - -// DBCassandraSpeculativeExecutionCount returns an attribute KeyValue -// conforming to the "db.cassandra.speculative_execution_count" semantic -// conventions. It represents the number of times a query was speculatively -// executed. Not set or `0` if the query was not executed speculatively. -func DBCassandraSpeculativeExecutionCount(val int) attribute.KeyValue { - return DBCassandraSpeculativeExecutionCountKey.Int(val) -} - -// DBCassandraCoordinatorID returns an attribute KeyValue conforming to the -// "db.cassandra.coordinator.id" semantic conventions. It represents the ID of -// the coordinating node for a query. -func DBCassandraCoordinatorID(val string) attribute.KeyValue { - return DBCassandraCoordinatorIDKey.String(val) -} - -// DBCassandraCoordinatorDC returns an attribute KeyValue conforming to the -// "db.cassandra.coordinator.dc" semantic conventions. It represents the data -// center of the coordinating node for a query. -func DBCassandraCoordinatorDC(val string) attribute.KeyValue { - return DBCassandraCoordinatorDCKey.String(val) -} - -// Call-level attributes for Redis -const ( - // DBRedisDBIndexKey is the attribute Key conforming to the - // "db.redis.database_index" semantic conventions. It represents the index - // of the database being accessed as used in the [`SELECT` - // command](https://redis.io/commands/select), provided as an integer. To - // be used instead of the generic `db.name` attribute. - // - // Type: int - // RequirementLevel: ConditionallyRequired (If other than the default - // database (`0`).) - // Stability: stable - // Examples: 0, 1, 15 - DBRedisDBIndexKey = attribute.Key("db.redis.database_index") -) - -// DBRedisDBIndex returns an attribute KeyValue conforming to the -// "db.redis.database_index" semantic conventions. It represents the index of -// the database being accessed as used in the [`SELECT` -// command](https://redis.io/commands/select), provided as an integer. To be -// used instead of the generic `db.name` attribute. -func DBRedisDBIndex(val int) attribute.KeyValue { - return DBRedisDBIndexKey.Int(val) -} - -// Call-level attributes for MongoDB -const ( - // DBMongoDBCollectionKey is the attribute Key conforming to the - // "db.mongodb.collection" semantic conventions. It represents the - // collection being accessed within the database stated in `db.name`. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: 'customers', 'products' - DBMongoDBCollectionKey = attribute.Key("db.mongodb.collection") -) - -// DBMongoDBCollection returns an attribute KeyValue conforming to the -// "db.mongodb.collection" semantic conventions. It represents the collection -// being accessed within the database stated in `db.name`. -func DBMongoDBCollection(val string) attribute.KeyValue { - return DBMongoDBCollectionKey.String(val) -} - -// Call-level attributes for SQL databases -const ( - // DBSQLTableKey is the attribute Key conforming to the "db.sql.table" - // semantic conventions. It represents the name of the primary table that - // the operation is acting upon, including the database name (if - // applicable). - // - // Type: string - // RequirementLevel: Recommended - // Stability: stable - // Examples: 'public.users', 'customers' - // Note: It is not recommended to attempt any client-side parsing of - // `db.statement` just to get this property, but it should be set if it is - // provided by the library being instrumented. If the operation is acting - // upon an anonymous table, or more than one table, this value MUST NOT be - // set. - DBSQLTableKey = attribute.Key("db.sql.table") -) - -// DBSQLTable returns an attribute KeyValue conforming to the "db.sql.table" -// semantic conventions. It represents the name of the primary table that the -// operation is acting upon, including the database name (if applicable). -func DBSQLTable(val string) attribute.KeyValue { - return DBSQLTableKey.String(val) -} - -// Call-level attributes for Cosmos DB. -const ( - // DBCosmosDBClientIDKey is the attribute Key conforming to the - // "db.cosmosdb.client_id" semantic conventions. It represents the unique - // Cosmos client instance id. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '3ba4827d-4422-483f-b59f-85b74211c11d' - DBCosmosDBClientIDKey = attribute.Key("db.cosmosdb.client_id") - - // DBCosmosDBOperationTypeKey is the attribute Key conforming to the - // "db.cosmosdb.operation_type" semantic conventions. It represents the - // cosmosDB Operation Type. - // - // Type: Enum - // RequirementLevel: ConditionallyRequired (when performing one of the - // operations in this list) - // Stability: stable - DBCosmosDBOperationTypeKey = attribute.Key("db.cosmosdb.operation_type") - - // DBCosmosDBConnectionModeKey is the attribute Key conforming to the - // "db.cosmosdb.connection_mode" semantic conventions. It represents the - // cosmos client connection mode. - // - // Type: Enum - // RequirementLevel: ConditionallyRequired (if not `direct` (or pick gw as - // default)) - // Stability: stable - DBCosmosDBConnectionModeKey = attribute.Key("db.cosmosdb.connection_mode") - - // DBCosmosDBContainerKey is the attribute Key conforming to the - // "db.cosmosdb.container" semantic conventions. It represents the cosmos - // DB container name. - // - // Type: string - // RequirementLevel: ConditionallyRequired (if available) - // Stability: stable - // Examples: 'anystring' - DBCosmosDBContainerKey = attribute.Key("db.cosmosdb.container") - - // DBCosmosDBRequestContentLengthKey is the attribute Key conforming to the - // "db.cosmosdb.request_content_length" semantic conventions. It represents - // the request payload size in bytes - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - DBCosmosDBRequestContentLengthKey = attribute.Key("db.cosmosdb.request_content_length") - - // DBCosmosDBStatusCodeKey is the attribute Key conforming to the - // "db.cosmosdb.status_code" semantic conventions. It represents the cosmos - // DB status code. - // - // Type: int - // RequirementLevel: ConditionallyRequired (if response was received) - // Stability: stable - // Examples: 200, 201 - DBCosmosDBStatusCodeKey = attribute.Key("db.cosmosdb.status_code") - - // DBCosmosDBSubStatusCodeKey is the attribute Key conforming to the - // "db.cosmosdb.sub_status_code" semantic conventions. It represents the - // cosmos DB sub status code. - // - // Type: int - // RequirementLevel: ConditionallyRequired (when response was received and - // contained sub-code.) - // Stability: stable - // Examples: 1000, 1002 - DBCosmosDBSubStatusCodeKey = attribute.Key("db.cosmosdb.sub_status_code") - - // DBCosmosDBRequestChargeKey is the attribute Key conforming to the - // "db.cosmosdb.request_charge" semantic conventions. It represents the rU - // consumed for that operation - // - // Type: double - // RequirementLevel: ConditionallyRequired (when available) - // Stability: stable - // Examples: 46.18, 1.0 - DBCosmosDBRequestChargeKey = attribute.Key("db.cosmosdb.request_charge") -) - -var ( - // invalid - DBCosmosDBOperationTypeInvalid = DBCosmosDBOperationTypeKey.String("Invalid") - // create - DBCosmosDBOperationTypeCreate = DBCosmosDBOperationTypeKey.String("Create") - // patch - DBCosmosDBOperationTypePatch = DBCosmosDBOperationTypeKey.String("Patch") - // read - DBCosmosDBOperationTypeRead = DBCosmosDBOperationTypeKey.String("Read") - // read_feed - DBCosmosDBOperationTypeReadFeed = DBCosmosDBOperationTypeKey.String("ReadFeed") - // delete - DBCosmosDBOperationTypeDelete = DBCosmosDBOperationTypeKey.String("Delete") - // replace - DBCosmosDBOperationTypeReplace = DBCosmosDBOperationTypeKey.String("Replace") - // execute - DBCosmosDBOperationTypeExecute = DBCosmosDBOperationTypeKey.String("Execute") - // query - DBCosmosDBOperationTypeQuery = DBCosmosDBOperationTypeKey.String("Query") - // head - DBCosmosDBOperationTypeHead = DBCosmosDBOperationTypeKey.String("Head") - // head_feed - DBCosmosDBOperationTypeHeadFeed = DBCosmosDBOperationTypeKey.String("HeadFeed") - // upsert - DBCosmosDBOperationTypeUpsert = DBCosmosDBOperationTypeKey.String("Upsert") - // batch - DBCosmosDBOperationTypeBatch = DBCosmosDBOperationTypeKey.String("Batch") - // query_plan - DBCosmosDBOperationTypeQueryPlan = DBCosmosDBOperationTypeKey.String("QueryPlan") - // execute_javascript - DBCosmosDBOperationTypeExecuteJavascript = DBCosmosDBOperationTypeKey.String("ExecuteJavaScript") -) - -var ( - // Gateway (HTTP) connections mode - DBCosmosDBConnectionModeGateway = DBCosmosDBConnectionModeKey.String("gateway") - // Direct connection - DBCosmosDBConnectionModeDirect = DBCosmosDBConnectionModeKey.String("direct") -) - -// DBCosmosDBClientID returns an attribute KeyValue conforming to the -// "db.cosmosdb.client_id" semantic conventions. It represents the unique -// Cosmos client instance id. -func DBCosmosDBClientID(val string) attribute.KeyValue { - return DBCosmosDBClientIDKey.String(val) -} - -// DBCosmosDBContainer returns an attribute KeyValue conforming to the -// "db.cosmosdb.container" semantic conventions. It represents the cosmos DB -// container name. -func DBCosmosDBContainer(val string) attribute.KeyValue { - return DBCosmosDBContainerKey.String(val) -} - -// DBCosmosDBRequestContentLength returns an attribute KeyValue conforming -// to the "db.cosmosdb.request_content_length" semantic conventions. It -// represents the request payload size in bytes -func DBCosmosDBRequestContentLength(val int) attribute.KeyValue { - return DBCosmosDBRequestContentLengthKey.Int(val) -} - -// DBCosmosDBStatusCode returns an attribute KeyValue conforming to the -// "db.cosmosdb.status_code" semantic conventions. It represents the cosmos DB -// status code. -func DBCosmosDBStatusCode(val int) attribute.KeyValue { - return DBCosmosDBStatusCodeKey.Int(val) -} - -// DBCosmosDBSubStatusCode returns an attribute KeyValue conforming to the -// "db.cosmosdb.sub_status_code" semantic conventions. It represents the cosmos -// DB sub status code. -func DBCosmosDBSubStatusCode(val int) attribute.KeyValue { - return DBCosmosDBSubStatusCodeKey.Int(val) -} - -// DBCosmosDBRequestCharge returns an attribute KeyValue conforming to the -// "db.cosmosdb.request_charge" semantic conventions. It represents the rU -// consumed for that operation -func DBCosmosDBRequestCharge(val float64) attribute.KeyValue { - return DBCosmosDBRequestChargeKey.Float64(val) -} - -// Span attributes used by non-OTLP exporters to represent OpenTelemetry Span's -// concepts. -const ( - // OTelStatusCodeKey is the attribute Key conforming to the - // "otel.status_code" semantic conventions. It represents the name of the - // code, either "OK" or "ERROR". MUST NOT be set if the status code is - // UNSET. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - OTelStatusCodeKey = attribute.Key("otel.status_code") - - // OTelStatusDescriptionKey is the attribute Key conforming to the - // "otel.status_description" semantic conventions. It represents the - // description of the Status if it has a value, otherwise not set. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'resource not found' - OTelStatusDescriptionKey = attribute.Key("otel.status_description") -) - -var ( - // The operation has been validated by an Application developer or Operator to have completed successfully - OTelStatusCodeOk = OTelStatusCodeKey.String("OK") - // The operation contains an error - OTelStatusCodeError = OTelStatusCodeKey.String("ERROR") -) - -// OTelStatusDescription returns an attribute KeyValue conforming to the -// "otel.status_description" semantic conventions. It represents the -// description of the Status if it has a value, otherwise not set. -func OTelStatusDescription(val string) attribute.KeyValue { - return OTelStatusDescriptionKey.String(val) -} - -// This semantic convention describes an instance of a function that runs -// without provisioning or managing of servers (also known as serverless -// functions or Function as a Service (FaaS)) with spans. -const ( - // FaaSTriggerKey is the attribute Key conforming to the "faas.trigger" - // semantic conventions. It represents the type of the trigger which caused - // this function invocation. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - // Note: For the server/consumer span on the incoming side, - // `faas.trigger` MUST be set. - // - // Clients invoking FaaS instances usually cannot set `faas.trigger`, - // since they would typically need to look in the payload to determine - // the event type. If clients set it, it should be the same as the - // trigger that corresponding incoming would have (i.e., this has - // nothing to do with the underlying transport used to make the API - // call to invoke the lambda, which is often HTTP). - FaaSTriggerKey = attribute.Key("faas.trigger") - - // FaaSInvocationIDKey is the attribute Key conforming to the - // "faas.invocation_id" semantic conventions. It represents the invocation - // ID of the current function invocation. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28' - FaaSInvocationIDKey = attribute.Key("faas.invocation_id") -) - -var ( - // A response to some data source operation such as a database or filesystem read/write - FaaSTriggerDatasource = FaaSTriggerKey.String("datasource") - // To provide an answer to an inbound HTTP request - FaaSTriggerHTTP = FaaSTriggerKey.String("http") - // A function is set to be executed when messages are sent to a messaging system - FaaSTriggerPubsub = FaaSTriggerKey.String("pubsub") - // A function is scheduled to be executed regularly - FaaSTriggerTimer = FaaSTriggerKey.String("timer") - // If none of the others apply - FaaSTriggerOther = FaaSTriggerKey.String("other") -) - -// FaaSInvocationID returns an attribute KeyValue conforming to the -// "faas.invocation_id" semantic conventions. It represents the invocation ID -// of the current function invocation. -func FaaSInvocationID(val string) attribute.KeyValue { - return FaaSInvocationIDKey.String(val) -} - -// Semantic Convention for FaaS triggered as a response to some data source -// operation such as a database or filesystem read/write. -const ( - // FaaSDocumentCollectionKey is the attribute Key conforming to the - // "faas.document.collection" semantic conventions. It represents the name - // of the source on which the triggering operation was performed. For - // example, in Cloud Storage or S3 corresponds to the bucket name, and in - // Cosmos DB to the database name. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: 'myBucketName', 'myDBName' - FaaSDocumentCollectionKey = attribute.Key("faas.document.collection") - - // FaaSDocumentOperationKey is the attribute Key conforming to the - // "faas.document.operation" semantic conventions. It represents the - // describes the type of the operation that was performed on the data. - // - // Type: Enum - // RequirementLevel: Required - // Stability: stable - FaaSDocumentOperationKey = attribute.Key("faas.document.operation") - - // FaaSDocumentTimeKey is the attribute Key conforming to the - // "faas.document.time" semantic conventions. It represents a string - // containing the time when the data was accessed in the [ISO - // 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format - // expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '2020-01-23T13:47:06Z' - FaaSDocumentTimeKey = attribute.Key("faas.document.time") - - // FaaSDocumentNameKey is the attribute Key conforming to the - // "faas.document.name" semantic conventions. It represents the document - // name/table subjected to the operation. For example, in Cloud Storage or - // S3 is the name of the file, and in Cosmos DB the table name. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'myFile.txt', 'myTableName' - FaaSDocumentNameKey = attribute.Key("faas.document.name") -) - -var ( - // When a new object is created - FaaSDocumentOperationInsert = FaaSDocumentOperationKey.String("insert") - // When an object is modified - FaaSDocumentOperationEdit = FaaSDocumentOperationKey.String("edit") - // When an object is deleted - FaaSDocumentOperationDelete = FaaSDocumentOperationKey.String("delete") -) - -// FaaSDocumentCollection returns an attribute KeyValue conforming to the -// "faas.document.collection" semantic conventions. It represents the name of -// the source on which the triggering operation was performed. For example, in -// Cloud Storage or S3 corresponds to the bucket name, and in Cosmos DB to the -// database name. -func FaaSDocumentCollection(val string) attribute.KeyValue { - return FaaSDocumentCollectionKey.String(val) -} - -// FaaSDocumentTime returns an attribute KeyValue conforming to the -// "faas.document.time" semantic conventions. It represents a string containing -// the time when the data was accessed in the [ISO -// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format -// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). -func FaaSDocumentTime(val string) attribute.KeyValue { - return FaaSDocumentTimeKey.String(val) -} - -// FaaSDocumentName returns an attribute KeyValue conforming to the -// "faas.document.name" semantic conventions. It represents the document -// name/table subjected to the operation. For example, in Cloud Storage or S3 -// is the name of the file, and in Cosmos DB the table name. -func FaaSDocumentName(val string) attribute.KeyValue { - return FaaSDocumentNameKey.String(val) -} - -// Semantic Convention for FaaS scheduled to be executed regularly. -const ( - // FaaSTimeKey is the attribute Key conforming to the "faas.time" semantic - // conventions. It represents a string containing the function invocation - // time in the [ISO - // 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format - // expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '2020-01-23T13:47:06Z' - FaaSTimeKey = attribute.Key("faas.time") - - // FaaSCronKey is the attribute Key conforming to the "faas.cron" semantic - // conventions. It represents a string containing the schedule period as - // [Cron - // Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '0/5 * * * ? *' - FaaSCronKey = attribute.Key("faas.cron") -) - -// FaaSTime returns an attribute KeyValue conforming to the "faas.time" -// semantic conventions. It represents a string containing the function -// invocation time in the [ISO -// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format -// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). -func FaaSTime(val string) attribute.KeyValue { - return FaaSTimeKey.String(val) -} - -// FaaSCron returns an attribute KeyValue conforming to the "faas.cron" -// semantic conventions. It represents a string containing the schedule period -// as [Cron -// Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm). -func FaaSCron(val string) attribute.KeyValue { - return FaaSCronKey.String(val) -} - -// Contains additional attributes for incoming FaaS spans. -const ( - // FaaSColdstartKey is the attribute Key conforming to the "faas.coldstart" - // semantic conventions. It represents a boolean that is true if the - // serverless function is executed for the first time (aka cold-start). - // - // Type: boolean - // RequirementLevel: Optional - // Stability: stable - FaaSColdstartKey = attribute.Key("faas.coldstart") -) - -// FaaSColdstart returns an attribute KeyValue conforming to the -// "faas.coldstart" semantic conventions. It represents a boolean that is true -// if the serverless function is executed for the first time (aka cold-start). -func FaaSColdstart(val bool) attribute.KeyValue { - return FaaSColdstartKey.Bool(val) -} - -// Contains additional attributes for outgoing FaaS spans. -const ( - // FaaSInvokedNameKey is the attribute Key conforming to the - // "faas.invoked_name" semantic conventions. It represents the name of the - // invoked function. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: 'my-function' - // Note: SHOULD be equal to the `faas.name` resource attribute of the - // invoked function. - FaaSInvokedNameKey = attribute.Key("faas.invoked_name") - - // FaaSInvokedProviderKey is the attribute Key conforming to the - // "faas.invoked_provider" semantic conventions. It represents the cloud - // provider of the invoked function. - // - // Type: Enum - // RequirementLevel: Required - // Stability: stable - // Note: SHOULD be equal to the `cloud.provider` resource attribute of the - // invoked function. - FaaSInvokedProviderKey = attribute.Key("faas.invoked_provider") - - // FaaSInvokedRegionKey is the attribute Key conforming to the - // "faas.invoked_region" semantic conventions. It represents the cloud - // region of the invoked function. - // - // Type: string - // RequirementLevel: ConditionallyRequired (For some cloud providers, like - // AWS or GCP, the region in which a function is hosted is essential to - // uniquely identify the function and also part of its endpoint. Since it's - // part of the endpoint being called, the region is always known to - // clients. In these cases, `faas.invoked_region` MUST be set accordingly. - // If the region is unknown to the client or not required for identifying - // the invoked function, setting `faas.invoked_region` is optional.) - // Stability: stable - // Examples: 'eu-central-1' - // Note: SHOULD be equal to the `cloud.region` resource attribute of the - // invoked function. - FaaSInvokedRegionKey = attribute.Key("faas.invoked_region") -) - -var ( - // Alibaba Cloud - FaaSInvokedProviderAlibabaCloud = FaaSInvokedProviderKey.String("alibaba_cloud") - // Amazon Web Services - FaaSInvokedProviderAWS = FaaSInvokedProviderKey.String("aws") - // Microsoft Azure - FaaSInvokedProviderAzure = FaaSInvokedProviderKey.String("azure") - // Google Cloud Platform - FaaSInvokedProviderGCP = FaaSInvokedProviderKey.String("gcp") - // Tencent Cloud - FaaSInvokedProviderTencentCloud = FaaSInvokedProviderKey.String("tencent_cloud") -) - -// FaaSInvokedName returns an attribute KeyValue conforming to the -// "faas.invoked_name" semantic conventions. It represents the name of the -// invoked function. -func FaaSInvokedName(val string) attribute.KeyValue { - return FaaSInvokedNameKey.String(val) -} - -// FaaSInvokedRegion returns an attribute KeyValue conforming to the -// "faas.invoked_region" semantic conventions. It represents the cloud region -// of the invoked function. -func FaaSInvokedRegion(val string) attribute.KeyValue { - return FaaSInvokedRegionKey.String(val) -} - -// Operations that access some remote service. -const ( - // PeerServiceKey is the attribute Key conforming to the "peer.service" - // semantic conventions. It represents the - // [`service.name`](../../resource/semantic_conventions/README.md#service) - // of the remote service. SHOULD be equal to the actual `service.name` - // resource attribute of the remote service if any. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'AuthTokenCache' - PeerServiceKey = attribute.Key("peer.service") -) - -// PeerService returns an attribute KeyValue conforming to the -// "peer.service" semantic conventions. It represents the -// [`service.name`](../../resource/semantic_conventions/README.md#service) of -// the remote service. SHOULD be equal to the actual `service.name` resource -// attribute of the remote service if any. -func PeerService(val string) attribute.KeyValue { - return PeerServiceKey.String(val) -} - -// These attributes may be used for any operation with an authenticated and/or -// authorized enduser. -const ( - // EnduserIDKey is the attribute Key conforming to the "enduser.id" - // semantic conventions. It represents the username or client_id extracted - // from the access token or - // [Authorization](https://tools.ietf.org/html/rfc7235#section-4.2) header - // in the inbound request from outside the system. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'username' - EnduserIDKey = attribute.Key("enduser.id") - - // EnduserRoleKey is the attribute Key conforming to the "enduser.role" - // semantic conventions. It represents the actual/assumed role the client - // is making the request under extracted from token or application security - // context. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'admin' - EnduserRoleKey = attribute.Key("enduser.role") - - // EnduserScopeKey is the attribute Key conforming to the "enduser.scope" - // semantic conventions. It represents the scopes or granted authorities - // the client currently possesses extracted from token or application - // security context. The value would come from the scope associated with an - // [OAuth 2.0 Access - // Token](https://tools.ietf.org/html/rfc6749#section-3.3) or an attribute - // value in a [SAML 2.0 - // Assertion](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'read:message, write:files' - EnduserScopeKey = attribute.Key("enduser.scope") -) - -// EnduserID returns an attribute KeyValue conforming to the "enduser.id" -// semantic conventions. It represents the username or client_id extracted from -// the access token or -// [Authorization](https://tools.ietf.org/html/rfc7235#section-4.2) header in -// the inbound request from outside the system. -func EnduserID(val string) attribute.KeyValue { - return EnduserIDKey.String(val) -} - -// EnduserRole returns an attribute KeyValue conforming to the -// "enduser.role" semantic conventions. It represents the actual/assumed role -// the client is making the request under extracted from token or application -// security context. -func EnduserRole(val string) attribute.KeyValue { - return EnduserRoleKey.String(val) -} - -// EnduserScope returns an attribute KeyValue conforming to the -// "enduser.scope" semantic conventions. It represents the scopes or granted -// authorities the client currently possesses extracted from token or -// application security context. The value would come from the scope associated -// with an [OAuth 2.0 Access -// Token](https://tools.ietf.org/html/rfc6749#section-3.3) or an attribute -// value in a [SAML 2.0 -// Assertion](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html). -func EnduserScope(val string) attribute.KeyValue { - return EnduserScopeKey.String(val) -} - -// These attributes may be used for any operation to store information about a -// thread that started a span. -const ( - // ThreadIDKey is the attribute Key conforming to the "thread.id" semantic - // conventions. It represents the current "managed" thread ID (as opposed - // to OS thread ID). - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 42 - ThreadIDKey = attribute.Key("thread.id") - - // ThreadNameKey is the attribute Key conforming to the "thread.name" - // semantic conventions. It represents the current thread name. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'main' - ThreadNameKey = attribute.Key("thread.name") -) - -// ThreadID returns an attribute KeyValue conforming to the "thread.id" -// semantic conventions. It represents the current "managed" thread ID (as -// opposed to OS thread ID). -func ThreadID(val int) attribute.KeyValue { - return ThreadIDKey.Int(val) -} - -// ThreadName returns an attribute KeyValue conforming to the "thread.name" -// semantic conventions. It represents the current thread name. -func ThreadName(val string) attribute.KeyValue { - return ThreadNameKey.String(val) -} - -// These attributes allow to report this unit of code and therefore to provide -// more context about the span. -const ( - // CodeFunctionKey is the attribute Key conforming to the "code.function" - // semantic conventions. It represents the method or function name, or - // equivalent (usually rightmost part of the code unit's name). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'serveRequest' - CodeFunctionKey = attribute.Key("code.function") - - // CodeNamespaceKey is the attribute Key conforming to the "code.namespace" - // semantic conventions. It represents the "namespace" within which - // `code.function` is defined. Usually the qualified class or module name, - // such that `code.namespace` + some separator + `code.function` form a - // unique identifier for the code unit. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'com.example.MyHTTPService' - CodeNamespaceKey = attribute.Key("code.namespace") - - // CodeFilepathKey is the attribute Key conforming to the "code.filepath" - // semantic conventions. It represents the source code file name that - // identifies the code unit as uniquely as possible (preferably an absolute - // file path). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '/usr/local/MyApplication/content_root/app/index.php' - CodeFilepathKey = attribute.Key("code.filepath") - - // CodeLineNumberKey is the attribute Key conforming to the "code.lineno" - // semantic conventions. It represents the line number in `code.filepath` - // best representing the operation. It SHOULD point within the code unit - // named in `code.function`. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 42 - CodeLineNumberKey = attribute.Key("code.lineno") - - // CodeColumnKey is the attribute Key conforming to the "code.column" - // semantic conventions. It represents the column number in `code.filepath` - // best representing the operation. It SHOULD point within the code unit - // named in `code.function`. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 16 - CodeColumnKey = attribute.Key("code.column") -) - -// CodeFunction returns an attribute KeyValue conforming to the -// "code.function" semantic conventions. It represents the method or function -// name, or equivalent (usually rightmost part of the code unit's name). -func CodeFunction(val string) attribute.KeyValue { - return CodeFunctionKey.String(val) -} - -// CodeNamespace returns an attribute KeyValue conforming to the -// "code.namespace" semantic conventions. It represents the "namespace" within -// which `code.function` is defined. Usually the qualified class or module -// name, such that `code.namespace` + some separator + `code.function` form a -// unique identifier for the code unit. -func CodeNamespace(val string) attribute.KeyValue { - return CodeNamespaceKey.String(val) -} - -// CodeFilepath returns an attribute KeyValue conforming to the -// "code.filepath" semantic conventions. It represents the source code file -// name that identifies the code unit as uniquely as possible (preferably an -// absolute file path). -func CodeFilepath(val string) attribute.KeyValue { - return CodeFilepathKey.String(val) -} - -// CodeLineNumber returns an attribute KeyValue conforming to the "code.lineno" -// semantic conventions. It represents the line number in `code.filepath` best -// representing the operation. It SHOULD point within the code unit named in -// `code.function`. -func CodeLineNumber(val int) attribute.KeyValue { - return CodeLineNumberKey.Int(val) -} - -// CodeColumn returns an attribute KeyValue conforming to the "code.column" -// semantic conventions. It represents the column number in `code.filepath` -// best representing the operation. It SHOULD point within the code unit named -// in `code.function`. -func CodeColumn(val int) attribute.KeyValue { - return CodeColumnKey.Int(val) -} - -// Semantic Convention for HTTP Client -const ( - // HTTPURLKey is the attribute Key conforming to the "http.url" semantic - // conventions. It represents the full HTTP request URL in the form - // `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is - // not transmitted over HTTP, but if it is known, it should be included - // nevertheless. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: 'https://www.foo.bar/search?q=OpenTelemetry#SemConv' - // Note: `http.url` MUST NOT contain credentials passed via URL in form of - // `https://username:password@www.example.com/`. In such case the - // attribute's value should be `https://www.example.com/`. - HTTPURLKey = attribute.Key("http.url") - - // HTTPResendCountKey is the attribute Key conforming to the - // "http.resend_count" semantic conventions. It represents the ordinal - // number of request resending attempt (for any reason, including - // redirects). - // - // Type: int - // RequirementLevel: Recommended (if and only if request was retried.) - // Stability: stable - // Examples: 3 - // Note: The resend count SHOULD be updated each time an HTTP request gets - // resent by the client, regardless of what was the cause of the resending - // (e.g. redirection, authorization failure, 503 Server Unavailable, - // network issues, or any other). - HTTPResendCountKey = attribute.Key("http.resend_count") -) - -// HTTPURL returns an attribute KeyValue conforming to the "http.url" -// semantic conventions. It represents the full HTTP request URL in the form -// `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not -// transmitted over HTTP, but if it is known, it should be included -// nevertheless. -func HTTPURL(val string) attribute.KeyValue { - return HTTPURLKey.String(val) -} - -// HTTPResendCount returns an attribute KeyValue conforming to the -// "http.resend_count" semantic conventions. It represents the ordinal number -// of request resending attempt (for any reason, including redirects). -func HTTPResendCount(val int) attribute.KeyValue { - return HTTPResendCountKey.Int(val) -} - -// Semantic Convention for HTTP Server -const ( - // HTTPTargetKey is the attribute Key conforming to the "http.target" - // semantic conventions. It represents the full request target as passed in - // a HTTP request line or equivalent. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: '/users/12314/?q=ddds' - HTTPTargetKey = attribute.Key("http.target") - - // HTTPClientIPKey is the attribute Key conforming to the "http.client_ip" - // semantic conventions. It represents the IP address of the original - // client behind all proxies, if known (e.g. from - // [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For)). - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '83.164.160.102' - // Note: This is not necessarily the same as `net.sock.peer.addr`, which - // would - // identify the network-level peer, which may be a proxy. - // - // This attribute should be set when a source of information different - // from the one used for `net.sock.peer.addr`, is available even if that - // other - // source just confirms the same value as `net.sock.peer.addr`. - // Rationale: For `net.sock.peer.addr`, one typically does not know if it - // comes from a proxy, reverse proxy, or the actual client. Setting - // `http.client_ip` when it's the same as `net.sock.peer.addr` means that - // one is at least somewhat confident that the address is not that of - // the closest proxy. - HTTPClientIPKey = attribute.Key("http.client_ip") -) - -// HTTPTarget returns an attribute KeyValue conforming to the "http.target" -// semantic conventions. It represents the full request target as passed in a -// HTTP request line or equivalent. -func HTTPTarget(val string) attribute.KeyValue { - return HTTPTargetKey.String(val) -} - -// HTTPClientIP returns an attribute KeyValue conforming to the -// "http.client_ip" semantic conventions. It represents the IP address of the -// original client behind all proxies, if known (e.g. from -// [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For)). -func HTTPClientIP(val string) attribute.KeyValue { - return HTTPClientIPKey.String(val) -} - -// The `aws` conventions apply to operations using the AWS SDK. They map -// request or response parameters in AWS SDK API calls to attributes on a Span. -// The conventions have been collected over time based on feedback from AWS -// users of tracing and will continue to evolve as new interesting conventions -// are found. -// Some descriptions are also provided for populating general OpenTelemetry -// semantic conventions based on these APIs. -const ( - // AWSRequestIDKey is the attribute Key conforming to the "aws.request_id" - // semantic conventions. It represents the AWS request ID as returned in - // the response headers `x-amz-request-id` or `x-amz-requestid`. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '79b9da39-b7ae-508a-a6bc-864b2829c622', 'C9ER4AJX75574TDJ' - AWSRequestIDKey = attribute.Key("aws.request_id") -) - -// AWSRequestID returns an attribute KeyValue conforming to the -// "aws.request_id" semantic conventions. It represents the AWS request ID as -// returned in the response headers `x-amz-request-id` or `x-amz-requestid`. -func AWSRequestID(val string) attribute.KeyValue { - return AWSRequestIDKey.String(val) -} - -// Attributes that exist for multiple DynamoDB request types. -const ( - // AWSDynamoDBTableNamesKey is the attribute Key conforming to the - // "aws.dynamodb.table_names" semantic conventions. It represents the keys - // in the `RequestItems` object field. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: stable - // Examples: 'Users', 'Cats' - AWSDynamoDBTableNamesKey = attribute.Key("aws.dynamodb.table_names") - - // AWSDynamoDBConsumedCapacityKey is the attribute Key conforming to the - // "aws.dynamodb.consumed_capacity" semantic conventions. It represents the - // JSON-serialized value of each item in the `ConsumedCapacity` response - // field. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: stable - // Examples: '{ "CapacityUnits": number, "GlobalSecondaryIndexes": { - // "string" : { "CapacityUnits": number, "ReadCapacityUnits": number, - // "WriteCapacityUnits": number } }, "LocalSecondaryIndexes": { "string" : - // { "CapacityUnits": number, "ReadCapacityUnits": number, - // "WriteCapacityUnits": number } }, "ReadCapacityUnits": number, "Table": - // { "CapacityUnits": number, "ReadCapacityUnits": number, - // "WriteCapacityUnits": number }, "TableName": "string", - // "WriteCapacityUnits": number }' - AWSDynamoDBConsumedCapacityKey = attribute.Key("aws.dynamodb.consumed_capacity") - - // AWSDynamoDBItemCollectionMetricsKey is the attribute Key conforming to - // the "aws.dynamodb.item_collection_metrics" semantic conventions. It - // represents the JSON-serialized value of the `ItemCollectionMetrics` - // response field. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '{ "string" : [ { "ItemCollectionKey": { "string" : { "B": - // blob, "BOOL": boolean, "BS": [ blob ], "L": [ "AttributeValue" ], "M": { - // "string" : "AttributeValue" }, "N": "string", "NS": [ "string" ], - // "NULL": boolean, "S": "string", "SS": [ "string" ] } }, - // "SizeEstimateRangeGB": [ number ] } ] }' - AWSDynamoDBItemCollectionMetricsKey = attribute.Key("aws.dynamodb.item_collection_metrics") - - // AWSDynamoDBProvisionedReadCapacityKey is the attribute Key conforming to - // the "aws.dynamodb.provisioned_read_capacity" semantic conventions. It - // represents the value of the `ProvisionedThroughput.ReadCapacityUnits` - // request parameter. - // - // Type: double - // RequirementLevel: Optional - // Stability: stable - // Examples: 1.0, 2.0 - AWSDynamoDBProvisionedReadCapacityKey = attribute.Key("aws.dynamodb.provisioned_read_capacity") - - // AWSDynamoDBProvisionedWriteCapacityKey is the attribute Key conforming - // to the "aws.dynamodb.provisioned_write_capacity" semantic conventions. - // It represents the value of the - // `ProvisionedThroughput.WriteCapacityUnits` request parameter. - // - // Type: double - // RequirementLevel: Optional - // Stability: stable - // Examples: 1.0, 2.0 - AWSDynamoDBProvisionedWriteCapacityKey = attribute.Key("aws.dynamodb.provisioned_write_capacity") - - // AWSDynamoDBConsistentReadKey is the attribute Key conforming to the - // "aws.dynamodb.consistent_read" semantic conventions. It represents the - // value of the `ConsistentRead` request parameter. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: stable - AWSDynamoDBConsistentReadKey = attribute.Key("aws.dynamodb.consistent_read") - - // AWSDynamoDBProjectionKey is the attribute Key conforming to the - // "aws.dynamodb.projection" semantic conventions. It represents the value - // of the `ProjectionExpression` request parameter. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'Title', 'Title, Price, Color', 'Title, Description, - // RelatedItems, ProductReviews' - AWSDynamoDBProjectionKey = attribute.Key("aws.dynamodb.projection") - - // AWSDynamoDBLimitKey is the attribute Key conforming to the - // "aws.dynamodb.limit" semantic conventions. It represents the value of - // the `Limit` request parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 10 - AWSDynamoDBLimitKey = attribute.Key("aws.dynamodb.limit") - - // AWSDynamoDBAttributesToGetKey is the attribute Key conforming to the - // "aws.dynamodb.attributes_to_get" semantic conventions. It represents the - // value of the `AttributesToGet` request parameter. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: stable - // Examples: 'lives', 'id' - AWSDynamoDBAttributesToGetKey = attribute.Key("aws.dynamodb.attributes_to_get") - - // AWSDynamoDBIndexNameKey is the attribute Key conforming to the - // "aws.dynamodb.index_name" semantic conventions. It represents the value - // of the `IndexName` request parameter. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'name_to_group' - AWSDynamoDBIndexNameKey = attribute.Key("aws.dynamodb.index_name") - - // AWSDynamoDBSelectKey is the attribute Key conforming to the - // "aws.dynamodb.select" semantic conventions. It represents the value of - // the `Select` request parameter. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'ALL_ATTRIBUTES', 'COUNT' - AWSDynamoDBSelectKey = attribute.Key("aws.dynamodb.select") -) - -// AWSDynamoDBTableNames returns an attribute KeyValue conforming to the -// "aws.dynamodb.table_names" semantic conventions. It represents the keys in -// the `RequestItems` object field. -func AWSDynamoDBTableNames(val ...string) attribute.KeyValue { - return AWSDynamoDBTableNamesKey.StringSlice(val) -} - -// AWSDynamoDBConsumedCapacity returns an attribute KeyValue conforming to -// the "aws.dynamodb.consumed_capacity" semantic conventions. It represents the -// JSON-serialized value of each item in the `ConsumedCapacity` response field. -func AWSDynamoDBConsumedCapacity(val ...string) attribute.KeyValue { - return AWSDynamoDBConsumedCapacityKey.StringSlice(val) -} - -// AWSDynamoDBItemCollectionMetrics returns an attribute KeyValue conforming -// to the "aws.dynamodb.item_collection_metrics" semantic conventions. It -// represents the JSON-serialized value of the `ItemCollectionMetrics` response -// field. -func AWSDynamoDBItemCollectionMetrics(val string) attribute.KeyValue { - return AWSDynamoDBItemCollectionMetricsKey.String(val) -} - -// AWSDynamoDBProvisionedReadCapacity returns an attribute KeyValue -// conforming to the "aws.dynamodb.provisioned_read_capacity" semantic -// conventions. It represents the value of the -// `ProvisionedThroughput.ReadCapacityUnits` request parameter. -func AWSDynamoDBProvisionedReadCapacity(val float64) attribute.KeyValue { - return AWSDynamoDBProvisionedReadCapacityKey.Float64(val) -} - -// AWSDynamoDBProvisionedWriteCapacity returns an attribute KeyValue -// conforming to the "aws.dynamodb.provisioned_write_capacity" semantic -// conventions. It represents the value of the -// `ProvisionedThroughput.WriteCapacityUnits` request parameter. -func AWSDynamoDBProvisionedWriteCapacity(val float64) attribute.KeyValue { - return AWSDynamoDBProvisionedWriteCapacityKey.Float64(val) -} - -// AWSDynamoDBConsistentRead returns an attribute KeyValue conforming to the -// "aws.dynamodb.consistent_read" semantic conventions. It represents the value -// of the `ConsistentRead` request parameter. -func AWSDynamoDBConsistentRead(val bool) attribute.KeyValue { - return AWSDynamoDBConsistentReadKey.Bool(val) -} - -// AWSDynamoDBProjection returns an attribute KeyValue conforming to the -// "aws.dynamodb.projection" semantic conventions. It represents the value of -// the `ProjectionExpression` request parameter. -func AWSDynamoDBProjection(val string) attribute.KeyValue { - return AWSDynamoDBProjectionKey.String(val) -} - -// AWSDynamoDBLimit returns an attribute KeyValue conforming to the -// "aws.dynamodb.limit" semantic conventions. It represents the value of the -// `Limit` request parameter. -func AWSDynamoDBLimit(val int) attribute.KeyValue { - return AWSDynamoDBLimitKey.Int(val) -} - -// AWSDynamoDBAttributesToGet returns an attribute KeyValue conforming to -// the "aws.dynamodb.attributes_to_get" semantic conventions. It represents the -// value of the `AttributesToGet` request parameter. -func AWSDynamoDBAttributesToGet(val ...string) attribute.KeyValue { - return AWSDynamoDBAttributesToGetKey.StringSlice(val) -} - -// AWSDynamoDBIndexName returns an attribute KeyValue conforming to the -// "aws.dynamodb.index_name" semantic conventions. It represents the value of -// the `IndexName` request parameter. -func AWSDynamoDBIndexName(val string) attribute.KeyValue { - return AWSDynamoDBIndexNameKey.String(val) -} - -// AWSDynamoDBSelect returns an attribute KeyValue conforming to the -// "aws.dynamodb.select" semantic conventions. It represents the value of the -// `Select` request parameter. -func AWSDynamoDBSelect(val string) attribute.KeyValue { - return AWSDynamoDBSelectKey.String(val) -} - -// DynamoDB.CreateTable -const ( - // AWSDynamoDBGlobalSecondaryIndexesKey is the attribute Key conforming to - // the "aws.dynamodb.global_secondary_indexes" semantic conventions. It - // represents the JSON-serialized value of each item of the - // `GlobalSecondaryIndexes` request field - // - // Type: string[] - // RequirementLevel: Optional - // Stability: stable - // Examples: '{ "IndexName": "string", "KeySchema": [ { "AttributeName": - // "string", "KeyType": "string" } ], "Projection": { "NonKeyAttributes": [ - // "string" ], "ProjectionType": "string" }, "ProvisionedThroughput": { - // "ReadCapacityUnits": number, "WriteCapacityUnits": number } }' - AWSDynamoDBGlobalSecondaryIndexesKey = attribute.Key("aws.dynamodb.global_secondary_indexes") - - // AWSDynamoDBLocalSecondaryIndexesKey is the attribute Key conforming to - // the "aws.dynamodb.local_secondary_indexes" semantic conventions. It - // represents the JSON-serialized value of each item of the - // `LocalSecondaryIndexes` request field. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: stable - // Examples: '{ "IndexARN": "string", "IndexName": "string", - // "IndexSizeBytes": number, "ItemCount": number, "KeySchema": [ { - // "AttributeName": "string", "KeyType": "string" } ], "Projection": { - // "NonKeyAttributes": [ "string" ], "ProjectionType": "string" } }' - AWSDynamoDBLocalSecondaryIndexesKey = attribute.Key("aws.dynamodb.local_secondary_indexes") -) - -// AWSDynamoDBGlobalSecondaryIndexes returns an attribute KeyValue -// conforming to the "aws.dynamodb.global_secondary_indexes" semantic -// conventions. It represents the JSON-serialized value of each item of the -// `GlobalSecondaryIndexes` request field -func AWSDynamoDBGlobalSecondaryIndexes(val ...string) attribute.KeyValue { - return AWSDynamoDBGlobalSecondaryIndexesKey.StringSlice(val) -} - -// AWSDynamoDBLocalSecondaryIndexes returns an attribute KeyValue conforming -// to the "aws.dynamodb.local_secondary_indexes" semantic conventions. It -// represents the JSON-serialized value of each item of the -// `LocalSecondaryIndexes` request field. -func AWSDynamoDBLocalSecondaryIndexes(val ...string) attribute.KeyValue { - return AWSDynamoDBLocalSecondaryIndexesKey.StringSlice(val) -} - -// DynamoDB.ListTables -const ( - // AWSDynamoDBExclusiveStartTableKey is the attribute Key conforming to the - // "aws.dynamodb.exclusive_start_table" semantic conventions. It represents - // the value of the `ExclusiveStartTableName` request parameter. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'Users', 'CatsTable' - AWSDynamoDBExclusiveStartTableKey = attribute.Key("aws.dynamodb.exclusive_start_table") - - // AWSDynamoDBTableCountKey is the attribute Key conforming to the - // "aws.dynamodb.table_count" semantic conventions. It represents the the - // number of items in the `TableNames` response parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 20 - AWSDynamoDBTableCountKey = attribute.Key("aws.dynamodb.table_count") -) - -// AWSDynamoDBExclusiveStartTable returns an attribute KeyValue conforming -// to the "aws.dynamodb.exclusive_start_table" semantic conventions. It -// represents the value of the `ExclusiveStartTableName` request parameter. -func AWSDynamoDBExclusiveStartTable(val string) attribute.KeyValue { - return AWSDynamoDBExclusiveStartTableKey.String(val) -} - -// AWSDynamoDBTableCount returns an attribute KeyValue conforming to the -// "aws.dynamodb.table_count" semantic conventions. It represents the the -// number of items in the `TableNames` response parameter. -func AWSDynamoDBTableCount(val int) attribute.KeyValue { - return AWSDynamoDBTableCountKey.Int(val) -} - -// DynamoDB.Query -const ( - // AWSDynamoDBScanForwardKey is the attribute Key conforming to the - // "aws.dynamodb.scan_forward" semantic conventions. It represents the - // value of the `ScanIndexForward` request parameter. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: stable - AWSDynamoDBScanForwardKey = attribute.Key("aws.dynamodb.scan_forward") -) - -// AWSDynamoDBScanForward returns an attribute KeyValue conforming to the -// "aws.dynamodb.scan_forward" semantic conventions. It represents the value of -// the `ScanIndexForward` request parameter. -func AWSDynamoDBScanForward(val bool) attribute.KeyValue { - return AWSDynamoDBScanForwardKey.Bool(val) -} - -// DynamoDB.Scan -const ( - // AWSDynamoDBSegmentKey is the attribute Key conforming to the - // "aws.dynamodb.segment" semantic conventions. It represents the value of - // the `Segment` request parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 10 - AWSDynamoDBSegmentKey = attribute.Key("aws.dynamodb.segment") - - // AWSDynamoDBTotalSegmentsKey is the attribute Key conforming to the - // "aws.dynamodb.total_segments" semantic conventions. It represents the - // value of the `TotalSegments` request parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 100 - AWSDynamoDBTotalSegmentsKey = attribute.Key("aws.dynamodb.total_segments") - - // AWSDynamoDBCountKey is the attribute Key conforming to the - // "aws.dynamodb.count" semantic conventions. It represents the value of - // the `Count` response parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 10 - AWSDynamoDBCountKey = attribute.Key("aws.dynamodb.count") - - // AWSDynamoDBScannedCountKey is the attribute Key conforming to the - // "aws.dynamodb.scanned_count" semantic conventions. It represents the - // value of the `ScannedCount` response parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 50 - AWSDynamoDBScannedCountKey = attribute.Key("aws.dynamodb.scanned_count") -) - -// AWSDynamoDBSegment returns an attribute KeyValue conforming to the -// "aws.dynamodb.segment" semantic conventions. It represents the value of the -// `Segment` request parameter. -func AWSDynamoDBSegment(val int) attribute.KeyValue { - return AWSDynamoDBSegmentKey.Int(val) -} - -// AWSDynamoDBTotalSegments returns an attribute KeyValue conforming to the -// "aws.dynamodb.total_segments" semantic conventions. It represents the value -// of the `TotalSegments` request parameter. -func AWSDynamoDBTotalSegments(val int) attribute.KeyValue { - return AWSDynamoDBTotalSegmentsKey.Int(val) -} - -// AWSDynamoDBCount returns an attribute KeyValue conforming to the -// "aws.dynamodb.count" semantic conventions. It represents the value of the -// `Count` response parameter. -func AWSDynamoDBCount(val int) attribute.KeyValue { - return AWSDynamoDBCountKey.Int(val) -} - -// AWSDynamoDBScannedCount returns an attribute KeyValue conforming to the -// "aws.dynamodb.scanned_count" semantic conventions. It represents the value -// of the `ScannedCount` response parameter. -func AWSDynamoDBScannedCount(val int) attribute.KeyValue { - return AWSDynamoDBScannedCountKey.Int(val) -} - -// DynamoDB.UpdateTable -const ( - // AWSDynamoDBAttributeDefinitionsKey is the attribute Key conforming to - // the "aws.dynamodb.attribute_definitions" semantic conventions. It - // represents the JSON-serialized value of each item in the - // `AttributeDefinitions` request field. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: stable - // Examples: '{ "AttributeName": "string", "AttributeType": "string" }' - AWSDynamoDBAttributeDefinitionsKey = attribute.Key("aws.dynamodb.attribute_definitions") - - // AWSDynamoDBGlobalSecondaryIndexUpdatesKey is the attribute Key - // conforming to the "aws.dynamodb.global_secondary_index_updates" semantic - // conventions. It represents the JSON-serialized value of each item in the - // the `GlobalSecondaryIndexUpdates` request field. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: stable - // Examples: '{ "Create": { "IndexName": "string", "KeySchema": [ { - // "AttributeName": "string", "KeyType": "string" } ], "Projection": { - // "NonKeyAttributes": [ "string" ], "ProjectionType": "string" }, - // "ProvisionedThroughput": { "ReadCapacityUnits": number, - // "WriteCapacityUnits": number } }' - AWSDynamoDBGlobalSecondaryIndexUpdatesKey = attribute.Key("aws.dynamodb.global_secondary_index_updates") -) - -// AWSDynamoDBAttributeDefinitions returns an attribute KeyValue conforming -// to the "aws.dynamodb.attribute_definitions" semantic conventions. It -// represents the JSON-serialized value of each item in the -// `AttributeDefinitions` request field. -func AWSDynamoDBAttributeDefinitions(val ...string) attribute.KeyValue { - return AWSDynamoDBAttributeDefinitionsKey.StringSlice(val) -} - -// AWSDynamoDBGlobalSecondaryIndexUpdates returns an attribute KeyValue -// conforming to the "aws.dynamodb.global_secondary_index_updates" semantic -// conventions. It represents the JSON-serialized value of each item in the the -// `GlobalSecondaryIndexUpdates` request field. -func AWSDynamoDBGlobalSecondaryIndexUpdates(val ...string) attribute.KeyValue { - return AWSDynamoDBGlobalSecondaryIndexUpdatesKey.StringSlice(val) -} - -// Attributes that exist for S3 request types. -const ( - // AWSS3BucketKey is the attribute Key conforming to the "aws.s3.bucket" - // semantic conventions. It represents the S3 bucket name the request - // refers to. Corresponds to the `--bucket` parameter of the [S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) - // operations. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'some-bucket-name' - // Note: The `bucket` attribute is applicable to all S3 operations that - // reference a bucket, i.e. that require the bucket name as a mandatory - // parameter. - // This applies to almost all S3 operations except `list-buckets`. - AWSS3BucketKey = attribute.Key("aws.s3.bucket") - - // AWSS3KeyKey is the attribute Key conforming to the "aws.s3.key" semantic - // conventions. It represents the S3 object key the request refers to. - // Corresponds to the `--key` parameter of the [S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) - // operations. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'someFile.yml' - // Note: The `key` attribute is applicable to all object-related S3 - // operations, i.e. that require the object key as a mandatory parameter. - // This applies in particular to the following operations: - // - // - - // [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html) - // - - // [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html) - // - - // [get-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/get-object.html) - // - - // [head-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/head-object.html) - // - - // [put-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html) - // - - // [restore-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/restore-object.html) - // - - // [select-object-content](https://docs.aws.amazon.com/cli/latest/reference/s3api/select-object-content.html) - // - - // [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html) - // - - // [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html) - // - - // [create-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/create-multipart-upload.html) - // - - // [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html) - // - - // [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html) - // - - // [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) - AWSS3KeyKey = attribute.Key("aws.s3.key") - - // AWSS3CopySourceKey is the attribute Key conforming to the - // "aws.s3.copy_source" semantic conventions. It represents the source - // object (in the form `bucket`/`key`) for the copy operation. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'someFile.yml' - // Note: The `copy_source` attribute applies to S3 copy operations and - // corresponds to the `--copy-source` parameter - // of the [copy-object operation within the S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html). - // This applies in particular to the following operations: - // - // - - // [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html) - // - - // [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) - AWSS3CopySourceKey = attribute.Key("aws.s3.copy_source") - - // AWSS3UploadIDKey is the attribute Key conforming to the - // "aws.s3.upload_id" semantic conventions. It represents the upload ID - // that identifies the multipart upload. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'dfRtDYWFbkRONycy.Yxwh66Yjlx.cph0gtNBtJ' - // Note: The `upload_id` attribute applies to S3 multipart-upload - // operations and corresponds to the `--upload-id` parameter - // of the [S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) - // multipart operations. - // This applies in particular to the following operations: - // - // - - // [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html) - // - - // [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html) - // - - // [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html) - // - - // [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html) - // - - // [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) - AWSS3UploadIDKey = attribute.Key("aws.s3.upload_id") - - // AWSS3DeleteKey is the attribute Key conforming to the "aws.s3.delete" - // semantic conventions. It represents the delete request container that - // specifies the objects to be deleted. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: - // 'Objects=[{Key=string,VersionID=string},{Key=string,VersionID=string}],Quiet=boolean' - // Note: The `delete` attribute is only applicable to the - // [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html) - // operation. - // The `delete` attribute corresponds to the `--delete` parameter of the - // [delete-objects operation within the S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-objects.html). - AWSS3DeleteKey = attribute.Key("aws.s3.delete") - - // AWSS3PartNumberKey is the attribute Key conforming to the - // "aws.s3.part_number" semantic conventions. It represents the part number - // of the part being uploaded in a multipart-upload operation. This is a - // positive integer between 1 and 10,000. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 3456 - // Note: The `part_number` attribute is only applicable to the - // [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html) - // and - // [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) - // operations. - // The `part_number` attribute corresponds to the `--part-number` parameter - // of the - // [upload-part operation within the S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html). - AWSS3PartNumberKey = attribute.Key("aws.s3.part_number") -) - -// AWSS3Bucket returns an attribute KeyValue conforming to the -// "aws.s3.bucket" semantic conventions. It represents the S3 bucket name the -// request refers to. Corresponds to the `--bucket` parameter of the [S3 -// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) -// operations. -func AWSS3Bucket(val string) attribute.KeyValue { - return AWSS3BucketKey.String(val) -} - -// AWSS3Key returns an attribute KeyValue conforming to the "aws.s3.key" -// semantic conventions. It represents the S3 object key the request refers to. -// Corresponds to the `--key` parameter of the [S3 -// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) -// operations. -func AWSS3Key(val string) attribute.KeyValue { - return AWSS3KeyKey.String(val) -} - -// AWSS3CopySource returns an attribute KeyValue conforming to the -// "aws.s3.copy_source" semantic conventions. It represents the source object -// (in the form `bucket`/`key`) for the copy operation. -func AWSS3CopySource(val string) attribute.KeyValue { - return AWSS3CopySourceKey.String(val) -} - -// AWSS3UploadID returns an attribute KeyValue conforming to the -// "aws.s3.upload_id" semantic conventions. It represents the upload ID that -// identifies the multipart upload. -func AWSS3UploadID(val string) attribute.KeyValue { - return AWSS3UploadIDKey.String(val) -} - -// AWSS3Delete returns an attribute KeyValue conforming to the -// "aws.s3.delete" semantic conventions. It represents the delete request -// container that specifies the objects to be deleted. -func AWSS3Delete(val string) attribute.KeyValue { - return AWSS3DeleteKey.String(val) -} - -// AWSS3PartNumber returns an attribute KeyValue conforming to the -// "aws.s3.part_number" semantic conventions. It represents the part number of -// the part being uploaded in a multipart-upload operation. This is a positive -// integer between 1 and 10,000. -func AWSS3PartNumber(val int) attribute.KeyValue { - return AWSS3PartNumberKey.Int(val) -} - -// Semantic conventions to apply when instrumenting the GraphQL implementation. -// They map GraphQL operations to attributes on a Span. -const ( - // GraphqlOperationNameKey is the attribute Key conforming to the - // "graphql.operation.name" semantic conventions. It represents the name of - // the operation being executed. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'findBookByID' - GraphqlOperationNameKey = attribute.Key("graphql.operation.name") - - // GraphqlOperationTypeKey is the attribute Key conforming to the - // "graphql.operation.type" semantic conventions. It represents the type of - // the operation being executed. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - // Examples: 'query', 'mutation', 'subscription' - GraphqlOperationTypeKey = attribute.Key("graphql.operation.type") - - // GraphqlDocumentKey is the attribute Key conforming to the - // "graphql.document" semantic conventions. It represents the GraphQL - // document being executed. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'query findBookByID { bookByID(id: ?) { name } }' - // Note: The value may be sanitized to exclude sensitive information. - GraphqlDocumentKey = attribute.Key("graphql.document") -) - -var ( - // GraphQL query - GraphqlOperationTypeQuery = GraphqlOperationTypeKey.String("query") - // GraphQL mutation - GraphqlOperationTypeMutation = GraphqlOperationTypeKey.String("mutation") - // GraphQL subscription - GraphqlOperationTypeSubscription = GraphqlOperationTypeKey.String("subscription") -) - -// GraphqlOperationName returns an attribute KeyValue conforming to the -// "graphql.operation.name" semantic conventions. It represents the name of the -// operation being executed. -func GraphqlOperationName(val string) attribute.KeyValue { - return GraphqlOperationNameKey.String(val) -} - -// GraphqlDocument returns an attribute KeyValue conforming to the -// "graphql.document" semantic conventions. It represents the GraphQL document -// being executed. -func GraphqlDocument(val string) attribute.KeyValue { - return GraphqlDocumentKey.String(val) -} - -// General attributes used in messaging systems. -const ( - // MessagingSystemKey is the attribute Key conforming to the - // "messaging.system" semantic conventions. It represents a string - // identifying the messaging system. - // - // Type: string - // RequirementLevel: Required - // Stability: stable - // Examples: 'kafka', 'rabbitmq', 'rocketmq', 'activemq', 'AmazonSQS' - MessagingSystemKey = attribute.Key("messaging.system") - - // MessagingOperationKey is the attribute Key conforming to the - // "messaging.operation" semantic conventions. It represents a string - // identifying the kind of messaging operation as defined in the [Operation - // names](#operation-names) section above. - // - // Type: Enum - // RequirementLevel: Required - // Stability: stable - // Note: If a custom value is used, it MUST be of low cardinality. - MessagingOperationKey = attribute.Key("messaging.operation") - - // MessagingBatchMessageCountKey is the attribute Key conforming to the - // "messaging.batch.message_count" semantic conventions. It represents the - // number of messages sent, received, or processed in the scope of the - // batching operation. - // - // Type: int - // RequirementLevel: ConditionallyRequired (If the span describes an - // operation on a batch of messages.) - // Stability: stable - // Examples: 0, 1, 2 - // Note: Instrumentations SHOULD NOT set `messaging.batch.message_count` on - // spans that operate with a single message. When a messaging client - // library supports both batch and single-message API for the same - // operation, instrumentations SHOULD use `messaging.batch.message_count` - // for batching APIs and SHOULD NOT use it for single-message APIs. - MessagingBatchMessageCountKey = attribute.Key("messaging.batch.message_count") -) - -var ( - // publish - MessagingOperationPublish = MessagingOperationKey.String("publish") - // receive - MessagingOperationReceive = MessagingOperationKey.String("receive") - // process - MessagingOperationProcess = MessagingOperationKey.String("process") -) - -// MessagingSystem returns an attribute KeyValue conforming to the -// "messaging.system" semantic conventions. It represents a string identifying -// the messaging system. -func MessagingSystem(val string) attribute.KeyValue { - return MessagingSystemKey.String(val) -} - -// MessagingBatchMessageCount returns an attribute KeyValue conforming to -// the "messaging.batch.message_count" semantic conventions. It represents the -// number of messages sent, received, or processed in the scope of the batching -// operation. -func MessagingBatchMessageCount(val int) attribute.KeyValue { - return MessagingBatchMessageCountKey.Int(val) -} - -// Semantic convention for a consumer of messages received from a messaging -// system -const ( - // MessagingConsumerIDKey is the attribute Key conforming to the - // "messaging.consumer.id" semantic conventions. It represents the - // identifier for the consumer receiving a message. For Kafka, set it to - // `{messaging.kafka.consumer.group} - {messaging.kafka.client_id}`, if - // both are present, or only `messaging.kafka.consumer.group`. For brokers, - // such as RabbitMQ and Artemis, set it to the `client_id` of the client - // consuming the message. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'mygroup - client-6' - MessagingConsumerIDKey = attribute.Key("messaging.consumer.id") -) - -// MessagingConsumerID returns an attribute KeyValue conforming to the -// "messaging.consumer.id" semantic conventions. It represents the identifier -// for the consumer receiving a message. For Kafka, set it to -// `{messaging.kafka.consumer.group} - {messaging.kafka.client_id}`, if both -// are present, or only `messaging.kafka.consumer.group`. For brokers, such as -// RabbitMQ and Artemis, set it to the `client_id` of the client consuming the -// message. -func MessagingConsumerID(val string) attribute.KeyValue { - return MessagingConsumerIDKey.String(val) -} - -// Semantic conventions for remote procedure calls. -const ( - // RPCSystemKey is the attribute Key conforming to the "rpc.system" - // semantic conventions. It represents a string identifying the remoting - // system. See below for a list of well-known identifiers. - // - // Type: Enum - // RequirementLevel: Required - // Stability: stable - RPCSystemKey = attribute.Key("rpc.system") - - // RPCServiceKey is the attribute Key conforming to the "rpc.service" - // semantic conventions. It represents the full (logical) name of the - // service being called, including its package name, if applicable. - // - // Type: string - // RequirementLevel: Recommended - // Stability: stable - // Examples: 'myservice.EchoService' - // Note: This is the logical name of the service from the RPC interface - // perspective, which can be different from the name of any implementing - // class. The `code.namespace` attribute may be used to store the latter - // (despite the attribute name, it may include a class name; e.g., class - // with method actually executing the call on the server side, RPC client - // stub class on the client side). - RPCServiceKey = attribute.Key("rpc.service") - - // RPCMethodKey is the attribute Key conforming to the "rpc.method" - // semantic conventions. It represents the name of the (logical) method - // being called, must be equal to the $method part in the span name. - // - // Type: string - // RequirementLevel: Recommended - // Stability: stable - // Examples: 'exampleMethod' - // Note: This is the logical name of the method from the RPC interface - // perspective, which can be different from the name of any implementing - // method/function. The `code.function` attribute may be used to store the - // latter (e.g., method actually executing the call on the server side, RPC - // client stub method on the client side). - RPCMethodKey = attribute.Key("rpc.method") -) - -var ( - // gRPC - RPCSystemGRPC = RPCSystemKey.String("grpc") - // Java RMI - RPCSystemJavaRmi = RPCSystemKey.String("java_rmi") - // .NET WCF - RPCSystemDotnetWcf = RPCSystemKey.String("dotnet_wcf") - // Apache Dubbo - RPCSystemApacheDubbo = RPCSystemKey.String("apache_dubbo") - // Connect RPC - RPCSystemConnectRPC = RPCSystemKey.String("connect_rpc") -) - -// RPCService returns an attribute KeyValue conforming to the "rpc.service" -// semantic conventions. It represents the full (logical) name of the service -// being called, including its package name, if applicable. -func RPCService(val string) attribute.KeyValue { - return RPCServiceKey.String(val) -} - -// RPCMethod returns an attribute KeyValue conforming to the "rpc.method" -// semantic conventions. It represents the name of the (logical) method being -// called, must be equal to the $method part in the span name. -func RPCMethod(val string) attribute.KeyValue { - return RPCMethodKey.String(val) -} - -// Tech-specific attributes for gRPC. -const ( - // RPCGRPCStatusCodeKey is the attribute Key conforming to the - // "rpc.grpc.status_code" semantic conventions. It represents the [numeric - // status - // code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of - // the gRPC request. - // - // Type: Enum - // RequirementLevel: Required - // Stability: stable - RPCGRPCStatusCodeKey = attribute.Key("rpc.grpc.status_code") -) - -var ( - // OK - RPCGRPCStatusCodeOk = RPCGRPCStatusCodeKey.Int(0) - // CANCELLED - RPCGRPCStatusCodeCancelled = RPCGRPCStatusCodeKey.Int(1) - // UNKNOWN - RPCGRPCStatusCodeUnknown = RPCGRPCStatusCodeKey.Int(2) - // INVALID_ARGUMENT - RPCGRPCStatusCodeInvalidArgument = RPCGRPCStatusCodeKey.Int(3) - // DEADLINE_EXCEEDED - RPCGRPCStatusCodeDeadlineExceeded = RPCGRPCStatusCodeKey.Int(4) - // NOT_FOUND - RPCGRPCStatusCodeNotFound = RPCGRPCStatusCodeKey.Int(5) - // ALREADY_EXISTS - RPCGRPCStatusCodeAlreadyExists = RPCGRPCStatusCodeKey.Int(6) - // PERMISSION_DENIED - RPCGRPCStatusCodePermissionDenied = RPCGRPCStatusCodeKey.Int(7) - // RESOURCE_EXHAUSTED - RPCGRPCStatusCodeResourceExhausted = RPCGRPCStatusCodeKey.Int(8) - // FAILED_PRECONDITION - RPCGRPCStatusCodeFailedPrecondition = RPCGRPCStatusCodeKey.Int(9) - // ABORTED - RPCGRPCStatusCodeAborted = RPCGRPCStatusCodeKey.Int(10) - // OUT_OF_RANGE - RPCGRPCStatusCodeOutOfRange = RPCGRPCStatusCodeKey.Int(11) - // UNIMPLEMENTED - RPCGRPCStatusCodeUnimplemented = RPCGRPCStatusCodeKey.Int(12) - // INTERNAL - RPCGRPCStatusCodeInternal = RPCGRPCStatusCodeKey.Int(13) - // UNAVAILABLE - RPCGRPCStatusCodeUnavailable = RPCGRPCStatusCodeKey.Int(14) - // DATA_LOSS - RPCGRPCStatusCodeDataLoss = RPCGRPCStatusCodeKey.Int(15) - // UNAUTHENTICATED - RPCGRPCStatusCodeUnauthenticated = RPCGRPCStatusCodeKey.Int(16) -) - -// Tech-specific attributes for [JSON RPC](https://www.jsonrpc.org/). -const ( - // RPCJsonrpcVersionKey is the attribute Key conforming to the - // "rpc.jsonrpc.version" semantic conventions. It represents the protocol - // version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0 - // does not specify this, the value can be omitted. - // - // Type: string - // RequirementLevel: ConditionallyRequired (If other than the default - // version (`1.0`)) - // Stability: stable - // Examples: '2.0', '1.0' - RPCJsonrpcVersionKey = attribute.Key("rpc.jsonrpc.version") - - // RPCJsonrpcRequestIDKey is the attribute Key conforming to the - // "rpc.jsonrpc.request_id" semantic conventions. It represents the `id` - // property of request or response. Since protocol allows id to be int, - // string, `null` or missing (for notifications), value is expected to be - // cast to string for simplicity. Use empty string in case of `null` value. - // Omit entirely if this is a notification. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '10', 'request-7', '' - RPCJsonrpcRequestIDKey = attribute.Key("rpc.jsonrpc.request_id") - - // RPCJsonrpcErrorCodeKey is the attribute Key conforming to the - // "rpc.jsonrpc.error_code" semantic conventions. It represents the - // `error.code` property of response if it is an error response. - // - // Type: int - // RequirementLevel: ConditionallyRequired (If response is not successful.) - // Stability: stable - // Examples: -32700, 100 - RPCJsonrpcErrorCodeKey = attribute.Key("rpc.jsonrpc.error_code") - - // RPCJsonrpcErrorMessageKey is the attribute Key conforming to the - // "rpc.jsonrpc.error_message" semantic conventions. It represents the - // `error.message` property of response if it is an error response. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'Parse error', 'User already exists' - RPCJsonrpcErrorMessageKey = attribute.Key("rpc.jsonrpc.error_message") -) - -// RPCJsonrpcVersion returns an attribute KeyValue conforming to the -// "rpc.jsonrpc.version" semantic conventions. It represents the protocol -// version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0 -// does not specify this, the value can be omitted. -func RPCJsonrpcVersion(val string) attribute.KeyValue { - return RPCJsonrpcVersionKey.String(val) -} - -// RPCJsonrpcRequestID returns an attribute KeyValue conforming to the -// "rpc.jsonrpc.request_id" semantic conventions. It represents the `id` -// property of request or response. Since protocol allows id to be int, string, -// `null` or missing (for notifications), value is expected to be cast to -// string for simplicity. Use empty string in case of `null` value. Omit -// entirely if this is a notification. -func RPCJsonrpcRequestID(val string) attribute.KeyValue { - return RPCJsonrpcRequestIDKey.String(val) -} - -// RPCJsonrpcErrorCode returns an attribute KeyValue conforming to the -// "rpc.jsonrpc.error_code" semantic conventions. It represents the -// `error.code` property of response if it is an error response. -func RPCJsonrpcErrorCode(val int) attribute.KeyValue { - return RPCJsonrpcErrorCodeKey.Int(val) -} - -// RPCJsonrpcErrorMessage returns an attribute KeyValue conforming to the -// "rpc.jsonrpc.error_message" semantic conventions. It represents the -// `error.message` property of response if it is an error response. -func RPCJsonrpcErrorMessage(val string) attribute.KeyValue { - return RPCJsonrpcErrorMessageKey.String(val) -} - -// Tech-specific attributes for Connect RPC. -const ( - // RPCConnectRPCErrorCodeKey is the attribute Key conforming to the - // "rpc.connect_rpc.error_code" semantic conventions. It represents the - // [error codes](https://connect.build/docs/protocol/#error-codes) of the - // Connect request. Error codes are always string values. - // - // Type: Enum - // RequirementLevel: ConditionallyRequired (If response is not successful - // and if error code available.) - // Stability: stable - RPCConnectRPCErrorCodeKey = attribute.Key("rpc.connect_rpc.error_code") -) - -var ( - // cancelled - RPCConnectRPCErrorCodeCancelled = RPCConnectRPCErrorCodeKey.String("cancelled") - // unknown - RPCConnectRPCErrorCodeUnknown = RPCConnectRPCErrorCodeKey.String("unknown") - // invalid_argument - RPCConnectRPCErrorCodeInvalidArgument = RPCConnectRPCErrorCodeKey.String("invalid_argument") - // deadline_exceeded - RPCConnectRPCErrorCodeDeadlineExceeded = RPCConnectRPCErrorCodeKey.String("deadline_exceeded") - // not_found - RPCConnectRPCErrorCodeNotFound = RPCConnectRPCErrorCodeKey.String("not_found") - // already_exists - RPCConnectRPCErrorCodeAlreadyExists = RPCConnectRPCErrorCodeKey.String("already_exists") - // permission_denied - RPCConnectRPCErrorCodePermissionDenied = RPCConnectRPCErrorCodeKey.String("permission_denied") - // resource_exhausted - RPCConnectRPCErrorCodeResourceExhausted = RPCConnectRPCErrorCodeKey.String("resource_exhausted") - // failed_precondition - RPCConnectRPCErrorCodeFailedPrecondition = RPCConnectRPCErrorCodeKey.String("failed_precondition") - // aborted - RPCConnectRPCErrorCodeAborted = RPCConnectRPCErrorCodeKey.String("aborted") - // out_of_range - RPCConnectRPCErrorCodeOutOfRange = RPCConnectRPCErrorCodeKey.String("out_of_range") - // unimplemented - RPCConnectRPCErrorCodeUnimplemented = RPCConnectRPCErrorCodeKey.String("unimplemented") - // internal - RPCConnectRPCErrorCodeInternal = RPCConnectRPCErrorCodeKey.String("internal") - // unavailable - RPCConnectRPCErrorCodeUnavailable = RPCConnectRPCErrorCodeKey.String("unavailable") - // data_loss - RPCConnectRPCErrorCodeDataLoss = RPCConnectRPCErrorCodeKey.String("data_loss") - // unauthenticated - RPCConnectRPCErrorCodeUnauthenticated = RPCConnectRPCErrorCodeKey.String("unauthenticated") -) diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/README.md b/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/README.md deleted file mode 100644 index 0b6cbe96..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Semconv v1.24.0 - -[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/semconv/v1.24.0)](https://pkg.go.dev/go.opentelemetry.io/otel/semconv/v1.24.0) diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/attribute_group.go b/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/attribute_group.go deleted file mode 100644 index 6e688345..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/attribute_group.go +++ /dev/null @@ -1,4387 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Code generated from semantic convention specification. DO NOT EDIT. - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0" - -import "go.opentelemetry.io/otel/attribute" - -// Describes FaaS attributes. -const ( - // FaaSInvokedNameKey is the attribute Key conforming to the - // "faas.invoked_name" semantic conventions. It represents the name of the - // invoked function. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'my-function' - // Note: SHOULD be equal to the `faas.name` resource attribute of the - // invoked function. - FaaSInvokedNameKey = attribute.Key("faas.invoked_name") - - // FaaSInvokedProviderKey is the attribute Key conforming to the - // "faas.invoked_provider" semantic conventions. It represents the cloud - // provider of the invoked function. - // - // Type: Enum - // RequirementLevel: Required - // Stability: experimental - // Note: SHOULD be equal to the `cloud.provider` resource attribute of the - // invoked function. - FaaSInvokedProviderKey = attribute.Key("faas.invoked_provider") - - // FaaSInvokedRegionKey is the attribute Key conforming to the - // "faas.invoked_region" semantic conventions. It represents the cloud - // region of the invoked function. - // - // Type: string - // RequirementLevel: ConditionallyRequired (For some cloud providers, like - // AWS or GCP, the region in which a function is hosted is essential to - // uniquely identify the function and also part of its endpoint. Since it's - // part of the endpoint being called, the region is always known to - // clients. In these cases, `faas.invoked_region` MUST be set accordingly. - // If the region is unknown to the client or not required for identifying - // the invoked function, setting `faas.invoked_region` is optional.) - // Stability: experimental - // Examples: 'eu-central-1' - // Note: SHOULD be equal to the `cloud.region` resource attribute of the - // invoked function. - FaaSInvokedRegionKey = attribute.Key("faas.invoked_region") - - // FaaSTriggerKey is the attribute Key conforming to the "faas.trigger" - // semantic conventions. It represents the type of the trigger which caused - // this function invocation. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - FaaSTriggerKey = attribute.Key("faas.trigger") -) - -var ( - // Alibaba Cloud - FaaSInvokedProviderAlibabaCloud = FaaSInvokedProviderKey.String("alibaba_cloud") - // Amazon Web Services - FaaSInvokedProviderAWS = FaaSInvokedProviderKey.String("aws") - // Microsoft Azure - FaaSInvokedProviderAzure = FaaSInvokedProviderKey.String("azure") - // Google Cloud Platform - FaaSInvokedProviderGCP = FaaSInvokedProviderKey.String("gcp") - // Tencent Cloud - FaaSInvokedProviderTencentCloud = FaaSInvokedProviderKey.String("tencent_cloud") -) - -var ( - // A response to some data source operation such as a database or filesystem read/write - FaaSTriggerDatasource = FaaSTriggerKey.String("datasource") - // To provide an answer to an inbound HTTP request - FaaSTriggerHTTP = FaaSTriggerKey.String("http") - // A function is set to be executed when messages are sent to a messaging system - FaaSTriggerPubsub = FaaSTriggerKey.String("pubsub") - // A function is scheduled to be executed regularly - FaaSTriggerTimer = FaaSTriggerKey.String("timer") - // If none of the others apply - FaaSTriggerOther = FaaSTriggerKey.String("other") -) - -// FaaSInvokedName returns an attribute KeyValue conforming to the -// "faas.invoked_name" semantic conventions. It represents the name of the -// invoked function. -func FaaSInvokedName(val string) attribute.KeyValue { - return FaaSInvokedNameKey.String(val) -} - -// FaaSInvokedRegion returns an attribute KeyValue conforming to the -// "faas.invoked_region" semantic conventions. It represents the cloud region -// of the invoked function. -func FaaSInvokedRegion(val string) attribute.KeyValue { - return FaaSInvokedRegionKey.String(val) -} - -// Attributes for Events represented using Log Records. -const ( - // EventNameKey is the attribute Key conforming to the "event.name" - // semantic conventions. It represents the identifies the class / type of - // event. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'browser.mouse.click', 'device.app.lifecycle' - // Note: Event names are subject to the same rules as [attribute - // names](https://github.com/open-telemetry/opentelemetry-specification/tree/v1.26.0/specification/common/attribute-naming.md). - // Notably, event names are namespaced to avoid collisions and provide a - // clean separation of semantics for events in separate domains like - // browser, mobile, and kubernetes. - EventNameKey = attribute.Key("event.name") -) - -// EventName returns an attribute KeyValue conforming to the "event.name" -// semantic conventions. It represents the identifies the class / type of -// event. -func EventName(val string) attribute.KeyValue { - return EventNameKey.String(val) -} - -// The attributes described in this section are rather generic. They may be -// used in any Log Record they apply to. -const ( - // LogRecordUIDKey is the attribute Key conforming to the "log.record.uid" - // semantic conventions. It represents a unique identifier for the Log - // Record. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '01ARZ3NDEKTSV4RRFFQ69G5FAV' - // Note: If an id is provided, other log records with the same id will be - // considered duplicates and can be removed safely. This means, that two - // distinguishable log records MUST have different values. - // The id MAY be an [Universally Unique Lexicographically Sortable - // Identifier (ULID)](https://github.com/ulid/spec), but other identifiers - // (e.g. UUID) may be used as needed. - LogRecordUIDKey = attribute.Key("log.record.uid") -) - -// LogRecordUID returns an attribute KeyValue conforming to the -// "log.record.uid" semantic conventions. It represents a unique identifier for -// the Log Record. -func LogRecordUID(val string) attribute.KeyValue { - return LogRecordUIDKey.String(val) -} - -// Describes Log attributes -const ( - // LogIostreamKey is the attribute Key conforming to the "log.iostream" - // semantic conventions. It represents the stream associated with the log. - // See below for a list of well-known values. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - LogIostreamKey = attribute.Key("log.iostream") -) - -var ( - // Logs from stdout stream - LogIostreamStdout = LogIostreamKey.String("stdout") - // Events from stderr stream - LogIostreamStderr = LogIostreamKey.String("stderr") -) - -// A file to which log was emitted. -const ( - // LogFileNameKey is the attribute Key conforming to the "log.file.name" - // semantic conventions. It represents the basename of the file. - // - // Type: string - // RequirementLevel: Recommended - // Stability: experimental - // Examples: 'audit.log' - LogFileNameKey = attribute.Key("log.file.name") - - // LogFileNameResolvedKey is the attribute Key conforming to the - // "log.file.name_resolved" semantic conventions. It represents the - // basename of the file, with symlinks resolved. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'uuid.log' - LogFileNameResolvedKey = attribute.Key("log.file.name_resolved") - - // LogFilePathKey is the attribute Key conforming to the "log.file.path" - // semantic conventions. It represents the full path to the file. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '/var/log/mysql/audit.log' - LogFilePathKey = attribute.Key("log.file.path") - - // LogFilePathResolvedKey is the attribute Key conforming to the - // "log.file.path_resolved" semantic conventions. It represents the full - // path to the file, with symlinks resolved. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '/var/lib/docker/uuid.log' - LogFilePathResolvedKey = attribute.Key("log.file.path_resolved") -) - -// LogFileName returns an attribute KeyValue conforming to the -// "log.file.name" semantic conventions. It represents the basename of the -// file. -func LogFileName(val string) attribute.KeyValue { - return LogFileNameKey.String(val) -} - -// LogFileNameResolved returns an attribute KeyValue conforming to the -// "log.file.name_resolved" semantic conventions. It represents the basename of -// the file, with symlinks resolved. -func LogFileNameResolved(val string) attribute.KeyValue { - return LogFileNameResolvedKey.String(val) -} - -// LogFilePath returns an attribute KeyValue conforming to the -// "log.file.path" semantic conventions. It represents the full path to the -// file. -func LogFilePath(val string) attribute.KeyValue { - return LogFilePathKey.String(val) -} - -// LogFilePathResolved returns an attribute KeyValue conforming to the -// "log.file.path_resolved" semantic conventions. It represents the full path -// to the file, with symlinks resolved. -func LogFilePathResolved(val string) attribute.KeyValue { - return LogFilePathResolvedKey.String(val) -} - -// Describes Database attributes -const ( - // PoolNameKey is the attribute Key conforming to the "pool.name" semantic - // conventions. It represents the name of the connection pool; unique - // within the instrumented application. In case the connection pool - // implementation doesn't provide a name, then the - // [db.connection_string](/docs/database/database-spans.md#connection-level-attributes) - // should be used - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'myDataSource' - PoolNameKey = attribute.Key("pool.name") - - // StateKey is the attribute Key conforming to the "state" semantic - // conventions. It represents the state of a connection in the pool - // - // Type: Enum - // RequirementLevel: Required - // Stability: experimental - // Examples: 'idle' - StateKey = attribute.Key("state") -) - -var ( - // idle - StateIdle = StateKey.String("idle") - // used - StateUsed = StateKey.String("used") -) - -// PoolName returns an attribute KeyValue conforming to the "pool.name" -// semantic conventions. It represents the name of the connection pool; unique -// within the instrumented application. In case the connection pool -// implementation doesn't provide a name, then the -// [db.connection_string](/docs/database/database-spans.md#connection-level-attributes) -// should be used -func PoolName(val string) attribute.KeyValue { - return PoolNameKey.String(val) -} - -// ASP.NET Core attributes -const ( - // AspnetcoreDiagnosticsHandlerTypeKey is the attribute Key conforming to - // the "aspnetcore.diagnostics.handler.type" semantic conventions. It - // represents the full type name of the - // [`IExceptionHandler`](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.diagnostics.iexceptionhandler) - // implementation that handled the exception. - // - // Type: string - // RequirementLevel: ConditionallyRequired (if and only if the exception - // was handled by this handler.) - // Stability: experimental - // Examples: 'Contoso.MyHandler' - AspnetcoreDiagnosticsHandlerTypeKey = attribute.Key("aspnetcore.diagnostics.handler.type") - - // AspnetcoreRateLimitingPolicyKey is the attribute Key conforming to the - // "aspnetcore.rate_limiting.policy" semantic conventions. It represents - // the rate limiting policy name. - // - // Type: string - // RequirementLevel: ConditionallyRequired (if the matched endpoint for the - // request had a rate-limiting policy.) - // Stability: experimental - // Examples: 'fixed', 'sliding', 'token' - AspnetcoreRateLimitingPolicyKey = attribute.Key("aspnetcore.rate_limiting.policy") - - // AspnetcoreRateLimitingResultKey is the attribute Key conforming to the - // "aspnetcore.rate_limiting.result" semantic conventions. It represents - // the rate-limiting result, shows whether the lease was acquired or - // contains a rejection reason - // - // Type: Enum - // RequirementLevel: Required - // Stability: experimental - // Examples: 'acquired', 'request_canceled' - AspnetcoreRateLimitingResultKey = attribute.Key("aspnetcore.rate_limiting.result") - - // AspnetcoreRequestIsUnhandledKey is the attribute Key conforming to the - // "aspnetcore.request.is_unhandled" semantic conventions. It represents - // the flag indicating if request was handled by the application pipeline. - // - // Type: boolean - // RequirementLevel: ConditionallyRequired (if and only if the request was - // not handled.) - // Stability: experimental - // Examples: True - AspnetcoreRequestIsUnhandledKey = attribute.Key("aspnetcore.request.is_unhandled") - - // AspnetcoreRoutingIsFallbackKey is the attribute Key conforming to the - // "aspnetcore.routing.is_fallback" semantic conventions. It represents a - // value that indicates whether the matched route is a fallback route. - // - // Type: boolean - // RequirementLevel: ConditionallyRequired (If and only if a route was - // successfully matched.) - // Stability: experimental - // Examples: True - AspnetcoreRoutingIsFallbackKey = attribute.Key("aspnetcore.routing.is_fallback") -) - -var ( - // Lease was acquired - AspnetcoreRateLimitingResultAcquired = AspnetcoreRateLimitingResultKey.String("acquired") - // Lease request was rejected by the endpoint limiter - AspnetcoreRateLimitingResultEndpointLimiter = AspnetcoreRateLimitingResultKey.String("endpoint_limiter") - // Lease request was rejected by the global limiter - AspnetcoreRateLimitingResultGlobalLimiter = AspnetcoreRateLimitingResultKey.String("global_limiter") - // Lease request was canceled - AspnetcoreRateLimitingResultRequestCanceled = AspnetcoreRateLimitingResultKey.String("request_canceled") -) - -// AspnetcoreDiagnosticsHandlerType returns an attribute KeyValue conforming -// to the "aspnetcore.diagnostics.handler.type" semantic conventions. It -// represents the full type name of the -// [`IExceptionHandler`](https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.diagnostics.iexceptionhandler) -// implementation that handled the exception. -func AspnetcoreDiagnosticsHandlerType(val string) attribute.KeyValue { - return AspnetcoreDiagnosticsHandlerTypeKey.String(val) -} - -// AspnetcoreRateLimitingPolicy returns an attribute KeyValue conforming to -// the "aspnetcore.rate_limiting.policy" semantic conventions. It represents -// the rate limiting policy name. -func AspnetcoreRateLimitingPolicy(val string) attribute.KeyValue { - return AspnetcoreRateLimitingPolicyKey.String(val) -} - -// AspnetcoreRequestIsUnhandled returns an attribute KeyValue conforming to -// the "aspnetcore.request.is_unhandled" semantic conventions. It represents -// the flag indicating if request was handled by the application pipeline. -func AspnetcoreRequestIsUnhandled(val bool) attribute.KeyValue { - return AspnetcoreRequestIsUnhandledKey.Bool(val) -} - -// AspnetcoreRoutingIsFallback returns an attribute KeyValue conforming to -// the "aspnetcore.routing.is_fallback" semantic conventions. It represents a -// value that indicates whether the matched route is a fallback route. -func AspnetcoreRoutingIsFallback(val bool) attribute.KeyValue { - return AspnetcoreRoutingIsFallbackKey.Bool(val) -} - -// SignalR attributes -const ( - // SignalrConnectionStatusKey is the attribute Key conforming to the - // "signalr.connection.status" semantic conventions. It represents the - // signalR HTTP connection closure status. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'app_shutdown', 'timeout' - SignalrConnectionStatusKey = attribute.Key("signalr.connection.status") - - // SignalrTransportKey is the attribute Key conforming to the - // "signalr.transport" semantic conventions. It represents the [SignalR - // transport - // type](https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/TransportProtocols.md) - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'web_sockets', 'long_polling' - SignalrTransportKey = attribute.Key("signalr.transport") -) - -var ( - // The connection was closed normally - SignalrConnectionStatusNormalClosure = SignalrConnectionStatusKey.String("normal_closure") - // The connection was closed due to a timeout - SignalrConnectionStatusTimeout = SignalrConnectionStatusKey.String("timeout") - // The connection was closed because the app is shutting down - SignalrConnectionStatusAppShutdown = SignalrConnectionStatusKey.String("app_shutdown") -) - -var ( - // ServerSentEvents protocol - SignalrTransportServerSentEvents = SignalrTransportKey.String("server_sent_events") - // LongPolling protocol - SignalrTransportLongPolling = SignalrTransportKey.String("long_polling") - // WebSockets protocol - SignalrTransportWebSockets = SignalrTransportKey.String("web_sockets") -) - -// Describes JVM buffer metric attributes. -const ( - // JvmBufferPoolNameKey is the attribute Key conforming to the - // "jvm.buffer.pool.name" semantic conventions. It represents the name of - // the buffer pool. - // - // Type: string - // RequirementLevel: Recommended - // Stability: experimental - // Examples: 'mapped', 'direct' - // Note: Pool names are generally obtained via - // [BufferPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/BufferPoolMXBean.html#getName()). - JvmBufferPoolNameKey = attribute.Key("jvm.buffer.pool.name") -) - -// JvmBufferPoolName returns an attribute KeyValue conforming to the -// "jvm.buffer.pool.name" semantic conventions. It represents the name of the -// buffer pool. -func JvmBufferPoolName(val string) attribute.KeyValue { - return JvmBufferPoolNameKey.String(val) -} - -// Describes JVM memory metric attributes. -const ( - // JvmMemoryPoolNameKey is the attribute Key conforming to the - // "jvm.memory.pool.name" semantic conventions. It represents the name of - // the memory pool. - // - // Type: string - // RequirementLevel: Recommended - // Stability: stable - // Examples: 'G1 Old Gen', 'G1 Eden space', 'G1 Survivor Space' - // Note: Pool names are generally obtained via - // [MemoryPoolMXBean#getName()](https://docs.oracle.com/en/java/javase/11/docs/api/java.management/java/lang/management/MemoryPoolMXBean.html#getName()). - JvmMemoryPoolNameKey = attribute.Key("jvm.memory.pool.name") - - // JvmMemoryTypeKey is the attribute Key conforming to the - // "jvm.memory.type" semantic conventions. It represents the type of - // memory. - // - // Type: Enum - // RequirementLevel: Recommended - // Stability: stable - // Examples: 'heap', 'non_heap' - JvmMemoryTypeKey = attribute.Key("jvm.memory.type") -) - -var ( - // Heap memory - JvmMemoryTypeHeap = JvmMemoryTypeKey.String("heap") - // Non-heap memory - JvmMemoryTypeNonHeap = JvmMemoryTypeKey.String("non_heap") -) - -// JvmMemoryPoolName returns an attribute KeyValue conforming to the -// "jvm.memory.pool.name" semantic conventions. It represents the name of the -// memory pool. -func JvmMemoryPoolName(val string) attribute.KeyValue { - return JvmMemoryPoolNameKey.String(val) -} - -// Describes System metric attributes -const ( - // SystemDeviceKey is the attribute Key conforming to the "system.device" - // semantic conventions. It represents the device identifier - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '(identifier)' - SystemDeviceKey = attribute.Key("system.device") -) - -// SystemDevice returns an attribute KeyValue conforming to the -// "system.device" semantic conventions. It represents the device identifier -func SystemDevice(val string) attribute.KeyValue { - return SystemDeviceKey.String(val) -} - -// Describes System CPU metric attributes -const ( - // SystemCPULogicalNumberKey is the attribute Key conforming to the - // "system.cpu.logical_number" semantic conventions. It represents the - // logical CPU number [0..n-1] - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1 - SystemCPULogicalNumberKey = attribute.Key("system.cpu.logical_number") - - // SystemCPUStateKey is the attribute Key conforming to the - // "system.cpu.state" semantic conventions. It represents the state of the - // CPU - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'idle', 'interrupt' - SystemCPUStateKey = attribute.Key("system.cpu.state") -) - -var ( - // user - SystemCPUStateUser = SystemCPUStateKey.String("user") - // system - SystemCPUStateSystem = SystemCPUStateKey.String("system") - // nice - SystemCPUStateNice = SystemCPUStateKey.String("nice") - // idle - SystemCPUStateIdle = SystemCPUStateKey.String("idle") - // iowait - SystemCPUStateIowait = SystemCPUStateKey.String("iowait") - // interrupt - SystemCPUStateInterrupt = SystemCPUStateKey.String("interrupt") - // steal - SystemCPUStateSteal = SystemCPUStateKey.String("steal") -) - -// SystemCPULogicalNumber returns an attribute KeyValue conforming to the -// "system.cpu.logical_number" semantic conventions. It represents the logical -// CPU number [0..n-1] -func SystemCPULogicalNumber(val int) attribute.KeyValue { - return SystemCPULogicalNumberKey.Int(val) -} - -// Describes System Memory metric attributes -const ( - // SystemMemoryStateKey is the attribute Key conforming to the - // "system.memory.state" semantic conventions. It represents the memory - // state - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'free', 'cached' - SystemMemoryStateKey = attribute.Key("system.memory.state") -) - -var ( - // used - SystemMemoryStateUsed = SystemMemoryStateKey.String("used") - // free - SystemMemoryStateFree = SystemMemoryStateKey.String("free") - // shared - SystemMemoryStateShared = SystemMemoryStateKey.String("shared") - // buffers - SystemMemoryStateBuffers = SystemMemoryStateKey.String("buffers") - // cached - SystemMemoryStateCached = SystemMemoryStateKey.String("cached") -) - -// Describes System Memory Paging metric attributes -const ( - // SystemPagingDirectionKey is the attribute Key conforming to the - // "system.paging.direction" semantic conventions. It represents the paging - // access direction - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'in' - SystemPagingDirectionKey = attribute.Key("system.paging.direction") - - // SystemPagingStateKey is the attribute Key conforming to the - // "system.paging.state" semantic conventions. It represents the memory - // paging state - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'free' - SystemPagingStateKey = attribute.Key("system.paging.state") - - // SystemPagingTypeKey is the attribute Key conforming to the - // "system.paging.type" semantic conventions. It represents the memory - // paging type - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'minor' - SystemPagingTypeKey = attribute.Key("system.paging.type") -) - -var ( - // in - SystemPagingDirectionIn = SystemPagingDirectionKey.String("in") - // out - SystemPagingDirectionOut = SystemPagingDirectionKey.String("out") -) - -var ( - // used - SystemPagingStateUsed = SystemPagingStateKey.String("used") - // free - SystemPagingStateFree = SystemPagingStateKey.String("free") -) - -var ( - // major - SystemPagingTypeMajor = SystemPagingTypeKey.String("major") - // minor - SystemPagingTypeMinor = SystemPagingTypeKey.String("minor") -) - -// Describes Filesystem metric attributes -const ( - // SystemFilesystemModeKey is the attribute Key conforming to the - // "system.filesystem.mode" semantic conventions. It represents the - // filesystem mode - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'rw, ro' - SystemFilesystemModeKey = attribute.Key("system.filesystem.mode") - - // SystemFilesystemMountpointKey is the attribute Key conforming to the - // "system.filesystem.mountpoint" semantic conventions. It represents the - // filesystem mount path - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '/mnt/data' - SystemFilesystemMountpointKey = attribute.Key("system.filesystem.mountpoint") - - // SystemFilesystemStateKey is the attribute Key conforming to the - // "system.filesystem.state" semantic conventions. It represents the - // filesystem state - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'used' - SystemFilesystemStateKey = attribute.Key("system.filesystem.state") - - // SystemFilesystemTypeKey is the attribute Key conforming to the - // "system.filesystem.type" semantic conventions. It represents the - // filesystem type - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'ext4' - SystemFilesystemTypeKey = attribute.Key("system.filesystem.type") -) - -var ( - // used - SystemFilesystemStateUsed = SystemFilesystemStateKey.String("used") - // free - SystemFilesystemStateFree = SystemFilesystemStateKey.String("free") - // reserved - SystemFilesystemStateReserved = SystemFilesystemStateKey.String("reserved") -) - -var ( - // fat32 - SystemFilesystemTypeFat32 = SystemFilesystemTypeKey.String("fat32") - // exfat - SystemFilesystemTypeExfat = SystemFilesystemTypeKey.String("exfat") - // ntfs - SystemFilesystemTypeNtfs = SystemFilesystemTypeKey.String("ntfs") - // refs - SystemFilesystemTypeRefs = SystemFilesystemTypeKey.String("refs") - // hfsplus - SystemFilesystemTypeHfsplus = SystemFilesystemTypeKey.String("hfsplus") - // ext4 - SystemFilesystemTypeExt4 = SystemFilesystemTypeKey.String("ext4") -) - -// SystemFilesystemMode returns an attribute KeyValue conforming to the -// "system.filesystem.mode" semantic conventions. It represents the filesystem -// mode -func SystemFilesystemMode(val string) attribute.KeyValue { - return SystemFilesystemModeKey.String(val) -} - -// SystemFilesystemMountpoint returns an attribute KeyValue conforming to -// the "system.filesystem.mountpoint" semantic conventions. It represents the -// filesystem mount path -func SystemFilesystemMountpoint(val string) attribute.KeyValue { - return SystemFilesystemMountpointKey.String(val) -} - -// Describes Network metric attributes -const ( - // SystemNetworkStateKey is the attribute Key conforming to the - // "system.network.state" semantic conventions. It represents a stateless - // protocol MUST NOT set this attribute - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'close_wait' - SystemNetworkStateKey = attribute.Key("system.network.state") -) - -var ( - // close - SystemNetworkStateClose = SystemNetworkStateKey.String("close") - // close_wait - SystemNetworkStateCloseWait = SystemNetworkStateKey.String("close_wait") - // closing - SystemNetworkStateClosing = SystemNetworkStateKey.String("closing") - // delete - SystemNetworkStateDelete = SystemNetworkStateKey.String("delete") - // established - SystemNetworkStateEstablished = SystemNetworkStateKey.String("established") - // fin_wait_1 - SystemNetworkStateFinWait1 = SystemNetworkStateKey.String("fin_wait_1") - // fin_wait_2 - SystemNetworkStateFinWait2 = SystemNetworkStateKey.String("fin_wait_2") - // last_ack - SystemNetworkStateLastAck = SystemNetworkStateKey.String("last_ack") - // listen - SystemNetworkStateListen = SystemNetworkStateKey.String("listen") - // syn_recv - SystemNetworkStateSynRecv = SystemNetworkStateKey.String("syn_recv") - // syn_sent - SystemNetworkStateSynSent = SystemNetworkStateKey.String("syn_sent") - // time_wait - SystemNetworkStateTimeWait = SystemNetworkStateKey.String("time_wait") -) - -// Describes System Process metric attributes -const ( - // SystemProcessesStatusKey is the attribute Key conforming to the - // "system.processes.status" semantic conventions. It represents the - // process state, e.g., [Linux Process State - // Codes](https://man7.org/linux/man-pages/man1/ps.1.html#PROCESS_STATE_CODES) - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'running' - SystemProcessesStatusKey = attribute.Key("system.processes.status") -) - -var ( - // running - SystemProcessesStatusRunning = SystemProcessesStatusKey.String("running") - // sleeping - SystemProcessesStatusSleeping = SystemProcessesStatusKey.String("sleeping") - // stopped - SystemProcessesStatusStopped = SystemProcessesStatusKey.String("stopped") - // defunct - SystemProcessesStatusDefunct = SystemProcessesStatusKey.String("defunct") -) - -// These attributes may be used to describe the client in a connection-based -// network interaction where there is one side that initiates the connection -// (the client is the side that initiates the connection). This covers all TCP -// network interactions since TCP is connection-based and one side initiates -// the connection (an exception is made for peer-to-peer communication over TCP -// where the "user-facing" surface of the protocol / API doesn't expose a clear -// notion of client and server). This also covers UDP network interactions -// where one side initiates the interaction, e.g. QUIC (HTTP/3) and DNS. -const ( - // ClientAddressKey is the attribute Key conforming to the "client.address" - // semantic conventions. It represents the client address - domain name if - // available without reverse DNS lookup; otherwise, IP address or Unix - // domain socket name. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'client.example.com', '10.1.2.80', '/tmp/my.sock' - // Note: When observed from the server side, and when communicating through - // an intermediary, `client.address` SHOULD represent the client address - // behind any intermediaries, for example proxies, if it's available. - ClientAddressKey = attribute.Key("client.address") - - // ClientPortKey is the attribute Key conforming to the "client.port" - // semantic conventions. It represents the client port number. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 65123 - // Note: When observed from the server side, and when communicating through - // an intermediary, `client.port` SHOULD represent the client port behind - // any intermediaries, for example proxies, if it's available. - ClientPortKey = attribute.Key("client.port") -) - -// ClientAddress returns an attribute KeyValue conforming to the -// "client.address" semantic conventions. It represents the client address - -// domain name if available without reverse DNS lookup; otherwise, IP address -// or Unix domain socket name. -func ClientAddress(val string) attribute.KeyValue { - return ClientAddressKey.String(val) -} - -// ClientPort returns an attribute KeyValue conforming to the "client.port" -// semantic conventions. It represents the client port number. -func ClientPort(val int) attribute.KeyValue { - return ClientPortKey.Int(val) -} - -// The attributes used to describe telemetry in the context of databases. -const ( - // DBCassandraConsistencyLevelKey is the attribute Key conforming to the - // "db.cassandra.consistency_level" semantic conventions. It represents the - // consistency level of the query. Based on consistency values from - // [CQL](https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/dml/dmlConfigConsistency.html). - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - DBCassandraConsistencyLevelKey = attribute.Key("db.cassandra.consistency_level") - - // DBCassandraCoordinatorDCKey is the attribute Key conforming to the - // "db.cassandra.coordinator.dc" semantic conventions. It represents the - // data center of the coordinating node for a query. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'us-west-2' - DBCassandraCoordinatorDCKey = attribute.Key("db.cassandra.coordinator.dc") - - // DBCassandraCoordinatorIDKey is the attribute Key conforming to the - // "db.cassandra.coordinator.id" semantic conventions. It represents the ID - // of the coordinating node for a query. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'be13faa2-8574-4d71-926d-27f16cf8a7af' - DBCassandraCoordinatorIDKey = attribute.Key("db.cassandra.coordinator.id") - - // DBCassandraIdempotenceKey is the attribute Key conforming to the - // "db.cassandra.idempotence" semantic conventions. It represents the - // whether or not the query is idempotent. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - DBCassandraIdempotenceKey = attribute.Key("db.cassandra.idempotence") - - // DBCassandraPageSizeKey is the attribute Key conforming to the - // "db.cassandra.page_size" semantic conventions. It represents the fetch - // size used for paging, i.e. how many rows will be returned at once. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 5000 - DBCassandraPageSizeKey = attribute.Key("db.cassandra.page_size") - - // DBCassandraSpeculativeExecutionCountKey is the attribute Key conforming - // to the "db.cassandra.speculative_execution_count" semantic conventions. - // It represents the number of times a query was speculatively executed. - // Not set or `0` if the query was not executed speculatively. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 0, 2 - DBCassandraSpeculativeExecutionCountKey = attribute.Key("db.cassandra.speculative_execution_count") - - // DBCassandraTableKey is the attribute Key conforming to the - // "db.cassandra.table" semantic conventions. It represents the name of the - // primary Cassandra table that the operation is acting upon, including the - // keyspace name (if applicable). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'mytable' - // Note: This mirrors the db.sql.table attribute but references cassandra - // rather than sql. It is not recommended to attempt any client-side - // parsing of `db.statement` just to get this property, but it should be - // set if it is provided by the library being instrumented. If the - // operation is acting upon an anonymous table, or more than one table, - // this value MUST NOT be set. - DBCassandraTableKey = attribute.Key("db.cassandra.table") - - // DBConnectionStringKey is the attribute Key conforming to the - // "db.connection_string" semantic conventions. It represents the - // connection string used to connect to the database. It is recommended to - // remove embedded credentials. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Server=(localdb)\\v11.0;Integrated Security=true;' - DBConnectionStringKey = attribute.Key("db.connection_string") - - // DBCosmosDBClientIDKey is the attribute Key conforming to the - // "db.cosmosdb.client_id" semantic conventions. It represents the unique - // Cosmos client instance id. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '3ba4827d-4422-483f-b59f-85b74211c11d' - DBCosmosDBClientIDKey = attribute.Key("db.cosmosdb.client_id") - - // DBCosmosDBConnectionModeKey is the attribute Key conforming to the - // "db.cosmosdb.connection_mode" semantic conventions. It represents the - // cosmos client connection mode. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - DBCosmosDBConnectionModeKey = attribute.Key("db.cosmosdb.connection_mode") - - // DBCosmosDBContainerKey is the attribute Key conforming to the - // "db.cosmosdb.container" semantic conventions. It represents the cosmos - // DB container name. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'anystring' - DBCosmosDBContainerKey = attribute.Key("db.cosmosdb.container") - - // DBCosmosDBOperationTypeKey is the attribute Key conforming to the - // "db.cosmosdb.operation_type" semantic conventions. It represents the - // cosmosDB Operation Type. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - DBCosmosDBOperationTypeKey = attribute.Key("db.cosmosdb.operation_type") - - // DBCosmosDBRequestChargeKey is the attribute Key conforming to the - // "db.cosmosdb.request_charge" semantic conventions. It represents the rU - // consumed for that operation - // - // Type: double - // RequirementLevel: Optional - // Stability: experimental - // Examples: 46.18, 1.0 - DBCosmosDBRequestChargeKey = attribute.Key("db.cosmosdb.request_charge") - - // DBCosmosDBRequestContentLengthKey is the attribute Key conforming to the - // "db.cosmosdb.request_content_length" semantic conventions. It represents - // the request payload size in bytes - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - DBCosmosDBRequestContentLengthKey = attribute.Key("db.cosmosdb.request_content_length") - - // DBCosmosDBStatusCodeKey is the attribute Key conforming to the - // "db.cosmosdb.status_code" semantic conventions. It represents the cosmos - // DB status code. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 200, 201 - DBCosmosDBStatusCodeKey = attribute.Key("db.cosmosdb.status_code") - - // DBCosmosDBSubStatusCodeKey is the attribute Key conforming to the - // "db.cosmosdb.sub_status_code" semantic conventions. It represents the - // cosmos DB sub status code. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1000, 1002 - DBCosmosDBSubStatusCodeKey = attribute.Key("db.cosmosdb.sub_status_code") - - // DBElasticsearchClusterNameKey is the attribute Key conforming to the - // "db.elasticsearch.cluster.name" semantic conventions. It represents the - // represents the identifier of an Elasticsearch cluster. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'e9106fc68e3044f0b1475b04bf4ffd5f' - DBElasticsearchClusterNameKey = attribute.Key("db.elasticsearch.cluster.name") - - // DBElasticsearchNodeNameKey is the attribute Key conforming to the - // "db.elasticsearch.node.name" semantic conventions. It represents the - // represents the human-readable identifier of the node/instance to which a - // request was routed. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'instance-0000000001' - DBElasticsearchNodeNameKey = attribute.Key("db.elasticsearch.node.name") - - // DBInstanceIDKey is the attribute Key conforming to the "db.instance.id" - // semantic conventions. It represents an identifier (address, unique name, - // or any other identifier) of the database instance that is executing - // queries or mutations on the current connection. This is useful in cases - // where the database is running in a clustered environment and the - // instrumentation is able to record the node executing the query. The - // client may obtain this value in databases like MySQL using queries like - // `select @@hostname`. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'mysql-e26b99z.example.com' - DBInstanceIDKey = attribute.Key("db.instance.id") - - // DBJDBCDriverClassnameKey is the attribute Key conforming to the - // "db.jdbc.driver_classname" semantic conventions. It represents the - // fully-qualified class name of the [Java Database Connectivity - // (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) - // driver used to connect. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'org.postgresql.Driver', - // 'com.microsoft.sqlserver.jdbc.SQLServerDriver' - DBJDBCDriverClassnameKey = attribute.Key("db.jdbc.driver_classname") - - // DBMongoDBCollectionKey is the attribute Key conforming to the - // "db.mongodb.collection" semantic conventions. It represents the MongoDB - // collection being accessed within the database stated in `db.name`. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'customers', 'products' - DBMongoDBCollectionKey = attribute.Key("db.mongodb.collection") - - // DBMSSQLInstanceNameKey is the attribute Key conforming to the - // "db.mssql.instance_name" semantic conventions. It represents the - // Microsoft SQL Server [instance - // name](https://docs.microsoft.com/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15) - // connecting to. This name is used to determine the port of a named - // instance. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'MSSQLSERVER' - // Note: If setting a `db.mssql.instance_name`, `server.port` is no longer - // required (but still recommended if non-standard). - DBMSSQLInstanceNameKey = attribute.Key("db.mssql.instance_name") - - // DBNameKey is the attribute Key conforming to the "db.name" semantic - // conventions. It represents the this attribute is used to report the name - // of the database being accessed. For commands that switch the database, - // this should be set to the target database (even if the command fails). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'customers', 'main' - // Note: In some SQL databases, the database name to be used is called - // "schema name". In case there are multiple layers that could be - // considered for database name (e.g. Oracle instance name and schema - // name), the database name to be used is the more specific layer (e.g. - // Oracle schema name). - DBNameKey = attribute.Key("db.name") - - // DBOperationKey is the attribute Key conforming to the "db.operation" - // semantic conventions. It represents the name of the operation being - // executed, e.g. the [MongoDB command - // name](https://docs.mongodb.com/manual/reference/command/#database-operations) - // such as `findAndModify`, or the SQL keyword. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'findAndModify', 'HMSET', 'SELECT' - // Note: When setting this to an SQL keyword, it is not recommended to - // attempt any client-side parsing of `db.statement` just to get this - // property, but it should be set if the operation name is provided by the - // library being instrumented. If the SQL statement has an ambiguous - // operation, or performs more than one operation, this value may be - // omitted. - DBOperationKey = attribute.Key("db.operation") - - // DBRedisDBIndexKey is the attribute Key conforming to the - // "db.redis.database_index" semantic conventions. It represents the index - // of the database being accessed as used in the [`SELECT` - // command](https://redis.io/commands/select), provided as an integer. To - // be used instead of the generic `db.name` attribute. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 0, 1, 15 - DBRedisDBIndexKey = attribute.Key("db.redis.database_index") - - // DBSQLTableKey is the attribute Key conforming to the "db.sql.table" - // semantic conventions. It represents the name of the primary table that - // the operation is acting upon, including the database name (if - // applicable). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'public.users', 'customers' - // Note: It is not recommended to attempt any client-side parsing of - // `db.statement` just to get this property, but it should be set if it is - // provided by the library being instrumented. If the operation is acting - // upon an anonymous table, or more than one table, this value MUST NOT be - // set. - DBSQLTableKey = attribute.Key("db.sql.table") - - // DBStatementKey is the attribute Key conforming to the "db.statement" - // semantic conventions. It represents the database statement being - // executed. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'SELECT * FROM wuser_table', 'SET mykey "WuValue"' - DBStatementKey = attribute.Key("db.statement") - - // DBSystemKey is the attribute Key conforming to the "db.system" semantic - // conventions. It represents an identifier for the database management - // system (DBMS) product being used. See below for a list of well-known - // identifiers. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - DBSystemKey = attribute.Key("db.system") - - // DBUserKey is the attribute Key conforming to the "db.user" semantic - // conventions. It represents the username for accessing the database. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'readonly_user', 'reporting_user' - DBUserKey = attribute.Key("db.user") -) - -var ( - // all - DBCassandraConsistencyLevelAll = DBCassandraConsistencyLevelKey.String("all") - // each_quorum - DBCassandraConsistencyLevelEachQuorum = DBCassandraConsistencyLevelKey.String("each_quorum") - // quorum - DBCassandraConsistencyLevelQuorum = DBCassandraConsistencyLevelKey.String("quorum") - // local_quorum - DBCassandraConsistencyLevelLocalQuorum = DBCassandraConsistencyLevelKey.String("local_quorum") - // one - DBCassandraConsistencyLevelOne = DBCassandraConsistencyLevelKey.String("one") - // two - DBCassandraConsistencyLevelTwo = DBCassandraConsistencyLevelKey.String("two") - // three - DBCassandraConsistencyLevelThree = DBCassandraConsistencyLevelKey.String("three") - // local_one - DBCassandraConsistencyLevelLocalOne = DBCassandraConsistencyLevelKey.String("local_one") - // any - DBCassandraConsistencyLevelAny = DBCassandraConsistencyLevelKey.String("any") - // serial - DBCassandraConsistencyLevelSerial = DBCassandraConsistencyLevelKey.String("serial") - // local_serial - DBCassandraConsistencyLevelLocalSerial = DBCassandraConsistencyLevelKey.String("local_serial") -) - -var ( - // Gateway (HTTP) connections mode - DBCosmosDBConnectionModeGateway = DBCosmosDBConnectionModeKey.String("gateway") - // Direct connection - DBCosmosDBConnectionModeDirect = DBCosmosDBConnectionModeKey.String("direct") -) - -var ( - // invalid - DBCosmosDBOperationTypeInvalid = DBCosmosDBOperationTypeKey.String("Invalid") - // create - DBCosmosDBOperationTypeCreate = DBCosmosDBOperationTypeKey.String("Create") - // patch - DBCosmosDBOperationTypePatch = DBCosmosDBOperationTypeKey.String("Patch") - // read - DBCosmosDBOperationTypeRead = DBCosmosDBOperationTypeKey.String("Read") - // read_feed - DBCosmosDBOperationTypeReadFeed = DBCosmosDBOperationTypeKey.String("ReadFeed") - // delete - DBCosmosDBOperationTypeDelete = DBCosmosDBOperationTypeKey.String("Delete") - // replace - DBCosmosDBOperationTypeReplace = DBCosmosDBOperationTypeKey.String("Replace") - // execute - DBCosmosDBOperationTypeExecute = DBCosmosDBOperationTypeKey.String("Execute") - // query - DBCosmosDBOperationTypeQuery = DBCosmosDBOperationTypeKey.String("Query") - // head - DBCosmosDBOperationTypeHead = DBCosmosDBOperationTypeKey.String("Head") - // head_feed - DBCosmosDBOperationTypeHeadFeed = DBCosmosDBOperationTypeKey.String("HeadFeed") - // upsert - DBCosmosDBOperationTypeUpsert = DBCosmosDBOperationTypeKey.String("Upsert") - // batch - DBCosmosDBOperationTypeBatch = DBCosmosDBOperationTypeKey.String("Batch") - // query_plan - DBCosmosDBOperationTypeQueryPlan = DBCosmosDBOperationTypeKey.String("QueryPlan") - // execute_javascript - DBCosmosDBOperationTypeExecuteJavascript = DBCosmosDBOperationTypeKey.String("ExecuteJavaScript") -) - -var ( - // Some other SQL database. Fallback only. See notes - DBSystemOtherSQL = DBSystemKey.String("other_sql") - // Microsoft SQL Server - DBSystemMSSQL = DBSystemKey.String("mssql") - // Microsoft SQL Server Compact - DBSystemMssqlcompact = DBSystemKey.String("mssqlcompact") - // MySQL - DBSystemMySQL = DBSystemKey.String("mysql") - // Oracle Database - DBSystemOracle = DBSystemKey.String("oracle") - // IBM DB2 - DBSystemDB2 = DBSystemKey.String("db2") - // PostgreSQL - DBSystemPostgreSQL = DBSystemKey.String("postgresql") - // Amazon Redshift - DBSystemRedshift = DBSystemKey.String("redshift") - // Apache Hive - DBSystemHive = DBSystemKey.String("hive") - // Cloudscape - DBSystemCloudscape = DBSystemKey.String("cloudscape") - // HyperSQL DataBase - DBSystemHSQLDB = DBSystemKey.String("hsqldb") - // Progress Database - DBSystemProgress = DBSystemKey.String("progress") - // SAP MaxDB - DBSystemMaxDB = DBSystemKey.String("maxdb") - // SAP HANA - DBSystemHanaDB = DBSystemKey.String("hanadb") - // Ingres - DBSystemIngres = DBSystemKey.String("ingres") - // FirstSQL - DBSystemFirstSQL = DBSystemKey.String("firstsql") - // EnterpriseDB - DBSystemEDB = DBSystemKey.String("edb") - // InterSystems Caché - DBSystemCache = DBSystemKey.String("cache") - // Adabas (Adaptable Database System) - DBSystemAdabas = DBSystemKey.String("adabas") - // Firebird - DBSystemFirebird = DBSystemKey.String("firebird") - // Apache Derby - DBSystemDerby = DBSystemKey.String("derby") - // FileMaker - DBSystemFilemaker = DBSystemKey.String("filemaker") - // Informix - DBSystemInformix = DBSystemKey.String("informix") - // InstantDB - DBSystemInstantDB = DBSystemKey.String("instantdb") - // InterBase - DBSystemInterbase = DBSystemKey.String("interbase") - // MariaDB - DBSystemMariaDB = DBSystemKey.String("mariadb") - // Netezza - DBSystemNetezza = DBSystemKey.String("netezza") - // Pervasive PSQL - DBSystemPervasive = DBSystemKey.String("pervasive") - // PointBase - DBSystemPointbase = DBSystemKey.String("pointbase") - // SQLite - DBSystemSqlite = DBSystemKey.String("sqlite") - // Sybase - DBSystemSybase = DBSystemKey.String("sybase") - // Teradata - DBSystemTeradata = DBSystemKey.String("teradata") - // Vertica - DBSystemVertica = DBSystemKey.String("vertica") - // H2 - DBSystemH2 = DBSystemKey.String("h2") - // ColdFusion IMQ - DBSystemColdfusion = DBSystemKey.String("coldfusion") - // Apache Cassandra - DBSystemCassandra = DBSystemKey.String("cassandra") - // Apache HBase - DBSystemHBase = DBSystemKey.String("hbase") - // MongoDB - DBSystemMongoDB = DBSystemKey.String("mongodb") - // Redis - DBSystemRedis = DBSystemKey.String("redis") - // Couchbase - DBSystemCouchbase = DBSystemKey.String("couchbase") - // CouchDB - DBSystemCouchDB = DBSystemKey.String("couchdb") - // Microsoft Azure Cosmos DB - DBSystemCosmosDB = DBSystemKey.String("cosmosdb") - // Amazon DynamoDB - DBSystemDynamoDB = DBSystemKey.String("dynamodb") - // Neo4j - DBSystemNeo4j = DBSystemKey.String("neo4j") - // Apache Geode - DBSystemGeode = DBSystemKey.String("geode") - // Elasticsearch - DBSystemElasticsearch = DBSystemKey.String("elasticsearch") - // Memcached - DBSystemMemcached = DBSystemKey.String("memcached") - // CockroachDB - DBSystemCockroachdb = DBSystemKey.String("cockroachdb") - // OpenSearch - DBSystemOpensearch = DBSystemKey.String("opensearch") - // ClickHouse - DBSystemClickhouse = DBSystemKey.String("clickhouse") - // Cloud Spanner - DBSystemSpanner = DBSystemKey.String("spanner") - // Trino - DBSystemTrino = DBSystemKey.String("trino") -) - -// DBCassandraCoordinatorDC returns an attribute KeyValue conforming to the -// "db.cassandra.coordinator.dc" semantic conventions. It represents the data -// center of the coordinating node for a query. -func DBCassandraCoordinatorDC(val string) attribute.KeyValue { - return DBCassandraCoordinatorDCKey.String(val) -} - -// DBCassandraCoordinatorID returns an attribute KeyValue conforming to the -// "db.cassandra.coordinator.id" semantic conventions. It represents the ID of -// the coordinating node for a query. -func DBCassandraCoordinatorID(val string) attribute.KeyValue { - return DBCassandraCoordinatorIDKey.String(val) -} - -// DBCassandraIdempotence returns an attribute KeyValue conforming to the -// "db.cassandra.idempotence" semantic conventions. It represents the whether -// or not the query is idempotent. -func DBCassandraIdempotence(val bool) attribute.KeyValue { - return DBCassandraIdempotenceKey.Bool(val) -} - -// DBCassandraPageSize returns an attribute KeyValue conforming to the -// "db.cassandra.page_size" semantic conventions. It represents the fetch size -// used for paging, i.e. how many rows will be returned at once. -func DBCassandraPageSize(val int) attribute.KeyValue { - return DBCassandraPageSizeKey.Int(val) -} - -// DBCassandraSpeculativeExecutionCount returns an attribute KeyValue -// conforming to the "db.cassandra.speculative_execution_count" semantic -// conventions. It represents the number of times a query was speculatively -// executed. Not set or `0` if the query was not executed speculatively. -func DBCassandraSpeculativeExecutionCount(val int) attribute.KeyValue { - return DBCassandraSpeculativeExecutionCountKey.Int(val) -} - -// DBCassandraTable returns an attribute KeyValue conforming to the -// "db.cassandra.table" semantic conventions. It represents the name of the -// primary Cassandra table that the operation is acting upon, including the -// keyspace name (if applicable). -func DBCassandraTable(val string) attribute.KeyValue { - return DBCassandraTableKey.String(val) -} - -// DBConnectionString returns an attribute KeyValue conforming to the -// "db.connection_string" semantic conventions. It represents the connection -// string used to connect to the database. It is recommended to remove embedded -// credentials. -func DBConnectionString(val string) attribute.KeyValue { - return DBConnectionStringKey.String(val) -} - -// DBCosmosDBClientID returns an attribute KeyValue conforming to the -// "db.cosmosdb.client_id" semantic conventions. It represents the unique -// Cosmos client instance id. -func DBCosmosDBClientID(val string) attribute.KeyValue { - return DBCosmosDBClientIDKey.String(val) -} - -// DBCosmosDBContainer returns an attribute KeyValue conforming to the -// "db.cosmosdb.container" semantic conventions. It represents the cosmos DB -// container name. -func DBCosmosDBContainer(val string) attribute.KeyValue { - return DBCosmosDBContainerKey.String(val) -} - -// DBCosmosDBRequestCharge returns an attribute KeyValue conforming to the -// "db.cosmosdb.request_charge" semantic conventions. It represents the rU -// consumed for that operation -func DBCosmosDBRequestCharge(val float64) attribute.KeyValue { - return DBCosmosDBRequestChargeKey.Float64(val) -} - -// DBCosmosDBRequestContentLength returns an attribute KeyValue conforming -// to the "db.cosmosdb.request_content_length" semantic conventions. It -// represents the request payload size in bytes -func DBCosmosDBRequestContentLength(val int) attribute.KeyValue { - return DBCosmosDBRequestContentLengthKey.Int(val) -} - -// DBCosmosDBStatusCode returns an attribute KeyValue conforming to the -// "db.cosmosdb.status_code" semantic conventions. It represents the cosmos DB -// status code. -func DBCosmosDBStatusCode(val int) attribute.KeyValue { - return DBCosmosDBStatusCodeKey.Int(val) -} - -// DBCosmosDBSubStatusCode returns an attribute KeyValue conforming to the -// "db.cosmosdb.sub_status_code" semantic conventions. It represents the cosmos -// DB sub status code. -func DBCosmosDBSubStatusCode(val int) attribute.KeyValue { - return DBCosmosDBSubStatusCodeKey.Int(val) -} - -// DBElasticsearchClusterName returns an attribute KeyValue conforming to -// the "db.elasticsearch.cluster.name" semantic conventions. It represents the -// represents the identifier of an Elasticsearch cluster. -func DBElasticsearchClusterName(val string) attribute.KeyValue { - return DBElasticsearchClusterNameKey.String(val) -} - -// DBElasticsearchNodeName returns an attribute KeyValue conforming to the -// "db.elasticsearch.node.name" semantic conventions. It represents the -// represents the human-readable identifier of the node/instance to which a -// request was routed. -func DBElasticsearchNodeName(val string) attribute.KeyValue { - return DBElasticsearchNodeNameKey.String(val) -} - -// DBInstanceID returns an attribute KeyValue conforming to the -// "db.instance.id" semantic conventions. It represents an identifier (address, -// unique name, or any other identifier) of the database instance that is -// executing queries or mutations on the current connection. This is useful in -// cases where the database is running in a clustered environment and the -// instrumentation is able to record the node executing the query. The client -// may obtain this value in databases like MySQL using queries like `select -// @@hostname`. -func DBInstanceID(val string) attribute.KeyValue { - return DBInstanceIDKey.String(val) -} - -// DBJDBCDriverClassname returns an attribute KeyValue conforming to the -// "db.jdbc.driver_classname" semantic conventions. It represents the -// fully-qualified class name of the [Java Database Connectivity -// (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver -// used to connect. -func DBJDBCDriverClassname(val string) attribute.KeyValue { - return DBJDBCDriverClassnameKey.String(val) -} - -// DBMongoDBCollection returns an attribute KeyValue conforming to the -// "db.mongodb.collection" semantic conventions. It represents the MongoDB -// collection being accessed within the database stated in `db.name`. -func DBMongoDBCollection(val string) attribute.KeyValue { - return DBMongoDBCollectionKey.String(val) -} - -// DBMSSQLInstanceName returns an attribute KeyValue conforming to the -// "db.mssql.instance_name" semantic conventions. It represents the Microsoft -// SQL Server [instance -// name](https://docs.microsoft.com/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15) -// connecting to. This name is used to determine the port of a named instance. -func DBMSSQLInstanceName(val string) attribute.KeyValue { - return DBMSSQLInstanceNameKey.String(val) -} - -// DBName returns an attribute KeyValue conforming to the "db.name" semantic -// conventions. It represents the this attribute is used to report the name of -// the database being accessed. For commands that switch the database, this -// should be set to the target database (even if the command fails). -func DBName(val string) attribute.KeyValue { - return DBNameKey.String(val) -} - -// DBOperation returns an attribute KeyValue conforming to the -// "db.operation" semantic conventions. It represents the name of the operation -// being executed, e.g. the [MongoDB command -// name](https://docs.mongodb.com/manual/reference/command/#database-operations) -// such as `findAndModify`, or the SQL keyword. -func DBOperation(val string) attribute.KeyValue { - return DBOperationKey.String(val) -} - -// DBRedisDBIndex returns an attribute KeyValue conforming to the -// "db.redis.database_index" semantic conventions. It represents the index of -// the database being accessed as used in the [`SELECT` -// command](https://redis.io/commands/select), provided as an integer. To be -// used instead of the generic `db.name` attribute. -func DBRedisDBIndex(val int) attribute.KeyValue { - return DBRedisDBIndexKey.Int(val) -} - -// DBSQLTable returns an attribute KeyValue conforming to the "db.sql.table" -// semantic conventions. It represents the name of the primary table that the -// operation is acting upon, including the database name (if applicable). -func DBSQLTable(val string) attribute.KeyValue { - return DBSQLTableKey.String(val) -} - -// DBStatement returns an attribute KeyValue conforming to the -// "db.statement" semantic conventions. It represents the database statement -// being executed. -func DBStatement(val string) attribute.KeyValue { - return DBStatementKey.String(val) -} - -// DBUser returns an attribute KeyValue conforming to the "db.user" semantic -// conventions. It represents the username for accessing the database. -func DBUser(val string) attribute.KeyValue { - return DBUserKey.String(val) -} - -// Describes deprecated HTTP attributes. -const ( - // HTTPFlavorKey is the attribute Key conforming to the "http.flavor" - // semantic conventions. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: deprecated - // Deprecated: use `network.protocol.name` instead. - HTTPFlavorKey = attribute.Key("http.flavor") - - // HTTPMethodKey is the attribute Key conforming to the "http.method" - // semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 'GET', 'POST', 'HEAD' - // Deprecated: use `http.request.method` instead. - HTTPMethodKey = attribute.Key("http.method") - - // HTTPRequestContentLengthKey is the attribute Key conforming to the - // "http.request_content_length" semantic conventions. - // - // Type: int - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 3495 - // Deprecated: use `http.request.header.content-length` instead. - HTTPRequestContentLengthKey = attribute.Key("http.request_content_length") - - // HTTPResponseContentLengthKey is the attribute Key conforming to the - // "http.response_content_length" semantic conventions. - // - // Type: int - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 3495 - // Deprecated: use `http.response.header.content-length` instead. - HTTPResponseContentLengthKey = attribute.Key("http.response_content_length") - - // HTTPSchemeKey is the attribute Key conforming to the "http.scheme" - // semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 'http', 'https' - // Deprecated: use `url.scheme` instead. - HTTPSchemeKey = attribute.Key("http.scheme") - - // HTTPStatusCodeKey is the attribute Key conforming to the - // "http.status_code" semantic conventions. - // - // Type: int - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 200 - // Deprecated: use `http.response.status_code` instead. - HTTPStatusCodeKey = attribute.Key("http.status_code") - - // HTTPTargetKey is the attribute Key conforming to the "http.target" - // semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: '/search?q=OpenTelemetry#SemConv' - // Deprecated: use `url.path` and `url.query` instead. - HTTPTargetKey = attribute.Key("http.target") - - // HTTPURLKey is the attribute Key conforming to the "http.url" semantic - // conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 'https://www.foo.bar/search?q=OpenTelemetry#SemConv' - // Deprecated: use `url.full` instead. - HTTPURLKey = attribute.Key("http.url") - - // HTTPUserAgentKey is the attribute Key conforming to the - // "http.user_agent" semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 'CERN-LineMode/2.15 libwww/2.17b3', 'Mozilla/5.0 (iPhone; CPU - // iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) - // Version/14.1.2 Mobile/15E148 Safari/604.1' - // Deprecated: use `user_agent.original` instead. - HTTPUserAgentKey = attribute.Key("http.user_agent") -) - -var ( - // HTTP/1.0 - // - // Deprecated: use `network.protocol.name` instead. - HTTPFlavorHTTP10 = HTTPFlavorKey.String("1.0") - // HTTP/1.1 - // - // Deprecated: use `network.protocol.name` instead. - HTTPFlavorHTTP11 = HTTPFlavorKey.String("1.1") - // HTTP/2 - // - // Deprecated: use `network.protocol.name` instead. - HTTPFlavorHTTP20 = HTTPFlavorKey.String("2.0") - // HTTP/3 - // - // Deprecated: use `network.protocol.name` instead. - HTTPFlavorHTTP30 = HTTPFlavorKey.String("3.0") - // SPDY protocol - // - // Deprecated: use `network.protocol.name` instead. - HTTPFlavorSPDY = HTTPFlavorKey.String("SPDY") - // QUIC protocol - // - // Deprecated: use `network.protocol.name` instead. - HTTPFlavorQUIC = HTTPFlavorKey.String("QUIC") -) - -// HTTPMethod returns an attribute KeyValue conforming to the "http.method" -// semantic conventions. -// -// Deprecated: use `http.request.method` instead. -func HTTPMethod(val string) attribute.KeyValue { - return HTTPMethodKey.String(val) -} - -// HTTPRequestContentLength returns an attribute KeyValue conforming to the -// "http.request_content_length" semantic conventions. -// -// Deprecated: use `http.request.header.content-length` instead. -func HTTPRequestContentLength(val int) attribute.KeyValue { - return HTTPRequestContentLengthKey.Int(val) -} - -// HTTPResponseContentLength returns an attribute KeyValue conforming to the -// "http.response_content_length" semantic conventions. -// -// Deprecated: use `http.response.header.content-length` instead. -func HTTPResponseContentLength(val int) attribute.KeyValue { - return HTTPResponseContentLengthKey.Int(val) -} - -// HTTPScheme returns an attribute KeyValue conforming to the "http.scheme" -// semantic conventions. -// -// Deprecated: use `url.scheme` instead. -func HTTPScheme(val string) attribute.KeyValue { - return HTTPSchemeKey.String(val) -} - -// HTTPStatusCode returns an attribute KeyValue conforming to the -// "http.status_code" semantic conventions. -// -// Deprecated: use `http.response.status_code` instead. -func HTTPStatusCode(val int) attribute.KeyValue { - return HTTPStatusCodeKey.Int(val) -} - -// HTTPTarget returns an attribute KeyValue conforming to the "http.target" -// semantic conventions. -// -// Deprecated: use `url.path` and `url.query` instead. -func HTTPTarget(val string) attribute.KeyValue { - return HTTPTargetKey.String(val) -} - -// HTTPURL returns an attribute KeyValue conforming to the "http.url" -// semantic conventions. -// -// Deprecated: use `url.full` instead. -func HTTPURL(val string) attribute.KeyValue { - return HTTPURLKey.String(val) -} - -// HTTPUserAgent returns an attribute KeyValue conforming to the -// "http.user_agent" semantic conventions. -// -// Deprecated: use `user_agent.original` instead. -func HTTPUserAgent(val string) attribute.KeyValue { - return HTTPUserAgentKey.String(val) -} - -// These attributes may be used for any network related operation. -const ( - // NetHostNameKey is the attribute Key conforming to the "net.host.name" - // semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 'example.com' - // Deprecated: use `server.address`. - NetHostNameKey = attribute.Key("net.host.name") - - // NetHostPortKey is the attribute Key conforming to the "net.host.port" - // semantic conventions. - // - // Type: int - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 8080 - // Deprecated: use `server.port`. - NetHostPortKey = attribute.Key("net.host.port") - - // NetPeerNameKey is the attribute Key conforming to the "net.peer.name" - // semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 'example.com' - // Deprecated: use `server.address` on client spans and `client.address` on - // server spans. - NetPeerNameKey = attribute.Key("net.peer.name") - - // NetPeerPortKey is the attribute Key conforming to the "net.peer.port" - // semantic conventions. - // - // Type: int - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 8080 - // Deprecated: use `server.port` on client spans and `client.port` on - // server spans. - NetPeerPortKey = attribute.Key("net.peer.port") - - // NetProtocolNameKey is the attribute Key conforming to the - // "net.protocol.name" semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 'amqp', 'http', 'mqtt' - // Deprecated: use `network.protocol.name`. - NetProtocolNameKey = attribute.Key("net.protocol.name") - - // NetProtocolVersionKey is the attribute Key conforming to the - // "net.protocol.version" semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: '3.1.1' - // Deprecated: use `network.protocol.version`. - NetProtocolVersionKey = attribute.Key("net.protocol.version") - - // NetSockFamilyKey is the attribute Key conforming to the - // "net.sock.family" semantic conventions. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: deprecated - // Deprecated: use `network.transport` and `network.type`. - NetSockFamilyKey = attribute.Key("net.sock.family") - - // NetSockHostAddrKey is the attribute Key conforming to the - // "net.sock.host.addr" semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: '/var/my.sock' - // Deprecated: use `network.local.address`. - NetSockHostAddrKey = attribute.Key("net.sock.host.addr") - - // NetSockHostPortKey is the attribute Key conforming to the - // "net.sock.host.port" semantic conventions. - // - // Type: int - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 8080 - // Deprecated: use `network.local.port`. - NetSockHostPortKey = attribute.Key("net.sock.host.port") - - // NetSockPeerAddrKey is the attribute Key conforming to the - // "net.sock.peer.addr" semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: '192.168.0.1' - // Deprecated: use `network.peer.address`. - NetSockPeerAddrKey = attribute.Key("net.sock.peer.addr") - - // NetSockPeerNameKey is the attribute Key conforming to the - // "net.sock.peer.name" semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: '/var/my.sock' - // Deprecated: no replacement at this time. - NetSockPeerNameKey = attribute.Key("net.sock.peer.name") - - // NetSockPeerPortKey is the attribute Key conforming to the - // "net.sock.peer.port" semantic conventions. - // - // Type: int - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 65531 - // Deprecated: use `network.peer.port`. - NetSockPeerPortKey = attribute.Key("net.sock.peer.port") - - // NetTransportKey is the attribute Key conforming to the "net.transport" - // semantic conventions. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: deprecated - // Deprecated: use `network.transport`. - NetTransportKey = attribute.Key("net.transport") -) - -var ( - // IPv4 address - // - // Deprecated: use `network.transport` and `network.type`. - NetSockFamilyInet = NetSockFamilyKey.String("inet") - // IPv6 address - // - // Deprecated: use `network.transport` and `network.type`. - NetSockFamilyInet6 = NetSockFamilyKey.String("inet6") - // Unix domain socket path - // - // Deprecated: use `network.transport` and `network.type`. - NetSockFamilyUnix = NetSockFamilyKey.String("unix") -) - -var ( - // ip_tcp - // - // Deprecated: use `network.transport`. - NetTransportTCP = NetTransportKey.String("ip_tcp") - // ip_udp - // - // Deprecated: use `network.transport`. - NetTransportUDP = NetTransportKey.String("ip_udp") - // Named or anonymous pipe - // - // Deprecated: use `network.transport`. - NetTransportPipe = NetTransportKey.String("pipe") - // In-process communication - // - // Deprecated: use `network.transport`. - NetTransportInProc = NetTransportKey.String("inproc") - // Something else (non IP-based) - // - // Deprecated: use `network.transport`. - NetTransportOther = NetTransportKey.String("other") -) - -// NetHostName returns an attribute KeyValue conforming to the -// "net.host.name" semantic conventions. -// -// Deprecated: use `server.address`. -func NetHostName(val string) attribute.KeyValue { - return NetHostNameKey.String(val) -} - -// NetHostPort returns an attribute KeyValue conforming to the -// "net.host.port" semantic conventions. -// -// Deprecated: use `server.port`. -func NetHostPort(val int) attribute.KeyValue { - return NetHostPortKey.Int(val) -} - -// NetPeerName returns an attribute KeyValue conforming to the -// "net.peer.name" semantic conventions. -// -// Deprecated: use `server.address` on client spans and `client.address` on -// server spans. -func NetPeerName(val string) attribute.KeyValue { - return NetPeerNameKey.String(val) -} - -// NetPeerPort returns an attribute KeyValue conforming to the -// "net.peer.port" semantic conventions. -// -// Deprecated: use `server.port` on client spans and `client.port` on server -// spans. -func NetPeerPort(val int) attribute.KeyValue { - return NetPeerPortKey.Int(val) -} - -// NetProtocolName returns an attribute KeyValue conforming to the -// "net.protocol.name" semantic conventions. -// -// Deprecated: use `network.protocol.name`. -func NetProtocolName(val string) attribute.KeyValue { - return NetProtocolNameKey.String(val) -} - -// NetProtocolVersion returns an attribute KeyValue conforming to the -// "net.protocol.version" semantic conventions. -// -// Deprecated: use `network.protocol.version`. -func NetProtocolVersion(val string) attribute.KeyValue { - return NetProtocolVersionKey.String(val) -} - -// NetSockHostAddr returns an attribute KeyValue conforming to the -// "net.sock.host.addr" semantic conventions. -// -// Deprecated: use `network.local.address`. -func NetSockHostAddr(val string) attribute.KeyValue { - return NetSockHostAddrKey.String(val) -} - -// NetSockHostPort returns an attribute KeyValue conforming to the -// "net.sock.host.port" semantic conventions. -// -// Deprecated: use `network.local.port`. -func NetSockHostPort(val int) attribute.KeyValue { - return NetSockHostPortKey.Int(val) -} - -// NetSockPeerAddr returns an attribute KeyValue conforming to the -// "net.sock.peer.addr" semantic conventions. -// -// Deprecated: use `network.peer.address`. -func NetSockPeerAddr(val string) attribute.KeyValue { - return NetSockPeerAddrKey.String(val) -} - -// NetSockPeerName returns an attribute KeyValue conforming to the -// "net.sock.peer.name" semantic conventions. -// -// Deprecated: no replacement at this time. -func NetSockPeerName(val string) attribute.KeyValue { - return NetSockPeerNameKey.String(val) -} - -// NetSockPeerPort returns an attribute KeyValue conforming to the -// "net.sock.peer.port" semantic conventions. -// -// Deprecated: use `network.peer.port`. -func NetSockPeerPort(val int) attribute.KeyValue { - return NetSockPeerPortKey.Int(val) -} - -// These attributes may be used to describe the receiver of a network -// exchange/packet. These should be used when there is no client/server -// relationship between the two sides, or when that relationship is unknown. -// This covers low-level network interactions (e.g. packet tracing) where you -// don't know if there was a connection or which side initiated it. This also -// covers unidirectional UDP flows and peer-to-peer communication where the -// "user-facing" surface of the protocol / API doesn't expose a clear notion of -// client and server. -const ( - // DestinationAddressKey is the attribute Key conforming to the - // "destination.address" semantic conventions. It represents the - // destination address - domain name if available without reverse DNS - // lookup; otherwise, IP address or Unix domain socket name. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'destination.example.com', '10.1.2.80', '/tmp/my.sock' - // Note: When observed from the source side, and when communicating through - // an intermediary, `destination.address` SHOULD represent the destination - // address behind any intermediaries, for example proxies, if it's - // available. - DestinationAddressKey = attribute.Key("destination.address") - - // DestinationPortKey is the attribute Key conforming to the - // "destination.port" semantic conventions. It represents the destination - // port number - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 3389, 2888 - DestinationPortKey = attribute.Key("destination.port") -) - -// DestinationAddress returns an attribute KeyValue conforming to the -// "destination.address" semantic conventions. It represents the destination -// address - domain name if available without reverse DNS lookup; otherwise, IP -// address or Unix domain socket name. -func DestinationAddress(val string) attribute.KeyValue { - return DestinationAddressKey.String(val) -} - -// DestinationPort returns an attribute KeyValue conforming to the -// "destination.port" semantic conventions. It represents the destination port -// number -func DestinationPort(val int) attribute.KeyValue { - return DestinationPortKey.Int(val) -} - -// These attributes may be used for any disk related operation. -const ( - // DiskIoDirectionKey is the attribute Key conforming to the - // "disk.io.direction" semantic conventions. It represents the disk IO - // operation direction. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'read' - DiskIoDirectionKey = attribute.Key("disk.io.direction") -) - -var ( - // read - DiskIoDirectionRead = DiskIoDirectionKey.String("read") - // write - DiskIoDirectionWrite = DiskIoDirectionKey.String("write") -) - -// The shared attributes used to report an error. -const ( - // ErrorTypeKey is the attribute Key conforming to the "error.type" - // semantic conventions. It represents the describes a class of error the - // operation ended with. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - // Examples: 'timeout', 'java.net.UnknownHostException', - // 'server_certificate_invalid', '500' - // Note: The `error.type` SHOULD be predictable and SHOULD have low - // cardinality. - // Instrumentations SHOULD document the list of errors they report. - // - // The cardinality of `error.type` within one instrumentation library - // SHOULD be low. - // Telemetry consumers that aggregate data from multiple instrumentation - // libraries and applications - // should be prepared for `error.type` to have high cardinality at query - // time when no - // additional filters are applied. - // - // If the operation has completed successfully, instrumentations SHOULD NOT - // set `error.type`. - // - // If a specific domain defines its own set of error identifiers (such as - // HTTP or gRPC status codes), - // it's RECOMMENDED to: - // - // * Use a domain-specific attribute - // * Set `error.type` to capture all errors, regardless of whether they are - // defined within the domain-specific set or not. - ErrorTypeKey = attribute.Key("error.type") -) - -var ( - // A fallback error value to be used when the instrumentation doesn't define a custom value - ErrorTypeOther = ErrorTypeKey.String("_OTHER") -) - -// The shared attributes used to report a single exception associated with a -// span or log. -const ( - // ExceptionEscapedKey is the attribute Key conforming to the - // "exception.escaped" semantic conventions. It represents the sHOULD be - // set to true if the exception event is recorded at a point where it is - // known that the exception is escaping the scope of the span. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - // Note: An exception is considered to have escaped (or left) the scope of - // a span, - // if that span is ended while the exception is still logically "in - // flight". - // This may be actually "in flight" in some languages (e.g. if the - // exception - // is passed to a Context manager's `__exit__` method in Python) but will - // usually be caught at the point of recording the exception in most - // languages. - // - // It is usually not possible to determine at the point where an exception - // is thrown - // whether it will escape the scope of a span. - // However, it is trivial to know that an exception - // will escape, if one checks for an active exception just before ending - // the span, - // as done in the [example for recording span - // exceptions](#recording-an-exception). - // - // It follows that an exception may still escape the scope of the span - // even if the `exception.escaped` attribute was not set or set to false, - // since the event might have been recorded at a time where it was not - // clear whether the exception will escape. - ExceptionEscapedKey = attribute.Key("exception.escaped") - - // ExceptionMessageKey is the attribute Key conforming to the - // "exception.message" semantic conventions. It represents the exception - // message. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Division by zero', "Can't convert 'int' object to str - // implicitly" - ExceptionMessageKey = attribute.Key("exception.message") - - // ExceptionStacktraceKey is the attribute Key conforming to the - // "exception.stacktrace" semantic conventions. It represents a stacktrace - // as a string in the natural representation for the language runtime. The - // representation is to be determined and documented by each language SIG. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Exception in thread "main" java.lang.RuntimeException: Test - // exception\\n at ' - // 'com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\n at ' - // 'com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\n at ' - // 'com.example.GenerateTrace.main(GenerateTrace.java:5)' - ExceptionStacktraceKey = attribute.Key("exception.stacktrace") - - // ExceptionTypeKey is the attribute Key conforming to the "exception.type" - // semantic conventions. It represents the type of the exception (its - // fully-qualified class name, if applicable). The dynamic type of the - // exception should be preferred over the static type in languages that - // support it. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'java.net.ConnectException', 'OSError' - ExceptionTypeKey = attribute.Key("exception.type") -) - -// ExceptionEscaped returns an attribute KeyValue conforming to the -// "exception.escaped" semantic conventions. It represents the sHOULD be set to -// true if the exception event is recorded at a point where it is known that -// the exception is escaping the scope of the span. -func ExceptionEscaped(val bool) attribute.KeyValue { - return ExceptionEscapedKey.Bool(val) -} - -// ExceptionMessage returns an attribute KeyValue conforming to the -// "exception.message" semantic conventions. It represents the exception -// message. -func ExceptionMessage(val string) attribute.KeyValue { - return ExceptionMessageKey.String(val) -} - -// ExceptionStacktrace returns an attribute KeyValue conforming to the -// "exception.stacktrace" semantic conventions. It represents a stacktrace as a -// string in the natural representation for the language runtime. The -// representation is to be determined and documented by each language SIG. -func ExceptionStacktrace(val string) attribute.KeyValue { - return ExceptionStacktraceKey.String(val) -} - -// ExceptionType returns an attribute KeyValue conforming to the -// "exception.type" semantic conventions. It represents the type of the -// exception (its fully-qualified class name, if applicable). The dynamic type -// of the exception should be preferred over the static type in languages that -// support it. -func ExceptionType(val string) attribute.KeyValue { - return ExceptionTypeKey.String(val) -} - -// Semantic convention attributes in the HTTP namespace. -const ( - // HTTPRequestBodySizeKey is the attribute Key conforming to the - // "http.request.body.size" semantic conventions. It represents the size of - // the request payload body in bytes. This is the number of bytes - // transferred excluding headers and is often, but not always, present as - // the - // [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) - // header. For requests using transport encoding, this should be the - // compressed size. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 3495 - HTTPRequestBodySizeKey = attribute.Key("http.request.body.size") - - // HTTPRequestMethodKey is the attribute Key conforming to the - // "http.request.method" semantic conventions. It represents the hTTP - // request method. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - // Examples: 'GET', 'POST', 'HEAD' - // Note: HTTP request method value SHOULD be "known" to the - // instrumentation. - // By default, this convention defines "known" methods as the ones listed - // in [RFC9110](https://www.rfc-editor.org/rfc/rfc9110.html#name-methods) - // and the PATCH method defined in - // [RFC5789](https://www.rfc-editor.org/rfc/rfc5789.html). - // - // If the HTTP request method is not known to instrumentation, it MUST set - // the `http.request.method` attribute to `_OTHER`. - // - // If the HTTP instrumentation could end up converting valid HTTP request - // methods to `_OTHER`, then it MUST provide a way to override - // the list of known HTTP methods. If this override is done via environment - // variable, then the environment variable MUST be named - // OTEL_INSTRUMENTATION_HTTP_KNOWN_METHODS and support a comma-separated - // list of case-sensitive known HTTP methods - // (this list MUST be a full override of the default known method, it is - // not a list of known methods in addition to the defaults). - // - // HTTP method names are case-sensitive and `http.request.method` attribute - // value MUST match a known HTTP method name exactly. - // Instrumentations for specific web frameworks that consider HTTP methods - // to be case insensitive, SHOULD populate a canonical equivalent. - // Tracing instrumentations that do so, MUST also set - // `http.request.method_original` to the original value. - HTTPRequestMethodKey = attribute.Key("http.request.method") - - // HTTPRequestMethodOriginalKey is the attribute Key conforming to the - // "http.request.method_original" semantic conventions. It represents the - // original HTTP method sent by the client in the request line. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'GeT', 'ACL', 'foo' - HTTPRequestMethodOriginalKey = attribute.Key("http.request.method_original") - - // HTTPRequestResendCountKey is the attribute Key conforming to the - // "http.request.resend_count" semantic conventions. It represents the - // ordinal number of request resending attempt (for any reason, including - // redirects). - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 3 - // Note: The resend count SHOULD be updated each time an HTTP request gets - // resent by the client, regardless of what was the cause of the resending - // (e.g. redirection, authorization failure, 503 Server Unavailable, - // network issues, or any other). - HTTPRequestResendCountKey = attribute.Key("http.request.resend_count") - - // HTTPResponseBodySizeKey is the attribute Key conforming to the - // "http.response.body.size" semantic conventions. It represents the size - // of the response payload body in bytes. This is the number of bytes - // transferred excluding headers and is often, but not always, present as - // the - // [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) - // header. For requests using transport encoding, this should be the - // compressed size. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 3495 - HTTPResponseBodySizeKey = attribute.Key("http.response.body.size") - - // HTTPResponseStatusCodeKey is the attribute Key conforming to the - // "http.response.status_code" semantic conventions. It represents the - // [HTTP response status - // code](https://tools.ietf.org/html/rfc7231#section-6). - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 200 - HTTPResponseStatusCodeKey = attribute.Key("http.response.status_code") - - // HTTPRouteKey is the attribute Key conforming to the "http.route" - // semantic conventions. It represents the matched route, that is, the path - // template in the format used by the respective server framework. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '/users/:userID?', '{controller}/{action}/{id?}' - // Note: MUST NOT be populated when this is not supported by the HTTP - // server framework as the route attribute should have low-cardinality and - // the URI path can NOT substitute it. - // SHOULD include the [application - // root](/docs/http/http-spans.md#http-server-definitions) if there is one. - HTTPRouteKey = attribute.Key("http.route") -) - -var ( - // CONNECT method - HTTPRequestMethodConnect = HTTPRequestMethodKey.String("CONNECT") - // DELETE method - HTTPRequestMethodDelete = HTTPRequestMethodKey.String("DELETE") - // GET method - HTTPRequestMethodGet = HTTPRequestMethodKey.String("GET") - // HEAD method - HTTPRequestMethodHead = HTTPRequestMethodKey.String("HEAD") - // OPTIONS method - HTTPRequestMethodOptions = HTTPRequestMethodKey.String("OPTIONS") - // PATCH method - HTTPRequestMethodPatch = HTTPRequestMethodKey.String("PATCH") - // POST method - HTTPRequestMethodPost = HTTPRequestMethodKey.String("POST") - // PUT method - HTTPRequestMethodPut = HTTPRequestMethodKey.String("PUT") - // TRACE method - HTTPRequestMethodTrace = HTTPRequestMethodKey.String("TRACE") - // Any HTTP method that the instrumentation has no prior knowledge of - HTTPRequestMethodOther = HTTPRequestMethodKey.String("_OTHER") -) - -// HTTPRequestBodySize returns an attribute KeyValue conforming to the -// "http.request.body.size" semantic conventions. It represents the size of the -// request payload body in bytes. This is the number of bytes transferred -// excluding headers and is often, but not always, present as the -// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) -// header. For requests using transport encoding, this should be the compressed -// size. -func HTTPRequestBodySize(val int) attribute.KeyValue { - return HTTPRequestBodySizeKey.Int(val) -} - -// HTTPRequestMethodOriginal returns an attribute KeyValue conforming to the -// "http.request.method_original" semantic conventions. It represents the -// original HTTP method sent by the client in the request line. -func HTTPRequestMethodOriginal(val string) attribute.KeyValue { - return HTTPRequestMethodOriginalKey.String(val) -} - -// HTTPRequestResendCount returns an attribute KeyValue conforming to the -// "http.request.resend_count" semantic conventions. It represents the ordinal -// number of request resending attempt (for any reason, including redirects). -func HTTPRequestResendCount(val int) attribute.KeyValue { - return HTTPRequestResendCountKey.Int(val) -} - -// HTTPResponseBodySize returns an attribute KeyValue conforming to the -// "http.response.body.size" semantic conventions. It represents the size of -// the response payload body in bytes. This is the number of bytes transferred -// excluding headers and is often, but not always, present as the -// [Content-Length](https://www.rfc-editor.org/rfc/rfc9110.html#field.content-length) -// header. For requests using transport encoding, this should be the compressed -// size. -func HTTPResponseBodySize(val int) attribute.KeyValue { - return HTTPResponseBodySizeKey.Int(val) -} - -// HTTPResponseStatusCode returns an attribute KeyValue conforming to the -// "http.response.status_code" semantic conventions. It represents the [HTTP -// response status code](https://tools.ietf.org/html/rfc7231#section-6). -func HTTPResponseStatusCode(val int) attribute.KeyValue { - return HTTPResponseStatusCodeKey.Int(val) -} - -// HTTPRoute returns an attribute KeyValue conforming to the "http.route" -// semantic conventions. It represents the matched route, that is, the path -// template in the format used by the respective server framework. -func HTTPRoute(val string) attribute.KeyValue { - return HTTPRouteKey.String(val) -} - -// Attributes describing telemetry around messaging systems and messaging -// activities. -const ( - // MessagingBatchMessageCountKey is the attribute Key conforming to the - // "messaging.batch.message_count" semantic conventions. It represents the - // number of messages sent, received, or processed in the scope of the - // batching operation. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 0, 1, 2 - // Note: Instrumentations SHOULD NOT set `messaging.batch.message_count` on - // spans that operate with a single message. When a messaging client - // library supports both batch and single-message API for the same - // operation, instrumentations SHOULD use `messaging.batch.message_count` - // for batching APIs and SHOULD NOT use it for single-message APIs. - MessagingBatchMessageCountKey = attribute.Key("messaging.batch.message_count") - - // MessagingClientIDKey is the attribute Key conforming to the - // "messaging.client_id" semantic conventions. It represents a unique - // identifier for the client that consumes or produces a message. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'client-5', 'myhost@8742@s8083jm' - MessagingClientIDKey = attribute.Key("messaging.client_id") - - // MessagingDestinationAnonymousKey is the attribute Key conforming to the - // "messaging.destination.anonymous" semantic conventions. It represents a - // boolean that is true if the message destination is anonymous (could be - // unnamed or have auto-generated name). - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - MessagingDestinationAnonymousKey = attribute.Key("messaging.destination.anonymous") - - // MessagingDestinationNameKey is the attribute Key conforming to the - // "messaging.destination.name" semantic conventions. It represents the - // message destination name - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'MyQueue', 'MyTopic' - // Note: Destination name SHOULD uniquely identify a specific queue, topic - // or other entity within the broker. If - // the broker doesn't have such notion, the destination name SHOULD - // uniquely identify the broker. - MessagingDestinationNameKey = attribute.Key("messaging.destination.name") - - // MessagingDestinationTemplateKey is the attribute Key conforming to the - // "messaging.destination.template" semantic conventions. It represents the - // low cardinality representation of the messaging destination name - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '/customers/{customerID}' - // Note: Destination names could be constructed from templates. An example - // would be a destination name involving a user name or product id. - // Although the destination name in this case is of high cardinality, the - // underlying template is of low cardinality and can be effectively used - // for grouping and aggregation. - MessagingDestinationTemplateKey = attribute.Key("messaging.destination.template") - - // MessagingDestinationTemporaryKey is the attribute Key conforming to the - // "messaging.destination.temporary" semantic conventions. It represents a - // boolean that is true if the message destination is temporary and might - // not exist anymore after messages are processed. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - MessagingDestinationTemporaryKey = attribute.Key("messaging.destination.temporary") - - // MessagingDestinationPublishAnonymousKey is the attribute Key conforming - // to the "messaging.destination_publish.anonymous" semantic conventions. - // It represents a boolean that is true if the publish message destination - // is anonymous (could be unnamed or have auto-generated name). - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - MessagingDestinationPublishAnonymousKey = attribute.Key("messaging.destination_publish.anonymous") - - // MessagingDestinationPublishNameKey is the attribute Key conforming to - // the "messaging.destination_publish.name" semantic conventions. It - // represents the name of the original destination the message was - // published to - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'MyQueue', 'MyTopic' - // Note: The name SHOULD uniquely identify a specific queue, topic, or - // other entity within the broker. If - // the broker doesn't have such notion, the original destination name - // SHOULD uniquely identify the broker. - MessagingDestinationPublishNameKey = attribute.Key("messaging.destination_publish.name") - - // MessagingGCPPubsubMessageOrderingKeyKey is the attribute Key conforming - // to the "messaging.gcp_pubsub.message.ordering_key" semantic conventions. - // It represents the ordering key for a given message. If the attribute is - // not present, the message does not have an ordering key. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'ordering_key' - MessagingGCPPubsubMessageOrderingKeyKey = attribute.Key("messaging.gcp_pubsub.message.ordering_key") - - // MessagingKafkaConsumerGroupKey is the attribute Key conforming to the - // "messaging.kafka.consumer.group" semantic conventions. It represents the - // name of the Kafka Consumer Group that is handling the message. Only - // applies to consumers, not producers. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'my-group' - MessagingKafkaConsumerGroupKey = attribute.Key("messaging.kafka.consumer.group") - - // MessagingKafkaDestinationPartitionKey is the attribute Key conforming to - // the "messaging.kafka.destination.partition" semantic conventions. It - // represents the partition the message is sent to. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 2 - MessagingKafkaDestinationPartitionKey = attribute.Key("messaging.kafka.destination.partition") - - // MessagingKafkaMessageKeyKey is the attribute Key conforming to the - // "messaging.kafka.message.key" semantic conventions. It represents the - // message keys in Kafka are used for grouping alike messages to ensure - // they're processed on the same partition. They differ from - // `messaging.message.id` in that they're not unique. If the key is `null`, - // the attribute MUST NOT be set. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'myKey' - // Note: If the key type is not string, it's string representation has to - // be supplied for the attribute. If the key has no unambiguous, canonical - // string form, don't include its value. - MessagingKafkaMessageKeyKey = attribute.Key("messaging.kafka.message.key") - - // MessagingKafkaMessageOffsetKey is the attribute Key conforming to the - // "messaging.kafka.message.offset" semantic conventions. It represents the - // offset of a record in the corresponding Kafka partition. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 42 - MessagingKafkaMessageOffsetKey = attribute.Key("messaging.kafka.message.offset") - - // MessagingKafkaMessageTombstoneKey is the attribute Key conforming to the - // "messaging.kafka.message.tombstone" semantic conventions. It represents - // a boolean that is true if the message is a tombstone. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - MessagingKafkaMessageTombstoneKey = attribute.Key("messaging.kafka.message.tombstone") - - // MessagingMessageBodySizeKey is the attribute Key conforming to the - // "messaging.message.body.size" semantic conventions. It represents the - // size of the message body in bytes. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1439 - // Note: This can refer to both the compressed or uncompressed body size. - // If both sizes are known, the uncompressed - // body size should be used. - MessagingMessageBodySizeKey = attribute.Key("messaging.message.body.size") - - // MessagingMessageConversationIDKey is the attribute Key conforming to the - // "messaging.message.conversation_id" semantic conventions. It represents - // the conversation ID identifying the conversation to which the message - // belongs, represented as a string. Sometimes called "Correlation ID". - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'MyConversationID' - MessagingMessageConversationIDKey = attribute.Key("messaging.message.conversation_id") - - // MessagingMessageEnvelopeSizeKey is the attribute Key conforming to the - // "messaging.message.envelope.size" semantic conventions. It represents - // the size of the message body and metadata in bytes. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 2738 - // Note: This can refer to both the compressed or uncompressed size. If - // both sizes are known, the uncompressed - // size should be used. - MessagingMessageEnvelopeSizeKey = attribute.Key("messaging.message.envelope.size") - - // MessagingMessageIDKey is the attribute Key conforming to the - // "messaging.message.id" semantic conventions. It represents a value used - // by the messaging system as an identifier for the message, represented as - // a string. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '452a7c7c7c7048c2f887f61572b18fc2' - MessagingMessageIDKey = attribute.Key("messaging.message.id") - - // MessagingOperationKey is the attribute Key conforming to the - // "messaging.operation" semantic conventions. It represents a string - // identifying the kind of messaging operation. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Note: If a custom value is used, it MUST be of low cardinality. - MessagingOperationKey = attribute.Key("messaging.operation") - - // MessagingRabbitmqDestinationRoutingKeyKey is the attribute Key - // conforming to the "messaging.rabbitmq.destination.routing_key" semantic - // conventions. It represents the rabbitMQ message routing key. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'myKey' - MessagingRabbitmqDestinationRoutingKeyKey = attribute.Key("messaging.rabbitmq.destination.routing_key") - - // MessagingRocketmqClientGroupKey is the attribute Key conforming to the - // "messaging.rocketmq.client_group" semantic conventions. It represents - // the name of the RocketMQ producer/consumer group that is handling the - // message. The client type is identified by the SpanKind. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'myConsumerGroup' - MessagingRocketmqClientGroupKey = attribute.Key("messaging.rocketmq.client_group") - - // MessagingRocketmqConsumptionModelKey is the attribute Key conforming to - // the "messaging.rocketmq.consumption_model" semantic conventions. It - // represents the model of message consumption. This only applies to - // consumer spans. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - MessagingRocketmqConsumptionModelKey = attribute.Key("messaging.rocketmq.consumption_model") - - // MessagingRocketmqMessageDelayTimeLevelKey is the attribute Key - // conforming to the "messaging.rocketmq.message.delay_time_level" semantic - // conventions. It represents the delay time level for delay message, which - // determines the message delay time. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 3 - MessagingRocketmqMessageDelayTimeLevelKey = attribute.Key("messaging.rocketmq.message.delay_time_level") - - // MessagingRocketmqMessageDeliveryTimestampKey is the attribute Key - // conforming to the "messaging.rocketmq.message.delivery_timestamp" - // semantic conventions. It represents the timestamp in milliseconds that - // the delay message is expected to be delivered to consumer. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1665987217045 - MessagingRocketmqMessageDeliveryTimestampKey = attribute.Key("messaging.rocketmq.message.delivery_timestamp") - - // MessagingRocketmqMessageGroupKey is the attribute Key conforming to the - // "messaging.rocketmq.message.group" semantic conventions. It represents - // the it is essential for FIFO message. Messages that belong to the same - // message group are always processed one by one within the same consumer - // group. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'myMessageGroup' - MessagingRocketmqMessageGroupKey = attribute.Key("messaging.rocketmq.message.group") - - // MessagingRocketmqMessageKeysKey is the attribute Key conforming to the - // "messaging.rocketmq.message.keys" semantic conventions. It represents - // the key(s) of message, another way to mark message besides message id. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'keyA', 'keyB' - MessagingRocketmqMessageKeysKey = attribute.Key("messaging.rocketmq.message.keys") - - // MessagingRocketmqMessageTagKey is the attribute Key conforming to the - // "messaging.rocketmq.message.tag" semantic conventions. It represents the - // secondary classifier of message besides topic. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'tagA' - MessagingRocketmqMessageTagKey = attribute.Key("messaging.rocketmq.message.tag") - - // MessagingRocketmqMessageTypeKey is the attribute Key conforming to the - // "messaging.rocketmq.message.type" semantic conventions. It represents - // the type of message. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - MessagingRocketmqMessageTypeKey = attribute.Key("messaging.rocketmq.message.type") - - // MessagingRocketmqNamespaceKey is the attribute Key conforming to the - // "messaging.rocketmq.namespace" semantic conventions. It represents the - // namespace of RocketMQ resources, resources in different namespaces are - // individual. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'myNamespace' - MessagingRocketmqNamespaceKey = attribute.Key("messaging.rocketmq.namespace") - - // MessagingSystemKey is the attribute Key conforming to the - // "messaging.system" semantic conventions. It represents an identifier for - // the messaging system being used. See below for a list of well-known - // identifiers. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - MessagingSystemKey = attribute.Key("messaging.system") -) - -var ( - // One or more messages are provided for publishing to an intermediary. If a single message is published, the context of the "Publish" span can be used as the creation context and no "Create" span needs to be created - MessagingOperationPublish = MessagingOperationKey.String("publish") - // A message is created. "Create" spans always refer to a single message and are used to provide a unique creation context for messages in batch publishing scenarios - MessagingOperationCreate = MessagingOperationKey.String("create") - // One or more messages are requested by a consumer. This operation refers to pull-based scenarios, where consumers explicitly call methods of messaging SDKs to receive messages - MessagingOperationReceive = MessagingOperationKey.String("receive") - // One or more messages are passed to a consumer. This operation refers to push-based scenarios, where consumer register callbacks which get called by messaging SDKs - MessagingOperationDeliver = MessagingOperationKey.String("deliver") -) - -var ( - // Clustering consumption model - MessagingRocketmqConsumptionModelClustering = MessagingRocketmqConsumptionModelKey.String("clustering") - // Broadcasting consumption model - MessagingRocketmqConsumptionModelBroadcasting = MessagingRocketmqConsumptionModelKey.String("broadcasting") -) - -var ( - // Normal message - MessagingRocketmqMessageTypeNormal = MessagingRocketmqMessageTypeKey.String("normal") - // FIFO message - MessagingRocketmqMessageTypeFifo = MessagingRocketmqMessageTypeKey.String("fifo") - // Delay message - MessagingRocketmqMessageTypeDelay = MessagingRocketmqMessageTypeKey.String("delay") - // Transaction message - MessagingRocketmqMessageTypeTransaction = MessagingRocketmqMessageTypeKey.String("transaction") -) - -var ( - // Apache ActiveMQ - MessagingSystemActivemq = MessagingSystemKey.String("activemq") - // Amazon Simple Queue Service (SQS) - MessagingSystemAWSSqs = MessagingSystemKey.String("aws_sqs") - // Azure Event Grid - MessagingSystemAzureEventgrid = MessagingSystemKey.String("azure_eventgrid") - // Azure Event Hubs - MessagingSystemAzureEventhubs = MessagingSystemKey.String("azure_eventhubs") - // Azure Service Bus - MessagingSystemAzureServicebus = MessagingSystemKey.String("azure_servicebus") - // Google Cloud Pub/Sub - MessagingSystemGCPPubsub = MessagingSystemKey.String("gcp_pubsub") - // Java Message Service - MessagingSystemJms = MessagingSystemKey.String("jms") - // Apache Kafka - MessagingSystemKafka = MessagingSystemKey.String("kafka") - // RabbitMQ - MessagingSystemRabbitmq = MessagingSystemKey.String("rabbitmq") - // Apache RocketMQ - MessagingSystemRocketmq = MessagingSystemKey.String("rocketmq") -) - -// MessagingBatchMessageCount returns an attribute KeyValue conforming to -// the "messaging.batch.message_count" semantic conventions. It represents the -// number of messages sent, received, or processed in the scope of the batching -// operation. -func MessagingBatchMessageCount(val int) attribute.KeyValue { - return MessagingBatchMessageCountKey.Int(val) -} - -// MessagingClientID returns an attribute KeyValue conforming to the -// "messaging.client_id" semantic conventions. It represents a unique -// identifier for the client that consumes or produces a message. -func MessagingClientID(val string) attribute.KeyValue { - return MessagingClientIDKey.String(val) -} - -// MessagingDestinationAnonymous returns an attribute KeyValue conforming to -// the "messaging.destination.anonymous" semantic conventions. It represents a -// boolean that is true if the message destination is anonymous (could be -// unnamed or have auto-generated name). -func MessagingDestinationAnonymous(val bool) attribute.KeyValue { - return MessagingDestinationAnonymousKey.Bool(val) -} - -// MessagingDestinationName returns an attribute KeyValue conforming to the -// "messaging.destination.name" semantic conventions. It represents the message -// destination name -func MessagingDestinationName(val string) attribute.KeyValue { - return MessagingDestinationNameKey.String(val) -} - -// MessagingDestinationTemplate returns an attribute KeyValue conforming to -// the "messaging.destination.template" semantic conventions. It represents the -// low cardinality representation of the messaging destination name -func MessagingDestinationTemplate(val string) attribute.KeyValue { - return MessagingDestinationTemplateKey.String(val) -} - -// MessagingDestinationTemporary returns an attribute KeyValue conforming to -// the "messaging.destination.temporary" semantic conventions. It represents a -// boolean that is true if the message destination is temporary and might not -// exist anymore after messages are processed. -func MessagingDestinationTemporary(val bool) attribute.KeyValue { - return MessagingDestinationTemporaryKey.Bool(val) -} - -// MessagingDestinationPublishAnonymous returns an attribute KeyValue -// conforming to the "messaging.destination_publish.anonymous" semantic -// conventions. It represents a boolean that is true if the publish message -// destination is anonymous (could be unnamed or have auto-generated name). -func MessagingDestinationPublishAnonymous(val bool) attribute.KeyValue { - return MessagingDestinationPublishAnonymousKey.Bool(val) -} - -// MessagingDestinationPublishName returns an attribute KeyValue conforming -// to the "messaging.destination_publish.name" semantic conventions. It -// represents the name of the original destination the message was published to -func MessagingDestinationPublishName(val string) attribute.KeyValue { - return MessagingDestinationPublishNameKey.String(val) -} - -// MessagingGCPPubsubMessageOrderingKey returns an attribute KeyValue -// conforming to the "messaging.gcp_pubsub.message.ordering_key" semantic -// conventions. It represents the ordering key for a given message. If the -// attribute is not present, the message does not have an ordering key. -func MessagingGCPPubsubMessageOrderingKey(val string) attribute.KeyValue { - return MessagingGCPPubsubMessageOrderingKeyKey.String(val) -} - -// MessagingKafkaConsumerGroup returns an attribute KeyValue conforming to -// the "messaging.kafka.consumer.group" semantic conventions. It represents the -// name of the Kafka Consumer Group that is handling the message. Only applies -// to consumers, not producers. -func MessagingKafkaConsumerGroup(val string) attribute.KeyValue { - return MessagingKafkaConsumerGroupKey.String(val) -} - -// MessagingKafkaDestinationPartition returns an attribute KeyValue -// conforming to the "messaging.kafka.destination.partition" semantic -// conventions. It represents the partition the message is sent to. -func MessagingKafkaDestinationPartition(val int) attribute.KeyValue { - return MessagingKafkaDestinationPartitionKey.Int(val) -} - -// MessagingKafkaMessageKey returns an attribute KeyValue conforming to the -// "messaging.kafka.message.key" semantic conventions. It represents the -// message keys in Kafka are used for grouping alike messages to ensure they're -// processed on the same partition. They differ from `messaging.message.id` in -// that they're not unique. If the key is `null`, the attribute MUST NOT be -// set. -func MessagingKafkaMessageKey(val string) attribute.KeyValue { - return MessagingKafkaMessageKeyKey.String(val) -} - -// MessagingKafkaMessageOffset returns an attribute KeyValue conforming to -// the "messaging.kafka.message.offset" semantic conventions. It represents the -// offset of a record in the corresponding Kafka partition. -func MessagingKafkaMessageOffset(val int) attribute.KeyValue { - return MessagingKafkaMessageOffsetKey.Int(val) -} - -// MessagingKafkaMessageTombstone returns an attribute KeyValue conforming -// to the "messaging.kafka.message.tombstone" semantic conventions. It -// represents a boolean that is true if the message is a tombstone. -func MessagingKafkaMessageTombstone(val bool) attribute.KeyValue { - return MessagingKafkaMessageTombstoneKey.Bool(val) -} - -// MessagingMessageBodySize returns an attribute KeyValue conforming to the -// "messaging.message.body.size" semantic conventions. It represents the size -// of the message body in bytes. -func MessagingMessageBodySize(val int) attribute.KeyValue { - return MessagingMessageBodySizeKey.Int(val) -} - -// MessagingMessageConversationID returns an attribute KeyValue conforming -// to the "messaging.message.conversation_id" semantic conventions. It -// represents the conversation ID identifying the conversation to which the -// message belongs, represented as a string. Sometimes called "Correlation ID". -func MessagingMessageConversationID(val string) attribute.KeyValue { - return MessagingMessageConversationIDKey.String(val) -} - -// MessagingMessageEnvelopeSize returns an attribute KeyValue conforming to -// the "messaging.message.envelope.size" semantic conventions. It represents -// the size of the message body and metadata in bytes. -func MessagingMessageEnvelopeSize(val int) attribute.KeyValue { - return MessagingMessageEnvelopeSizeKey.Int(val) -} - -// MessagingMessageID returns an attribute KeyValue conforming to the -// "messaging.message.id" semantic conventions. It represents a value used by -// the messaging system as an identifier for the message, represented as a -// string. -func MessagingMessageID(val string) attribute.KeyValue { - return MessagingMessageIDKey.String(val) -} - -// MessagingRabbitmqDestinationRoutingKey returns an attribute KeyValue -// conforming to the "messaging.rabbitmq.destination.routing_key" semantic -// conventions. It represents the rabbitMQ message routing key. -func MessagingRabbitmqDestinationRoutingKey(val string) attribute.KeyValue { - return MessagingRabbitmqDestinationRoutingKeyKey.String(val) -} - -// MessagingRocketmqClientGroup returns an attribute KeyValue conforming to -// the "messaging.rocketmq.client_group" semantic conventions. It represents -// the name of the RocketMQ producer/consumer group that is handling the -// message. The client type is identified by the SpanKind. -func MessagingRocketmqClientGroup(val string) attribute.KeyValue { - return MessagingRocketmqClientGroupKey.String(val) -} - -// MessagingRocketmqMessageDelayTimeLevel returns an attribute KeyValue -// conforming to the "messaging.rocketmq.message.delay_time_level" semantic -// conventions. It represents the delay time level for delay message, which -// determines the message delay time. -func MessagingRocketmqMessageDelayTimeLevel(val int) attribute.KeyValue { - return MessagingRocketmqMessageDelayTimeLevelKey.Int(val) -} - -// MessagingRocketmqMessageDeliveryTimestamp returns an attribute KeyValue -// conforming to the "messaging.rocketmq.message.delivery_timestamp" semantic -// conventions. It represents the timestamp in milliseconds that the delay -// message is expected to be delivered to consumer. -func MessagingRocketmqMessageDeliveryTimestamp(val int) attribute.KeyValue { - return MessagingRocketmqMessageDeliveryTimestampKey.Int(val) -} - -// MessagingRocketmqMessageGroup returns an attribute KeyValue conforming to -// the "messaging.rocketmq.message.group" semantic conventions. It represents -// the it is essential for FIFO message. Messages that belong to the same -// message group are always processed one by one within the same consumer -// group. -func MessagingRocketmqMessageGroup(val string) attribute.KeyValue { - return MessagingRocketmqMessageGroupKey.String(val) -} - -// MessagingRocketmqMessageKeys returns an attribute KeyValue conforming to -// the "messaging.rocketmq.message.keys" semantic conventions. It represents -// the key(s) of message, another way to mark message besides message id. -func MessagingRocketmqMessageKeys(val ...string) attribute.KeyValue { - return MessagingRocketmqMessageKeysKey.StringSlice(val) -} - -// MessagingRocketmqMessageTag returns an attribute KeyValue conforming to -// the "messaging.rocketmq.message.tag" semantic conventions. It represents the -// secondary classifier of message besides topic. -func MessagingRocketmqMessageTag(val string) attribute.KeyValue { - return MessagingRocketmqMessageTagKey.String(val) -} - -// MessagingRocketmqNamespace returns an attribute KeyValue conforming to -// the "messaging.rocketmq.namespace" semantic conventions. It represents the -// namespace of RocketMQ resources, resources in different namespaces are -// individual. -func MessagingRocketmqNamespace(val string) attribute.KeyValue { - return MessagingRocketmqNamespaceKey.String(val) -} - -// These attributes may be used for any network related operation. -const ( - // NetworkCarrierIccKey is the attribute Key conforming to the - // "network.carrier.icc" semantic conventions. It represents the ISO 3166-1 - // alpha-2 2-character country code associated with the mobile carrier - // network. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'DE' - NetworkCarrierIccKey = attribute.Key("network.carrier.icc") - - // NetworkCarrierMccKey is the attribute Key conforming to the - // "network.carrier.mcc" semantic conventions. It represents the mobile - // carrier country code. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '310' - NetworkCarrierMccKey = attribute.Key("network.carrier.mcc") - - // NetworkCarrierMncKey is the attribute Key conforming to the - // "network.carrier.mnc" semantic conventions. It represents the mobile - // carrier network code. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '001' - NetworkCarrierMncKey = attribute.Key("network.carrier.mnc") - - // NetworkCarrierNameKey is the attribute Key conforming to the - // "network.carrier.name" semantic conventions. It represents the name of - // the mobile carrier. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'sprint' - NetworkCarrierNameKey = attribute.Key("network.carrier.name") - - // NetworkConnectionSubtypeKey is the attribute Key conforming to the - // "network.connection.subtype" semantic conventions. It represents the - // this describes more details regarding the connection.type. It may be the - // type of cell technology connection, but it could be used for describing - // details about a wifi connection. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'LTE' - NetworkConnectionSubtypeKey = attribute.Key("network.connection.subtype") - - // NetworkConnectionTypeKey is the attribute Key conforming to the - // "network.connection.type" semantic conventions. It represents the - // internet connection type. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'wifi' - NetworkConnectionTypeKey = attribute.Key("network.connection.type") - - // NetworkIoDirectionKey is the attribute Key conforming to the - // "network.io.direction" semantic conventions. It represents the network - // IO operation direction. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'transmit' - NetworkIoDirectionKey = attribute.Key("network.io.direction") - - // NetworkLocalAddressKey is the attribute Key conforming to the - // "network.local.address" semantic conventions. It represents the local - // address of the network connection - IP address or Unix domain socket - // name. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '10.1.2.80', '/tmp/my.sock' - NetworkLocalAddressKey = attribute.Key("network.local.address") - - // NetworkLocalPortKey is the attribute Key conforming to the - // "network.local.port" semantic conventions. It represents the local port - // number of the network connection. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 65123 - NetworkLocalPortKey = attribute.Key("network.local.port") - - // NetworkPeerAddressKey is the attribute Key conforming to the - // "network.peer.address" semantic conventions. It represents the peer - // address of the network connection - IP address or Unix domain socket - // name. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '10.1.2.80', '/tmp/my.sock' - NetworkPeerAddressKey = attribute.Key("network.peer.address") - - // NetworkPeerPortKey is the attribute Key conforming to the - // "network.peer.port" semantic conventions. It represents the peer port - // number of the network connection. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 65123 - NetworkPeerPortKey = attribute.Key("network.peer.port") - - // NetworkProtocolNameKey is the attribute Key conforming to the - // "network.protocol.name" semantic conventions. It represents the [OSI - // application layer](https://osi-model.com/application-layer/) or non-OSI - // equivalent. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'amqp', 'http', 'mqtt' - // Note: The value SHOULD be normalized to lowercase. - NetworkProtocolNameKey = attribute.Key("network.protocol.name") - - // NetworkProtocolVersionKey is the attribute Key conforming to the - // "network.protocol.version" semantic conventions. It represents the - // version of the protocol specified in `network.protocol.name`. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '3.1.1' - // Note: `network.protocol.version` refers to the version of the protocol - // used and might be different from the protocol client's version. If the - // HTTP client has a version of `0.27.2`, but sends HTTP version `1.1`, - // this attribute should be set to `1.1`. - NetworkProtocolVersionKey = attribute.Key("network.protocol.version") - - // NetworkTransportKey is the attribute Key conforming to the - // "network.transport" semantic conventions. It represents the [OSI - // transport layer](https://osi-model.com/transport-layer/) or - // [inter-process communication - // method](https://wikipedia.org/wiki/Inter-process_communication). - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - // Examples: 'tcp', 'udp' - // Note: The value SHOULD be normalized to lowercase. - // - // Consider always setting the transport when setting a port number, since - // a port number is ambiguous without knowing the transport. For example - // different processes could be listening on TCP port 12345 and UDP port - // 12345. - NetworkTransportKey = attribute.Key("network.transport") - - // NetworkTypeKey is the attribute Key conforming to the "network.type" - // semantic conventions. It represents the [OSI network - // layer](https://osi-model.com/network-layer/) or non-OSI equivalent. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: stable - // Examples: 'ipv4', 'ipv6' - // Note: The value SHOULD be normalized to lowercase. - NetworkTypeKey = attribute.Key("network.type") -) - -var ( - // GPRS - NetworkConnectionSubtypeGprs = NetworkConnectionSubtypeKey.String("gprs") - // EDGE - NetworkConnectionSubtypeEdge = NetworkConnectionSubtypeKey.String("edge") - // UMTS - NetworkConnectionSubtypeUmts = NetworkConnectionSubtypeKey.String("umts") - // CDMA - NetworkConnectionSubtypeCdma = NetworkConnectionSubtypeKey.String("cdma") - // EVDO Rel. 0 - NetworkConnectionSubtypeEvdo0 = NetworkConnectionSubtypeKey.String("evdo_0") - // EVDO Rev. A - NetworkConnectionSubtypeEvdoA = NetworkConnectionSubtypeKey.String("evdo_a") - // CDMA2000 1XRTT - NetworkConnectionSubtypeCdma20001xrtt = NetworkConnectionSubtypeKey.String("cdma2000_1xrtt") - // HSDPA - NetworkConnectionSubtypeHsdpa = NetworkConnectionSubtypeKey.String("hsdpa") - // HSUPA - NetworkConnectionSubtypeHsupa = NetworkConnectionSubtypeKey.String("hsupa") - // HSPA - NetworkConnectionSubtypeHspa = NetworkConnectionSubtypeKey.String("hspa") - // IDEN - NetworkConnectionSubtypeIden = NetworkConnectionSubtypeKey.String("iden") - // EVDO Rev. B - NetworkConnectionSubtypeEvdoB = NetworkConnectionSubtypeKey.String("evdo_b") - // LTE - NetworkConnectionSubtypeLte = NetworkConnectionSubtypeKey.String("lte") - // EHRPD - NetworkConnectionSubtypeEhrpd = NetworkConnectionSubtypeKey.String("ehrpd") - // HSPAP - NetworkConnectionSubtypeHspap = NetworkConnectionSubtypeKey.String("hspap") - // GSM - NetworkConnectionSubtypeGsm = NetworkConnectionSubtypeKey.String("gsm") - // TD-SCDMA - NetworkConnectionSubtypeTdScdma = NetworkConnectionSubtypeKey.String("td_scdma") - // IWLAN - NetworkConnectionSubtypeIwlan = NetworkConnectionSubtypeKey.String("iwlan") - // 5G NR (New Radio) - NetworkConnectionSubtypeNr = NetworkConnectionSubtypeKey.String("nr") - // 5G NRNSA (New Radio Non-Standalone) - NetworkConnectionSubtypeNrnsa = NetworkConnectionSubtypeKey.String("nrnsa") - // LTE CA - NetworkConnectionSubtypeLteCa = NetworkConnectionSubtypeKey.String("lte_ca") -) - -var ( - // wifi - NetworkConnectionTypeWifi = NetworkConnectionTypeKey.String("wifi") - // wired - NetworkConnectionTypeWired = NetworkConnectionTypeKey.String("wired") - // cell - NetworkConnectionTypeCell = NetworkConnectionTypeKey.String("cell") - // unavailable - NetworkConnectionTypeUnavailable = NetworkConnectionTypeKey.String("unavailable") - // unknown - NetworkConnectionTypeUnknown = NetworkConnectionTypeKey.String("unknown") -) - -var ( - // transmit - NetworkIoDirectionTransmit = NetworkIoDirectionKey.String("transmit") - // receive - NetworkIoDirectionReceive = NetworkIoDirectionKey.String("receive") -) - -var ( - // TCP - NetworkTransportTCP = NetworkTransportKey.String("tcp") - // UDP - NetworkTransportUDP = NetworkTransportKey.String("udp") - // Named or anonymous pipe - NetworkTransportPipe = NetworkTransportKey.String("pipe") - // Unix domain socket - NetworkTransportUnix = NetworkTransportKey.String("unix") -) - -var ( - // IPv4 - NetworkTypeIpv4 = NetworkTypeKey.String("ipv4") - // IPv6 - NetworkTypeIpv6 = NetworkTypeKey.String("ipv6") -) - -// NetworkCarrierIcc returns an attribute KeyValue conforming to the -// "network.carrier.icc" semantic conventions. It represents the ISO 3166-1 -// alpha-2 2-character country code associated with the mobile carrier network. -func NetworkCarrierIcc(val string) attribute.KeyValue { - return NetworkCarrierIccKey.String(val) -} - -// NetworkCarrierMcc returns an attribute KeyValue conforming to the -// "network.carrier.mcc" semantic conventions. It represents the mobile carrier -// country code. -func NetworkCarrierMcc(val string) attribute.KeyValue { - return NetworkCarrierMccKey.String(val) -} - -// NetworkCarrierMnc returns an attribute KeyValue conforming to the -// "network.carrier.mnc" semantic conventions. It represents the mobile carrier -// network code. -func NetworkCarrierMnc(val string) attribute.KeyValue { - return NetworkCarrierMncKey.String(val) -} - -// NetworkCarrierName returns an attribute KeyValue conforming to the -// "network.carrier.name" semantic conventions. It represents the name of the -// mobile carrier. -func NetworkCarrierName(val string) attribute.KeyValue { - return NetworkCarrierNameKey.String(val) -} - -// NetworkLocalAddress returns an attribute KeyValue conforming to the -// "network.local.address" semantic conventions. It represents the local -// address of the network connection - IP address or Unix domain socket name. -func NetworkLocalAddress(val string) attribute.KeyValue { - return NetworkLocalAddressKey.String(val) -} - -// NetworkLocalPort returns an attribute KeyValue conforming to the -// "network.local.port" semantic conventions. It represents the local port -// number of the network connection. -func NetworkLocalPort(val int) attribute.KeyValue { - return NetworkLocalPortKey.Int(val) -} - -// NetworkPeerAddress returns an attribute KeyValue conforming to the -// "network.peer.address" semantic conventions. It represents the peer address -// of the network connection - IP address or Unix domain socket name. -func NetworkPeerAddress(val string) attribute.KeyValue { - return NetworkPeerAddressKey.String(val) -} - -// NetworkPeerPort returns an attribute KeyValue conforming to the -// "network.peer.port" semantic conventions. It represents the peer port number -// of the network connection. -func NetworkPeerPort(val int) attribute.KeyValue { - return NetworkPeerPortKey.Int(val) -} - -// NetworkProtocolName returns an attribute KeyValue conforming to the -// "network.protocol.name" semantic conventions. It represents the [OSI -// application layer](https://osi-model.com/application-layer/) or non-OSI -// equivalent. -func NetworkProtocolName(val string) attribute.KeyValue { - return NetworkProtocolNameKey.String(val) -} - -// NetworkProtocolVersion returns an attribute KeyValue conforming to the -// "network.protocol.version" semantic conventions. It represents the version -// of the protocol specified in `network.protocol.name`. -func NetworkProtocolVersion(val string) attribute.KeyValue { - return NetworkProtocolVersionKey.String(val) -} - -// Attributes for remote procedure calls. -const ( - // RPCConnectRPCErrorCodeKey is the attribute Key conforming to the - // "rpc.connect_rpc.error_code" semantic conventions. It represents the - // [error codes](https://connect.build/docs/protocol/#error-codes) of the - // Connect request. Error codes are always string values. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - RPCConnectRPCErrorCodeKey = attribute.Key("rpc.connect_rpc.error_code") - - // RPCGRPCStatusCodeKey is the attribute Key conforming to the - // "rpc.grpc.status_code" semantic conventions. It represents the [numeric - // status - // code](https://github.com/grpc/grpc/blob/v1.33.2/doc/statuscodes.md) of - // the gRPC request. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - RPCGRPCStatusCodeKey = attribute.Key("rpc.grpc.status_code") - - // RPCJsonrpcErrorCodeKey is the attribute Key conforming to the - // "rpc.jsonrpc.error_code" semantic conventions. It represents the - // `error.code` property of response if it is an error response. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: -32700, 100 - RPCJsonrpcErrorCodeKey = attribute.Key("rpc.jsonrpc.error_code") - - // RPCJsonrpcErrorMessageKey is the attribute Key conforming to the - // "rpc.jsonrpc.error_message" semantic conventions. It represents the - // `error.message` property of response if it is an error response. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Parse error', 'User already exists' - RPCJsonrpcErrorMessageKey = attribute.Key("rpc.jsonrpc.error_message") - - // RPCJsonrpcRequestIDKey is the attribute Key conforming to the - // "rpc.jsonrpc.request_id" semantic conventions. It represents the `id` - // property of request or response. Since protocol allows id to be int, - // string, `null` or missing (for notifications), value is expected to be - // cast to string for simplicity. Use empty string in case of `null` value. - // Omit entirely if this is a notification. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '10', 'request-7', '' - RPCJsonrpcRequestIDKey = attribute.Key("rpc.jsonrpc.request_id") - - // RPCJsonrpcVersionKey is the attribute Key conforming to the - // "rpc.jsonrpc.version" semantic conventions. It represents the protocol - // version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0 - // doesn't specify this, the value can be omitted. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2.0', '1.0' - RPCJsonrpcVersionKey = attribute.Key("rpc.jsonrpc.version") - - // RPCMethodKey is the attribute Key conforming to the "rpc.method" - // semantic conventions. It represents the name of the (logical) method - // being called, must be equal to the $method part in the span name. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'exampleMethod' - // Note: This is the logical name of the method from the RPC interface - // perspective, which can be different from the name of any implementing - // method/function. The `code.function` attribute may be used to store the - // latter (e.g., method actually executing the call on the server side, RPC - // client stub method on the client side). - RPCMethodKey = attribute.Key("rpc.method") - - // RPCServiceKey is the attribute Key conforming to the "rpc.service" - // semantic conventions. It represents the full (logical) name of the - // service being called, including its package name, if applicable. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'myservice.EchoService' - // Note: This is the logical name of the service from the RPC interface - // perspective, which can be different from the name of any implementing - // class. The `code.namespace` attribute may be used to store the latter - // (despite the attribute name, it may include a class name; e.g., class - // with method actually executing the call on the server side, RPC client - // stub class on the client side). - RPCServiceKey = attribute.Key("rpc.service") - - // RPCSystemKey is the attribute Key conforming to the "rpc.system" - // semantic conventions. It represents a string identifying the remoting - // system. See below for a list of well-known identifiers. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - RPCSystemKey = attribute.Key("rpc.system") -) - -var ( - // cancelled - RPCConnectRPCErrorCodeCancelled = RPCConnectRPCErrorCodeKey.String("cancelled") - // unknown - RPCConnectRPCErrorCodeUnknown = RPCConnectRPCErrorCodeKey.String("unknown") - // invalid_argument - RPCConnectRPCErrorCodeInvalidArgument = RPCConnectRPCErrorCodeKey.String("invalid_argument") - // deadline_exceeded - RPCConnectRPCErrorCodeDeadlineExceeded = RPCConnectRPCErrorCodeKey.String("deadline_exceeded") - // not_found - RPCConnectRPCErrorCodeNotFound = RPCConnectRPCErrorCodeKey.String("not_found") - // already_exists - RPCConnectRPCErrorCodeAlreadyExists = RPCConnectRPCErrorCodeKey.String("already_exists") - // permission_denied - RPCConnectRPCErrorCodePermissionDenied = RPCConnectRPCErrorCodeKey.String("permission_denied") - // resource_exhausted - RPCConnectRPCErrorCodeResourceExhausted = RPCConnectRPCErrorCodeKey.String("resource_exhausted") - // failed_precondition - RPCConnectRPCErrorCodeFailedPrecondition = RPCConnectRPCErrorCodeKey.String("failed_precondition") - // aborted - RPCConnectRPCErrorCodeAborted = RPCConnectRPCErrorCodeKey.String("aborted") - // out_of_range - RPCConnectRPCErrorCodeOutOfRange = RPCConnectRPCErrorCodeKey.String("out_of_range") - // unimplemented - RPCConnectRPCErrorCodeUnimplemented = RPCConnectRPCErrorCodeKey.String("unimplemented") - // internal - RPCConnectRPCErrorCodeInternal = RPCConnectRPCErrorCodeKey.String("internal") - // unavailable - RPCConnectRPCErrorCodeUnavailable = RPCConnectRPCErrorCodeKey.String("unavailable") - // data_loss - RPCConnectRPCErrorCodeDataLoss = RPCConnectRPCErrorCodeKey.String("data_loss") - // unauthenticated - RPCConnectRPCErrorCodeUnauthenticated = RPCConnectRPCErrorCodeKey.String("unauthenticated") -) - -var ( - // OK - RPCGRPCStatusCodeOk = RPCGRPCStatusCodeKey.Int(0) - // CANCELLED - RPCGRPCStatusCodeCancelled = RPCGRPCStatusCodeKey.Int(1) - // UNKNOWN - RPCGRPCStatusCodeUnknown = RPCGRPCStatusCodeKey.Int(2) - // INVALID_ARGUMENT - RPCGRPCStatusCodeInvalidArgument = RPCGRPCStatusCodeKey.Int(3) - // DEADLINE_EXCEEDED - RPCGRPCStatusCodeDeadlineExceeded = RPCGRPCStatusCodeKey.Int(4) - // NOT_FOUND - RPCGRPCStatusCodeNotFound = RPCGRPCStatusCodeKey.Int(5) - // ALREADY_EXISTS - RPCGRPCStatusCodeAlreadyExists = RPCGRPCStatusCodeKey.Int(6) - // PERMISSION_DENIED - RPCGRPCStatusCodePermissionDenied = RPCGRPCStatusCodeKey.Int(7) - // RESOURCE_EXHAUSTED - RPCGRPCStatusCodeResourceExhausted = RPCGRPCStatusCodeKey.Int(8) - // FAILED_PRECONDITION - RPCGRPCStatusCodeFailedPrecondition = RPCGRPCStatusCodeKey.Int(9) - // ABORTED - RPCGRPCStatusCodeAborted = RPCGRPCStatusCodeKey.Int(10) - // OUT_OF_RANGE - RPCGRPCStatusCodeOutOfRange = RPCGRPCStatusCodeKey.Int(11) - // UNIMPLEMENTED - RPCGRPCStatusCodeUnimplemented = RPCGRPCStatusCodeKey.Int(12) - // INTERNAL - RPCGRPCStatusCodeInternal = RPCGRPCStatusCodeKey.Int(13) - // UNAVAILABLE - RPCGRPCStatusCodeUnavailable = RPCGRPCStatusCodeKey.Int(14) - // DATA_LOSS - RPCGRPCStatusCodeDataLoss = RPCGRPCStatusCodeKey.Int(15) - // UNAUTHENTICATED - RPCGRPCStatusCodeUnauthenticated = RPCGRPCStatusCodeKey.Int(16) -) - -var ( - // gRPC - RPCSystemGRPC = RPCSystemKey.String("grpc") - // Java RMI - RPCSystemJavaRmi = RPCSystemKey.String("java_rmi") - // .NET WCF - RPCSystemDotnetWcf = RPCSystemKey.String("dotnet_wcf") - // Apache Dubbo - RPCSystemApacheDubbo = RPCSystemKey.String("apache_dubbo") - // Connect RPC - RPCSystemConnectRPC = RPCSystemKey.String("connect_rpc") -) - -// RPCJsonrpcErrorCode returns an attribute KeyValue conforming to the -// "rpc.jsonrpc.error_code" semantic conventions. It represents the -// `error.code` property of response if it is an error response. -func RPCJsonrpcErrorCode(val int) attribute.KeyValue { - return RPCJsonrpcErrorCodeKey.Int(val) -} - -// RPCJsonrpcErrorMessage returns an attribute KeyValue conforming to the -// "rpc.jsonrpc.error_message" semantic conventions. It represents the -// `error.message` property of response if it is an error response. -func RPCJsonrpcErrorMessage(val string) attribute.KeyValue { - return RPCJsonrpcErrorMessageKey.String(val) -} - -// RPCJsonrpcRequestID returns an attribute KeyValue conforming to the -// "rpc.jsonrpc.request_id" semantic conventions. It represents the `id` -// property of request or response. Since protocol allows id to be int, string, -// `null` or missing (for notifications), value is expected to be cast to -// string for simplicity. Use empty string in case of `null` value. Omit -// entirely if this is a notification. -func RPCJsonrpcRequestID(val string) attribute.KeyValue { - return RPCJsonrpcRequestIDKey.String(val) -} - -// RPCJsonrpcVersion returns an attribute KeyValue conforming to the -// "rpc.jsonrpc.version" semantic conventions. It represents the protocol -// version as in `jsonrpc` property of request/response. Since JSON-RPC 1.0 -// doesn't specify this, the value can be omitted. -func RPCJsonrpcVersion(val string) attribute.KeyValue { - return RPCJsonrpcVersionKey.String(val) -} - -// RPCMethod returns an attribute KeyValue conforming to the "rpc.method" -// semantic conventions. It represents the name of the (logical) method being -// called, must be equal to the $method part in the span name. -func RPCMethod(val string) attribute.KeyValue { - return RPCMethodKey.String(val) -} - -// RPCService returns an attribute KeyValue conforming to the "rpc.service" -// semantic conventions. It represents the full (logical) name of the service -// being called, including its package name, if applicable. -func RPCService(val string) attribute.KeyValue { - return RPCServiceKey.String(val) -} - -// These attributes may be used to describe the server in a connection-based -// network interaction where there is one side that initiates the connection -// (the client is the side that initiates the connection). This covers all TCP -// network interactions since TCP is connection-based and one side initiates -// the connection (an exception is made for peer-to-peer communication over TCP -// where the "user-facing" surface of the protocol / API doesn't expose a clear -// notion of client and server). This also covers UDP network interactions -// where one side initiates the interaction, e.g. QUIC (HTTP/3) and DNS. -const ( - // ServerAddressKey is the attribute Key conforming to the "server.address" - // semantic conventions. It represents the server domain name if available - // without reverse DNS lookup; otherwise, IP address or Unix domain socket - // name. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'example.com', '10.1.2.80', '/tmp/my.sock' - // Note: When observed from the client side, and when communicating through - // an intermediary, `server.address` SHOULD represent the server address - // behind any intermediaries, for example proxies, if it's available. - ServerAddressKey = attribute.Key("server.address") - - // ServerPortKey is the attribute Key conforming to the "server.port" - // semantic conventions. It represents the server port number. - // - // Type: int - // RequirementLevel: Optional - // Stability: stable - // Examples: 80, 8080, 443 - // Note: When observed from the client side, and when communicating through - // an intermediary, `server.port` SHOULD represent the server port behind - // any intermediaries, for example proxies, if it's available. - ServerPortKey = attribute.Key("server.port") -) - -// ServerAddress returns an attribute KeyValue conforming to the -// "server.address" semantic conventions. It represents the server domain name -// if available without reverse DNS lookup; otherwise, IP address or Unix -// domain socket name. -func ServerAddress(val string) attribute.KeyValue { - return ServerAddressKey.String(val) -} - -// ServerPort returns an attribute KeyValue conforming to the "server.port" -// semantic conventions. It represents the server port number. -func ServerPort(val int) attribute.KeyValue { - return ServerPortKey.Int(val) -} - -// These attributes may be used to describe the sender of a network -// exchange/packet. These should be used when there is no client/server -// relationship between the two sides, or when that relationship is unknown. -// This covers low-level network interactions (e.g. packet tracing) where you -// don't know if there was a connection or which side initiated it. This also -// covers unidirectional UDP flows and peer-to-peer communication where the -// "user-facing" surface of the protocol / API doesn't expose a clear notion of -// client and server. -const ( - // SourceAddressKey is the attribute Key conforming to the "source.address" - // semantic conventions. It represents the source address - domain name if - // available without reverse DNS lookup; otherwise, IP address or Unix - // domain socket name. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'source.example.com', '10.1.2.80', '/tmp/my.sock' - // Note: When observed from the destination side, and when communicating - // through an intermediary, `source.address` SHOULD represent the source - // address behind any intermediaries, for example proxies, if it's - // available. - SourceAddressKey = attribute.Key("source.address") - - // SourcePortKey is the attribute Key conforming to the "source.port" - // semantic conventions. It represents the source port number - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 3389, 2888 - SourcePortKey = attribute.Key("source.port") -) - -// SourceAddress returns an attribute KeyValue conforming to the -// "source.address" semantic conventions. It represents the source address - -// domain name if available without reverse DNS lookup; otherwise, IP address -// or Unix domain socket name. -func SourceAddress(val string) attribute.KeyValue { - return SourceAddressKey.String(val) -} - -// SourcePort returns an attribute KeyValue conforming to the "source.port" -// semantic conventions. It represents the source port number -func SourcePort(val int) attribute.KeyValue { - return SourcePortKey.Int(val) -} - -// Semantic convention attributes in the TLS namespace. -const ( - // TLSCipherKey is the attribute Key conforming to the "tls.cipher" - // semantic conventions. It represents the string indicating the - // [cipher](https://datatracker.ietf.org/doc/html/rfc5246#appendix-A.5) - // used during the current connection. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'TLS_RSA_WITH_3DES_EDE_CBC_SHA', - // 'TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256' - // Note: The values allowed for `tls.cipher` MUST be one of the - // `Descriptions` of the [registered TLS Cipher - // Suits](https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#table-tls-parameters-4). - TLSCipherKey = attribute.Key("tls.cipher") - - // TLSClientCertificateKey is the attribute Key conforming to the - // "tls.client.certificate" semantic conventions. It represents the - // pEM-encoded stand-alone certificate offered by the client. This is - // usually mutually-exclusive of `client.certificate_chain` since this - // value also exists in that list. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'MII...' - TLSClientCertificateKey = attribute.Key("tls.client.certificate") - - // TLSClientCertificateChainKey is the attribute Key conforming to the - // "tls.client.certificate_chain" semantic conventions. It represents the - // array of PEM-encoded certificates that make up the certificate chain - // offered by the client. This is usually mutually-exclusive of - // `client.certificate` since that value should be the first certificate in - // the chain. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'MII...', 'MI...' - TLSClientCertificateChainKey = attribute.Key("tls.client.certificate_chain") - - // TLSClientHashMd5Key is the attribute Key conforming to the - // "tls.client.hash.md5" semantic conventions. It represents the - // certificate fingerprint using the MD5 digest of DER-encoded version of - // certificate offered by the client. For consistency with other hash - // values, this value should be formatted as an uppercase hash. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC' - TLSClientHashMd5Key = attribute.Key("tls.client.hash.md5") - - // TLSClientHashSha1Key is the attribute Key conforming to the - // "tls.client.hash.sha1" semantic conventions. It represents the - // certificate fingerprint using the SHA1 digest of DER-encoded version of - // certificate offered by the client. For consistency with other hash - // values, this value should be formatted as an uppercase hash. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '9E393D93138888D288266C2D915214D1D1CCEB2A' - TLSClientHashSha1Key = attribute.Key("tls.client.hash.sha1") - - // TLSClientHashSha256Key is the attribute Key conforming to the - // "tls.client.hash.sha256" semantic conventions. It represents the - // certificate fingerprint using the SHA256 digest of DER-encoded version - // of certificate offered by the client. For consistency with other hash - // values, this value should be formatted as an uppercase hash. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0' - TLSClientHashSha256Key = attribute.Key("tls.client.hash.sha256") - - // TLSClientIssuerKey is the attribute Key conforming to the - // "tls.client.issuer" semantic conventions. It represents the - // distinguished name of - // [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) - // of the issuer of the x.509 certificate presented by the client. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'CN=Example Root CA, OU=Infrastructure Team, DC=example, - // DC=com' - TLSClientIssuerKey = attribute.Key("tls.client.issuer") - - // TLSClientJa3Key is the attribute Key conforming to the "tls.client.ja3" - // semantic conventions. It represents a hash that identifies clients based - // on how they perform an SSL/TLS handshake. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'd4e5b18d6b55c71272893221c96ba240' - TLSClientJa3Key = attribute.Key("tls.client.ja3") - - // TLSClientNotAfterKey is the attribute Key conforming to the - // "tls.client.not_after" semantic conventions. It represents the date/Time - // indicating when client certificate is no longer considered valid. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2021-01-01T00:00:00.000Z' - TLSClientNotAfterKey = attribute.Key("tls.client.not_after") - - // TLSClientNotBeforeKey is the attribute Key conforming to the - // "tls.client.not_before" semantic conventions. It represents the - // date/Time indicating when client certificate is first considered valid. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '1970-01-01T00:00:00.000Z' - TLSClientNotBeforeKey = attribute.Key("tls.client.not_before") - - // TLSClientServerNameKey is the attribute Key conforming to the - // "tls.client.server_name" semantic conventions. It represents the also - // called an SNI, this tells the server which hostname to which the client - // is attempting to connect to. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry.io' - TLSClientServerNameKey = attribute.Key("tls.client.server_name") - - // TLSClientSubjectKey is the attribute Key conforming to the - // "tls.client.subject" semantic conventions. It represents the - // distinguished name of subject of the x.509 certificate presented by the - // client. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'CN=myclient, OU=Documentation Team, DC=example, DC=com' - TLSClientSubjectKey = attribute.Key("tls.client.subject") - - // TLSClientSupportedCiphersKey is the attribute Key conforming to the - // "tls.client.supported_ciphers" semantic conventions. It represents the - // array of ciphers offered by the client during the client hello. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: '"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", - // "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "..."' - TLSClientSupportedCiphersKey = attribute.Key("tls.client.supported_ciphers") - - // TLSCurveKey is the attribute Key conforming to the "tls.curve" semantic - // conventions. It represents the string indicating the curve used for the - // given cipher, when applicable - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'secp256r1' - TLSCurveKey = attribute.Key("tls.curve") - - // TLSEstablishedKey is the attribute Key conforming to the - // "tls.established" semantic conventions. It represents the boolean flag - // indicating if the TLS negotiation was successful and transitioned to an - // encrypted tunnel. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - // Examples: True - TLSEstablishedKey = attribute.Key("tls.established") - - // TLSNextProtocolKey is the attribute Key conforming to the - // "tls.next_protocol" semantic conventions. It represents the string - // indicating the protocol being tunneled. Per the values in the [IANA - // registry](https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids), - // this string should be lower case. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'http/1.1' - TLSNextProtocolKey = attribute.Key("tls.next_protocol") - - // TLSProtocolNameKey is the attribute Key conforming to the - // "tls.protocol.name" semantic conventions. It represents the normalized - // lowercase protocol name parsed from original string of the negotiated - // [SSL/TLS protocol - // version](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES) - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - TLSProtocolNameKey = attribute.Key("tls.protocol.name") - - // TLSProtocolVersionKey is the attribute Key conforming to the - // "tls.protocol.version" semantic conventions. It represents the numeric - // part of the version parsed from the original string of the negotiated - // [SSL/TLS protocol - // version](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES) - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '1.2', '3' - TLSProtocolVersionKey = attribute.Key("tls.protocol.version") - - // TLSResumedKey is the attribute Key conforming to the "tls.resumed" - // semantic conventions. It represents the boolean flag indicating if this - // TLS connection was resumed from an existing TLS negotiation. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - // Examples: True - TLSResumedKey = attribute.Key("tls.resumed") - - // TLSServerCertificateKey is the attribute Key conforming to the - // "tls.server.certificate" semantic conventions. It represents the - // pEM-encoded stand-alone certificate offered by the server. This is - // usually mutually-exclusive of `server.certificate_chain` since this - // value also exists in that list. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'MII...' - TLSServerCertificateKey = attribute.Key("tls.server.certificate") - - // TLSServerCertificateChainKey is the attribute Key conforming to the - // "tls.server.certificate_chain" semantic conventions. It represents the - // array of PEM-encoded certificates that make up the certificate chain - // offered by the server. This is usually mutually-exclusive of - // `server.certificate` since that value should be the first certificate in - // the chain. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'MII...', 'MI...' - TLSServerCertificateChainKey = attribute.Key("tls.server.certificate_chain") - - // TLSServerHashMd5Key is the attribute Key conforming to the - // "tls.server.hash.md5" semantic conventions. It represents the - // certificate fingerprint using the MD5 digest of DER-encoded version of - // certificate offered by the server. For consistency with other hash - // values, this value should be formatted as an uppercase hash. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '0F76C7F2C55BFD7D8E8B8F4BFBF0C9EC' - TLSServerHashMd5Key = attribute.Key("tls.server.hash.md5") - - // TLSServerHashSha1Key is the attribute Key conforming to the - // "tls.server.hash.sha1" semantic conventions. It represents the - // certificate fingerprint using the SHA1 digest of DER-encoded version of - // certificate offered by the server. For consistency with other hash - // values, this value should be formatted as an uppercase hash. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '9E393D93138888D288266C2D915214D1D1CCEB2A' - TLSServerHashSha1Key = attribute.Key("tls.server.hash.sha1") - - // TLSServerHashSha256Key is the attribute Key conforming to the - // "tls.server.hash.sha256" semantic conventions. It represents the - // certificate fingerprint using the SHA256 digest of DER-encoded version - // of certificate offered by the server. For consistency with other hash - // values, this value should be formatted as an uppercase hash. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // '0687F666A054EF17A08E2F2162EAB4CBC0D265E1D7875BE74BF3C712CA92DAF0' - TLSServerHashSha256Key = attribute.Key("tls.server.hash.sha256") - - // TLSServerIssuerKey is the attribute Key conforming to the - // "tls.server.issuer" semantic conventions. It represents the - // distinguished name of - // [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) - // of the issuer of the x.509 certificate presented by the client. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'CN=Example Root CA, OU=Infrastructure Team, DC=example, - // DC=com' - TLSServerIssuerKey = attribute.Key("tls.server.issuer") - - // TLSServerJa3sKey is the attribute Key conforming to the - // "tls.server.ja3s" semantic conventions. It represents a hash that - // identifies servers based on how they perform an SSL/TLS handshake. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'd4e5b18d6b55c71272893221c96ba240' - TLSServerJa3sKey = attribute.Key("tls.server.ja3s") - - // TLSServerNotAfterKey is the attribute Key conforming to the - // "tls.server.not_after" semantic conventions. It represents the date/Time - // indicating when server certificate is no longer considered valid. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2021-01-01T00:00:00.000Z' - TLSServerNotAfterKey = attribute.Key("tls.server.not_after") - - // TLSServerNotBeforeKey is the attribute Key conforming to the - // "tls.server.not_before" semantic conventions. It represents the - // date/Time indicating when server certificate is first considered valid. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '1970-01-01T00:00:00.000Z' - TLSServerNotBeforeKey = attribute.Key("tls.server.not_before") - - // TLSServerSubjectKey is the attribute Key conforming to the - // "tls.server.subject" semantic conventions. It represents the - // distinguished name of subject of the x.509 certificate presented by the - // server. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'CN=myserver, OU=Documentation Team, DC=example, DC=com' - TLSServerSubjectKey = attribute.Key("tls.server.subject") -) - -var ( - // ssl - TLSProtocolNameSsl = TLSProtocolNameKey.String("ssl") - // tls - TLSProtocolNameTLS = TLSProtocolNameKey.String("tls") -) - -// TLSCipher returns an attribute KeyValue conforming to the "tls.cipher" -// semantic conventions. It represents the string indicating the -// [cipher](https://datatracker.ietf.org/doc/html/rfc5246#appendix-A.5) used -// during the current connection. -func TLSCipher(val string) attribute.KeyValue { - return TLSCipherKey.String(val) -} - -// TLSClientCertificate returns an attribute KeyValue conforming to the -// "tls.client.certificate" semantic conventions. It represents the pEM-encoded -// stand-alone certificate offered by the client. This is usually -// mutually-exclusive of `client.certificate_chain` since this value also -// exists in that list. -func TLSClientCertificate(val string) attribute.KeyValue { - return TLSClientCertificateKey.String(val) -} - -// TLSClientCertificateChain returns an attribute KeyValue conforming to the -// "tls.client.certificate_chain" semantic conventions. It represents the array -// of PEM-encoded certificates that make up the certificate chain offered by -// the client. This is usually mutually-exclusive of `client.certificate` since -// that value should be the first certificate in the chain. -func TLSClientCertificateChain(val ...string) attribute.KeyValue { - return TLSClientCertificateChainKey.StringSlice(val) -} - -// TLSClientHashMd5 returns an attribute KeyValue conforming to the -// "tls.client.hash.md5" semantic conventions. It represents the certificate -// fingerprint using the MD5 digest of DER-encoded version of certificate -// offered by the client. For consistency with other hash values, this value -// should be formatted as an uppercase hash. -func TLSClientHashMd5(val string) attribute.KeyValue { - return TLSClientHashMd5Key.String(val) -} - -// TLSClientHashSha1 returns an attribute KeyValue conforming to the -// "tls.client.hash.sha1" semantic conventions. It represents the certificate -// fingerprint using the SHA1 digest of DER-encoded version of certificate -// offered by the client. For consistency with other hash values, this value -// should be formatted as an uppercase hash. -func TLSClientHashSha1(val string) attribute.KeyValue { - return TLSClientHashSha1Key.String(val) -} - -// TLSClientHashSha256 returns an attribute KeyValue conforming to the -// "tls.client.hash.sha256" semantic conventions. It represents the certificate -// fingerprint using the SHA256 digest of DER-encoded version of certificate -// offered by the client. For consistency with other hash values, this value -// should be formatted as an uppercase hash. -func TLSClientHashSha256(val string) attribute.KeyValue { - return TLSClientHashSha256Key.String(val) -} - -// TLSClientIssuer returns an attribute KeyValue conforming to the -// "tls.client.issuer" semantic conventions. It represents the distinguished -// name of -// [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) of -// the issuer of the x.509 certificate presented by the client. -func TLSClientIssuer(val string) attribute.KeyValue { - return TLSClientIssuerKey.String(val) -} - -// TLSClientJa3 returns an attribute KeyValue conforming to the -// "tls.client.ja3" semantic conventions. It represents a hash that identifies -// clients based on how they perform an SSL/TLS handshake. -func TLSClientJa3(val string) attribute.KeyValue { - return TLSClientJa3Key.String(val) -} - -// TLSClientNotAfter returns an attribute KeyValue conforming to the -// "tls.client.not_after" semantic conventions. It represents the date/Time -// indicating when client certificate is no longer considered valid. -func TLSClientNotAfter(val string) attribute.KeyValue { - return TLSClientNotAfterKey.String(val) -} - -// TLSClientNotBefore returns an attribute KeyValue conforming to the -// "tls.client.not_before" semantic conventions. It represents the date/Time -// indicating when client certificate is first considered valid. -func TLSClientNotBefore(val string) attribute.KeyValue { - return TLSClientNotBeforeKey.String(val) -} - -// TLSClientServerName returns an attribute KeyValue conforming to the -// "tls.client.server_name" semantic conventions. It represents the also called -// an SNI, this tells the server which hostname to which the client is -// attempting to connect to. -func TLSClientServerName(val string) attribute.KeyValue { - return TLSClientServerNameKey.String(val) -} - -// TLSClientSubject returns an attribute KeyValue conforming to the -// "tls.client.subject" semantic conventions. It represents the distinguished -// name of subject of the x.509 certificate presented by the client. -func TLSClientSubject(val string) attribute.KeyValue { - return TLSClientSubjectKey.String(val) -} - -// TLSClientSupportedCiphers returns an attribute KeyValue conforming to the -// "tls.client.supported_ciphers" semantic conventions. It represents the array -// of ciphers offered by the client during the client hello. -func TLSClientSupportedCiphers(val ...string) attribute.KeyValue { - return TLSClientSupportedCiphersKey.StringSlice(val) -} - -// TLSCurve returns an attribute KeyValue conforming to the "tls.curve" -// semantic conventions. It represents the string indicating the curve used for -// the given cipher, when applicable -func TLSCurve(val string) attribute.KeyValue { - return TLSCurveKey.String(val) -} - -// TLSEstablished returns an attribute KeyValue conforming to the -// "tls.established" semantic conventions. It represents the boolean flag -// indicating if the TLS negotiation was successful and transitioned to an -// encrypted tunnel. -func TLSEstablished(val bool) attribute.KeyValue { - return TLSEstablishedKey.Bool(val) -} - -// TLSNextProtocol returns an attribute KeyValue conforming to the -// "tls.next_protocol" semantic conventions. It represents the string -// indicating the protocol being tunneled. Per the values in the [IANA -// registry](https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids), -// this string should be lower case. -func TLSNextProtocol(val string) attribute.KeyValue { - return TLSNextProtocolKey.String(val) -} - -// TLSProtocolVersion returns an attribute KeyValue conforming to the -// "tls.protocol.version" semantic conventions. It represents the numeric part -// of the version parsed from the original string of the negotiated [SSL/TLS -// protocol -// version](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_version.html#RETURN-VALUES) -func TLSProtocolVersion(val string) attribute.KeyValue { - return TLSProtocolVersionKey.String(val) -} - -// TLSResumed returns an attribute KeyValue conforming to the "tls.resumed" -// semantic conventions. It represents the boolean flag indicating if this TLS -// connection was resumed from an existing TLS negotiation. -func TLSResumed(val bool) attribute.KeyValue { - return TLSResumedKey.Bool(val) -} - -// TLSServerCertificate returns an attribute KeyValue conforming to the -// "tls.server.certificate" semantic conventions. It represents the pEM-encoded -// stand-alone certificate offered by the server. This is usually -// mutually-exclusive of `server.certificate_chain` since this value also -// exists in that list. -func TLSServerCertificate(val string) attribute.KeyValue { - return TLSServerCertificateKey.String(val) -} - -// TLSServerCertificateChain returns an attribute KeyValue conforming to the -// "tls.server.certificate_chain" semantic conventions. It represents the array -// of PEM-encoded certificates that make up the certificate chain offered by -// the server. This is usually mutually-exclusive of `server.certificate` since -// that value should be the first certificate in the chain. -func TLSServerCertificateChain(val ...string) attribute.KeyValue { - return TLSServerCertificateChainKey.StringSlice(val) -} - -// TLSServerHashMd5 returns an attribute KeyValue conforming to the -// "tls.server.hash.md5" semantic conventions. It represents the certificate -// fingerprint using the MD5 digest of DER-encoded version of certificate -// offered by the server. For consistency with other hash values, this value -// should be formatted as an uppercase hash. -func TLSServerHashMd5(val string) attribute.KeyValue { - return TLSServerHashMd5Key.String(val) -} - -// TLSServerHashSha1 returns an attribute KeyValue conforming to the -// "tls.server.hash.sha1" semantic conventions. It represents the certificate -// fingerprint using the SHA1 digest of DER-encoded version of certificate -// offered by the server. For consistency with other hash values, this value -// should be formatted as an uppercase hash. -func TLSServerHashSha1(val string) attribute.KeyValue { - return TLSServerHashSha1Key.String(val) -} - -// TLSServerHashSha256 returns an attribute KeyValue conforming to the -// "tls.server.hash.sha256" semantic conventions. It represents the certificate -// fingerprint using the SHA256 digest of DER-encoded version of certificate -// offered by the server. For consistency with other hash values, this value -// should be formatted as an uppercase hash. -func TLSServerHashSha256(val string) attribute.KeyValue { - return TLSServerHashSha256Key.String(val) -} - -// TLSServerIssuer returns an attribute KeyValue conforming to the -// "tls.server.issuer" semantic conventions. It represents the distinguished -// name of -// [subject](https://datatracker.ietf.org/doc/html/rfc5280#section-4.1.2.6) of -// the issuer of the x.509 certificate presented by the client. -func TLSServerIssuer(val string) attribute.KeyValue { - return TLSServerIssuerKey.String(val) -} - -// TLSServerJa3s returns an attribute KeyValue conforming to the -// "tls.server.ja3s" semantic conventions. It represents a hash that identifies -// servers based on how they perform an SSL/TLS handshake. -func TLSServerJa3s(val string) attribute.KeyValue { - return TLSServerJa3sKey.String(val) -} - -// TLSServerNotAfter returns an attribute KeyValue conforming to the -// "tls.server.not_after" semantic conventions. It represents the date/Time -// indicating when server certificate is no longer considered valid. -func TLSServerNotAfter(val string) attribute.KeyValue { - return TLSServerNotAfterKey.String(val) -} - -// TLSServerNotBefore returns an attribute KeyValue conforming to the -// "tls.server.not_before" semantic conventions. It represents the date/Time -// indicating when server certificate is first considered valid. -func TLSServerNotBefore(val string) attribute.KeyValue { - return TLSServerNotBeforeKey.String(val) -} - -// TLSServerSubject returns an attribute KeyValue conforming to the -// "tls.server.subject" semantic conventions. It represents the distinguished -// name of subject of the x.509 certificate presented by the server. -func TLSServerSubject(val string) attribute.KeyValue { - return TLSServerSubjectKey.String(val) -} - -// Attributes describing URL. -const ( - // URLFragmentKey is the attribute Key conforming to the "url.fragment" - // semantic conventions. It represents the [URI - // fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'SemConv' - URLFragmentKey = attribute.Key("url.fragment") - - // URLFullKey is the attribute Key conforming to the "url.full" semantic - // conventions. It represents the absolute URL describing a network - // resource according to [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'https://www.foo.bar/search?q=OpenTelemetry#SemConv', - // '//localhost' - // Note: For network calls, URL usually has - // `scheme://host[:port][path][?query][#fragment]` format, where the - // fragment is not transmitted over HTTP, but if it is known, it SHOULD be - // included nevertheless. - // `url.full` MUST NOT contain credentials passed via URL in form of - // `https://username:password@www.example.com/`. In such case username and - // password SHOULD be redacted and attribute's value SHOULD be - // `https://REDACTED:REDACTED@www.example.com/`. - // `url.full` SHOULD capture the absolute URL when it is available (or can - // be reconstructed) and SHOULD NOT be validated or modified except for - // sanitizing purposes. - URLFullKey = attribute.Key("url.full") - - // URLPathKey is the attribute Key conforming to the "url.path" semantic - // conventions. It represents the [URI - // path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: '/search' - URLPathKey = attribute.Key("url.path") - - // URLQueryKey is the attribute Key conforming to the "url.query" semantic - // conventions. It represents the [URI - // query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'q=OpenTelemetry' - // Note: Sensitive content provided in query string SHOULD be scrubbed when - // instrumentations can identify it. - URLQueryKey = attribute.Key("url.query") - - // URLSchemeKey is the attribute Key conforming to the "url.scheme" - // semantic conventions. It represents the [URI - // scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component - // identifying the used protocol. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'https', 'ftp', 'telnet' - URLSchemeKey = attribute.Key("url.scheme") -) - -// URLFragment returns an attribute KeyValue conforming to the -// "url.fragment" semantic conventions. It represents the [URI -// fragment](https://www.rfc-editor.org/rfc/rfc3986#section-3.5) component -func URLFragment(val string) attribute.KeyValue { - return URLFragmentKey.String(val) -} - -// URLFull returns an attribute KeyValue conforming to the "url.full" -// semantic conventions. It represents the absolute URL describing a network -// resource according to [RFC3986](https://www.rfc-editor.org/rfc/rfc3986) -func URLFull(val string) attribute.KeyValue { - return URLFullKey.String(val) -} - -// URLPath returns an attribute KeyValue conforming to the "url.path" -// semantic conventions. It represents the [URI -// path](https://www.rfc-editor.org/rfc/rfc3986#section-3.3) component -func URLPath(val string) attribute.KeyValue { - return URLPathKey.String(val) -} - -// URLQuery returns an attribute KeyValue conforming to the "url.query" -// semantic conventions. It represents the [URI -// query](https://www.rfc-editor.org/rfc/rfc3986#section-3.4) component -func URLQuery(val string) attribute.KeyValue { - return URLQueryKey.String(val) -} - -// URLScheme returns an attribute KeyValue conforming to the "url.scheme" -// semantic conventions. It represents the [URI -// scheme](https://www.rfc-editor.org/rfc/rfc3986#section-3.1) component -// identifying the used protocol. -func URLScheme(val string) attribute.KeyValue { - return URLSchemeKey.String(val) -} - -// Describes user-agent attributes. -const ( - // UserAgentOriginalKey is the attribute Key conforming to the - // "user_agent.original" semantic conventions. It represents the value of - // the [HTTP - // User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) - // header sent by the client. - // - // Type: string - // RequirementLevel: Optional - // Stability: stable - // Examples: 'CERN-LineMode/2.15 libwww/2.17b3', 'Mozilla/5.0 (iPhone; CPU - // iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) - // Version/14.1.2 Mobile/15E148 Safari/604.1' - UserAgentOriginalKey = attribute.Key("user_agent.original") -) - -// UserAgentOriginal returns an attribute KeyValue conforming to the -// "user_agent.original" semantic conventions. It represents the value of the -// [HTTP -// User-Agent](https://www.rfc-editor.org/rfc/rfc9110.html#field.user-agent) -// header sent by the client. -func UserAgentOriginal(val string) attribute.KeyValue { - return UserAgentOriginalKey.String(val) -} - -// Session is defined as the period of time encompassing all activities -// performed by the application and the actions executed by the end user. -// Consequently, a Session is represented as a collection of Logs, Events, and -// Spans emitted by the Client Application throughout the Session's duration. -// Each Session is assigned a unique identifier, which is included as an -// attribute in the Logs, Events, and Spans generated during the Session's -// lifecycle. -// When a session reaches end of life, typically due to user inactivity or -// session timeout, a new session identifier will be assigned. The previous -// session identifier may be provided by the instrumentation so that telemetry -// backends can link the two sessions. -const ( - // SessionIDKey is the attribute Key conforming to the "session.id" - // semantic conventions. It represents a unique id to identify a session. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '00112233-4455-6677-8899-aabbccddeeff' - SessionIDKey = attribute.Key("session.id") - - // SessionPreviousIDKey is the attribute Key conforming to the - // "session.previous_id" semantic conventions. It represents the previous - // `session.id` for this user, when known. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '00112233-4455-6677-8899-aabbccddeeff' - SessionPreviousIDKey = attribute.Key("session.previous_id") -) - -// SessionID returns an attribute KeyValue conforming to the "session.id" -// semantic conventions. It represents a unique id to identify a session. -func SessionID(val string) attribute.KeyValue { - return SessionIDKey.String(val) -} - -// SessionPreviousID returns an attribute KeyValue conforming to the -// "session.previous_id" semantic conventions. It represents the previous -// `session.id` for this user, when known. -func SessionPreviousID(val string) attribute.KeyValue { - return SessionPreviousIDKey.String(val) -} diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/doc.go b/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/doc.go deleted file mode 100644 index d27e8a8f..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/doc.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Package semconv implements OpenTelemetry semantic conventions. -// -// OpenTelemetry semantic conventions are agreed standardized naming -// patterns for OpenTelemetry things. This package represents the v1.24.0 -// version of the OpenTelemetry semantic conventions. -package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0" diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/event.go b/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/event.go deleted file mode 100644 index 6c019aaf..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/event.go +++ /dev/null @@ -1,200 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Code generated from semantic convention specification. DO NOT EDIT. - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0" - -import "go.opentelemetry.io/otel/attribute" - -// This event represents an occurrence of a lifecycle transition on the iOS -// platform. -const ( - // IosStateKey is the attribute Key conforming to the "ios.state" semantic - // conventions. It represents the this attribute represents the state the - // application has transitioned into at the occurrence of the event. - // - // Type: Enum - // RequirementLevel: Required - // Stability: experimental - // Note: The iOS lifecycle states are defined in the [UIApplicationDelegate - // documentation](https://developer.apple.com/documentation/uikit/uiapplicationdelegate#1656902), - // and from which the `OS terminology` column values are derived. - IosStateKey = attribute.Key("ios.state") -) - -var ( - // The app has become `active`. Associated with UIKit notification `applicationDidBecomeActive` - IosStateActive = IosStateKey.String("active") - // The app is now `inactive`. Associated with UIKit notification `applicationWillResignActive` - IosStateInactive = IosStateKey.String("inactive") - // The app is now in the background. This value is associated with UIKit notification `applicationDidEnterBackground` - IosStateBackground = IosStateKey.String("background") - // The app is now in the foreground. This value is associated with UIKit notification `applicationWillEnterForeground` - IosStateForeground = IosStateKey.String("foreground") - // The app is about to terminate. Associated with UIKit notification `applicationWillTerminate` - IosStateTerminate = IosStateKey.String("terminate") -) - -// This event represents an occurrence of a lifecycle transition on the Android -// platform. -const ( - // AndroidStateKey is the attribute Key conforming to the "android.state" - // semantic conventions. It represents the this attribute represents the - // state the application has transitioned into at the occurrence of the - // event. - // - // Type: Enum - // RequirementLevel: Required - // Stability: experimental - // Note: The Android lifecycle states are defined in [Activity lifecycle - // callbacks](https://developer.android.com/guide/components/activities/activity-lifecycle#lc), - // and from which the `OS identifiers` are derived. - AndroidStateKey = attribute.Key("android.state") -) - -var ( - // Any time before Activity.onResume() or, if the app has no Activity, Context.startService() has been called in the app for the first time - AndroidStateCreated = AndroidStateKey.String("created") - // Any time after Activity.onPause() or, if the app has no Activity, Context.stopService() has been called when the app was in the foreground state - AndroidStateBackground = AndroidStateKey.String("background") - // Any time after Activity.onResume() or, if the app has no Activity, Context.startService() has been called when the app was in either the created or background states - AndroidStateForeground = AndroidStateKey.String("foreground") -) - -// This semantic convention defines the attributes used to represent a feature -// flag evaluation as an event. -const ( - // FeatureFlagKeyKey is the attribute Key conforming to the - // "feature_flag.key" semantic conventions. It represents the unique - // identifier of the feature flag. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'logo-color' - FeatureFlagKeyKey = attribute.Key("feature_flag.key") - - // FeatureFlagProviderNameKey is the attribute Key conforming to the - // "feature_flag.provider_name" semantic conventions. It represents the - // name of the service provider that performs the flag evaluation. - // - // Type: string - // RequirementLevel: Recommended - // Stability: experimental - // Examples: 'Flag Manager' - FeatureFlagProviderNameKey = attribute.Key("feature_flag.provider_name") - - // FeatureFlagVariantKey is the attribute Key conforming to the - // "feature_flag.variant" semantic conventions. It represents the sHOULD be - // a semantic identifier for a value. If one is unavailable, a stringified - // version of the value can be used. - // - // Type: string - // RequirementLevel: Recommended - // Stability: experimental - // Examples: 'red', 'true', 'on' - // Note: A semantic identifier, commonly referred to as a variant, provides - // a means - // for referring to a value without including the value itself. This can - // provide additional context for understanding the meaning behind a value. - // For example, the variant `red` maybe be used for the value `#c05543`. - // - // A stringified version of the value can be used in situations where a - // semantic identifier is unavailable. String representation of the value - // should be determined by the implementer. - FeatureFlagVariantKey = attribute.Key("feature_flag.variant") -) - -// FeatureFlagKey returns an attribute KeyValue conforming to the -// "feature_flag.key" semantic conventions. It represents the unique identifier -// of the feature flag. -func FeatureFlagKey(val string) attribute.KeyValue { - return FeatureFlagKeyKey.String(val) -} - -// FeatureFlagProviderName returns an attribute KeyValue conforming to the -// "feature_flag.provider_name" semantic conventions. It represents the name of -// the service provider that performs the flag evaluation. -func FeatureFlagProviderName(val string) attribute.KeyValue { - return FeatureFlagProviderNameKey.String(val) -} - -// FeatureFlagVariant returns an attribute KeyValue conforming to the -// "feature_flag.variant" semantic conventions. It represents the sHOULD be a -// semantic identifier for a value. If one is unavailable, a stringified -// version of the value can be used. -func FeatureFlagVariant(val string) attribute.KeyValue { - return FeatureFlagVariantKey.String(val) -} - -// RPC received/sent message. -const ( - // MessageCompressedSizeKey is the attribute Key conforming to the - // "message.compressed_size" semantic conventions. It represents the - // compressed size of the message in bytes. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - MessageCompressedSizeKey = attribute.Key("message.compressed_size") - - // MessageIDKey is the attribute Key conforming to the "message.id" - // semantic conventions. It represents the mUST be calculated as two - // different counters starting from `1` one for sent messages and one for - // received message. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Note: This way we guarantee that the values will be consistent between - // different implementations. - MessageIDKey = attribute.Key("message.id") - - // MessageTypeKey is the attribute Key conforming to the "message.type" - // semantic conventions. It represents the whether this is a received or - // sent message. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - MessageTypeKey = attribute.Key("message.type") - - // MessageUncompressedSizeKey is the attribute Key conforming to the - // "message.uncompressed_size" semantic conventions. It represents the - // uncompressed size of the message in bytes. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - MessageUncompressedSizeKey = attribute.Key("message.uncompressed_size") -) - -var ( - // sent - MessageTypeSent = MessageTypeKey.String("SENT") - // received - MessageTypeReceived = MessageTypeKey.String("RECEIVED") -) - -// MessageCompressedSize returns an attribute KeyValue conforming to the -// "message.compressed_size" semantic conventions. It represents the compressed -// size of the message in bytes. -func MessageCompressedSize(val int) attribute.KeyValue { - return MessageCompressedSizeKey.Int(val) -} - -// MessageID returns an attribute KeyValue conforming to the "message.id" -// semantic conventions. It represents the mUST be calculated as two different -// counters starting from `1` one for sent messages and one for received -// message. -func MessageID(val int) attribute.KeyValue { - return MessageIDKey.Int(val) -} - -// MessageUncompressedSize returns an attribute KeyValue conforming to the -// "message.uncompressed_size" semantic conventions. It represents the -// uncompressed size of the message in bytes. -func MessageUncompressedSize(val int) attribute.KeyValue { - return MessageUncompressedSizeKey.Int(val) -} diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/exception.go b/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/exception.go deleted file mode 100644 index 7235bb51..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/exception.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0" - -const ( - // ExceptionEventName is the name of the Span event representing an exception. - ExceptionEventName = "exception" -) diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/metric.go b/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/metric.go deleted file mode 100644 index a6b953f6..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/metric.go +++ /dev/null @@ -1,1071 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Code generated from semantic convention specification. DO NOT EDIT. - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0" - -const ( - - // DBClientConnectionsUsage is the metric conforming to the - // "db.client.connections.usage" semantic conventions. It represents the number - // of connections that are currently in state described by the `state` - // attribute. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - DBClientConnectionsUsageName = "db.client.connections.usage" - DBClientConnectionsUsageUnit = "{connection}" - DBClientConnectionsUsageDescription = "The number of connections that are currently in state described by the `state` attribute" - - // DBClientConnectionsIdleMax is the metric conforming to the - // "db.client.connections.idle.max" semantic conventions. It represents the - // maximum number of idle open connections allowed. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - DBClientConnectionsIdleMaxName = "db.client.connections.idle.max" - DBClientConnectionsIdleMaxUnit = "{connection}" - DBClientConnectionsIdleMaxDescription = "The maximum number of idle open connections allowed" - - // DBClientConnectionsIdleMin is the metric conforming to the - // "db.client.connections.idle.min" semantic conventions. It represents the - // minimum number of idle open connections allowed. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - DBClientConnectionsIdleMinName = "db.client.connections.idle.min" - DBClientConnectionsIdleMinUnit = "{connection}" - DBClientConnectionsIdleMinDescription = "The minimum number of idle open connections allowed" - - // DBClientConnectionsMax is the metric conforming to the - // "db.client.connections.max" semantic conventions. It represents the maximum - // number of open connections allowed. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - DBClientConnectionsMaxName = "db.client.connections.max" - DBClientConnectionsMaxUnit = "{connection}" - DBClientConnectionsMaxDescription = "The maximum number of open connections allowed" - - // DBClientConnectionsPendingRequests is the metric conforming to the - // "db.client.connections.pending_requests" semantic conventions. It represents - // the number of pending requests for an open connection, cumulative for the - // entire pool. - // Instrument: updowncounter - // Unit: {request} - // Stability: Experimental - DBClientConnectionsPendingRequestsName = "db.client.connections.pending_requests" - DBClientConnectionsPendingRequestsUnit = "{request}" - DBClientConnectionsPendingRequestsDescription = "The number of pending requests for an open connection, cumulative for the entire pool" - - // DBClientConnectionsTimeouts is the metric conforming to the - // "db.client.connections.timeouts" semantic conventions. It represents the - // number of connection timeouts that have occurred trying to obtain a - // connection from the pool. - // Instrument: counter - // Unit: {timeout} - // Stability: Experimental - DBClientConnectionsTimeoutsName = "db.client.connections.timeouts" - DBClientConnectionsTimeoutsUnit = "{timeout}" - DBClientConnectionsTimeoutsDescription = "The number of connection timeouts that have occurred trying to obtain a connection from the pool" - - // DBClientConnectionsCreateTime is the metric conforming to the - // "db.client.connections.create_time" semantic conventions. It represents the - // time it took to create a new connection. - // Instrument: histogram - // Unit: ms - // Stability: Experimental - DBClientConnectionsCreateTimeName = "db.client.connections.create_time" - DBClientConnectionsCreateTimeUnit = "ms" - DBClientConnectionsCreateTimeDescription = "The time it took to create a new connection" - - // DBClientConnectionsWaitTime is the metric conforming to the - // "db.client.connections.wait_time" semantic conventions. It represents the - // time it took to obtain an open connection from the pool. - // Instrument: histogram - // Unit: ms - // Stability: Experimental - DBClientConnectionsWaitTimeName = "db.client.connections.wait_time" - DBClientConnectionsWaitTimeUnit = "ms" - DBClientConnectionsWaitTimeDescription = "The time it took to obtain an open connection from the pool" - - // DBClientConnectionsUseTime is the metric conforming to the - // "db.client.connections.use_time" semantic conventions. It represents the - // time between borrowing a connection and returning it to the pool. - // Instrument: histogram - // Unit: ms - // Stability: Experimental - DBClientConnectionsUseTimeName = "db.client.connections.use_time" - DBClientConnectionsUseTimeUnit = "ms" - DBClientConnectionsUseTimeDescription = "The time between borrowing a connection and returning it to the pool" - - // AspnetcoreRoutingMatchAttempts is the metric conforming to the - // "aspnetcore.routing.match_attempts" semantic conventions. It represents the - // number of requests that were attempted to be matched to an endpoint. - // Instrument: counter - // Unit: {match_attempt} - // Stability: Experimental - AspnetcoreRoutingMatchAttemptsName = "aspnetcore.routing.match_attempts" - AspnetcoreRoutingMatchAttemptsUnit = "{match_attempt}" - AspnetcoreRoutingMatchAttemptsDescription = "Number of requests that were attempted to be matched to an endpoint." - - // AspnetcoreDiagnosticsExceptions is the metric conforming to the - // "aspnetcore.diagnostics.exceptions" semantic conventions. It represents the - // number of exceptions caught by exception handling middleware. - // Instrument: counter - // Unit: {exception} - // Stability: Experimental - AspnetcoreDiagnosticsExceptionsName = "aspnetcore.diagnostics.exceptions" - AspnetcoreDiagnosticsExceptionsUnit = "{exception}" - AspnetcoreDiagnosticsExceptionsDescription = "Number of exceptions caught by exception handling middleware." - - // AspnetcoreRateLimitingActiveRequestLeases is the metric conforming to the - // "aspnetcore.rate_limiting.active_request_leases" semantic conventions. It - // represents the number of requests that are currently active on the server - // that hold a rate limiting lease. - // Instrument: updowncounter - // Unit: {request} - // Stability: Experimental - AspnetcoreRateLimitingActiveRequestLeasesName = "aspnetcore.rate_limiting.active_request_leases" - AspnetcoreRateLimitingActiveRequestLeasesUnit = "{request}" - AspnetcoreRateLimitingActiveRequestLeasesDescription = "Number of requests that are currently active on the server that hold a rate limiting lease." - - // AspnetcoreRateLimitingRequestLeaseDuration is the metric conforming to the - // "aspnetcore.rate_limiting.request_lease.duration" semantic conventions. It - // represents the duration of rate limiting lease held by requests on the - // server. - // Instrument: histogram - // Unit: s - // Stability: Experimental - AspnetcoreRateLimitingRequestLeaseDurationName = "aspnetcore.rate_limiting.request_lease.duration" - AspnetcoreRateLimitingRequestLeaseDurationUnit = "s" - AspnetcoreRateLimitingRequestLeaseDurationDescription = "The duration of rate limiting lease held by requests on the server." - - // AspnetcoreRateLimitingRequestTimeInQueue is the metric conforming to the - // "aspnetcore.rate_limiting.request.time_in_queue" semantic conventions. It - // represents the time the request spent in a queue waiting to acquire a rate - // limiting lease. - // Instrument: histogram - // Unit: s - // Stability: Experimental - AspnetcoreRateLimitingRequestTimeInQueueName = "aspnetcore.rate_limiting.request.time_in_queue" - AspnetcoreRateLimitingRequestTimeInQueueUnit = "s" - AspnetcoreRateLimitingRequestTimeInQueueDescription = "The time the request spent in a queue waiting to acquire a rate limiting lease." - - // AspnetcoreRateLimitingQueuedRequests is the metric conforming to the - // "aspnetcore.rate_limiting.queued_requests" semantic conventions. It - // represents the number of requests that are currently queued, waiting to - // acquire a rate limiting lease. - // Instrument: updowncounter - // Unit: {request} - // Stability: Experimental - AspnetcoreRateLimitingQueuedRequestsName = "aspnetcore.rate_limiting.queued_requests" - AspnetcoreRateLimitingQueuedRequestsUnit = "{request}" - AspnetcoreRateLimitingQueuedRequestsDescription = "Number of requests that are currently queued, waiting to acquire a rate limiting lease." - - // AspnetcoreRateLimitingRequests is the metric conforming to the - // "aspnetcore.rate_limiting.requests" semantic conventions. It represents the - // number of requests that tried to acquire a rate limiting lease. - // Instrument: counter - // Unit: {request} - // Stability: Experimental - AspnetcoreRateLimitingRequestsName = "aspnetcore.rate_limiting.requests" - AspnetcoreRateLimitingRequestsUnit = "{request}" - AspnetcoreRateLimitingRequestsDescription = "Number of requests that tried to acquire a rate limiting lease." - - // DNSLookupDuration is the metric conforming to the "dns.lookup.duration" - // semantic conventions. It represents the measures the time taken to perform a - // DNS lookup. - // Instrument: histogram - // Unit: s - // Stability: Experimental - DNSLookupDurationName = "dns.lookup.duration" - DNSLookupDurationUnit = "s" - DNSLookupDurationDescription = "Measures the time taken to perform a DNS lookup." - - // HTTPClientOpenConnections is the metric conforming to the - // "http.client.open_connections" semantic conventions. It represents the - // number of outbound HTTP connections that are currently active or idle on the - // client. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - HTTPClientOpenConnectionsName = "http.client.open_connections" - HTTPClientOpenConnectionsUnit = "{connection}" - HTTPClientOpenConnectionsDescription = "Number of outbound HTTP connections that are currently active or idle on the client." - - // HTTPClientConnectionDuration is the metric conforming to the - // "http.client.connection.duration" semantic conventions. It represents the - // duration of the successfully established outbound HTTP connections. - // Instrument: histogram - // Unit: s - // Stability: Experimental - HTTPClientConnectionDurationName = "http.client.connection.duration" - HTTPClientConnectionDurationUnit = "s" - HTTPClientConnectionDurationDescription = "The duration of the successfully established outbound HTTP connections." - - // HTTPClientActiveRequests is the metric conforming to the - // "http.client.active_requests" semantic conventions. It represents the number - // of active HTTP requests. - // Instrument: updowncounter - // Unit: {request} - // Stability: Experimental - HTTPClientActiveRequestsName = "http.client.active_requests" - HTTPClientActiveRequestsUnit = "{request}" - HTTPClientActiveRequestsDescription = "Number of active HTTP requests." - - // HTTPClientRequestTimeInQueue is the metric conforming to the - // "http.client.request.time_in_queue" semantic conventions. It represents the - // amount of time requests spent on a queue waiting for an available - // connection. - // Instrument: histogram - // Unit: s - // Stability: Experimental - HTTPClientRequestTimeInQueueName = "http.client.request.time_in_queue" - HTTPClientRequestTimeInQueueUnit = "s" - HTTPClientRequestTimeInQueueDescription = "The amount of time requests spent on a queue waiting for an available connection." - - // KestrelActiveConnections is the metric conforming to the - // "kestrel.active_connections" semantic conventions. It represents the number - // of connections that are currently active on the server. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - KestrelActiveConnectionsName = "kestrel.active_connections" - KestrelActiveConnectionsUnit = "{connection}" - KestrelActiveConnectionsDescription = "Number of connections that are currently active on the server." - - // KestrelConnectionDuration is the metric conforming to the - // "kestrel.connection.duration" semantic conventions. It represents the - // duration of connections on the server. - // Instrument: histogram - // Unit: s - // Stability: Experimental - KestrelConnectionDurationName = "kestrel.connection.duration" - KestrelConnectionDurationUnit = "s" - KestrelConnectionDurationDescription = "The duration of connections on the server." - - // KestrelRejectedConnections is the metric conforming to the - // "kestrel.rejected_connections" semantic conventions. It represents the - // number of connections rejected by the server. - // Instrument: counter - // Unit: {connection} - // Stability: Experimental - KestrelRejectedConnectionsName = "kestrel.rejected_connections" - KestrelRejectedConnectionsUnit = "{connection}" - KestrelRejectedConnectionsDescription = "Number of connections rejected by the server." - - // KestrelQueuedConnections is the metric conforming to the - // "kestrel.queued_connections" semantic conventions. It represents the number - // of connections that are currently queued and are waiting to start. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - KestrelQueuedConnectionsName = "kestrel.queued_connections" - KestrelQueuedConnectionsUnit = "{connection}" - KestrelQueuedConnectionsDescription = "Number of connections that are currently queued and are waiting to start." - - // KestrelQueuedRequests is the metric conforming to the - // "kestrel.queued_requests" semantic conventions. It represents the number of - // HTTP requests on multiplexed connections (HTTP/2 and HTTP/3) that are - // currently queued and are waiting to start. - // Instrument: updowncounter - // Unit: {request} - // Stability: Experimental - KestrelQueuedRequestsName = "kestrel.queued_requests" - KestrelQueuedRequestsUnit = "{request}" - KestrelQueuedRequestsDescription = "Number of HTTP requests on multiplexed connections (HTTP/2 and HTTP/3) that are currently queued and are waiting to start." - - // KestrelUpgradedConnections is the metric conforming to the - // "kestrel.upgraded_connections" semantic conventions. It represents the - // number of connections that are currently upgraded (WebSockets). . - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - KestrelUpgradedConnectionsName = "kestrel.upgraded_connections" - KestrelUpgradedConnectionsUnit = "{connection}" - KestrelUpgradedConnectionsDescription = "Number of connections that are currently upgraded (WebSockets). ." - - // KestrelTLSHandshakeDuration is the metric conforming to the - // "kestrel.tls_handshake.duration" semantic conventions. It represents the - // duration of TLS handshakes on the server. - // Instrument: histogram - // Unit: s - // Stability: Experimental - KestrelTLSHandshakeDurationName = "kestrel.tls_handshake.duration" - KestrelTLSHandshakeDurationUnit = "s" - KestrelTLSHandshakeDurationDescription = "The duration of TLS handshakes on the server." - - // KestrelActiveTLSHandshakes is the metric conforming to the - // "kestrel.active_tls_handshakes" semantic conventions. It represents the - // number of TLS handshakes that are currently in progress on the server. - // Instrument: updowncounter - // Unit: {handshake} - // Stability: Experimental - KestrelActiveTLSHandshakesName = "kestrel.active_tls_handshakes" - KestrelActiveTLSHandshakesUnit = "{handshake}" - KestrelActiveTLSHandshakesDescription = "Number of TLS handshakes that are currently in progress on the server." - - // SignalrServerConnectionDuration is the metric conforming to the - // "signalr.server.connection.duration" semantic conventions. It represents the - // duration of connections on the server. - // Instrument: histogram - // Unit: s - // Stability: Experimental - SignalrServerConnectionDurationName = "signalr.server.connection.duration" - SignalrServerConnectionDurationUnit = "s" - SignalrServerConnectionDurationDescription = "The duration of connections on the server." - - // SignalrServerActiveConnections is the metric conforming to the - // "signalr.server.active_connections" semantic conventions. It represents the - // number of connections that are currently active on the server. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - SignalrServerActiveConnectionsName = "signalr.server.active_connections" - SignalrServerActiveConnectionsUnit = "{connection}" - SignalrServerActiveConnectionsDescription = "Number of connections that are currently active on the server." - - // FaaSInvokeDuration is the metric conforming to the "faas.invoke_duration" - // semantic conventions. It represents the measures the duration of the - // function's logic execution. - // Instrument: histogram - // Unit: s - // Stability: Experimental - FaaSInvokeDurationName = "faas.invoke_duration" - FaaSInvokeDurationUnit = "s" - FaaSInvokeDurationDescription = "Measures the duration of the function's logic execution" - - // FaaSInitDuration is the metric conforming to the "faas.init_duration" - // semantic conventions. It represents the measures the duration of the - // function's initialization, such as a cold start. - // Instrument: histogram - // Unit: s - // Stability: Experimental - FaaSInitDurationName = "faas.init_duration" - FaaSInitDurationUnit = "s" - FaaSInitDurationDescription = "Measures the duration of the function's initialization, such as a cold start" - - // FaaSColdstarts is the metric conforming to the "faas.coldstarts" semantic - // conventions. It represents the number of invocation cold starts. - // Instrument: counter - // Unit: {coldstart} - // Stability: Experimental - FaaSColdstartsName = "faas.coldstarts" - FaaSColdstartsUnit = "{coldstart}" - FaaSColdstartsDescription = "Number of invocation cold starts" - - // FaaSErrors is the metric conforming to the "faas.errors" semantic - // conventions. It represents the number of invocation errors. - // Instrument: counter - // Unit: {error} - // Stability: Experimental - FaaSErrorsName = "faas.errors" - FaaSErrorsUnit = "{error}" - FaaSErrorsDescription = "Number of invocation errors" - - // FaaSInvocations is the metric conforming to the "faas.invocations" semantic - // conventions. It represents the number of successful invocations. - // Instrument: counter - // Unit: {invocation} - // Stability: Experimental - FaaSInvocationsName = "faas.invocations" - FaaSInvocationsUnit = "{invocation}" - FaaSInvocationsDescription = "Number of successful invocations" - - // FaaSTimeouts is the metric conforming to the "faas.timeouts" semantic - // conventions. It represents the number of invocation timeouts. - // Instrument: counter - // Unit: {timeout} - // Stability: Experimental - FaaSTimeoutsName = "faas.timeouts" - FaaSTimeoutsUnit = "{timeout}" - FaaSTimeoutsDescription = "Number of invocation timeouts" - - // FaaSMemUsage is the metric conforming to the "faas.mem_usage" semantic - // conventions. It represents the distribution of max memory usage per - // invocation. - // Instrument: histogram - // Unit: By - // Stability: Experimental - FaaSMemUsageName = "faas.mem_usage" - FaaSMemUsageUnit = "By" - FaaSMemUsageDescription = "Distribution of max memory usage per invocation" - - // FaaSCPUUsage is the metric conforming to the "faas.cpu_usage" semantic - // conventions. It represents the distribution of CPU usage per invocation. - // Instrument: histogram - // Unit: s - // Stability: Experimental - FaaSCPUUsageName = "faas.cpu_usage" - FaaSCPUUsageUnit = "s" - FaaSCPUUsageDescription = "Distribution of CPU usage per invocation" - - // FaaSNetIo is the metric conforming to the "faas.net_io" semantic - // conventions. It represents the distribution of net I/O usage per invocation. - // Instrument: histogram - // Unit: By - // Stability: Experimental - FaaSNetIoName = "faas.net_io" - FaaSNetIoUnit = "By" - FaaSNetIoDescription = "Distribution of net I/O usage per invocation" - - // HTTPServerRequestDuration is the metric conforming to the - // "http.server.request.duration" semantic conventions. It represents the - // duration of HTTP server requests. - // Instrument: histogram - // Unit: s - // Stability: Stable - HTTPServerRequestDurationName = "http.server.request.duration" - HTTPServerRequestDurationUnit = "s" - HTTPServerRequestDurationDescription = "Duration of HTTP server requests." - - // HTTPServerActiveRequests is the metric conforming to the - // "http.server.active_requests" semantic conventions. It represents the number - // of active HTTP server requests. - // Instrument: updowncounter - // Unit: {request} - // Stability: Experimental - HTTPServerActiveRequestsName = "http.server.active_requests" - HTTPServerActiveRequestsUnit = "{request}" - HTTPServerActiveRequestsDescription = "Number of active HTTP server requests." - - // HTTPServerRequestBodySize is the metric conforming to the - // "http.server.request.body.size" semantic conventions. It represents the size - // of HTTP server request bodies. - // Instrument: histogram - // Unit: By - // Stability: Experimental - HTTPServerRequestBodySizeName = "http.server.request.body.size" - HTTPServerRequestBodySizeUnit = "By" - HTTPServerRequestBodySizeDescription = "Size of HTTP server request bodies." - - // HTTPServerResponseBodySize is the metric conforming to the - // "http.server.response.body.size" semantic conventions. It represents the - // size of HTTP server response bodies. - // Instrument: histogram - // Unit: By - // Stability: Experimental - HTTPServerResponseBodySizeName = "http.server.response.body.size" - HTTPServerResponseBodySizeUnit = "By" - HTTPServerResponseBodySizeDescription = "Size of HTTP server response bodies." - - // HTTPClientRequestDuration is the metric conforming to the - // "http.client.request.duration" semantic conventions. It represents the - // duration of HTTP client requests. - // Instrument: histogram - // Unit: s - // Stability: Stable - HTTPClientRequestDurationName = "http.client.request.duration" - HTTPClientRequestDurationUnit = "s" - HTTPClientRequestDurationDescription = "Duration of HTTP client requests." - - // HTTPClientRequestBodySize is the metric conforming to the - // "http.client.request.body.size" semantic conventions. It represents the size - // of HTTP client request bodies. - // Instrument: histogram - // Unit: By - // Stability: Experimental - HTTPClientRequestBodySizeName = "http.client.request.body.size" - HTTPClientRequestBodySizeUnit = "By" - HTTPClientRequestBodySizeDescription = "Size of HTTP client request bodies." - - // HTTPClientResponseBodySize is the metric conforming to the - // "http.client.response.body.size" semantic conventions. It represents the - // size of HTTP client response bodies. - // Instrument: histogram - // Unit: By - // Stability: Experimental - HTTPClientResponseBodySizeName = "http.client.response.body.size" - HTTPClientResponseBodySizeUnit = "By" - HTTPClientResponseBodySizeDescription = "Size of HTTP client response bodies." - - // JvmMemoryInit is the metric conforming to the "jvm.memory.init" semantic - // conventions. It represents the measure of initial memory requested. - // Instrument: updowncounter - // Unit: By - // Stability: Experimental - JvmMemoryInitName = "jvm.memory.init" - JvmMemoryInitUnit = "By" - JvmMemoryInitDescription = "Measure of initial memory requested." - - // JvmSystemCPUUtilization is the metric conforming to the - // "jvm.system.cpu.utilization" semantic conventions. It represents the recent - // CPU utilization for the whole system as reported by the JVM. - // Instrument: gauge - // Unit: 1 - // Stability: Experimental - JvmSystemCPUUtilizationName = "jvm.system.cpu.utilization" - JvmSystemCPUUtilizationUnit = "1" - JvmSystemCPUUtilizationDescription = "Recent CPU utilization for the whole system as reported by the JVM." - - // JvmSystemCPULoad1m is the metric conforming to the "jvm.system.cpu.load_1m" - // semantic conventions. It represents the average CPU load of the whole system - // for the last minute as reported by the JVM. - // Instrument: gauge - // Unit: {run_queue_item} - // Stability: Experimental - JvmSystemCPULoad1mName = "jvm.system.cpu.load_1m" - JvmSystemCPULoad1mUnit = "{run_queue_item}" - JvmSystemCPULoad1mDescription = "Average CPU load of the whole system for the last minute as reported by the JVM." - - // JvmBufferMemoryUsage is the metric conforming to the - // "jvm.buffer.memory.usage" semantic conventions. It represents the measure of - // memory used by buffers. - // Instrument: updowncounter - // Unit: By - // Stability: Experimental - JvmBufferMemoryUsageName = "jvm.buffer.memory.usage" - JvmBufferMemoryUsageUnit = "By" - JvmBufferMemoryUsageDescription = "Measure of memory used by buffers." - - // JvmBufferMemoryLimit is the metric conforming to the - // "jvm.buffer.memory.limit" semantic conventions. It represents the measure of - // total memory capacity of buffers. - // Instrument: updowncounter - // Unit: By - // Stability: Experimental - JvmBufferMemoryLimitName = "jvm.buffer.memory.limit" - JvmBufferMemoryLimitUnit = "By" - JvmBufferMemoryLimitDescription = "Measure of total memory capacity of buffers." - - // JvmBufferCount is the metric conforming to the "jvm.buffer.count" semantic - // conventions. It represents the number of buffers in the pool. - // Instrument: updowncounter - // Unit: {buffer} - // Stability: Experimental - JvmBufferCountName = "jvm.buffer.count" - JvmBufferCountUnit = "{buffer}" - JvmBufferCountDescription = "Number of buffers in the pool." - - // JvmMemoryUsed is the metric conforming to the "jvm.memory.used" semantic - // conventions. It represents the measure of memory used. - // Instrument: updowncounter - // Unit: By - // Stability: Stable - JvmMemoryUsedName = "jvm.memory.used" - JvmMemoryUsedUnit = "By" - JvmMemoryUsedDescription = "Measure of memory used." - - // JvmMemoryCommitted is the metric conforming to the "jvm.memory.committed" - // semantic conventions. It represents the measure of memory committed. - // Instrument: updowncounter - // Unit: By - // Stability: Stable - JvmMemoryCommittedName = "jvm.memory.committed" - JvmMemoryCommittedUnit = "By" - JvmMemoryCommittedDescription = "Measure of memory committed." - - // JvmMemoryLimit is the metric conforming to the "jvm.memory.limit" semantic - // conventions. It represents the measure of max obtainable memory. - // Instrument: updowncounter - // Unit: By - // Stability: Stable - JvmMemoryLimitName = "jvm.memory.limit" - JvmMemoryLimitUnit = "By" - JvmMemoryLimitDescription = "Measure of max obtainable memory." - - // JvmMemoryUsedAfterLastGc is the metric conforming to the - // "jvm.memory.used_after_last_gc" semantic conventions. It represents the - // measure of memory used, as measured after the most recent garbage collection - // event on this pool. - // Instrument: updowncounter - // Unit: By - // Stability: Stable - JvmMemoryUsedAfterLastGcName = "jvm.memory.used_after_last_gc" - JvmMemoryUsedAfterLastGcUnit = "By" - JvmMemoryUsedAfterLastGcDescription = "Measure of memory used, as measured after the most recent garbage collection event on this pool." - - // JvmGcDuration is the metric conforming to the "jvm.gc.duration" semantic - // conventions. It represents the duration of JVM garbage collection actions. - // Instrument: histogram - // Unit: s - // Stability: Stable - JvmGcDurationName = "jvm.gc.duration" - JvmGcDurationUnit = "s" - JvmGcDurationDescription = "Duration of JVM garbage collection actions." - - // JvmThreadCount is the metric conforming to the "jvm.thread.count" semantic - // conventions. It represents the number of executing platform threads. - // Instrument: updowncounter - // Unit: {thread} - // Stability: Stable - JvmThreadCountName = "jvm.thread.count" - JvmThreadCountUnit = "{thread}" - JvmThreadCountDescription = "Number of executing platform threads." - - // JvmClassLoaded is the metric conforming to the "jvm.class.loaded" semantic - // conventions. It represents the number of classes loaded since JVM start. - // Instrument: counter - // Unit: {class} - // Stability: Stable - JvmClassLoadedName = "jvm.class.loaded" - JvmClassLoadedUnit = "{class}" - JvmClassLoadedDescription = "Number of classes loaded since JVM start." - - // JvmClassUnloaded is the metric conforming to the "jvm.class.unloaded" - // semantic conventions. It represents the number of classes unloaded since JVM - // start. - // Instrument: counter - // Unit: {class} - // Stability: Stable - JvmClassUnloadedName = "jvm.class.unloaded" - JvmClassUnloadedUnit = "{class}" - JvmClassUnloadedDescription = "Number of classes unloaded since JVM start." - - // JvmClassCount is the metric conforming to the "jvm.class.count" semantic - // conventions. It represents the number of classes currently loaded. - // Instrument: updowncounter - // Unit: {class} - // Stability: Stable - JvmClassCountName = "jvm.class.count" - JvmClassCountUnit = "{class}" - JvmClassCountDescription = "Number of classes currently loaded." - - // JvmCPUCount is the metric conforming to the "jvm.cpu.count" semantic - // conventions. It represents the number of processors available to the Java - // virtual machine. - // Instrument: updowncounter - // Unit: {cpu} - // Stability: Stable - JvmCPUCountName = "jvm.cpu.count" - JvmCPUCountUnit = "{cpu}" - JvmCPUCountDescription = "Number of processors available to the Java virtual machine." - - // JvmCPUTime is the metric conforming to the "jvm.cpu.time" semantic - // conventions. It represents the cPU time used by the process as reported by - // the JVM. - // Instrument: counter - // Unit: s - // Stability: Stable - JvmCPUTimeName = "jvm.cpu.time" - JvmCPUTimeUnit = "s" - JvmCPUTimeDescription = "CPU time used by the process as reported by the JVM." - - // JvmCPURecentUtilization is the metric conforming to the - // "jvm.cpu.recent_utilization" semantic conventions. It represents the recent - // CPU utilization for the process as reported by the JVM. - // Instrument: gauge - // Unit: 1 - // Stability: Stable - JvmCPURecentUtilizationName = "jvm.cpu.recent_utilization" - JvmCPURecentUtilizationUnit = "1" - JvmCPURecentUtilizationDescription = "Recent CPU utilization for the process as reported by the JVM." - - // MessagingPublishDuration is the metric conforming to the - // "messaging.publish.duration" semantic conventions. It represents the - // measures the duration of publish operation. - // Instrument: histogram - // Unit: s - // Stability: Experimental - MessagingPublishDurationName = "messaging.publish.duration" - MessagingPublishDurationUnit = "s" - MessagingPublishDurationDescription = "Measures the duration of publish operation." - - // MessagingReceiveDuration is the metric conforming to the - // "messaging.receive.duration" semantic conventions. It represents the - // measures the duration of receive operation. - // Instrument: histogram - // Unit: s - // Stability: Experimental - MessagingReceiveDurationName = "messaging.receive.duration" - MessagingReceiveDurationUnit = "s" - MessagingReceiveDurationDescription = "Measures the duration of receive operation." - - // MessagingDeliverDuration is the metric conforming to the - // "messaging.deliver.duration" semantic conventions. It represents the - // measures the duration of deliver operation. - // Instrument: histogram - // Unit: s - // Stability: Experimental - MessagingDeliverDurationName = "messaging.deliver.duration" - MessagingDeliverDurationUnit = "s" - MessagingDeliverDurationDescription = "Measures the duration of deliver operation." - - // MessagingPublishMessages is the metric conforming to the - // "messaging.publish.messages" semantic conventions. It represents the - // measures the number of published messages. - // Instrument: counter - // Unit: {message} - // Stability: Experimental - MessagingPublishMessagesName = "messaging.publish.messages" - MessagingPublishMessagesUnit = "{message}" - MessagingPublishMessagesDescription = "Measures the number of published messages." - - // MessagingReceiveMessages is the metric conforming to the - // "messaging.receive.messages" semantic conventions. It represents the - // measures the number of received messages. - // Instrument: counter - // Unit: {message} - // Stability: Experimental - MessagingReceiveMessagesName = "messaging.receive.messages" - MessagingReceiveMessagesUnit = "{message}" - MessagingReceiveMessagesDescription = "Measures the number of received messages." - - // MessagingDeliverMessages is the metric conforming to the - // "messaging.deliver.messages" semantic conventions. It represents the - // measures the number of delivered messages. - // Instrument: counter - // Unit: {message} - // Stability: Experimental - MessagingDeliverMessagesName = "messaging.deliver.messages" - MessagingDeliverMessagesUnit = "{message}" - MessagingDeliverMessagesDescription = "Measures the number of delivered messages." - - // RPCServerDuration is the metric conforming to the "rpc.server.duration" - // semantic conventions. It represents the measures the duration of inbound - // RPC. - // Instrument: histogram - // Unit: ms - // Stability: Experimental - RPCServerDurationName = "rpc.server.duration" - RPCServerDurationUnit = "ms" - RPCServerDurationDescription = "Measures the duration of inbound RPC." - - // RPCServerRequestSize is the metric conforming to the - // "rpc.server.request.size" semantic conventions. It represents the measures - // the size of RPC request messages (uncompressed). - // Instrument: histogram - // Unit: By - // Stability: Experimental - RPCServerRequestSizeName = "rpc.server.request.size" - RPCServerRequestSizeUnit = "By" - RPCServerRequestSizeDescription = "Measures the size of RPC request messages (uncompressed)." - - // RPCServerResponseSize is the metric conforming to the - // "rpc.server.response.size" semantic conventions. It represents the measures - // the size of RPC response messages (uncompressed). - // Instrument: histogram - // Unit: By - // Stability: Experimental - RPCServerResponseSizeName = "rpc.server.response.size" - RPCServerResponseSizeUnit = "By" - RPCServerResponseSizeDescription = "Measures the size of RPC response messages (uncompressed)." - - // RPCServerRequestsPerRPC is the metric conforming to the - // "rpc.server.requests_per_rpc" semantic conventions. It represents the - // measures the number of messages received per RPC. - // Instrument: histogram - // Unit: {count} - // Stability: Experimental - RPCServerRequestsPerRPCName = "rpc.server.requests_per_rpc" - RPCServerRequestsPerRPCUnit = "{count}" - RPCServerRequestsPerRPCDescription = "Measures the number of messages received per RPC." - - // RPCServerResponsesPerRPC is the metric conforming to the - // "rpc.server.responses_per_rpc" semantic conventions. It represents the - // measures the number of messages sent per RPC. - // Instrument: histogram - // Unit: {count} - // Stability: Experimental - RPCServerResponsesPerRPCName = "rpc.server.responses_per_rpc" - RPCServerResponsesPerRPCUnit = "{count}" - RPCServerResponsesPerRPCDescription = "Measures the number of messages sent per RPC." - - // RPCClientDuration is the metric conforming to the "rpc.client.duration" - // semantic conventions. It represents the measures the duration of outbound - // RPC. - // Instrument: histogram - // Unit: ms - // Stability: Experimental - RPCClientDurationName = "rpc.client.duration" - RPCClientDurationUnit = "ms" - RPCClientDurationDescription = "Measures the duration of outbound RPC." - - // RPCClientRequestSize is the metric conforming to the - // "rpc.client.request.size" semantic conventions. It represents the measures - // the size of RPC request messages (uncompressed). - // Instrument: histogram - // Unit: By - // Stability: Experimental - RPCClientRequestSizeName = "rpc.client.request.size" - RPCClientRequestSizeUnit = "By" - RPCClientRequestSizeDescription = "Measures the size of RPC request messages (uncompressed)." - - // RPCClientResponseSize is the metric conforming to the - // "rpc.client.response.size" semantic conventions. It represents the measures - // the size of RPC response messages (uncompressed). - // Instrument: histogram - // Unit: By - // Stability: Experimental - RPCClientResponseSizeName = "rpc.client.response.size" - RPCClientResponseSizeUnit = "By" - RPCClientResponseSizeDescription = "Measures the size of RPC response messages (uncompressed)." - - // RPCClientRequestsPerRPC is the metric conforming to the - // "rpc.client.requests_per_rpc" semantic conventions. It represents the - // measures the number of messages received per RPC. - // Instrument: histogram - // Unit: {count} - // Stability: Experimental - RPCClientRequestsPerRPCName = "rpc.client.requests_per_rpc" - RPCClientRequestsPerRPCUnit = "{count}" - RPCClientRequestsPerRPCDescription = "Measures the number of messages received per RPC." - - // RPCClientResponsesPerRPC is the metric conforming to the - // "rpc.client.responses_per_rpc" semantic conventions. It represents the - // measures the number of messages sent per RPC. - // Instrument: histogram - // Unit: {count} - // Stability: Experimental - RPCClientResponsesPerRPCName = "rpc.client.responses_per_rpc" - RPCClientResponsesPerRPCUnit = "{count}" - RPCClientResponsesPerRPCDescription = "Measures the number of messages sent per RPC." - - // SystemCPUTime is the metric conforming to the "system.cpu.time" semantic - // conventions. It represents the seconds each logical CPU spent on each mode. - // Instrument: counter - // Unit: s - // Stability: Experimental - SystemCPUTimeName = "system.cpu.time" - SystemCPUTimeUnit = "s" - SystemCPUTimeDescription = "Seconds each logical CPU spent on each mode" - - // SystemCPUUtilization is the metric conforming to the - // "system.cpu.utilization" semantic conventions. It represents the difference - // in system.cpu.time since the last measurement, divided by the elapsed time - // and number of logical CPUs. - // Instrument: gauge - // Unit: 1 - // Stability: Experimental - SystemCPUUtilizationName = "system.cpu.utilization" - SystemCPUUtilizationUnit = "1" - SystemCPUUtilizationDescription = "Difference in system.cpu.time since the last measurement, divided by the elapsed time and number of logical CPUs" - - // SystemCPUFrequency is the metric conforming to the "system.cpu.frequency" - // semantic conventions. It represents the reports the current frequency of the - // CPU in Hz. - // Instrument: gauge - // Unit: {Hz} - // Stability: Experimental - SystemCPUFrequencyName = "system.cpu.frequency" - SystemCPUFrequencyUnit = "{Hz}" - SystemCPUFrequencyDescription = "Reports the current frequency of the CPU in Hz" - - // SystemCPUPhysicalCount is the metric conforming to the - // "system.cpu.physical.count" semantic conventions. It represents the reports - // the number of actual physical processor cores on the hardware. - // Instrument: updowncounter - // Unit: {cpu} - // Stability: Experimental - SystemCPUPhysicalCountName = "system.cpu.physical.count" - SystemCPUPhysicalCountUnit = "{cpu}" - SystemCPUPhysicalCountDescription = "Reports the number of actual physical processor cores on the hardware" - - // SystemCPULogicalCount is the metric conforming to the - // "system.cpu.logical.count" semantic conventions. It represents the reports - // the number of logical (virtual) processor cores created by the operating - // system to manage multitasking. - // Instrument: updowncounter - // Unit: {cpu} - // Stability: Experimental - SystemCPULogicalCountName = "system.cpu.logical.count" - SystemCPULogicalCountUnit = "{cpu}" - SystemCPULogicalCountDescription = "Reports the number of logical (virtual) processor cores created by the operating system to manage multitasking" - - // SystemMemoryUsage is the metric conforming to the "system.memory.usage" - // semantic conventions. It represents the reports memory in use by state. - // Instrument: updowncounter - // Unit: By - // Stability: Experimental - SystemMemoryUsageName = "system.memory.usage" - SystemMemoryUsageUnit = "By" - SystemMemoryUsageDescription = "Reports memory in use by state." - - // SystemMemoryLimit is the metric conforming to the "system.memory.limit" - // semantic conventions. It represents the total memory available in the - // system. - // Instrument: updowncounter - // Unit: By - // Stability: Experimental - SystemMemoryLimitName = "system.memory.limit" - SystemMemoryLimitUnit = "By" - SystemMemoryLimitDescription = "Total memory available in the system." - - // SystemMemoryUtilization is the metric conforming to the - // "system.memory.utilization" semantic conventions. - // Instrument: gauge - // Unit: 1 - // Stability: Experimental - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemMemoryUtilizationName = "system.memory.utilization" - SystemMemoryUtilizationUnit = "1" - - // SystemPagingUsage is the metric conforming to the "system.paging.usage" - // semantic conventions. It represents the unix swap or windows pagefile usage. - // Instrument: updowncounter - // Unit: By - // Stability: Experimental - SystemPagingUsageName = "system.paging.usage" - SystemPagingUsageUnit = "By" - SystemPagingUsageDescription = "Unix swap or windows pagefile usage" - - // SystemPagingUtilization is the metric conforming to the - // "system.paging.utilization" semantic conventions. - // Instrument: gauge - // Unit: 1 - // Stability: Experimental - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemPagingUtilizationName = "system.paging.utilization" - SystemPagingUtilizationUnit = "1" - - // SystemPagingFaults is the metric conforming to the "system.paging.faults" - // semantic conventions. - // Instrument: counter - // Unit: {fault} - // Stability: Experimental - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemPagingFaultsName = "system.paging.faults" - SystemPagingFaultsUnit = "{fault}" - - // SystemPagingOperations is the metric conforming to the - // "system.paging.operations" semantic conventions. - // Instrument: counter - // Unit: {operation} - // Stability: Experimental - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemPagingOperationsName = "system.paging.operations" - SystemPagingOperationsUnit = "{operation}" - - // SystemDiskIo is the metric conforming to the "system.disk.io" semantic - // conventions. - // Instrument: counter - // Unit: By - // Stability: Experimental - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemDiskIoName = "system.disk.io" - SystemDiskIoUnit = "By" - - // SystemDiskOperations is the metric conforming to the - // "system.disk.operations" semantic conventions. - // Instrument: counter - // Unit: {operation} - // Stability: Experimental - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemDiskOperationsName = "system.disk.operations" - SystemDiskOperationsUnit = "{operation}" - - // SystemDiskIoTime is the metric conforming to the "system.disk.io_time" - // semantic conventions. It represents the time disk spent activated. - // Instrument: counter - // Unit: s - // Stability: Experimental - SystemDiskIoTimeName = "system.disk.io_time" - SystemDiskIoTimeUnit = "s" - SystemDiskIoTimeDescription = "Time disk spent activated" - - // SystemDiskOperationTime is the metric conforming to the - // "system.disk.operation_time" semantic conventions. It represents the sum of - // the time each operation took to complete. - // Instrument: counter - // Unit: s - // Stability: Experimental - SystemDiskOperationTimeName = "system.disk.operation_time" - SystemDiskOperationTimeUnit = "s" - SystemDiskOperationTimeDescription = "Sum of the time each operation took to complete" - - // SystemDiskMerged is the metric conforming to the "system.disk.merged" - // semantic conventions. - // Instrument: counter - // Unit: {operation} - // Stability: Experimental - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemDiskMergedName = "system.disk.merged" - SystemDiskMergedUnit = "{operation}" - - // SystemFilesystemUsage is the metric conforming to the - // "system.filesystem.usage" semantic conventions. - // Instrument: updowncounter - // Unit: By - // Stability: Experimental - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemFilesystemUsageName = "system.filesystem.usage" - SystemFilesystemUsageUnit = "By" - - // SystemFilesystemUtilization is the metric conforming to the - // "system.filesystem.utilization" semantic conventions. - // Instrument: gauge - // Unit: 1 - // Stability: Experimental - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemFilesystemUtilizationName = "system.filesystem.utilization" - SystemFilesystemUtilizationUnit = "1" - - // SystemNetworkDropped is the metric conforming to the - // "system.network.dropped" semantic conventions. It represents the count of - // packets that are dropped or discarded even though there was no error. - // Instrument: counter - // Unit: {packet} - // Stability: Experimental - SystemNetworkDroppedName = "system.network.dropped" - SystemNetworkDroppedUnit = "{packet}" - SystemNetworkDroppedDescription = "Count of packets that are dropped or discarded even though there was no error" - - // SystemNetworkPackets is the metric conforming to the - // "system.network.packets" semantic conventions. - // Instrument: counter - // Unit: {packet} - // Stability: Experimental - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemNetworkPacketsName = "system.network.packets" - SystemNetworkPacketsUnit = "{packet}" - - // SystemNetworkErrors is the metric conforming to the "system.network.errors" - // semantic conventions. It represents the count of network errors detected. - // Instrument: counter - // Unit: {error} - // Stability: Experimental - SystemNetworkErrorsName = "system.network.errors" - SystemNetworkErrorsUnit = "{error}" - SystemNetworkErrorsDescription = "Count of network errors detected" - - // SystemNetworkIo is the metric conforming to the "system.network.io" semantic - // conventions. - // Instrument: counter - // Unit: By - // Stability: Experimental - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemNetworkIoName = "system.network.io" - SystemNetworkIoUnit = "By" - - // SystemNetworkConnections is the metric conforming to the - // "system.network.connections" semantic conventions. - // Instrument: updowncounter - // Unit: {connection} - // Stability: Experimental - // NOTE: The description (brief) for this metric is not defined in the semantic-conventions repository. - SystemNetworkConnectionsName = "system.network.connections" - SystemNetworkConnectionsUnit = "{connection}" - - // SystemProcessesCount is the metric conforming to the - // "system.processes.count" semantic conventions. It represents the total - // number of processes in each state. - // Instrument: updowncounter - // Unit: {process} - // Stability: Experimental - SystemProcessesCountName = "system.processes.count" - SystemProcessesCountUnit = "{process}" - SystemProcessesCountDescription = "Total number of processes in each state" - - // SystemProcessesCreated is the metric conforming to the - // "system.processes.created" semantic conventions. It represents the total - // number of processes created over uptime of the host. - // Instrument: counter - // Unit: {process} - // Stability: Experimental - SystemProcessesCreatedName = "system.processes.created" - SystemProcessesCreatedUnit = "{process}" - SystemProcessesCreatedDescription = "Total number of processes created over uptime of the host" - - // SystemLinuxMemoryAvailable is the metric conforming to the - // "system.linux.memory.available" semantic conventions. It represents an - // estimate of how much memory is available for starting new applications, - // without causing swapping. - // Instrument: updowncounter - // Unit: By - // Stability: Experimental - SystemLinuxMemoryAvailableName = "system.linux.memory.available" - SystemLinuxMemoryAvailableUnit = "By" - SystemLinuxMemoryAvailableDescription = "An estimate of how much memory is available for starting new applications, without causing swapping" -) diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/resource.go b/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/resource.go deleted file mode 100644 index d66bbe9c..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/resource.go +++ /dev/null @@ -1,2545 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Code generated from semantic convention specification. DO NOT EDIT. - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0" - -import "go.opentelemetry.io/otel/attribute" - -// A cloud environment (e.g. GCP, Azure, AWS). -const ( - // CloudAccountIDKey is the attribute Key conforming to the - // "cloud.account.id" semantic conventions. It represents the cloud account - // ID the resource is assigned to. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '111111111111', 'opentelemetry' - CloudAccountIDKey = attribute.Key("cloud.account.id") - - // CloudAvailabilityZoneKey is the attribute Key conforming to the - // "cloud.availability_zone" semantic conventions. It represents the cloud - // regions often have multiple, isolated locations known as zones to - // increase availability. Availability zone represents the zone where the - // resource is running. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'us-east-1c' - // Note: Availability zones are called "zones" on Alibaba Cloud and Google - // Cloud. - CloudAvailabilityZoneKey = attribute.Key("cloud.availability_zone") - - // CloudPlatformKey is the attribute Key conforming to the "cloud.platform" - // semantic conventions. It represents the cloud platform in use. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Note: The prefix of the service SHOULD match the one specified in - // `cloud.provider`. - CloudPlatformKey = attribute.Key("cloud.platform") - - // CloudProviderKey is the attribute Key conforming to the "cloud.provider" - // semantic conventions. It represents the name of the cloud provider. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - CloudProviderKey = attribute.Key("cloud.provider") - - // CloudRegionKey is the attribute Key conforming to the "cloud.region" - // semantic conventions. It represents the geographical region the resource - // is running. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'us-central1', 'us-east-1' - // Note: Refer to your provider's docs to see the available regions, for - // example [Alibaba Cloud - // regions](https://www.alibabacloud.com/help/doc-detail/40654.htm), [AWS - // regions](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/), - // [Azure - // regions](https://azure.microsoft.com/global-infrastructure/geographies/), - // [Google Cloud regions](https://cloud.google.com/about/locations), or - // [Tencent Cloud - // regions](https://www.tencentcloud.com/document/product/213/6091). - CloudRegionKey = attribute.Key("cloud.region") - - // CloudResourceIDKey is the attribute Key conforming to the - // "cloud.resource_id" semantic conventions. It represents the cloud - // provider-specific native identifier of the monitored cloud resource - // (e.g. an - // [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) - // on AWS, a [fully qualified resource - // ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) - // on Azure, a [full resource - // name](https://cloud.google.com/apis/design/resource_names#full_resource_name) - // on GCP) - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'arn:aws:lambda:REGION:ACCOUNT_ID:function:my-function', - // '//run.googleapis.com/projects/PROJECT_ID/locations/LOCATION_ID/services/SERVICE_ID', - // '/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions/' - // Note: On some cloud providers, it may not be possible to determine the - // full ID at startup, - // so it may be necessary to set `cloud.resource_id` as a span attribute - // instead. - // - // The exact value to use for `cloud.resource_id` depends on the cloud - // provider. - // The following well-known definitions MUST be used if you set this - // attribute and they apply: - // - // * **AWS Lambda:** The function - // [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html). - // Take care not to use the "invoked ARN" directly but replace any - // [alias - // suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) - // with the resolved function version, as the same runtime instance may - // be invokable with - // multiple different aliases. - // * **GCP:** The [URI of the - // resource](https://cloud.google.com/iam/docs/full-resource-names) - // * **Azure:** The [Fully Qualified Resource - // ID](https://docs.microsoft.com/rest/api/resources/resources/get-by-id) - // of the invoked function, - // *not* the function app, having the form - // `/subscriptions//resourceGroups//providers/Microsoft.Web/sites//functions/`. - // This means that a span attribute MUST be used, as an Azure function - // app can host multiple functions that would usually share - // a TracerProvider. - CloudResourceIDKey = attribute.Key("cloud.resource_id") -) - -var ( - // Alibaba Cloud Elastic Compute Service - CloudPlatformAlibabaCloudECS = CloudPlatformKey.String("alibaba_cloud_ecs") - // Alibaba Cloud Function Compute - CloudPlatformAlibabaCloudFc = CloudPlatformKey.String("alibaba_cloud_fc") - // Red Hat OpenShift on Alibaba Cloud - CloudPlatformAlibabaCloudOpenshift = CloudPlatformKey.String("alibaba_cloud_openshift") - // AWS Elastic Compute Cloud - CloudPlatformAWSEC2 = CloudPlatformKey.String("aws_ec2") - // AWS Elastic Container Service - CloudPlatformAWSECS = CloudPlatformKey.String("aws_ecs") - // AWS Elastic Kubernetes Service - CloudPlatformAWSEKS = CloudPlatformKey.String("aws_eks") - // AWS Lambda - CloudPlatformAWSLambda = CloudPlatformKey.String("aws_lambda") - // AWS Elastic Beanstalk - CloudPlatformAWSElasticBeanstalk = CloudPlatformKey.String("aws_elastic_beanstalk") - // AWS App Runner - CloudPlatformAWSAppRunner = CloudPlatformKey.String("aws_app_runner") - // Red Hat OpenShift on AWS (ROSA) - CloudPlatformAWSOpenshift = CloudPlatformKey.String("aws_openshift") - // Azure Virtual Machines - CloudPlatformAzureVM = CloudPlatformKey.String("azure_vm") - // Azure Container Instances - CloudPlatformAzureContainerInstances = CloudPlatformKey.String("azure_container_instances") - // Azure Kubernetes Service - CloudPlatformAzureAKS = CloudPlatformKey.String("azure_aks") - // Azure Functions - CloudPlatformAzureFunctions = CloudPlatformKey.String("azure_functions") - // Azure App Service - CloudPlatformAzureAppService = CloudPlatformKey.String("azure_app_service") - // Azure Red Hat OpenShift - CloudPlatformAzureOpenshift = CloudPlatformKey.String("azure_openshift") - // Google Bare Metal Solution (BMS) - CloudPlatformGCPBareMetalSolution = CloudPlatformKey.String("gcp_bare_metal_solution") - // Google Cloud Compute Engine (GCE) - CloudPlatformGCPComputeEngine = CloudPlatformKey.String("gcp_compute_engine") - // Google Cloud Run - CloudPlatformGCPCloudRun = CloudPlatformKey.String("gcp_cloud_run") - // Google Cloud Kubernetes Engine (GKE) - CloudPlatformGCPKubernetesEngine = CloudPlatformKey.String("gcp_kubernetes_engine") - // Google Cloud Functions (GCF) - CloudPlatformGCPCloudFunctions = CloudPlatformKey.String("gcp_cloud_functions") - // Google Cloud App Engine (GAE) - CloudPlatformGCPAppEngine = CloudPlatformKey.String("gcp_app_engine") - // Red Hat OpenShift on Google Cloud - CloudPlatformGCPOpenshift = CloudPlatformKey.String("gcp_openshift") - // Red Hat OpenShift on IBM Cloud - CloudPlatformIbmCloudOpenshift = CloudPlatformKey.String("ibm_cloud_openshift") - // Tencent Cloud Cloud Virtual Machine (CVM) - CloudPlatformTencentCloudCvm = CloudPlatformKey.String("tencent_cloud_cvm") - // Tencent Cloud Elastic Kubernetes Service (EKS) - CloudPlatformTencentCloudEKS = CloudPlatformKey.String("tencent_cloud_eks") - // Tencent Cloud Serverless Cloud Function (SCF) - CloudPlatformTencentCloudScf = CloudPlatformKey.String("tencent_cloud_scf") -) - -var ( - // Alibaba Cloud - CloudProviderAlibabaCloud = CloudProviderKey.String("alibaba_cloud") - // Amazon Web Services - CloudProviderAWS = CloudProviderKey.String("aws") - // Microsoft Azure - CloudProviderAzure = CloudProviderKey.String("azure") - // Google Cloud Platform - CloudProviderGCP = CloudProviderKey.String("gcp") - // Heroku Platform as a Service - CloudProviderHeroku = CloudProviderKey.String("heroku") - // IBM Cloud - CloudProviderIbmCloud = CloudProviderKey.String("ibm_cloud") - // Tencent Cloud - CloudProviderTencentCloud = CloudProviderKey.String("tencent_cloud") -) - -// CloudAccountID returns an attribute KeyValue conforming to the -// "cloud.account.id" semantic conventions. It represents the cloud account ID -// the resource is assigned to. -func CloudAccountID(val string) attribute.KeyValue { - return CloudAccountIDKey.String(val) -} - -// CloudAvailabilityZone returns an attribute KeyValue conforming to the -// "cloud.availability_zone" semantic conventions. It represents the cloud -// regions often have multiple, isolated locations known as zones to increase -// availability. Availability zone represents the zone where the resource is -// running. -func CloudAvailabilityZone(val string) attribute.KeyValue { - return CloudAvailabilityZoneKey.String(val) -} - -// CloudRegion returns an attribute KeyValue conforming to the -// "cloud.region" semantic conventions. It represents the geographical region -// the resource is running. -func CloudRegion(val string) attribute.KeyValue { - return CloudRegionKey.String(val) -} - -// CloudResourceID returns an attribute KeyValue conforming to the -// "cloud.resource_id" semantic conventions. It represents the cloud -// provider-specific native identifier of the monitored cloud resource (e.g. an -// [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) -// on AWS, a [fully qualified resource -// ID](https://learn.microsoft.com/rest/api/resources/resources/get-by-id) on -// Azure, a [full resource -// name](https://cloud.google.com/apis/design/resource_names#full_resource_name) -// on GCP) -func CloudResourceID(val string) attribute.KeyValue { - return CloudResourceIDKey.String(val) -} - -// A container instance. -const ( - // ContainerCommandKey is the attribute Key conforming to the - // "container.command" semantic conventions. It represents the command used - // to run the container (i.e. the command name). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'otelcontribcol' - // Note: If using embedded credentials or sensitive data, it is recommended - // to remove them to prevent potential leakage. - ContainerCommandKey = attribute.Key("container.command") - - // ContainerCommandArgsKey is the attribute Key conforming to the - // "container.command_args" semantic conventions. It represents the all the - // command arguments (including the command/executable itself) run by the - // container. [2] - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'otelcontribcol, --config, config.yaml' - ContainerCommandArgsKey = attribute.Key("container.command_args") - - // ContainerCommandLineKey is the attribute Key conforming to the - // "container.command_line" semantic conventions. It represents the full - // command run by the container as a single string representing the full - // command. [2] - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'otelcontribcol --config config.yaml' - ContainerCommandLineKey = attribute.Key("container.command_line") - - // ContainerIDKey is the attribute Key conforming to the "container.id" - // semantic conventions. It represents the container ID. Usually a UUID, as - // for example used to [identify Docker - // containers](https://docs.docker.com/engine/reference/run/#container-identification). - // The UUID might be abbreviated. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'a3bf90e006b2' - ContainerIDKey = attribute.Key("container.id") - - // ContainerImageIDKey is the attribute Key conforming to the - // "container.image.id" semantic conventions. It represents the runtime - // specific image identifier. Usually a hash algorithm followed by a UUID. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // 'sha256:19c92d0a00d1b66d897bceaa7319bee0dd38a10a851c60bcec9474aa3f01e50f' - // Note: Docker defines a sha256 of the image id; `container.image.id` - // corresponds to the `Image` field from the Docker container inspect - // [API](https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerInspect) - // endpoint. - // K8S defines a link to the container registry repository with digest - // `"imageID": "registry.azurecr.io - // /namespace/service/dockerfile@sha256:bdeabd40c3a8a492eaf9e8e44d0ebbb84bac7ee25ac0cf8a7159d25f62555625"`. - // The ID is assinged by the container runtime and can vary in different - // environments. Consider using `oci.manifest.digest` if it is important to - // identify the same image in different environments/runtimes. - ContainerImageIDKey = attribute.Key("container.image.id") - - // ContainerImageNameKey is the attribute Key conforming to the - // "container.image.name" semantic conventions. It represents the name of - // the image the container was built on. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'gcr.io/opentelemetry/operator' - ContainerImageNameKey = attribute.Key("container.image.name") - - // ContainerImageRepoDigestsKey is the attribute Key conforming to the - // "container.image.repo_digests" semantic conventions. It represents the - // repo digests of the container image as provided by the container - // runtime. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // 'example@sha256:afcc7f1ac1b49db317a7196c902e61c6c3c4607d63599ee1a82d702d249a0ccb', - // 'internal.registry.example.com:5000/example@sha256:b69959407d21e8a062e0416bf13405bb2b71ed7a84dde4158ebafacfa06f5578' - // Note: - // [Docker](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect) - // and - // [CRI](https://github.com/kubernetes/cri-api/blob/c75ef5b473bbe2d0a4fc92f82235efd665ea8e9f/pkg/apis/runtime/v1/api.proto#L1237-L1238) - // report those under the `RepoDigests` field. - ContainerImageRepoDigestsKey = attribute.Key("container.image.repo_digests") - - // ContainerImageTagsKey is the attribute Key conforming to the - // "container.image.tags" semantic conventions. It represents the container - // image tags. An example can be found in [Docker Image - // Inspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect). - // Should be only the `` section of the full name for example from - // `registry.example.com/my-org/my-image:`. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'v1.27.1', '3.5.7-0' - ContainerImageTagsKey = attribute.Key("container.image.tags") - - // ContainerNameKey is the attribute Key conforming to the "container.name" - // semantic conventions. It represents the container name used by container - // runtime. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry-autoconf' - ContainerNameKey = attribute.Key("container.name") - - // ContainerRuntimeKey is the attribute Key conforming to the - // "container.runtime" semantic conventions. It represents the container - // runtime managing this container. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'docker', 'containerd', 'rkt' - ContainerRuntimeKey = attribute.Key("container.runtime") -) - -// ContainerCommand returns an attribute KeyValue conforming to the -// "container.command" semantic conventions. It represents the command used to -// run the container (i.e. the command name). -func ContainerCommand(val string) attribute.KeyValue { - return ContainerCommandKey.String(val) -} - -// ContainerCommandArgs returns an attribute KeyValue conforming to the -// "container.command_args" semantic conventions. It represents the all the -// command arguments (including the command/executable itself) run by the -// container. [2] -func ContainerCommandArgs(val ...string) attribute.KeyValue { - return ContainerCommandArgsKey.StringSlice(val) -} - -// ContainerCommandLine returns an attribute KeyValue conforming to the -// "container.command_line" semantic conventions. It represents the full -// command run by the container as a single string representing the full -// command. [2] -func ContainerCommandLine(val string) attribute.KeyValue { - return ContainerCommandLineKey.String(val) -} - -// ContainerID returns an attribute KeyValue conforming to the -// "container.id" semantic conventions. It represents the container ID. Usually -// a UUID, as for example used to [identify Docker -// containers](https://docs.docker.com/engine/reference/run/#container-identification). -// The UUID might be abbreviated. -func ContainerID(val string) attribute.KeyValue { - return ContainerIDKey.String(val) -} - -// ContainerImageID returns an attribute KeyValue conforming to the -// "container.image.id" semantic conventions. It represents the runtime -// specific image identifier. Usually a hash algorithm followed by a UUID. -func ContainerImageID(val string) attribute.KeyValue { - return ContainerImageIDKey.String(val) -} - -// ContainerImageName returns an attribute KeyValue conforming to the -// "container.image.name" semantic conventions. It represents the name of the -// image the container was built on. -func ContainerImageName(val string) attribute.KeyValue { - return ContainerImageNameKey.String(val) -} - -// ContainerImageRepoDigests returns an attribute KeyValue conforming to the -// "container.image.repo_digests" semantic conventions. It represents the repo -// digests of the container image as provided by the container runtime. -func ContainerImageRepoDigests(val ...string) attribute.KeyValue { - return ContainerImageRepoDigestsKey.StringSlice(val) -} - -// ContainerImageTags returns an attribute KeyValue conforming to the -// "container.image.tags" semantic conventions. It represents the container -// image tags. An example can be found in [Docker Image -// Inspect](https://docs.docker.com/engine/api/v1.43/#tag/Image/operation/ImageInspect). -// Should be only the `` section of the full name for example from -// `registry.example.com/my-org/my-image:`. -func ContainerImageTags(val ...string) attribute.KeyValue { - return ContainerImageTagsKey.StringSlice(val) -} - -// ContainerName returns an attribute KeyValue conforming to the -// "container.name" semantic conventions. It represents the container name used -// by container runtime. -func ContainerName(val string) attribute.KeyValue { - return ContainerNameKey.String(val) -} - -// ContainerRuntime returns an attribute KeyValue conforming to the -// "container.runtime" semantic conventions. It represents the container -// runtime managing this container. -func ContainerRuntime(val string) attribute.KeyValue { - return ContainerRuntimeKey.String(val) -} - -// Describes device attributes. -const ( - // DeviceIDKey is the attribute Key conforming to the "device.id" semantic - // conventions. It represents a unique identifier representing the device - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2ab2916d-a51f-4ac8-80ee-45ac31a28092' - // Note: The device identifier MUST only be defined using the values - // outlined below. This value is not an advertising identifier and MUST NOT - // be used as such. On iOS (Swift or Objective-C), this value MUST be equal - // to the [vendor - // identifier](https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor). - // On Android (Java or Kotlin), this value MUST be equal to the Firebase - // Installation ID or a globally unique UUID which is persisted across - // sessions in your application. More information can be found - // [here](https://developer.android.com/training/articles/user-data-ids) on - // best practices and exact implementation details. Caution should be taken - // when storing personal data or anything which can identify a user. GDPR - // and data protection laws may apply, ensure you do your own due - // diligence. - DeviceIDKey = attribute.Key("device.id") - - // DeviceManufacturerKey is the attribute Key conforming to the - // "device.manufacturer" semantic conventions. It represents the name of - // the device manufacturer - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Apple', 'Samsung' - // Note: The Android OS provides this field via - // [Build](https://developer.android.com/reference/android/os/Build#MANUFACTURER). - // iOS apps SHOULD hardcode the value `Apple`. - DeviceManufacturerKey = attribute.Key("device.manufacturer") - - // DeviceModelIdentifierKey is the attribute Key conforming to the - // "device.model.identifier" semantic conventions. It represents the model - // identifier for the device - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'iPhone3,4', 'SM-G920F' - // Note: It's recommended this value represents a machine-readable version - // of the model identifier rather than the market or consumer-friendly name - // of the device. - DeviceModelIdentifierKey = attribute.Key("device.model.identifier") - - // DeviceModelNameKey is the attribute Key conforming to the - // "device.model.name" semantic conventions. It represents the marketing - // name for the device model - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'iPhone 6s Plus', 'Samsung Galaxy S6' - // Note: It's recommended this value represents a human-readable version of - // the device model rather than a machine-readable alternative. - DeviceModelNameKey = attribute.Key("device.model.name") -) - -// DeviceID returns an attribute KeyValue conforming to the "device.id" -// semantic conventions. It represents a unique identifier representing the -// device -func DeviceID(val string) attribute.KeyValue { - return DeviceIDKey.String(val) -} - -// DeviceManufacturer returns an attribute KeyValue conforming to the -// "device.manufacturer" semantic conventions. It represents the name of the -// device manufacturer -func DeviceManufacturer(val string) attribute.KeyValue { - return DeviceManufacturerKey.String(val) -} - -// DeviceModelIdentifier returns an attribute KeyValue conforming to the -// "device.model.identifier" semantic conventions. It represents the model -// identifier for the device -func DeviceModelIdentifier(val string) attribute.KeyValue { - return DeviceModelIdentifierKey.String(val) -} - -// DeviceModelName returns an attribute KeyValue conforming to the -// "device.model.name" semantic conventions. It represents the marketing name -// for the device model -func DeviceModelName(val string) attribute.KeyValue { - return DeviceModelNameKey.String(val) -} - -// A host is defined as a computing instance. For example, physical servers, -// virtual machines, switches or disk array. -const ( - // HostArchKey is the attribute Key conforming to the "host.arch" semantic - // conventions. It represents the CPU architecture the host system is - // running on. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - HostArchKey = attribute.Key("host.arch") - - // HostCPUCacheL2SizeKey is the attribute Key conforming to the - // "host.cpu.cache.l2.size" semantic conventions. It represents the amount - // of level 2 memory cache available to the processor (in Bytes). - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 12288000 - HostCPUCacheL2SizeKey = attribute.Key("host.cpu.cache.l2.size") - - // HostCPUFamilyKey is the attribute Key conforming to the - // "host.cpu.family" semantic conventions. It represents the family or - // generation of the CPU. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '6', 'PA-RISC 1.1e' - HostCPUFamilyKey = attribute.Key("host.cpu.family") - - // HostCPUModelIDKey is the attribute Key conforming to the - // "host.cpu.model.id" semantic conventions. It represents the model - // identifier. It provides more granular information about the CPU, - // distinguishing it from other CPUs within the same family. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '6', '9000/778/B180L' - HostCPUModelIDKey = attribute.Key("host.cpu.model.id") - - // HostCPUModelNameKey is the attribute Key conforming to the - // "host.cpu.model.name" semantic conventions. It represents the model - // designation of the processor. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz' - HostCPUModelNameKey = attribute.Key("host.cpu.model.name") - - // HostCPUSteppingKey is the attribute Key conforming to the - // "host.cpu.stepping" semantic conventions. It represents the stepping or - // core revisions. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1 - HostCPUSteppingKey = attribute.Key("host.cpu.stepping") - - // HostCPUVendorIDKey is the attribute Key conforming to the - // "host.cpu.vendor.id" semantic conventions. It represents the processor - // manufacturer identifier. A maximum 12-character string. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'GenuineIntel' - // Note: [CPUID](https://wiki.osdev.org/CPUID) command returns the vendor - // ID string in EBX, EDX and ECX registers. Writing these to memory in this - // order results in a 12-character string. - HostCPUVendorIDKey = attribute.Key("host.cpu.vendor.id") - - // HostIDKey is the attribute Key conforming to the "host.id" semantic - // conventions. It represents the unique host ID. For Cloud, this must be - // the instance_id assigned by the cloud provider. For non-containerized - // systems, this should be the `machine-id`. See the table below for the - // sources to use to determine the `machine-id` based on operating system. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'fdbf79e8af94cb7f9e8df36789187052' - HostIDKey = attribute.Key("host.id") - - // HostImageIDKey is the attribute Key conforming to the "host.image.id" - // semantic conventions. It represents the vM image ID or host OS image ID. - // For Cloud, this value is from the provider. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'ami-07b06b442921831e5' - HostImageIDKey = attribute.Key("host.image.id") - - // HostImageNameKey is the attribute Key conforming to the - // "host.image.name" semantic conventions. It represents the name of the VM - // image or OS install the host was instantiated from. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'infra-ami-eks-worker-node-7d4ec78312', 'CentOS-8-x86_64-1905' - HostImageNameKey = attribute.Key("host.image.name") - - // HostImageVersionKey is the attribute Key conforming to the - // "host.image.version" semantic conventions. It represents the version - // string of the VM image or host OS as defined in [Version - // Attributes](/docs/resource/README.md#version-attributes). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '0.1' - HostImageVersionKey = attribute.Key("host.image.version") - - // HostIPKey is the attribute Key conforming to the "host.ip" semantic - // conventions. It represents the available IP addresses of the host, - // excluding loopback interfaces. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: '192.168.1.140', 'fe80::abc2:4a28:737a:609e' - // Note: IPv4 Addresses MUST be specified in dotted-quad notation. IPv6 - // addresses MUST be specified in the [RFC - // 5952](https://www.rfc-editor.org/rfc/rfc5952.html) format. - HostIPKey = attribute.Key("host.ip") - - // HostMacKey is the attribute Key conforming to the "host.mac" semantic - // conventions. It represents the available MAC addresses of the host, - // excluding loopback interfaces. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'AC-DE-48-23-45-67', 'AC-DE-48-23-45-67-01-9F' - // Note: MAC Addresses MUST be represented in [IEEE RA hexadecimal - // form](https://standards.ieee.org/wp-content/uploads/import/documents/tutorials/eui.pdf): - // as hyphen-separated octets in uppercase hexadecimal form from most to - // least significant. - HostMacKey = attribute.Key("host.mac") - - // HostNameKey is the attribute Key conforming to the "host.name" semantic - // conventions. It represents the name of the host. On Unix systems, it may - // contain what the hostname command returns, or the fully qualified - // hostname, or another name specified by the user. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry-test' - HostNameKey = attribute.Key("host.name") - - // HostTypeKey is the attribute Key conforming to the "host.type" semantic - // conventions. It represents the type of host. For Cloud, this must be the - // machine type. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'n1-standard-1' - HostTypeKey = attribute.Key("host.type") -) - -var ( - // AMD64 - HostArchAMD64 = HostArchKey.String("amd64") - // ARM32 - HostArchARM32 = HostArchKey.String("arm32") - // ARM64 - HostArchARM64 = HostArchKey.String("arm64") - // Itanium - HostArchIA64 = HostArchKey.String("ia64") - // 32-bit PowerPC - HostArchPPC32 = HostArchKey.String("ppc32") - // 64-bit PowerPC - HostArchPPC64 = HostArchKey.String("ppc64") - // IBM z/Architecture - HostArchS390x = HostArchKey.String("s390x") - // 32-bit x86 - HostArchX86 = HostArchKey.String("x86") -) - -// HostCPUCacheL2Size returns an attribute KeyValue conforming to the -// "host.cpu.cache.l2.size" semantic conventions. It represents the amount of -// level 2 memory cache available to the processor (in Bytes). -func HostCPUCacheL2Size(val int) attribute.KeyValue { - return HostCPUCacheL2SizeKey.Int(val) -} - -// HostCPUFamily returns an attribute KeyValue conforming to the -// "host.cpu.family" semantic conventions. It represents the family or -// generation of the CPU. -func HostCPUFamily(val string) attribute.KeyValue { - return HostCPUFamilyKey.String(val) -} - -// HostCPUModelID returns an attribute KeyValue conforming to the -// "host.cpu.model.id" semantic conventions. It represents the model -// identifier. It provides more granular information about the CPU, -// distinguishing it from other CPUs within the same family. -func HostCPUModelID(val string) attribute.KeyValue { - return HostCPUModelIDKey.String(val) -} - -// HostCPUModelName returns an attribute KeyValue conforming to the -// "host.cpu.model.name" semantic conventions. It represents the model -// designation of the processor. -func HostCPUModelName(val string) attribute.KeyValue { - return HostCPUModelNameKey.String(val) -} - -// HostCPUStepping returns an attribute KeyValue conforming to the -// "host.cpu.stepping" semantic conventions. It represents the stepping or core -// revisions. -func HostCPUStepping(val int) attribute.KeyValue { - return HostCPUSteppingKey.Int(val) -} - -// HostCPUVendorID returns an attribute KeyValue conforming to the -// "host.cpu.vendor.id" semantic conventions. It represents the processor -// manufacturer identifier. A maximum 12-character string. -func HostCPUVendorID(val string) attribute.KeyValue { - return HostCPUVendorIDKey.String(val) -} - -// HostID returns an attribute KeyValue conforming to the "host.id" semantic -// conventions. It represents the unique host ID. For Cloud, this must be the -// instance_id assigned by the cloud provider. For non-containerized systems, -// this should be the `machine-id`. See the table below for the sources to use -// to determine the `machine-id` based on operating system. -func HostID(val string) attribute.KeyValue { - return HostIDKey.String(val) -} - -// HostImageID returns an attribute KeyValue conforming to the -// "host.image.id" semantic conventions. It represents the vM image ID or host -// OS image ID. For Cloud, this value is from the provider. -func HostImageID(val string) attribute.KeyValue { - return HostImageIDKey.String(val) -} - -// HostImageName returns an attribute KeyValue conforming to the -// "host.image.name" semantic conventions. It represents the name of the VM -// image or OS install the host was instantiated from. -func HostImageName(val string) attribute.KeyValue { - return HostImageNameKey.String(val) -} - -// HostImageVersion returns an attribute KeyValue conforming to the -// "host.image.version" semantic conventions. It represents the version string -// of the VM image or host OS as defined in [Version -// Attributes](/docs/resource/README.md#version-attributes). -func HostImageVersion(val string) attribute.KeyValue { - return HostImageVersionKey.String(val) -} - -// HostIP returns an attribute KeyValue conforming to the "host.ip" semantic -// conventions. It represents the available IP addresses of the host, excluding -// loopback interfaces. -func HostIP(val ...string) attribute.KeyValue { - return HostIPKey.StringSlice(val) -} - -// HostMac returns an attribute KeyValue conforming to the "host.mac" -// semantic conventions. It represents the available MAC addresses of the host, -// excluding loopback interfaces. -func HostMac(val ...string) attribute.KeyValue { - return HostMacKey.StringSlice(val) -} - -// HostName returns an attribute KeyValue conforming to the "host.name" -// semantic conventions. It represents the name of the host. On Unix systems, -// it may contain what the hostname command returns, or the fully qualified -// hostname, or another name specified by the user. -func HostName(val string) attribute.KeyValue { - return HostNameKey.String(val) -} - -// HostType returns an attribute KeyValue conforming to the "host.type" -// semantic conventions. It represents the type of host. For Cloud, this must -// be the machine type. -func HostType(val string) attribute.KeyValue { - return HostTypeKey.String(val) -} - -// Kubernetes resource attributes. -const ( - // K8SClusterNameKey is the attribute Key conforming to the - // "k8s.cluster.name" semantic conventions. It represents the name of the - // cluster. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry-cluster' - K8SClusterNameKey = attribute.Key("k8s.cluster.name") - - // K8SClusterUIDKey is the attribute Key conforming to the - // "k8s.cluster.uid" semantic conventions. It represents a pseudo-ID for - // the cluster, set to the UID of the `kube-system` namespace. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '218fc5a9-a5f1-4b54-aa05-46717d0ab26d' - // Note: K8S doesn't have support for obtaining a cluster ID. If this is - // ever - // added, we will recommend collecting the `k8s.cluster.uid` through the - // official APIs. In the meantime, we are able to use the `uid` of the - // `kube-system` namespace as a proxy for cluster ID. Read on for the - // rationale. - // - // Every object created in a K8S cluster is assigned a distinct UID. The - // `kube-system` namespace is used by Kubernetes itself and will exist - // for the lifetime of the cluster. Using the `uid` of the `kube-system` - // namespace is a reasonable proxy for the K8S ClusterID as it will only - // change if the cluster is rebuilt. Furthermore, Kubernetes UIDs are - // UUIDs as standardized by - // [ISO/IEC 9834-8 and ITU-T - // X.667](https://www.itu.int/ITU-T/studygroups/com17/oid.html). - // Which states: - // - // > If generated according to one of the mechanisms defined in Rec. - // ITU-T X.667 | ISO/IEC 9834-8, a UUID is either guaranteed to be - // different from all other UUIDs generated before 3603 A.D., or is - // extremely likely to be different (depending on the mechanism chosen). - // - // Therefore, UIDs between clusters should be extremely unlikely to - // conflict. - K8SClusterUIDKey = attribute.Key("k8s.cluster.uid") - - // K8SContainerNameKey is the attribute Key conforming to the - // "k8s.container.name" semantic conventions. It represents the name of the - // Container from Pod specification, must be unique within a Pod. Container - // runtime usually uses different globally unique name (`container.name`). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'redis' - K8SContainerNameKey = attribute.Key("k8s.container.name") - - // K8SContainerRestartCountKey is the attribute Key conforming to the - // "k8s.container.restart_count" semantic conventions. It represents the - // number of times the container was restarted. This attribute can be used - // to identify a particular container (running or stopped) within a - // container spec. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 0, 2 - K8SContainerRestartCountKey = attribute.Key("k8s.container.restart_count") - - // K8SCronJobNameKey is the attribute Key conforming to the - // "k8s.cronjob.name" semantic conventions. It represents the name of the - // CronJob. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry' - K8SCronJobNameKey = attribute.Key("k8s.cronjob.name") - - // K8SCronJobUIDKey is the attribute Key conforming to the - // "k8s.cronjob.uid" semantic conventions. It represents the UID of the - // CronJob. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SCronJobUIDKey = attribute.Key("k8s.cronjob.uid") - - // K8SDaemonSetNameKey is the attribute Key conforming to the - // "k8s.daemonset.name" semantic conventions. It represents the name of the - // DaemonSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry' - K8SDaemonSetNameKey = attribute.Key("k8s.daemonset.name") - - // K8SDaemonSetUIDKey is the attribute Key conforming to the - // "k8s.daemonset.uid" semantic conventions. It represents the UID of the - // DaemonSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SDaemonSetUIDKey = attribute.Key("k8s.daemonset.uid") - - // K8SDeploymentNameKey is the attribute Key conforming to the - // "k8s.deployment.name" semantic conventions. It represents the name of - // the Deployment. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry' - K8SDeploymentNameKey = attribute.Key("k8s.deployment.name") - - // K8SDeploymentUIDKey is the attribute Key conforming to the - // "k8s.deployment.uid" semantic conventions. It represents the UID of the - // Deployment. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SDeploymentUIDKey = attribute.Key("k8s.deployment.uid") - - // K8SJobNameKey is the attribute Key conforming to the "k8s.job.name" - // semantic conventions. It represents the name of the Job. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry' - K8SJobNameKey = attribute.Key("k8s.job.name") - - // K8SJobUIDKey is the attribute Key conforming to the "k8s.job.uid" - // semantic conventions. It represents the UID of the Job. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SJobUIDKey = attribute.Key("k8s.job.uid") - - // K8SNamespaceNameKey is the attribute Key conforming to the - // "k8s.namespace.name" semantic conventions. It represents the name of the - // namespace that the pod is running in. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'default' - K8SNamespaceNameKey = attribute.Key("k8s.namespace.name") - - // K8SNodeNameKey is the attribute Key conforming to the "k8s.node.name" - // semantic conventions. It represents the name of the Node. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'node-1' - K8SNodeNameKey = attribute.Key("k8s.node.name") - - // K8SNodeUIDKey is the attribute Key conforming to the "k8s.node.uid" - // semantic conventions. It represents the UID of the Node. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '1eb3a0c6-0477-4080-a9cb-0cb7db65c6a2' - K8SNodeUIDKey = attribute.Key("k8s.node.uid") - - // K8SPodNameKey is the attribute Key conforming to the "k8s.pod.name" - // semantic conventions. It represents the name of the Pod. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry-pod-autoconf' - K8SPodNameKey = attribute.Key("k8s.pod.name") - - // K8SPodUIDKey is the attribute Key conforming to the "k8s.pod.uid" - // semantic conventions. It represents the UID of the Pod. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SPodUIDKey = attribute.Key("k8s.pod.uid") - - // K8SReplicaSetNameKey is the attribute Key conforming to the - // "k8s.replicaset.name" semantic conventions. It represents the name of - // the ReplicaSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry' - K8SReplicaSetNameKey = attribute.Key("k8s.replicaset.name") - - // K8SReplicaSetUIDKey is the attribute Key conforming to the - // "k8s.replicaset.uid" semantic conventions. It represents the UID of the - // ReplicaSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SReplicaSetUIDKey = attribute.Key("k8s.replicaset.uid") - - // K8SStatefulSetNameKey is the attribute Key conforming to the - // "k8s.statefulset.name" semantic conventions. It represents the name of - // the StatefulSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry' - K8SStatefulSetNameKey = attribute.Key("k8s.statefulset.name") - - // K8SStatefulSetUIDKey is the attribute Key conforming to the - // "k8s.statefulset.uid" semantic conventions. It represents the UID of the - // StatefulSet. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '275ecb36-5aa8-4c2a-9c47-d8bb681b9aff' - K8SStatefulSetUIDKey = attribute.Key("k8s.statefulset.uid") -) - -// K8SClusterName returns an attribute KeyValue conforming to the -// "k8s.cluster.name" semantic conventions. It represents the name of the -// cluster. -func K8SClusterName(val string) attribute.KeyValue { - return K8SClusterNameKey.String(val) -} - -// K8SClusterUID returns an attribute KeyValue conforming to the -// "k8s.cluster.uid" semantic conventions. It represents a pseudo-ID for the -// cluster, set to the UID of the `kube-system` namespace. -func K8SClusterUID(val string) attribute.KeyValue { - return K8SClusterUIDKey.String(val) -} - -// K8SContainerName returns an attribute KeyValue conforming to the -// "k8s.container.name" semantic conventions. It represents the name of the -// Container from Pod specification, must be unique within a Pod. Container -// runtime usually uses different globally unique name (`container.name`). -func K8SContainerName(val string) attribute.KeyValue { - return K8SContainerNameKey.String(val) -} - -// K8SContainerRestartCount returns an attribute KeyValue conforming to the -// "k8s.container.restart_count" semantic conventions. It represents the number -// of times the container was restarted. This attribute can be used to identify -// a particular container (running or stopped) within a container spec. -func K8SContainerRestartCount(val int) attribute.KeyValue { - return K8SContainerRestartCountKey.Int(val) -} - -// K8SCronJobName returns an attribute KeyValue conforming to the -// "k8s.cronjob.name" semantic conventions. It represents the name of the -// CronJob. -func K8SCronJobName(val string) attribute.KeyValue { - return K8SCronJobNameKey.String(val) -} - -// K8SCronJobUID returns an attribute KeyValue conforming to the -// "k8s.cronjob.uid" semantic conventions. It represents the UID of the -// CronJob. -func K8SCronJobUID(val string) attribute.KeyValue { - return K8SCronJobUIDKey.String(val) -} - -// K8SDaemonSetName returns an attribute KeyValue conforming to the -// "k8s.daemonset.name" semantic conventions. It represents the name of the -// DaemonSet. -func K8SDaemonSetName(val string) attribute.KeyValue { - return K8SDaemonSetNameKey.String(val) -} - -// K8SDaemonSetUID returns an attribute KeyValue conforming to the -// "k8s.daemonset.uid" semantic conventions. It represents the UID of the -// DaemonSet. -func K8SDaemonSetUID(val string) attribute.KeyValue { - return K8SDaemonSetUIDKey.String(val) -} - -// K8SDeploymentName returns an attribute KeyValue conforming to the -// "k8s.deployment.name" semantic conventions. It represents the name of the -// Deployment. -func K8SDeploymentName(val string) attribute.KeyValue { - return K8SDeploymentNameKey.String(val) -} - -// K8SDeploymentUID returns an attribute KeyValue conforming to the -// "k8s.deployment.uid" semantic conventions. It represents the UID of the -// Deployment. -func K8SDeploymentUID(val string) attribute.KeyValue { - return K8SDeploymentUIDKey.String(val) -} - -// K8SJobName returns an attribute KeyValue conforming to the "k8s.job.name" -// semantic conventions. It represents the name of the Job. -func K8SJobName(val string) attribute.KeyValue { - return K8SJobNameKey.String(val) -} - -// K8SJobUID returns an attribute KeyValue conforming to the "k8s.job.uid" -// semantic conventions. It represents the UID of the Job. -func K8SJobUID(val string) attribute.KeyValue { - return K8SJobUIDKey.String(val) -} - -// K8SNamespaceName returns an attribute KeyValue conforming to the -// "k8s.namespace.name" semantic conventions. It represents the name of the -// namespace that the pod is running in. -func K8SNamespaceName(val string) attribute.KeyValue { - return K8SNamespaceNameKey.String(val) -} - -// K8SNodeName returns an attribute KeyValue conforming to the -// "k8s.node.name" semantic conventions. It represents the name of the Node. -func K8SNodeName(val string) attribute.KeyValue { - return K8SNodeNameKey.String(val) -} - -// K8SNodeUID returns an attribute KeyValue conforming to the "k8s.node.uid" -// semantic conventions. It represents the UID of the Node. -func K8SNodeUID(val string) attribute.KeyValue { - return K8SNodeUIDKey.String(val) -} - -// K8SPodName returns an attribute KeyValue conforming to the "k8s.pod.name" -// semantic conventions. It represents the name of the Pod. -func K8SPodName(val string) attribute.KeyValue { - return K8SPodNameKey.String(val) -} - -// K8SPodUID returns an attribute KeyValue conforming to the "k8s.pod.uid" -// semantic conventions. It represents the UID of the Pod. -func K8SPodUID(val string) attribute.KeyValue { - return K8SPodUIDKey.String(val) -} - -// K8SReplicaSetName returns an attribute KeyValue conforming to the -// "k8s.replicaset.name" semantic conventions. It represents the name of the -// ReplicaSet. -func K8SReplicaSetName(val string) attribute.KeyValue { - return K8SReplicaSetNameKey.String(val) -} - -// K8SReplicaSetUID returns an attribute KeyValue conforming to the -// "k8s.replicaset.uid" semantic conventions. It represents the UID of the -// ReplicaSet. -func K8SReplicaSetUID(val string) attribute.KeyValue { - return K8SReplicaSetUIDKey.String(val) -} - -// K8SStatefulSetName returns an attribute KeyValue conforming to the -// "k8s.statefulset.name" semantic conventions. It represents the name of the -// StatefulSet. -func K8SStatefulSetName(val string) attribute.KeyValue { - return K8SStatefulSetNameKey.String(val) -} - -// K8SStatefulSetUID returns an attribute KeyValue conforming to the -// "k8s.statefulset.uid" semantic conventions. It represents the UID of the -// StatefulSet. -func K8SStatefulSetUID(val string) attribute.KeyValue { - return K8SStatefulSetUIDKey.String(val) -} - -// An OCI image manifest. -const ( - // OciManifestDigestKey is the attribute Key conforming to the - // "oci.manifest.digest" semantic conventions. It represents the digest of - // the OCI image manifest. For container images specifically is the digest - // by which the container image is known. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // 'sha256:e4ca62c0d62f3e886e684806dfe9d4e0cda60d54986898173c1083856cfda0f4' - // Note: Follows [OCI Image Manifest - // Specification](https://github.com/opencontainers/image-spec/blob/main/manifest.md), - // and specifically the [Digest - // property](https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests). - // An example can be found in [Example Image - // Manifest](https://docs.docker.com/registry/spec/manifest-v2-2/#example-image-manifest). - OciManifestDigestKey = attribute.Key("oci.manifest.digest") -) - -// OciManifestDigest returns an attribute KeyValue conforming to the -// "oci.manifest.digest" semantic conventions. It represents the digest of the -// OCI image manifest. For container images specifically is the digest by which -// the container image is known. -func OciManifestDigest(val string) attribute.KeyValue { - return OciManifestDigestKey.String(val) -} - -// The operating system (OS) on which the process represented by this resource -// is running. -const ( - // OSBuildIDKey is the attribute Key conforming to the "os.build_id" - // semantic conventions. It represents the unique identifier for a - // particular build or compilation of the operating system. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'TQ3C.230805.001.B2', '20E247', '22621' - OSBuildIDKey = attribute.Key("os.build_id") - - // OSDescriptionKey is the attribute Key conforming to the "os.description" - // semantic conventions. It represents the human readable (not intended to - // be parsed) OS version information, like e.g. reported by `ver` or - // `lsb_release -a` commands. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Microsoft Windows [Version 10.0.18363.778]', 'Ubuntu 18.04.1 - // LTS' - OSDescriptionKey = attribute.Key("os.description") - - // OSNameKey is the attribute Key conforming to the "os.name" semantic - // conventions. It represents the human readable operating system name. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'iOS', 'Android', 'Ubuntu' - OSNameKey = attribute.Key("os.name") - - // OSTypeKey is the attribute Key conforming to the "os.type" semantic - // conventions. It represents the operating system type. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - OSTypeKey = attribute.Key("os.type") - - // OSVersionKey is the attribute Key conforming to the "os.version" - // semantic conventions. It represents the version string of the operating - // system as defined in [Version - // Attributes](/docs/resource/README.md#version-attributes). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '14.2.1', '18.04.1' - OSVersionKey = attribute.Key("os.version") -) - -var ( - // Microsoft Windows - OSTypeWindows = OSTypeKey.String("windows") - // Linux - OSTypeLinux = OSTypeKey.String("linux") - // Apple Darwin - OSTypeDarwin = OSTypeKey.String("darwin") - // FreeBSD - OSTypeFreeBSD = OSTypeKey.String("freebsd") - // NetBSD - OSTypeNetBSD = OSTypeKey.String("netbsd") - // OpenBSD - OSTypeOpenBSD = OSTypeKey.String("openbsd") - // DragonFly BSD - OSTypeDragonflyBSD = OSTypeKey.String("dragonflybsd") - // HP-UX (Hewlett Packard Unix) - OSTypeHPUX = OSTypeKey.String("hpux") - // AIX (Advanced Interactive eXecutive) - OSTypeAIX = OSTypeKey.String("aix") - // SunOS, Oracle Solaris - OSTypeSolaris = OSTypeKey.String("solaris") - // IBM z/OS - OSTypeZOS = OSTypeKey.String("z_os") -) - -// OSBuildID returns an attribute KeyValue conforming to the "os.build_id" -// semantic conventions. It represents the unique identifier for a particular -// build or compilation of the operating system. -func OSBuildID(val string) attribute.KeyValue { - return OSBuildIDKey.String(val) -} - -// OSDescription returns an attribute KeyValue conforming to the -// "os.description" semantic conventions. It represents the human readable (not -// intended to be parsed) OS version information, like e.g. reported by `ver` -// or `lsb_release -a` commands. -func OSDescription(val string) attribute.KeyValue { - return OSDescriptionKey.String(val) -} - -// OSName returns an attribute KeyValue conforming to the "os.name" semantic -// conventions. It represents the human readable operating system name. -func OSName(val string) attribute.KeyValue { - return OSNameKey.String(val) -} - -// OSVersion returns an attribute KeyValue conforming to the "os.version" -// semantic conventions. It represents the version string of the operating -// system as defined in [Version -// Attributes](/docs/resource/README.md#version-attributes). -func OSVersion(val string) attribute.KeyValue { - return OSVersionKey.String(val) -} - -// An operating system process. -const ( - // ProcessCommandKey is the attribute Key conforming to the - // "process.command" semantic conventions. It represents the command used - // to launch the process (i.e. the command name). On Linux based systems, - // can be set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can - // be set to the first parameter extracted from `GetCommandLineW`. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'cmd/otelcol' - ProcessCommandKey = attribute.Key("process.command") - - // ProcessCommandArgsKey is the attribute Key conforming to the - // "process.command_args" semantic conventions. It represents the all the - // command arguments (including the command/executable itself) as received - // by the process. On Linux-based systems (and some other Unixoid systems - // supporting procfs), can be set according to the list of null-delimited - // strings extracted from `proc/[pid]/cmdline`. For libc-based executables, - // this would be the full argv vector passed to `main`. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'cmd/otecol', '--config=config.yaml' - ProcessCommandArgsKey = attribute.Key("process.command_args") - - // ProcessCommandLineKey is the attribute Key conforming to the - // "process.command_line" semantic conventions. It represents the full - // command used to launch the process as a single string representing the - // full command. On Windows, can be set to the result of `GetCommandLineW`. - // Do not set this if you have to assemble it just for monitoring; use - // `process.command_args` instead. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'C:\\cmd\\otecol --config="my directory\\config.yaml"' - ProcessCommandLineKey = attribute.Key("process.command_line") - - // ProcessExecutableNameKey is the attribute Key conforming to the - // "process.executable.name" semantic conventions. It represents the name - // of the process executable. On Linux based systems, can be set to the - // `Name` in `proc/[pid]/status`. On Windows, can be set to the base name - // of `GetProcessImageFileNameW`. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'otelcol' - ProcessExecutableNameKey = attribute.Key("process.executable.name") - - // ProcessExecutablePathKey is the attribute Key conforming to the - // "process.executable.path" semantic conventions. It represents the full - // path to the process executable. On Linux based systems, can be set to - // the target of `proc/[pid]/exe`. On Windows, can be set to the result of - // `GetProcessImageFileNameW`. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '/usr/bin/cmd/otelcol' - ProcessExecutablePathKey = attribute.Key("process.executable.path") - - // ProcessOwnerKey is the attribute Key conforming to the "process.owner" - // semantic conventions. It represents the username of the user that owns - // the process. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'root' - ProcessOwnerKey = attribute.Key("process.owner") - - // ProcessParentPIDKey is the attribute Key conforming to the - // "process.parent_pid" semantic conventions. It represents the parent - // Process identifier (PPID). - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 111 - ProcessParentPIDKey = attribute.Key("process.parent_pid") - - // ProcessPIDKey is the attribute Key conforming to the "process.pid" - // semantic conventions. It represents the process identifier (PID). - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1234 - ProcessPIDKey = attribute.Key("process.pid") - - // ProcessRuntimeDescriptionKey is the attribute Key conforming to the - // "process.runtime.description" semantic conventions. It represents an - // additional description about the runtime of the process, for example a - // specific vendor customization of the runtime environment. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Eclipse OpenJ9 Eclipse OpenJ9 VM openj9-0.21.0' - ProcessRuntimeDescriptionKey = attribute.Key("process.runtime.description") - - // ProcessRuntimeNameKey is the attribute Key conforming to the - // "process.runtime.name" semantic conventions. It represents the name of - // the runtime of this process. For compiled native binaries, this SHOULD - // be the name of the compiler. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'OpenJDK Runtime Environment' - ProcessRuntimeNameKey = attribute.Key("process.runtime.name") - - // ProcessRuntimeVersionKey is the attribute Key conforming to the - // "process.runtime.version" semantic conventions. It represents the - // version of the runtime of this process, as returned by the runtime - // without modification. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '14.0.2' - ProcessRuntimeVersionKey = attribute.Key("process.runtime.version") -) - -// ProcessCommand returns an attribute KeyValue conforming to the -// "process.command" semantic conventions. It represents the command used to -// launch the process (i.e. the command name). On Linux based systems, can be -// set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can be set to -// the first parameter extracted from `GetCommandLineW`. -func ProcessCommand(val string) attribute.KeyValue { - return ProcessCommandKey.String(val) -} - -// ProcessCommandArgs returns an attribute KeyValue conforming to the -// "process.command_args" semantic conventions. It represents the all the -// command arguments (including the command/executable itself) as received by -// the process. On Linux-based systems (and some other Unixoid systems -// supporting procfs), can be set according to the list of null-delimited -// strings extracted from `proc/[pid]/cmdline`. For libc-based executables, -// this would be the full argv vector passed to `main`. -func ProcessCommandArgs(val ...string) attribute.KeyValue { - return ProcessCommandArgsKey.StringSlice(val) -} - -// ProcessCommandLine returns an attribute KeyValue conforming to the -// "process.command_line" semantic conventions. It represents the full command -// used to launch the process as a single string representing the full command. -// On Windows, can be set to the result of `GetCommandLineW`. Do not set this -// if you have to assemble it just for monitoring; use `process.command_args` -// instead. -func ProcessCommandLine(val string) attribute.KeyValue { - return ProcessCommandLineKey.String(val) -} - -// ProcessExecutableName returns an attribute KeyValue conforming to the -// "process.executable.name" semantic conventions. It represents the name of -// the process executable. On Linux based systems, can be set to the `Name` in -// `proc/[pid]/status`. On Windows, can be set to the base name of -// `GetProcessImageFileNameW`. -func ProcessExecutableName(val string) attribute.KeyValue { - return ProcessExecutableNameKey.String(val) -} - -// ProcessExecutablePath returns an attribute KeyValue conforming to the -// "process.executable.path" semantic conventions. It represents the full path -// to the process executable. On Linux based systems, can be set to the target -// of `proc/[pid]/exe`. On Windows, can be set to the result of -// `GetProcessImageFileNameW`. -func ProcessExecutablePath(val string) attribute.KeyValue { - return ProcessExecutablePathKey.String(val) -} - -// ProcessOwner returns an attribute KeyValue conforming to the -// "process.owner" semantic conventions. It represents the username of the user -// that owns the process. -func ProcessOwner(val string) attribute.KeyValue { - return ProcessOwnerKey.String(val) -} - -// ProcessParentPID returns an attribute KeyValue conforming to the -// "process.parent_pid" semantic conventions. It represents the parent Process -// identifier (PPID). -func ProcessParentPID(val int) attribute.KeyValue { - return ProcessParentPIDKey.Int(val) -} - -// ProcessPID returns an attribute KeyValue conforming to the "process.pid" -// semantic conventions. It represents the process identifier (PID). -func ProcessPID(val int) attribute.KeyValue { - return ProcessPIDKey.Int(val) -} - -// ProcessRuntimeDescription returns an attribute KeyValue conforming to the -// "process.runtime.description" semantic conventions. It represents an -// additional description about the runtime of the process, for example a -// specific vendor customization of the runtime environment. -func ProcessRuntimeDescription(val string) attribute.KeyValue { - return ProcessRuntimeDescriptionKey.String(val) -} - -// ProcessRuntimeName returns an attribute KeyValue conforming to the -// "process.runtime.name" semantic conventions. It represents the name of the -// runtime of this process. For compiled native binaries, this SHOULD be the -// name of the compiler. -func ProcessRuntimeName(val string) attribute.KeyValue { - return ProcessRuntimeNameKey.String(val) -} - -// ProcessRuntimeVersion returns an attribute KeyValue conforming to the -// "process.runtime.version" semantic conventions. It represents the version of -// the runtime of this process, as returned by the runtime without -// modification. -func ProcessRuntimeVersion(val string) attribute.KeyValue { - return ProcessRuntimeVersionKey.String(val) -} - -// The Android platform on which the Android application is running. -const ( - // AndroidOSAPILevelKey is the attribute Key conforming to the - // "android.os.api_level" semantic conventions. It represents the uniquely - // identifies the framework API revision offered by a version - // (`os.version`) of the android operating system. More information can be - // found - // [here](https://developer.android.com/guide/topics/manifest/uses-sdk-element#APILevels). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '33', '32' - AndroidOSAPILevelKey = attribute.Key("android.os.api_level") -) - -// AndroidOSAPILevel returns an attribute KeyValue conforming to the -// "android.os.api_level" semantic conventions. It represents the uniquely -// identifies the framework API revision offered by a version (`os.version`) of -// the android operating system. More information can be found -// [here](https://developer.android.com/guide/topics/manifest/uses-sdk-element#APILevels). -func AndroidOSAPILevel(val string) attribute.KeyValue { - return AndroidOSAPILevelKey.String(val) -} - -// The web browser in which the application represented by the resource is -// running. The `browser.*` attributes MUST be used only for resources that -// represent applications running in a web browser (regardless of whether -// running on a mobile or desktop device). -const ( - // BrowserBrandsKey is the attribute Key conforming to the "browser.brands" - // semantic conventions. It represents the array of brand name and version - // separated by a space - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: ' Not A;Brand 99', 'Chromium 99', 'Chrome 99' - // Note: This value is intended to be taken from the [UA client hints - // API](https://wicg.github.io/ua-client-hints/#interface) - // (`navigator.userAgentData.brands`). - BrowserBrandsKey = attribute.Key("browser.brands") - - // BrowserLanguageKey is the attribute Key conforming to the - // "browser.language" semantic conventions. It represents the preferred - // language of the user using the browser - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'en', 'en-US', 'fr', 'fr-FR' - // Note: This value is intended to be taken from the Navigator API - // `navigator.language`. - BrowserLanguageKey = attribute.Key("browser.language") - - // BrowserMobileKey is the attribute Key conforming to the "browser.mobile" - // semantic conventions. It represents a boolean that is true if the - // browser is running on a mobile device - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - // Note: This value is intended to be taken from the [UA client hints - // API](https://wicg.github.io/ua-client-hints/#interface) - // (`navigator.userAgentData.mobile`). If unavailable, this attribute - // SHOULD be left unset. - BrowserMobileKey = attribute.Key("browser.mobile") - - // BrowserPlatformKey is the attribute Key conforming to the - // "browser.platform" semantic conventions. It represents the platform on - // which the browser is running - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Windows', 'macOS', 'Android' - // Note: This value is intended to be taken from the [UA client hints - // API](https://wicg.github.io/ua-client-hints/#interface) - // (`navigator.userAgentData.platform`). If unavailable, the legacy - // `navigator.platform` API SHOULD NOT be used instead and this attribute - // SHOULD be left unset in order for the values to be consistent. - // The list of possible values is defined in the [W3C User-Agent Client - // Hints - // specification](https://wicg.github.io/ua-client-hints/#sec-ch-ua-platform). - // Note that some (but not all) of these values can overlap with values in - // the [`os.type` and `os.name` attributes](./os.md). However, for - // consistency, the values in the `browser.platform` attribute should - // capture the exact value that the user agent provides. - BrowserPlatformKey = attribute.Key("browser.platform") -) - -// BrowserBrands returns an attribute KeyValue conforming to the -// "browser.brands" semantic conventions. It represents the array of brand name -// and version separated by a space -func BrowserBrands(val ...string) attribute.KeyValue { - return BrowserBrandsKey.StringSlice(val) -} - -// BrowserLanguage returns an attribute KeyValue conforming to the -// "browser.language" semantic conventions. It represents the preferred -// language of the user using the browser -func BrowserLanguage(val string) attribute.KeyValue { - return BrowserLanguageKey.String(val) -} - -// BrowserMobile returns an attribute KeyValue conforming to the -// "browser.mobile" semantic conventions. It represents a boolean that is true -// if the browser is running on a mobile device -func BrowserMobile(val bool) attribute.KeyValue { - return BrowserMobileKey.Bool(val) -} - -// BrowserPlatform returns an attribute KeyValue conforming to the -// "browser.platform" semantic conventions. It represents the platform on which -// the browser is running -func BrowserPlatform(val string) attribute.KeyValue { - return BrowserPlatformKey.String(val) -} - -// Resources used by AWS Elastic Container Service (ECS). -const ( - // AWSECSClusterARNKey is the attribute Key conforming to the - // "aws.ecs.cluster.arn" semantic conventions. It represents the ARN of an - // [ECS - // cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster' - AWSECSClusterARNKey = attribute.Key("aws.ecs.cluster.arn") - - // AWSECSContainerARNKey is the attribute Key conforming to the - // "aws.ecs.container.arn" semantic conventions. It represents the Amazon - // Resource Name (ARN) of an [ECS container - // instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // 'arn:aws:ecs:us-west-1:123456789123:container/32624152-9086-4f0e-acae-1a75b14fe4d9' - AWSECSContainerARNKey = attribute.Key("aws.ecs.container.arn") - - // AWSECSLaunchtypeKey is the attribute Key conforming to the - // "aws.ecs.launchtype" semantic conventions. It represents the [launch - // type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) - // for an ECS task. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - AWSECSLaunchtypeKey = attribute.Key("aws.ecs.launchtype") - - // AWSECSTaskARNKey is the attribute Key conforming to the - // "aws.ecs.task.arn" semantic conventions. It represents the ARN of an - // [ECS task - // definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // 'arn:aws:ecs:us-west-1:123456789123:task/10838bed-421f-43ef-870a-f43feacbbb5b' - AWSECSTaskARNKey = attribute.Key("aws.ecs.task.arn") - - // AWSECSTaskFamilyKey is the attribute Key conforming to the - // "aws.ecs.task.family" semantic conventions. It represents the task - // definition family this task definition is a member of. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'opentelemetry-family' - AWSECSTaskFamilyKey = attribute.Key("aws.ecs.task.family") - - // AWSECSTaskRevisionKey is the attribute Key conforming to the - // "aws.ecs.task.revision" semantic conventions. It represents the revision - // for this task definition. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '8', '26' - AWSECSTaskRevisionKey = attribute.Key("aws.ecs.task.revision") -) - -var ( - // ec2 - AWSECSLaunchtypeEC2 = AWSECSLaunchtypeKey.String("ec2") - // fargate - AWSECSLaunchtypeFargate = AWSECSLaunchtypeKey.String("fargate") -) - -// AWSECSClusterARN returns an attribute KeyValue conforming to the -// "aws.ecs.cluster.arn" semantic conventions. It represents the ARN of an [ECS -// cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html). -func AWSECSClusterARN(val string) attribute.KeyValue { - return AWSECSClusterARNKey.String(val) -} - -// AWSECSContainerARN returns an attribute KeyValue conforming to the -// "aws.ecs.container.arn" semantic conventions. It represents the Amazon -// Resource Name (ARN) of an [ECS container -// instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html). -func AWSECSContainerARN(val string) attribute.KeyValue { - return AWSECSContainerARNKey.String(val) -} - -// AWSECSTaskARN returns an attribute KeyValue conforming to the -// "aws.ecs.task.arn" semantic conventions. It represents the ARN of an [ECS -// task -// definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html). -func AWSECSTaskARN(val string) attribute.KeyValue { - return AWSECSTaskARNKey.String(val) -} - -// AWSECSTaskFamily returns an attribute KeyValue conforming to the -// "aws.ecs.task.family" semantic conventions. It represents the task -// definition family this task definition is a member of. -func AWSECSTaskFamily(val string) attribute.KeyValue { - return AWSECSTaskFamilyKey.String(val) -} - -// AWSECSTaskRevision returns an attribute KeyValue conforming to the -// "aws.ecs.task.revision" semantic conventions. It represents the revision for -// this task definition. -func AWSECSTaskRevision(val string) attribute.KeyValue { - return AWSECSTaskRevisionKey.String(val) -} - -// Resources used by AWS Elastic Kubernetes Service (EKS). -const ( - // AWSEKSClusterARNKey is the attribute Key conforming to the - // "aws.eks.cluster.arn" semantic conventions. It represents the ARN of an - // EKS cluster. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'arn:aws:ecs:us-west-2:123456789123:cluster/my-cluster' - AWSEKSClusterARNKey = attribute.Key("aws.eks.cluster.arn") -) - -// AWSEKSClusterARN returns an attribute KeyValue conforming to the -// "aws.eks.cluster.arn" semantic conventions. It represents the ARN of an EKS -// cluster. -func AWSEKSClusterARN(val string) attribute.KeyValue { - return AWSEKSClusterARNKey.String(val) -} - -// Resources specific to Amazon Web Services. -const ( - // AWSLogGroupARNsKey is the attribute Key conforming to the - // "aws.log.group.arns" semantic conventions. It represents the Amazon - // Resource Name(s) (ARN) of the AWS log group(s). - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // 'arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:*' - // Note: See the [log group ARN format - // documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format). - AWSLogGroupARNsKey = attribute.Key("aws.log.group.arns") - - // AWSLogGroupNamesKey is the attribute Key conforming to the - // "aws.log.group.names" semantic conventions. It represents the name(s) of - // the AWS log group(s) an application is writing to. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: '/aws/lambda/my-function', 'opentelemetry-service' - // Note: Multiple log groups must be supported for cases like - // multi-container applications, where a single application has sidecar - // containers, and each write to their own log group. - AWSLogGroupNamesKey = attribute.Key("aws.log.group.names") - - // AWSLogStreamARNsKey is the attribute Key conforming to the - // "aws.log.stream.arns" semantic conventions. It represents the ARN(s) of - // the AWS log stream(s). - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // 'arn:aws:logs:us-west-1:123456789012:log-group:/aws/my/group:log-stream:logs/main/10838bed-421f-43ef-870a-f43feacbbb5b' - // Note: See the [log stream ARN format - // documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format). - // One log group can contain several log streams, so these ARNs necessarily - // identify both a log group and a log stream. - AWSLogStreamARNsKey = attribute.Key("aws.log.stream.arns") - - // AWSLogStreamNamesKey is the attribute Key conforming to the - // "aws.log.stream.names" semantic conventions. It represents the name(s) - // of the AWS log stream(s) an application is writing to. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'logs/main/10838bed-421f-43ef-870a-f43feacbbb5b' - AWSLogStreamNamesKey = attribute.Key("aws.log.stream.names") -) - -// AWSLogGroupARNs returns an attribute KeyValue conforming to the -// "aws.log.group.arns" semantic conventions. It represents the Amazon Resource -// Name(s) (ARN) of the AWS log group(s). -func AWSLogGroupARNs(val ...string) attribute.KeyValue { - return AWSLogGroupARNsKey.StringSlice(val) -} - -// AWSLogGroupNames returns an attribute KeyValue conforming to the -// "aws.log.group.names" semantic conventions. It represents the name(s) of the -// AWS log group(s) an application is writing to. -func AWSLogGroupNames(val ...string) attribute.KeyValue { - return AWSLogGroupNamesKey.StringSlice(val) -} - -// AWSLogStreamARNs returns an attribute KeyValue conforming to the -// "aws.log.stream.arns" semantic conventions. It represents the ARN(s) of the -// AWS log stream(s). -func AWSLogStreamARNs(val ...string) attribute.KeyValue { - return AWSLogStreamARNsKey.StringSlice(val) -} - -// AWSLogStreamNames returns an attribute KeyValue conforming to the -// "aws.log.stream.names" semantic conventions. It represents the name(s) of -// the AWS log stream(s) an application is writing to. -func AWSLogStreamNames(val ...string) attribute.KeyValue { - return AWSLogStreamNamesKey.StringSlice(val) -} - -// Resource used by Google Cloud Run. -const ( - // GCPCloudRunJobExecutionKey is the attribute Key conforming to the - // "gcp.cloud_run.job.execution" semantic conventions. It represents the - // name of the Cloud Run - // [execution](https://cloud.google.com/run/docs/managing/job-executions) - // being run for the Job, as set by the - // [`CLOUD_RUN_EXECUTION`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars) - // environment variable. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'job-name-xxxx', 'sample-job-mdw84' - GCPCloudRunJobExecutionKey = attribute.Key("gcp.cloud_run.job.execution") - - // GCPCloudRunJobTaskIndexKey is the attribute Key conforming to the - // "gcp.cloud_run.job.task_index" semantic conventions. It represents the - // index for a task within an execution as provided by the - // [`CLOUD_RUN_TASK_INDEX`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars) - // environment variable. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 0, 1 - GCPCloudRunJobTaskIndexKey = attribute.Key("gcp.cloud_run.job.task_index") -) - -// GCPCloudRunJobExecution returns an attribute KeyValue conforming to the -// "gcp.cloud_run.job.execution" semantic conventions. It represents the name -// of the Cloud Run -// [execution](https://cloud.google.com/run/docs/managing/job-executions) being -// run for the Job, as set by the -// [`CLOUD_RUN_EXECUTION`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars) -// environment variable. -func GCPCloudRunJobExecution(val string) attribute.KeyValue { - return GCPCloudRunJobExecutionKey.String(val) -} - -// GCPCloudRunJobTaskIndex returns an attribute KeyValue conforming to the -// "gcp.cloud_run.job.task_index" semantic conventions. It represents the index -// for a task within an execution as provided by the -// [`CLOUD_RUN_TASK_INDEX`](https://cloud.google.com/run/docs/container-contract#jobs-env-vars) -// environment variable. -func GCPCloudRunJobTaskIndex(val int) attribute.KeyValue { - return GCPCloudRunJobTaskIndexKey.Int(val) -} - -// Resources used by Google Compute Engine (GCE). -const ( - // GCPGceInstanceHostnameKey is the attribute Key conforming to the - // "gcp.gce.instance.hostname" semantic conventions. It represents the - // hostname of a GCE instance. This is the full value of the default or - // [custom - // hostname](https://cloud.google.com/compute/docs/instances/custom-hostname-vm). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'my-host1234.example.com', - // 'sample-vm.us-west1-b.c.my-project.internal' - GCPGceInstanceHostnameKey = attribute.Key("gcp.gce.instance.hostname") - - // GCPGceInstanceNameKey is the attribute Key conforming to the - // "gcp.gce.instance.name" semantic conventions. It represents the instance - // name of a GCE instance. This is the value provided by `host.name`, the - // visible name of the instance in the Cloud Console UI, and the prefix for - // the default hostname of the instance as defined by the [default internal - // DNS - // name](https://cloud.google.com/compute/docs/internal-dns#instance-fully-qualified-domain-names). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'instance-1', 'my-vm-name' - GCPGceInstanceNameKey = attribute.Key("gcp.gce.instance.name") -) - -// GCPGceInstanceHostname returns an attribute KeyValue conforming to the -// "gcp.gce.instance.hostname" semantic conventions. It represents the hostname -// of a GCE instance. This is the full value of the default or [custom -// hostname](https://cloud.google.com/compute/docs/instances/custom-hostname-vm). -func GCPGceInstanceHostname(val string) attribute.KeyValue { - return GCPGceInstanceHostnameKey.String(val) -} - -// GCPGceInstanceName returns an attribute KeyValue conforming to the -// "gcp.gce.instance.name" semantic conventions. It represents the instance -// name of a GCE instance. This is the value provided by `host.name`, the -// visible name of the instance in the Cloud Console UI, and the prefix for the -// default hostname of the instance as defined by the [default internal DNS -// name](https://cloud.google.com/compute/docs/internal-dns#instance-fully-qualified-domain-names). -func GCPGceInstanceName(val string) attribute.KeyValue { - return GCPGceInstanceNameKey.String(val) -} - -// Heroku dyno metadata -const ( - // HerokuAppIDKey is the attribute Key conforming to the "heroku.app.id" - // semantic conventions. It represents the unique identifier for the - // application - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2daa2797-e42b-4624-9322-ec3f968df4da' - HerokuAppIDKey = attribute.Key("heroku.app.id") - - // HerokuReleaseCommitKey is the attribute Key conforming to the - // "heroku.release.commit" semantic conventions. It represents the commit - // hash for the current release - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'e6134959463efd8966b20e75b913cafe3f5ec' - HerokuReleaseCommitKey = attribute.Key("heroku.release.commit") - - // HerokuReleaseCreationTimestampKey is the attribute Key conforming to the - // "heroku.release.creation_timestamp" semantic conventions. It represents - // the time and date the release was created - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2022-10-23T18:00:42Z' - HerokuReleaseCreationTimestampKey = attribute.Key("heroku.release.creation_timestamp") -) - -// HerokuAppID returns an attribute KeyValue conforming to the -// "heroku.app.id" semantic conventions. It represents the unique identifier -// for the application -func HerokuAppID(val string) attribute.KeyValue { - return HerokuAppIDKey.String(val) -} - -// HerokuReleaseCommit returns an attribute KeyValue conforming to the -// "heroku.release.commit" semantic conventions. It represents the commit hash -// for the current release -func HerokuReleaseCommit(val string) attribute.KeyValue { - return HerokuReleaseCommitKey.String(val) -} - -// HerokuReleaseCreationTimestamp returns an attribute KeyValue conforming -// to the "heroku.release.creation_timestamp" semantic conventions. It -// represents the time and date the release was created -func HerokuReleaseCreationTimestamp(val string) attribute.KeyValue { - return HerokuReleaseCreationTimestampKey.String(val) -} - -// The software deployment. -const ( - // DeploymentEnvironmentKey is the attribute Key conforming to the - // "deployment.environment" semantic conventions. It represents the name of - // the [deployment - // environment](https://wikipedia.org/wiki/Deployment_environment) (aka - // deployment tier). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'staging', 'production' - // Note: `deployment.environment` does not affect the uniqueness - // constraints defined through - // the `service.namespace`, `service.name` and `service.instance.id` - // resource attributes. - // This implies that resources carrying the following attribute - // combinations MUST be - // considered to be identifying the same service: - // - // * `service.name=frontend`, `deployment.environment=production` - // * `service.name=frontend`, `deployment.environment=staging`. - DeploymentEnvironmentKey = attribute.Key("deployment.environment") -) - -// DeploymentEnvironment returns an attribute KeyValue conforming to the -// "deployment.environment" semantic conventions. It represents the name of the -// [deployment environment](https://wikipedia.org/wiki/Deployment_environment) -// (aka deployment tier). -func DeploymentEnvironment(val string) attribute.KeyValue { - return DeploymentEnvironmentKey.String(val) -} - -// A serverless instance. -const ( - // FaaSInstanceKey is the attribute Key conforming to the "faas.instance" - // semantic conventions. It represents the execution environment ID as a - // string, that will be potentially reused for other invocations to the - // same function/function version. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2021/06/28/[$LATEST]2f399eb14537447da05ab2a2e39309de' - // Note: * **AWS Lambda:** Use the (full) log stream name. - FaaSInstanceKey = attribute.Key("faas.instance") - - // FaaSMaxMemoryKey is the attribute Key conforming to the - // "faas.max_memory" semantic conventions. It represents the amount of - // memory available to the serverless function converted to Bytes. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 134217728 - // Note: It's recommended to set this attribute since e.g. too little - // memory can easily stop a Java AWS Lambda function from working - // correctly. On AWS Lambda, the environment variable - // `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` provides this information (which must - // be multiplied by 1,048,576). - FaaSMaxMemoryKey = attribute.Key("faas.max_memory") - - // FaaSNameKey is the attribute Key conforming to the "faas.name" semantic - // conventions. It represents the name of the single function that this - // runtime instance executes. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'my-function', 'myazurefunctionapp/some-function-name' - // Note: This is the name of the function as configured/deployed on the - // FaaS - // platform and is usually different from the name of the callback - // function (which may be stored in the - // [`code.namespace`/`code.function`](/docs/general/attributes.md#source-code-attributes) - // span attributes). - // - // For some cloud providers, the above definition is ambiguous. The - // following - // definition of function name MUST be used for this attribute - // (and consequently the span name) for the listed cloud - // providers/products: - // - // * **Azure:** The full name `/`, i.e., function app name - // followed by a forward slash followed by the function name (this form - // can also be seen in the resource JSON for the function). - // This means that a span attribute MUST be used, as an Azure function - // app can host multiple functions that would usually share - // a TracerProvider (see also the `cloud.resource_id` attribute). - FaaSNameKey = attribute.Key("faas.name") - - // FaaSVersionKey is the attribute Key conforming to the "faas.version" - // semantic conventions. It represents the immutable version of the - // function being executed. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '26', 'pinkfroid-00002' - // Note: Depending on the cloud provider and platform, use: - // - // * **AWS Lambda:** The [function - // version](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html) - // (an integer represented as a decimal string). - // * **Google Cloud Run (Services):** The - // [revision](https://cloud.google.com/run/docs/managing/revisions) - // (i.e., the function name plus the revision suffix). - // * **Google Cloud Functions:** The value of the - // [`K_REVISION` environment - // variable](https://cloud.google.com/functions/docs/env-var#runtime_environment_variables_set_automatically). - // * **Azure Functions:** Not applicable. Do not set this attribute. - FaaSVersionKey = attribute.Key("faas.version") -) - -// FaaSInstance returns an attribute KeyValue conforming to the -// "faas.instance" semantic conventions. It represents the execution -// environment ID as a string, that will be potentially reused for other -// invocations to the same function/function version. -func FaaSInstance(val string) attribute.KeyValue { - return FaaSInstanceKey.String(val) -} - -// FaaSMaxMemory returns an attribute KeyValue conforming to the -// "faas.max_memory" semantic conventions. It represents the amount of memory -// available to the serverless function converted to Bytes. -func FaaSMaxMemory(val int) attribute.KeyValue { - return FaaSMaxMemoryKey.Int(val) -} - -// FaaSName returns an attribute KeyValue conforming to the "faas.name" -// semantic conventions. It represents the name of the single function that -// this runtime instance executes. -func FaaSName(val string) attribute.KeyValue { - return FaaSNameKey.String(val) -} - -// FaaSVersion returns an attribute KeyValue conforming to the -// "faas.version" semantic conventions. It represents the immutable version of -// the function being executed. -func FaaSVersion(val string) attribute.KeyValue { - return FaaSVersionKey.String(val) -} - -// A service instance. -const ( - // ServiceNameKey is the attribute Key conforming to the "service.name" - // semantic conventions. It represents the logical name of the service. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'shoppingcart' - // Note: MUST be the same for all instances of horizontally scaled - // services. If the value was not specified, SDKs MUST fallback to - // `unknown_service:` concatenated with - // [`process.executable.name`](process.md#process), e.g. - // `unknown_service:bash`. If `process.executable.name` is not available, - // the value MUST be set to `unknown_service`. - ServiceNameKey = attribute.Key("service.name") - - // ServiceVersionKey is the attribute Key conforming to the - // "service.version" semantic conventions. It represents the version string - // of the service API or implementation. The format is not defined by these - // conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2.0.0', 'a01dbef8a' - ServiceVersionKey = attribute.Key("service.version") -) - -// ServiceName returns an attribute KeyValue conforming to the -// "service.name" semantic conventions. It represents the logical name of the -// service. -func ServiceName(val string) attribute.KeyValue { - return ServiceNameKey.String(val) -} - -// ServiceVersion returns an attribute KeyValue conforming to the -// "service.version" semantic conventions. It represents the version string of -// the service API or implementation. The format is not defined by these -// conventions. -func ServiceVersion(val string) attribute.KeyValue { - return ServiceVersionKey.String(val) -} - -// A service instance. -const ( - // ServiceInstanceIDKey is the attribute Key conforming to the - // "service.instance.id" semantic conventions. It represents the string ID - // of the service instance. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'my-k8s-pod-deployment-1', - // '627cc493-f310-47de-96bd-71410b7dec09' - // Note: MUST be unique for each instance of the same - // `service.namespace,service.name` pair (in other words - // `service.namespace,service.name,service.instance.id` triplet MUST be - // globally unique). The ID helps to distinguish instances of the same - // service that exist at the same time (e.g. instances of a horizontally - // scaled service). It is preferable for the ID to be persistent and stay - // the same for the lifetime of the service instance, however it is - // acceptable that the ID is ephemeral and changes during important - // lifetime events for the service (e.g. service restarts). If the service - // has no inherent unique ID that can be used as the value of this - // attribute it is recommended to generate a random Version 1 or Version 4 - // RFC 4122 UUID (services aiming for reproducible UUIDs may also use - // Version 5, see RFC 4122 for more recommendations). - ServiceInstanceIDKey = attribute.Key("service.instance.id") - - // ServiceNamespaceKey is the attribute Key conforming to the - // "service.namespace" semantic conventions. It represents a namespace for - // `service.name`. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Shop' - // Note: A string value having a meaning that helps to distinguish a group - // of services, for example the team name that owns a group of services. - // `service.name` is expected to be unique within the same namespace. If - // `service.namespace` is not specified in the Resource then `service.name` - // is expected to be unique for all services that have no explicit - // namespace defined (so the empty/unspecified namespace is simply one more - // valid namespace). Zero-length namespace string is assumed equal to - // unspecified namespace. - ServiceNamespaceKey = attribute.Key("service.namespace") -) - -// ServiceInstanceID returns an attribute KeyValue conforming to the -// "service.instance.id" semantic conventions. It represents the string ID of -// the service instance. -func ServiceInstanceID(val string) attribute.KeyValue { - return ServiceInstanceIDKey.String(val) -} - -// ServiceNamespace returns an attribute KeyValue conforming to the -// "service.namespace" semantic conventions. It represents a namespace for -// `service.name`. -func ServiceNamespace(val string) attribute.KeyValue { - return ServiceNamespaceKey.String(val) -} - -// The telemetry SDK used to capture data recorded by the instrumentation -// libraries. -const ( - // TelemetrySDKLanguageKey is the attribute Key conforming to the - // "telemetry.sdk.language" semantic conventions. It represents the - // language of the telemetry SDK. - // - // Type: Enum - // RequirementLevel: Required - // Stability: experimental - TelemetrySDKLanguageKey = attribute.Key("telemetry.sdk.language") - - // TelemetrySDKNameKey is the attribute Key conforming to the - // "telemetry.sdk.name" semantic conventions. It represents the name of the - // telemetry SDK as defined above. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'opentelemetry' - // Note: The OpenTelemetry SDK MUST set the `telemetry.sdk.name` attribute - // to `opentelemetry`. - // If another SDK, like a fork or a vendor-provided implementation, is - // used, this SDK MUST set the - // `telemetry.sdk.name` attribute to the fully-qualified class or module - // name of this SDK's main entry point - // or another suitable identifier depending on the language. - // The identifier `opentelemetry` is reserved and MUST NOT be used in this - // case. - // All custom identifiers SHOULD be stable across different versions of an - // implementation. - TelemetrySDKNameKey = attribute.Key("telemetry.sdk.name") - - // TelemetrySDKVersionKey is the attribute Key conforming to the - // "telemetry.sdk.version" semantic conventions. It represents the version - // string of the telemetry SDK. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: '1.2.3' - TelemetrySDKVersionKey = attribute.Key("telemetry.sdk.version") -) - -var ( - // cpp - TelemetrySDKLanguageCPP = TelemetrySDKLanguageKey.String("cpp") - // dotnet - TelemetrySDKLanguageDotnet = TelemetrySDKLanguageKey.String("dotnet") - // erlang - TelemetrySDKLanguageErlang = TelemetrySDKLanguageKey.String("erlang") - // go - TelemetrySDKLanguageGo = TelemetrySDKLanguageKey.String("go") - // java - TelemetrySDKLanguageJava = TelemetrySDKLanguageKey.String("java") - // nodejs - TelemetrySDKLanguageNodejs = TelemetrySDKLanguageKey.String("nodejs") - // php - TelemetrySDKLanguagePHP = TelemetrySDKLanguageKey.String("php") - // python - TelemetrySDKLanguagePython = TelemetrySDKLanguageKey.String("python") - // ruby - TelemetrySDKLanguageRuby = TelemetrySDKLanguageKey.String("ruby") - // rust - TelemetrySDKLanguageRust = TelemetrySDKLanguageKey.String("rust") - // swift - TelemetrySDKLanguageSwift = TelemetrySDKLanguageKey.String("swift") - // webjs - TelemetrySDKLanguageWebjs = TelemetrySDKLanguageKey.String("webjs") -) - -// TelemetrySDKName returns an attribute KeyValue conforming to the -// "telemetry.sdk.name" semantic conventions. It represents the name of the -// telemetry SDK as defined above. -func TelemetrySDKName(val string) attribute.KeyValue { - return TelemetrySDKNameKey.String(val) -} - -// TelemetrySDKVersion returns an attribute KeyValue conforming to the -// "telemetry.sdk.version" semantic conventions. It represents the version -// string of the telemetry SDK. -func TelemetrySDKVersion(val string) attribute.KeyValue { - return TelemetrySDKVersionKey.String(val) -} - -// The telemetry SDK used to capture data recorded by the instrumentation -// libraries. -const ( - // TelemetryDistroNameKey is the attribute Key conforming to the - // "telemetry.distro.name" semantic conventions. It represents the name of - // the auto instrumentation agent or distribution, if used. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'parts-unlimited-java' - // Note: Official auto instrumentation agents and distributions SHOULD set - // the `telemetry.distro.name` attribute to - // a string starting with `opentelemetry-`, e.g. - // `opentelemetry-java-instrumentation`. - TelemetryDistroNameKey = attribute.Key("telemetry.distro.name") - - // TelemetryDistroVersionKey is the attribute Key conforming to the - // "telemetry.distro.version" semantic conventions. It represents the - // version string of the auto instrumentation agent or distribution, if - // used. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '1.2.3' - TelemetryDistroVersionKey = attribute.Key("telemetry.distro.version") -) - -// TelemetryDistroName returns an attribute KeyValue conforming to the -// "telemetry.distro.name" semantic conventions. It represents the name of the -// auto instrumentation agent or distribution, if used. -func TelemetryDistroName(val string) attribute.KeyValue { - return TelemetryDistroNameKey.String(val) -} - -// TelemetryDistroVersion returns an attribute KeyValue conforming to the -// "telemetry.distro.version" semantic conventions. It represents the version -// string of the auto instrumentation agent or distribution, if used. -func TelemetryDistroVersion(val string) attribute.KeyValue { - return TelemetryDistroVersionKey.String(val) -} - -// Resource describing the packaged software running the application code. Web -// engines are typically executed using process.runtime. -const ( - // WebEngineDescriptionKey is the attribute Key conforming to the - // "webengine.description" semantic conventions. It represents the - // additional description of the web engine (e.g. detailed version and - // edition information). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'WildFly Full 21.0.0.Final (WildFly Core 13.0.1.Final) - - // 2.2.2.Final' - WebEngineDescriptionKey = attribute.Key("webengine.description") - - // WebEngineNameKey is the attribute Key conforming to the "webengine.name" - // semantic conventions. It represents the name of the web engine. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'WildFly' - WebEngineNameKey = attribute.Key("webengine.name") - - // WebEngineVersionKey is the attribute Key conforming to the - // "webengine.version" semantic conventions. It represents the version of - // the web engine. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '21.0.0' - WebEngineVersionKey = attribute.Key("webengine.version") -) - -// WebEngineDescription returns an attribute KeyValue conforming to the -// "webengine.description" semantic conventions. It represents the additional -// description of the web engine (e.g. detailed version and edition -// information). -func WebEngineDescription(val string) attribute.KeyValue { - return WebEngineDescriptionKey.String(val) -} - -// WebEngineName returns an attribute KeyValue conforming to the -// "webengine.name" semantic conventions. It represents the name of the web -// engine. -func WebEngineName(val string) attribute.KeyValue { - return WebEngineNameKey.String(val) -} - -// WebEngineVersion returns an attribute KeyValue conforming to the -// "webengine.version" semantic conventions. It represents the version of the -// web engine. -func WebEngineVersion(val string) attribute.KeyValue { - return WebEngineVersionKey.String(val) -} - -// Attributes used by non-OTLP exporters to represent OpenTelemetry Scope's -// concepts. -const ( - // OTelScopeNameKey is the attribute Key conforming to the - // "otel.scope.name" semantic conventions. It represents the name of the - // instrumentation scope - (`InstrumentationScope.Name` in OTLP). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'io.opentelemetry.contrib.mongodb' - OTelScopeNameKey = attribute.Key("otel.scope.name") - - // OTelScopeVersionKey is the attribute Key conforming to the - // "otel.scope.version" semantic conventions. It represents the version of - // the instrumentation scope - (`InstrumentationScope.Version` in OTLP). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '1.0.0' - OTelScopeVersionKey = attribute.Key("otel.scope.version") -) - -// OTelScopeName returns an attribute KeyValue conforming to the -// "otel.scope.name" semantic conventions. It represents the name of the -// instrumentation scope - (`InstrumentationScope.Name` in OTLP). -func OTelScopeName(val string) attribute.KeyValue { - return OTelScopeNameKey.String(val) -} - -// OTelScopeVersion returns an attribute KeyValue conforming to the -// "otel.scope.version" semantic conventions. It represents the version of the -// instrumentation scope - (`InstrumentationScope.Version` in OTLP). -func OTelScopeVersion(val string) attribute.KeyValue { - return OTelScopeVersionKey.String(val) -} - -// Span attributes used by non-OTLP exporters to represent OpenTelemetry -// Scope's concepts. -const ( - // OTelLibraryNameKey is the attribute Key conforming to the - // "otel.library.name" semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: 'io.opentelemetry.contrib.mongodb' - // Deprecated: use the `otel.scope.name` attribute. - OTelLibraryNameKey = attribute.Key("otel.library.name") - - // OTelLibraryVersionKey is the attribute Key conforming to the - // "otel.library.version" semantic conventions. - // - // Type: string - // RequirementLevel: Optional - // Stability: deprecated - // Examples: '1.0.0' - // Deprecated: use the `otel.scope.version` attribute. - OTelLibraryVersionKey = attribute.Key("otel.library.version") -) - -// OTelLibraryName returns an attribute KeyValue conforming to the -// "otel.library.name" semantic conventions. -// -// Deprecated: use the `otel.scope.name` attribute. -func OTelLibraryName(val string) attribute.KeyValue { - return OTelLibraryNameKey.String(val) -} - -// OTelLibraryVersion returns an attribute KeyValue conforming to the -// "otel.library.version" semantic conventions. -// -// Deprecated: use the `otel.scope.version` attribute. -func OTelLibraryVersion(val string) attribute.KeyValue { - return OTelLibraryVersionKey.String(val) -} diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/schema.go b/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/schema.go deleted file mode 100644 index fe80b173..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/schema.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0" - -// SchemaURL is the schema URL that matches the version of the semantic conventions -// that this package defines. Semconv packages starting from v1.4.0 must declare -// non-empty schema URL in the form https://opentelemetry.io/schemas/ -const SchemaURL = "https://opentelemetry.io/schemas/1.24.0" diff --git a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/trace.go b/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/trace.go deleted file mode 100644 index c1718234..00000000 --- a/vendor/go.opentelemetry.io/otel/semconv/v1.24.0/trace.go +++ /dev/null @@ -1,1323 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Code generated from semantic convention specification. DO NOT EDIT. - -package semconv // import "go.opentelemetry.io/otel/semconv/v1.24.0" - -import "go.opentelemetry.io/otel/attribute" - -// Operations that access some remote service. -const ( - // PeerServiceKey is the attribute Key conforming to the "peer.service" - // semantic conventions. It represents the - // [`service.name`](/docs/resource/README.md#service) of the remote - // service. SHOULD be equal to the actual `service.name` resource attribute - // of the remote service if any. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'AuthTokenCache' - PeerServiceKey = attribute.Key("peer.service") -) - -// PeerService returns an attribute KeyValue conforming to the -// "peer.service" semantic conventions. It represents the -// [`service.name`](/docs/resource/README.md#service) of the remote service. -// SHOULD be equal to the actual `service.name` resource attribute of the -// remote service if any. -func PeerService(val string) attribute.KeyValue { - return PeerServiceKey.String(val) -} - -// These attributes may be used for any operation with an authenticated and/or -// authorized enduser. -const ( - // EnduserIDKey is the attribute Key conforming to the "enduser.id" - // semantic conventions. It represents the username or client_id extracted - // from the access token or - // [Authorization](https://tools.ietf.org/html/rfc7235#section-4.2) header - // in the inbound request from outside the system. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'username' - EnduserIDKey = attribute.Key("enduser.id") - - // EnduserRoleKey is the attribute Key conforming to the "enduser.role" - // semantic conventions. It represents the actual/assumed role the client - // is making the request under extracted from token or application security - // context. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'admin' - EnduserRoleKey = attribute.Key("enduser.role") - - // EnduserScopeKey is the attribute Key conforming to the "enduser.scope" - // semantic conventions. It represents the scopes or granted authorities - // the client currently possesses extracted from token or application - // security context. The value would come from the scope associated with an - // [OAuth 2.0 Access - // Token](https://tools.ietf.org/html/rfc6749#section-3.3) or an attribute - // value in a [SAML 2.0 - // Assertion](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'read:message, write:files' - EnduserScopeKey = attribute.Key("enduser.scope") -) - -// EnduserID returns an attribute KeyValue conforming to the "enduser.id" -// semantic conventions. It represents the username or client_id extracted from -// the access token or -// [Authorization](https://tools.ietf.org/html/rfc7235#section-4.2) header in -// the inbound request from outside the system. -func EnduserID(val string) attribute.KeyValue { - return EnduserIDKey.String(val) -} - -// EnduserRole returns an attribute KeyValue conforming to the -// "enduser.role" semantic conventions. It represents the actual/assumed role -// the client is making the request under extracted from token or application -// security context. -func EnduserRole(val string) attribute.KeyValue { - return EnduserRoleKey.String(val) -} - -// EnduserScope returns an attribute KeyValue conforming to the -// "enduser.scope" semantic conventions. It represents the scopes or granted -// authorities the client currently possesses extracted from token or -// application security context. The value would come from the scope associated -// with an [OAuth 2.0 Access -// Token](https://tools.ietf.org/html/rfc6749#section-3.3) or an attribute -// value in a [SAML 2.0 -// Assertion](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html). -func EnduserScope(val string) attribute.KeyValue { - return EnduserScopeKey.String(val) -} - -// These attributes allow to report this unit of code and therefore to provide -// more context about the span. -const ( - // CodeColumnKey is the attribute Key conforming to the "code.column" - // semantic conventions. It represents the column number in `code.filepath` - // best representing the operation. It SHOULD point within the code unit - // named in `code.function`. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 16 - CodeColumnKey = attribute.Key("code.column") - - // CodeFilepathKey is the attribute Key conforming to the "code.filepath" - // semantic conventions. It represents the source code file name that - // identifies the code unit as uniquely as possible (preferably an absolute - // file path). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '/usr/local/MyApplication/content_root/app/index.php' - CodeFilepathKey = attribute.Key("code.filepath") - - // CodeFunctionKey is the attribute Key conforming to the "code.function" - // semantic conventions. It represents the method or function name, or - // equivalent (usually rightmost part of the code unit's name). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'serveRequest' - CodeFunctionKey = attribute.Key("code.function") - - // CodeLineNumberKey is the attribute Key conforming to the "code.lineno" - // semantic conventions. It represents the line number in `code.filepath` - // best representing the operation. It SHOULD point within the code unit - // named in `code.function`. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 42 - CodeLineNumberKey = attribute.Key("code.lineno") - - // CodeNamespaceKey is the attribute Key conforming to the "code.namespace" - // semantic conventions. It represents the "namespace" within which - // `code.function` is defined. Usually the qualified class or module name, - // such that `code.namespace` + some separator + `code.function` form a - // unique identifier for the code unit. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'com.example.MyHTTPService' - CodeNamespaceKey = attribute.Key("code.namespace") - - // CodeStacktraceKey is the attribute Key conforming to the - // "code.stacktrace" semantic conventions. It represents a stacktrace as a - // string in the natural representation for the language runtime. The - // representation is to be determined and documented by each language SIG. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'at - // com.example.GenerateTrace.methodB(GenerateTrace.java:13)\\n at ' - // 'com.example.GenerateTrace.methodA(GenerateTrace.java:9)\\n at ' - // 'com.example.GenerateTrace.main(GenerateTrace.java:5)' - CodeStacktraceKey = attribute.Key("code.stacktrace") -) - -// CodeColumn returns an attribute KeyValue conforming to the "code.column" -// semantic conventions. It represents the column number in `code.filepath` -// best representing the operation. It SHOULD point within the code unit named -// in `code.function`. -func CodeColumn(val int) attribute.KeyValue { - return CodeColumnKey.Int(val) -} - -// CodeFilepath returns an attribute KeyValue conforming to the -// "code.filepath" semantic conventions. It represents the source code file -// name that identifies the code unit as uniquely as possible (preferably an -// absolute file path). -func CodeFilepath(val string) attribute.KeyValue { - return CodeFilepathKey.String(val) -} - -// CodeFunction returns an attribute KeyValue conforming to the -// "code.function" semantic conventions. It represents the method or function -// name, or equivalent (usually rightmost part of the code unit's name). -func CodeFunction(val string) attribute.KeyValue { - return CodeFunctionKey.String(val) -} - -// CodeLineNumber returns an attribute KeyValue conforming to the "code.lineno" -// semantic conventions. It represents the line number in `code.filepath` best -// representing the operation. It SHOULD point within the code unit named in -// `code.function`. -func CodeLineNumber(val int) attribute.KeyValue { - return CodeLineNumberKey.Int(val) -} - -// CodeNamespace returns an attribute KeyValue conforming to the -// "code.namespace" semantic conventions. It represents the "namespace" within -// which `code.function` is defined. Usually the qualified class or module -// name, such that `code.namespace` + some separator + `code.function` form a -// unique identifier for the code unit. -func CodeNamespace(val string) attribute.KeyValue { - return CodeNamespaceKey.String(val) -} - -// CodeStacktrace returns an attribute KeyValue conforming to the -// "code.stacktrace" semantic conventions. It represents a stacktrace as a -// string in the natural representation for the language runtime. The -// representation is to be determined and documented by each language SIG. -func CodeStacktrace(val string) attribute.KeyValue { - return CodeStacktraceKey.String(val) -} - -// These attributes may be used for any operation to store information about a -// thread that started a span. -const ( - // ThreadIDKey is the attribute Key conforming to the "thread.id" semantic - // conventions. It represents the current "managed" thread ID (as opposed - // to OS thread ID). - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 42 - ThreadIDKey = attribute.Key("thread.id") - - // ThreadNameKey is the attribute Key conforming to the "thread.name" - // semantic conventions. It represents the current thread name. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'main' - ThreadNameKey = attribute.Key("thread.name") -) - -// ThreadID returns an attribute KeyValue conforming to the "thread.id" -// semantic conventions. It represents the current "managed" thread ID (as -// opposed to OS thread ID). -func ThreadID(val int) attribute.KeyValue { - return ThreadIDKey.Int(val) -} - -// ThreadName returns an attribute KeyValue conforming to the "thread.name" -// semantic conventions. It represents the current thread name. -func ThreadName(val string) attribute.KeyValue { - return ThreadNameKey.String(val) -} - -// Span attributes used by AWS Lambda (in addition to general `faas` -// attributes). -const ( - // AWSLambdaInvokedARNKey is the attribute Key conforming to the - // "aws.lambda.invoked_arn" semantic conventions. It represents the full - // invoked ARN as provided on the `Context` passed to the function - // (`Lambda-Runtime-Invoked-Function-ARN` header on the - // `/runtime/invocation/next` applicable). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'arn:aws:lambda:us-east-1:123456:function:myfunction:myalias' - // Note: This may be different from `cloud.resource_id` if an alias is - // involved. - AWSLambdaInvokedARNKey = attribute.Key("aws.lambda.invoked_arn") -) - -// AWSLambdaInvokedARN returns an attribute KeyValue conforming to the -// "aws.lambda.invoked_arn" semantic conventions. It represents the full -// invoked ARN as provided on the `Context` passed to the function -// (`Lambda-Runtime-Invoked-Function-ARN` header on the -// `/runtime/invocation/next` applicable). -func AWSLambdaInvokedARN(val string) attribute.KeyValue { - return AWSLambdaInvokedARNKey.String(val) -} - -// Attributes for CloudEvents. CloudEvents is a specification on how to define -// event data in a standard way. These attributes can be attached to spans when -// performing operations with CloudEvents, regardless of the protocol being -// used. -const ( - // CloudeventsEventIDKey is the attribute Key conforming to the - // "cloudevents.event_id" semantic conventions. It represents the - // [event_id](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id) - // uniquely identifies the event. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: '123e4567-e89b-12d3-a456-426614174000', '0001' - CloudeventsEventIDKey = attribute.Key("cloudevents.event_id") - - // CloudeventsEventSourceKey is the attribute Key conforming to the - // "cloudevents.event_source" semantic conventions. It represents the - // [source](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1) - // identifies the context in which an event happened. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'https://github.com/cloudevents', - // '/cloudevents/spec/pull/123', 'my-service' - CloudeventsEventSourceKey = attribute.Key("cloudevents.event_source") - - // CloudeventsEventSpecVersionKey is the attribute Key conforming to the - // "cloudevents.event_spec_version" semantic conventions. It represents the - // [version of the CloudEvents - // specification](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion) - // which the event uses. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '1.0' - CloudeventsEventSpecVersionKey = attribute.Key("cloudevents.event_spec_version") - - // CloudeventsEventSubjectKey is the attribute Key conforming to the - // "cloudevents.event_subject" semantic conventions. It represents the - // [subject](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject) - // of the event in the context of the event producer (identified by - // source). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'mynewfile.jpg' - CloudeventsEventSubjectKey = attribute.Key("cloudevents.event_subject") - - // CloudeventsEventTypeKey is the attribute Key conforming to the - // "cloudevents.event_type" semantic conventions. It represents the - // [event_type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type) - // contains a value describing the type of event related to the originating - // occurrence. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'com.github.pull_request.opened', - // 'com.example.object.deleted.v2' - CloudeventsEventTypeKey = attribute.Key("cloudevents.event_type") -) - -// CloudeventsEventID returns an attribute KeyValue conforming to the -// "cloudevents.event_id" semantic conventions. It represents the -// [event_id](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#id) -// uniquely identifies the event. -func CloudeventsEventID(val string) attribute.KeyValue { - return CloudeventsEventIDKey.String(val) -} - -// CloudeventsEventSource returns an attribute KeyValue conforming to the -// "cloudevents.event_source" semantic conventions. It represents the -// [source](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#source-1) -// identifies the context in which an event happened. -func CloudeventsEventSource(val string) attribute.KeyValue { - return CloudeventsEventSourceKey.String(val) -} - -// CloudeventsEventSpecVersion returns an attribute KeyValue conforming to -// the "cloudevents.event_spec_version" semantic conventions. It represents the -// [version of the CloudEvents -// specification](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#specversion) -// which the event uses. -func CloudeventsEventSpecVersion(val string) attribute.KeyValue { - return CloudeventsEventSpecVersionKey.String(val) -} - -// CloudeventsEventSubject returns an attribute KeyValue conforming to the -// "cloudevents.event_subject" semantic conventions. It represents the -// [subject](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#subject) -// of the event in the context of the event producer (identified by source). -func CloudeventsEventSubject(val string) attribute.KeyValue { - return CloudeventsEventSubjectKey.String(val) -} - -// CloudeventsEventType returns an attribute KeyValue conforming to the -// "cloudevents.event_type" semantic conventions. It represents the -// [event_type](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/spec.md#type) -// contains a value describing the type of event related to the originating -// occurrence. -func CloudeventsEventType(val string) attribute.KeyValue { - return CloudeventsEventTypeKey.String(val) -} - -// Semantic conventions for the OpenTracing Shim -const ( - // OpentracingRefTypeKey is the attribute Key conforming to the - // "opentracing.ref_type" semantic conventions. It represents the - // parent-child Reference type - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Note: The causal relationship between a child Span and a parent Span. - OpentracingRefTypeKey = attribute.Key("opentracing.ref_type") -) - -var ( - // The parent Span depends on the child Span in some capacity - OpentracingRefTypeChildOf = OpentracingRefTypeKey.String("child_of") - // The parent Span doesn't depend in any way on the result of the child Span - OpentracingRefTypeFollowsFrom = OpentracingRefTypeKey.String("follows_from") -) - -// Span attributes used by non-OTLP exporters to represent OpenTelemetry Span's -// concepts. -const ( - // OTelStatusCodeKey is the attribute Key conforming to the - // "otel.status_code" semantic conventions. It represents the name of the - // code, either "OK" or "ERROR". MUST NOT be set if the status code is - // UNSET. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - OTelStatusCodeKey = attribute.Key("otel.status_code") - - // OTelStatusDescriptionKey is the attribute Key conforming to the - // "otel.status_description" semantic conventions. It represents the - // description of the Status if it has a value, otherwise not set. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'resource not found' - OTelStatusDescriptionKey = attribute.Key("otel.status_description") -) - -var ( - // The operation has been validated by an Application developer or Operator to have completed successfully - OTelStatusCodeOk = OTelStatusCodeKey.String("OK") - // The operation contains an error - OTelStatusCodeError = OTelStatusCodeKey.String("ERROR") -) - -// OTelStatusDescription returns an attribute KeyValue conforming to the -// "otel.status_description" semantic conventions. It represents the -// description of the Status if it has a value, otherwise not set. -func OTelStatusDescription(val string) attribute.KeyValue { - return OTelStatusDescriptionKey.String(val) -} - -// This semantic convention describes an instance of a function that runs -// without provisioning or managing of servers (also known as serverless -// functions or Function as a Service (FaaS)) with spans. -const ( - // FaaSInvocationIDKey is the attribute Key conforming to the - // "faas.invocation_id" semantic conventions. It represents the invocation - // ID of the current function invocation. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'af9d5aa4-a685-4c5f-a22b-444f80b3cc28' - FaaSInvocationIDKey = attribute.Key("faas.invocation_id") -) - -// FaaSInvocationID returns an attribute KeyValue conforming to the -// "faas.invocation_id" semantic conventions. It represents the invocation ID -// of the current function invocation. -func FaaSInvocationID(val string) attribute.KeyValue { - return FaaSInvocationIDKey.String(val) -} - -// Semantic Convention for FaaS triggered as a response to some data source -// operation such as a database or filesystem read/write. -const ( - // FaaSDocumentCollectionKey is the attribute Key conforming to the - // "faas.document.collection" semantic conventions. It represents the name - // of the source on which the triggering operation was performed. For - // example, in Cloud Storage or S3 corresponds to the bucket name, and in - // Cosmos DB to the database name. - // - // Type: string - // RequirementLevel: Required - // Stability: experimental - // Examples: 'myBucketName', 'myDBName' - FaaSDocumentCollectionKey = attribute.Key("faas.document.collection") - - // FaaSDocumentNameKey is the attribute Key conforming to the - // "faas.document.name" semantic conventions. It represents the document - // name/table subjected to the operation. For example, in Cloud Storage or - // S3 is the name of the file, and in Cosmos DB the table name. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'myFile.txt', 'myTableName' - FaaSDocumentNameKey = attribute.Key("faas.document.name") - - // FaaSDocumentOperationKey is the attribute Key conforming to the - // "faas.document.operation" semantic conventions. It represents the - // describes the type of the operation that was performed on the data. - // - // Type: Enum - // RequirementLevel: Required - // Stability: experimental - FaaSDocumentOperationKey = attribute.Key("faas.document.operation") - - // FaaSDocumentTimeKey is the attribute Key conforming to the - // "faas.document.time" semantic conventions. It represents a string - // containing the time when the data was accessed in the [ISO - // 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format - // expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2020-01-23T13:47:06Z' - FaaSDocumentTimeKey = attribute.Key("faas.document.time") -) - -var ( - // When a new object is created - FaaSDocumentOperationInsert = FaaSDocumentOperationKey.String("insert") - // When an object is modified - FaaSDocumentOperationEdit = FaaSDocumentOperationKey.String("edit") - // When an object is deleted - FaaSDocumentOperationDelete = FaaSDocumentOperationKey.String("delete") -) - -// FaaSDocumentCollection returns an attribute KeyValue conforming to the -// "faas.document.collection" semantic conventions. It represents the name of -// the source on which the triggering operation was performed. For example, in -// Cloud Storage or S3 corresponds to the bucket name, and in Cosmos DB to the -// database name. -func FaaSDocumentCollection(val string) attribute.KeyValue { - return FaaSDocumentCollectionKey.String(val) -} - -// FaaSDocumentName returns an attribute KeyValue conforming to the -// "faas.document.name" semantic conventions. It represents the document -// name/table subjected to the operation. For example, in Cloud Storage or S3 -// is the name of the file, and in Cosmos DB the table name. -func FaaSDocumentName(val string) attribute.KeyValue { - return FaaSDocumentNameKey.String(val) -} - -// FaaSDocumentTime returns an attribute KeyValue conforming to the -// "faas.document.time" semantic conventions. It represents a string containing -// the time when the data was accessed in the [ISO -// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format -// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). -func FaaSDocumentTime(val string) attribute.KeyValue { - return FaaSDocumentTimeKey.String(val) -} - -// Semantic Convention for FaaS scheduled to be executed regularly. -const ( - // FaaSCronKey is the attribute Key conforming to the "faas.cron" semantic - // conventions. It represents a string containing the schedule period as - // [Cron - // Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '0/5 * * * ? *' - FaaSCronKey = attribute.Key("faas.cron") - - // FaaSTimeKey is the attribute Key conforming to the "faas.time" semantic - // conventions. It represents a string containing the function invocation - // time in the [ISO - // 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format - // expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '2020-01-23T13:47:06Z' - FaaSTimeKey = attribute.Key("faas.time") -) - -// FaaSCron returns an attribute KeyValue conforming to the "faas.cron" -// semantic conventions. It represents a string containing the schedule period -// as [Cron -// Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm). -func FaaSCron(val string) attribute.KeyValue { - return FaaSCronKey.String(val) -} - -// FaaSTime returns an attribute KeyValue conforming to the "faas.time" -// semantic conventions. It represents a string containing the function -// invocation time in the [ISO -// 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format -// expressed in [UTC](https://www.w3.org/TR/NOTE-datetime). -func FaaSTime(val string) attribute.KeyValue { - return FaaSTimeKey.String(val) -} - -// Contains additional attributes for incoming FaaS spans. -const ( - // FaaSColdstartKey is the attribute Key conforming to the "faas.coldstart" - // semantic conventions. It represents a boolean that is true if the - // serverless function is executed for the first time (aka cold-start). - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - FaaSColdstartKey = attribute.Key("faas.coldstart") -) - -// FaaSColdstart returns an attribute KeyValue conforming to the -// "faas.coldstart" semantic conventions. It represents a boolean that is true -// if the serverless function is executed for the first time (aka cold-start). -func FaaSColdstart(val bool) attribute.KeyValue { - return FaaSColdstartKey.Bool(val) -} - -// The `aws` conventions apply to operations using the AWS SDK. They map -// request or response parameters in AWS SDK API calls to attributes on a Span. -// The conventions have been collected over time based on feedback from AWS -// users of tracing and will continue to evolve as new interesting conventions -// are found. -// Some descriptions are also provided for populating general OpenTelemetry -// semantic conventions based on these APIs. -const ( - // AWSRequestIDKey is the attribute Key conforming to the "aws.request_id" - // semantic conventions. It represents the AWS request ID as returned in - // the response headers `x-amz-request-id` or `x-amz-requestid`. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '79b9da39-b7ae-508a-a6bc-864b2829c622', 'C9ER4AJX75574TDJ' - AWSRequestIDKey = attribute.Key("aws.request_id") -) - -// AWSRequestID returns an attribute KeyValue conforming to the -// "aws.request_id" semantic conventions. It represents the AWS request ID as -// returned in the response headers `x-amz-request-id` or `x-amz-requestid`. -func AWSRequestID(val string) attribute.KeyValue { - return AWSRequestIDKey.String(val) -} - -// Attributes that exist for multiple DynamoDB request types. -const ( - // AWSDynamoDBAttributesToGetKey is the attribute Key conforming to the - // "aws.dynamodb.attributes_to_get" semantic conventions. It represents the - // value of the `AttributesToGet` request parameter. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'lives', 'id' - AWSDynamoDBAttributesToGetKey = attribute.Key("aws.dynamodb.attributes_to_get") - - // AWSDynamoDBConsistentReadKey is the attribute Key conforming to the - // "aws.dynamodb.consistent_read" semantic conventions. It represents the - // value of the `ConsistentRead` request parameter. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - AWSDynamoDBConsistentReadKey = attribute.Key("aws.dynamodb.consistent_read") - - // AWSDynamoDBConsumedCapacityKey is the attribute Key conforming to the - // "aws.dynamodb.consumed_capacity" semantic conventions. It represents the - // JSON-serialized value of each item in the `ConsumedCapacity` response - // field. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: '{ "CapacityUnits": number, "GlobalSecondaryIndexes": { - // "string" : { "CapacityUnits": number, "ReadCapacityUnits": number, - // "WriteCapacityUnits": number } }, "LocalSecondaryIndexes": { "string" : - // { "CapacityUnits": number, "ReadCapacityUnits": number, - // "WriteCapacityUnits": number } }, "ReadCapacityUnits": number, "Table": - // { "CapacityUnits": number, "ReadCapacityUnits": number, - // "WriteCapacityUnits": number }, "TableName": "string", - // "WriteCapacityUnits": number }' - AWSDynamoDBConsumedCapacityKey = attribute.Key("aws.dynamodb.consumed_capacity") - - // AWSDynamoDBIndexNameKey is the attribute Key conforming to the - // "aws.dynamodb.index_name" semantic conventions. It represents the value - // of the `IndexName` request parameter. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'name_to_group' - AWSDynamoDBIndexNameKey = attribute.Key("aws.dynamodb.index_name") - - // AWSDynamoDBItemCollectionMetricsKey is the attribute Key conforming to - // the "aws.dynamodb.item_collection_metrics" semantic conventions. It - // represents the JSON-serialized value of the `ItemCollectionMetrics` - // response field. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: '{ "string" : [ { "ItemCollectionKey": { "string" : { "B": - // blob, "BOOL": boolean, "BS": [ blob ], "L": [ "AttributeValue" ], "M": { - // "string" : "AttributeValue" }, "N": "string", "NS": [ "string" ], - // "NULL": boolean, "S": "string", "SS": [ "string" ] } }, - // "SizeEstimateRangeGB": [ number ] } ] }' - AWSDynamoDBItemCollectionMetricsKey = attribute.Key("aws.dynamodb.item_collection_metrics") - - // AWSDynamoDBLimitKey is the attribute Key conforming to the - // "aws.dynamodb.limit" semantic conventions. It represents the value of - // the `Limit` request parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 10 - AWSDynamoDBLimitKey = attribute.Key("aws.dynamodb.limit") - - // AWSDynamoDBProjectionKey is the attribute Key conforming to the - // "aws.dynamodb.projection" semantic conventions. It represents the value - // of the `ProjectionExpression` request parameter. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Title', 'Title, Price, Color', 'Title, Description, - // RelatedItems, ProductReviews' - AWSDynamoDBProjectionKey = attribute.Key("aws.dynamodb.projection") - - // AWSDynamoDBProvisionedReadCapacityKey is the attribute Key conforming to - // the "aws.dynamodb.provisioned_read_capacity" semantic conventions. It - // represents the value of the `ProvisionedThroughput.ReadCapacityUnits` - // request parameter. - // - // Type: double - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1.0, 2.0 - AWSDynamoDBProvisionedReadCapacityKey = attribute.Key("aws.dynamodb.provisioned_read_capacity") - - // AWSDynamoDBProvisionedWriteCapacityKey is the attribute Key conforming - // to the "aws.dynamodb.provisioned_write_capacity" semantic conventions. - // It represents the value of the - // `ProvisionedThroughput.WriteCapacityUnits` request parameter. - // - // Type: double - // RequirementLevel: Optional - // Stability: experimental - // Examples: 1.0, 2.0 - AWSDynamoDBProvisionedWriteCapacityKey = attribute.Key("aws.dynamodb.provisioned_write_capacity") - - // AWSDynamoDBSelectKey is the attribute Key conforming to the - // "aws.dynamodb.select" semantic conventions. It represents the value of - // the `Select` request parameter. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'ALL_ATTRIBUTES', 'COUNT' - AWSDynamoDBSelectKey = attribute.Key("aws.dynamodb.select") - - // AWSDynamoDBTableNamesKey is the attribute Key conforming to the - // "aws.dynamodb.table_names" semantic conventions. It represents the keys - // in the `RequestItems` object field. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Users', 'Cats' - AWSDynamoDBTableNamesKey = attribute.Key("aws.dynamodb.table_names") -) - -// AWSDynamoDBAttributesToGet returns an attribute KeyValue conforming to -// the "aws.dynamodb.attributes_to_get" semantic conventions. It represents the -// value of the `AttributesToGet` request parameter. -func AWSDynamoDBAttributesToGet(val ...string) attribute.KeyValue { - return AWSDynamoDBAttributesToGetKey.StringSlice(val) -} - -// AWSDynamoDBConsistentRead returns an attribute KeyValue conforming to the -// "aws.dynamodb.consistent_read" semantic conventions. It represents the value -// of the `ConsistentRead` request parameter. -func AWSDynamoDBConsistentRead(val bool) attribute.KeyValue { - return AWSDynamoDBConsistentReadKey.Bool(val) -} - -// AWSDynamoDBConsumedCapacity returns an attribute KeyValue conforming to -// the "aws.dynamodb.consumed_capacity" semantic conventions. It represents the -// JSON-serialized value of each item in the `ConsumedCapacity` response field. -func AWSDynamoDBConsumedCapacity(val ...string) attribute.KeyValue { - return AWSDynamoDBConsumedCapacityKey.StringSlice(val) -} - -// AWSDynamoDBIndexName returns an attribute KeyValue conforming to the -// "aws.dynamodb.index_name" semantic conventions. It represents the value of -// the `IndexName` request parameter. -func AWSDynamoDBIndexName(val string) attribute.KeyValue { - return AWSDynamoDBIndexNameKey.String(val) -} - -// AWSDynamoDBItemCollectionMetrics returns an attribute KeyValue conforming -// to the "aws.dynamodb.item_collection_metrics" semantic conventions. It -// represents the JSON-serialized value of the `ItemCollectionMetrics` response -// field. -func AWSDynamoDBItemCollectionMetrics(val string) attribute.KeyValue { - return AWSDynamoDBItemCollectionMetricsKey.String(val) -} - -// AWSDynamoDBLimit returns an attribute KeyValue conforming to the -// "aws.dynamodb.limit" semantic conventions. It represents the value of the -// `Limit` request parameter. -func AWSDynamoDBLimit(val int) attribute.KeyValue { - return AWSDynamoDBLimitKey.Int(val) -} - -// AWSDynamoDBProjection returns an attribute KeyValue conforming to the -// "aws.dynamodb.projection" semantic conventions. It represents the value of -// the `ProjectionExpression` request parameter. -func AWSDynamoDBProjection(val string) attribute.KeyValue { - return AWSDynamoDBProjectionKey.String(val) -} - -// AWSDynamoDBProvisionedReadCapacity returns an attribute KeyValue -// conforming to the "aws.dynamodb.provisioned_read_capacity" semantic -// conventions. It represents the value of the -// `ProvisionedThroughput.ReadCapacityUnits` request parameter. -func AWSDynamoDBProvisionedReadCapacity(val float64) attribute.KeyValue { - return AWSDynamoDBProvisionedReadCapacityKey.Float64(val) -} - -// AWSDynamoDBProvisionedWriteCapacity returns an attribute KeyValue -// conforming to the "aws.dynamodb.provisioned_write_capacity" semantic -// conventions. It represents the value of the -// `ProvisionedThroughput.WriteCapacityUnits` request parameter. -func AWSDynamoDBProvisionedWriteCapacity(val float64) attribute.KeyValue { - return AWSDynamoDBProvisionedWriteCapacityKey.Float64(val) -} - -// AWSDynamoDBSelect returns an attribute KeyValue conforming to the -// "aws.dynamodb.select" semantic conventions. It represents the value of the -// `Select` request parameter. -func AWSDynamoDBSelect(val string) attribute.KeyValue { - return AWSDynamoDBSelectKey.String(val) -} - -// AWSDynamoDBTableNames returns an attribute KeyValue conforming to the -// "aws.dynamodb.table_names" semantic conventions. It represents the keys in -// the `RequestItems` object field. -func AWSDynamoDBTableNames(val ...string) attribute.KeyValue { - return AWSDynamoDBTableNamesKey.StringSlice(val) -} - -// DynamoDB.CreateTable -const ( - // AWSDynamoDBGlobalSecondaryIndexesKey is the attribute Key conforming to - // the "aws.dynamodb.global_secondary_indexes" semantic conventions. It - // represents the JSON-serialized value of each item of the - // `GlobalSecondaryIndexes` request field - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: '{ "IndexName": "string", "KeySchema": [ { "AttributeName": - // "string", "KeyType": "string" } ], "Projection": { "NonKeyAttributes": [ - // "string" ], "ProjectionType": "string" }, "ProvisionedThroughput": { - // "ReadCapacityUnits": number, "WriteCapacityUnits": number } }' - AWSDynamoDBGlobalSecondaryIndexesKey = attribute.Key("aws.dynamodb.global_secondary_indexes") - - // AWSDynamoDBLocalSecondaryIndexesKey is the attribute Key conforming to - // the "aws.dynamodb.local_secondary_indexes" semantic conventions. It - // represents the JSON-serialized value of each item of the - // `LocalSecondaryIndexes` request field. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: '{ "IndexARN": "string", "IndexName": "string", - // "IndexSizeBytes": number, "ItemCount": number, "KeySchema": [ { - // "AttributeName": "string", "KeyType": "string" } ], "Projection": { - // "NonKeyAttributes": [ "string" ], "ProjectionType": "string" } }' - AWSDynamoDBLocalSecondaryIndexesKey = attribute.Key("aws.dynamodb.local_secondary_indexes") -) - -// AWSDynamoDBGlobalSecondaryIndexes returns an attribute KeyValue -// conforming to the "aws.dynamodb.global_secondary_indexes" semantic -// conventions. It represents the JSON-serialized value of each item of the -// `GlobalSecondaryIndexes` request field -func AWSDynamoDBGlobalSecondaryIndexes(val ...string) attribute.KeyValue { - return AWSDynamoDBGlobalSecondaryIndexesKey.StringSlice(val) -} - -// AWSDynamoDBLocalSecondaryIndexes returns an attribute KeyValue conforming -// to the "aws.dynamodb.local_secondary_indexes" semantic conventions. It -// represents the JSON-serialized value of each item of the -// `LocalSecondaryIndexes` request field. -func AWSDynamoDBLocalSecondaryIndexes(val ...string) attribute.KeyValue { - return AWSDynamoDBLocalSecondaryIndexesKey.StringSlice(val) -} - -// DynamoDB.ListTables -const ( - // AWSDynamoDBExclusiveStartTableKey is the attribute Key conforming to the - // "aws.dynamodb.exclusive_start_table" semantic conventions. It represents - // the value of the `ExclusiveStartTableName` request parameter. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'Users', 'CatsTable' - AWSDynamoDBExclusiveStartTableKey = attribute.Key("aws.dynamodb.exclusive_start_table") - - // AWSDynamoDBTableCountKey is the attribute Key conforming to the - // "aws.dynamodb.table_count" semantic conventions. It represents the the - // number of items in the `TableNames` response parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 20 - AWSDynamoDBTableCountKey = attribute.Key("aws.dynamodb.table_count") -) - -// AWSDynamoDBExclusiveStartTable returns an attribute KeyValue conforming -// to the "aws.dynamodb.exclusive_start_table" semantic conventions. It -// represents the value of the `ExclusiveStartTableName` request parameter. -func AWSDynamoDBExclusiveStartTable(val string) attribute.KeyValue { - return AWSDynamoDBExclusiveStartTableKey.String(val) -} - -// AWSDynamoDBTableCount returns an attribute KeyValue conforming to the -// "aws.dynamodb.table_count" semantic conventions. It represents the the -// number of items in the `TableNames` response parameter. -func AWSDynamoDBTableCount(val int) attribute.KeyValue { - return AWSDynamoDBTableCountKey.Int(val) -} - -// DynamoDB.Query -const ( - // AWSDynamoDBScanForwardKey is the attribute Key conforming to the - // "aws.dynamodb.scan_forward" semantic conventions. It represents the - // value of the `ScanIndexForward` request parameter. - // - // Type: boolean - // RequirementLevel: Optional - // Stability: experimental - AWSDynamoDBScanForwardKey = attribute.Key("aws.dynamodb.scan_forward") -) - -// AWSDynamoDBScanForward returns an attribute KeyValue conforming to the -// "aws.dynamodb.scan_forward" semantic conventions. It represents the value of -// the `ScanIndexForward` request parameter. -func AWSDynamoDBScanForward(val bool) attribute.KeyValue { - return AWSDynamoDBScanForwardKey.Bool(val) -} - -// DynamoDB.Scan -const ( - // AWSDynamoDBCountKey is the attribute Key conforming to the - // "aws.dynamodb.count" semantic conventions. It represents the value of - // the `Count` response parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 10 - AWSDynamoDBCountKey = attribute.Key("aws.dynamodb.count") - - // AWSDynamoDBScannedCountKey is the attribute Key conforming to the - // "aws.dynamodb.scanned_count" semantic conventions. It represents the - // value of the `ScannedCount` response parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 50 - AWSDynamoDBScannedCountKey = attribute.Key("aws.dynamodb.scanned_count") - - // AWSDynamoDBSegmentKey is the attribute Key conforming to the - // "aws.dynamodb.segment" semantic conventions. It represents the value of - // the `Segment` request parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 10 - AWSDynamoDBSegmentKey = attribute.Key("aws.dynamodb.segment") - - // AWSDynamoDBTotalSegmentsKey is the attribute Key conforming to the - // "aws.dynamodb.total_segments" semantic conventions. It represents the - // value of the `TotalSegments` request parameter. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 100 - AWSDynamoDBTotalSegmentsKey = attribute.Key("aws.dynamodb.total_segments") -) - -// AWSDynamoDBCount returns an attribute KeyValue conforming to the -// "aws.dynamodb.count" semantic conventions. It represents the value of the -// `Count` response parameter. -func AWSDynamoDBCount(val int) attribute.KeyValue { - return AWSDynamoDBCountKey.Int(val) -} - -// AWSDynamoDBScannedCount returns an attribute KeyValue conforming to the -// "aws.dynamodb.scanned_count" semantic conventions. It represents the value -// of the `ScannedCount` response parameter. -func AWSDynamoDBScannedCount(val int) attribute.KeyValue { - return AWSDynamoDBScannedCountKey.Int(val) -} - -// AWSDynamoDBSegment returns an attribute KeyValue conforming to the -// "aws.dynamodb.segment" semantic conventions. It represents the value of the -// `Segment` request parameter. -func AWSDynamoDBSegment(val int) attribute.KeyValue { - return AWSDynamoDBSegmentKey.Int(val) -} - -// AWSDynamoDBTotalSegments returns an attribute KeyValue conforming to the -// "aws.dynamodb.total_segments" semantic conventions. It represents the value -// of the `TotalSegments` request parameter. -func AWSDynamoDBTotalSegments(val int) attribute.KeyValue { - return AWSDynamoDBTotalSegmentsKey.Int(val) -} - -// DynamoDB.UpdateTable -const ( - // AWSDynamoDBAttributeDefinitionsKey is the attribute Key conforming to - // the "aws.dynamodb.attribute_definitions" semantic conventions. It - // represents the JSON-serialized value of each item in the - // `AttributeDefinitions` request field. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: '{ "AttributeName": "string", "AttributeType": "string" }' - AWSDynamoDBAttributeDefinitionsKey = attribute.Key("aws.dynamodb.attribute_definitions") - - // AWSDynamoDBGlobalSecondaryIndexUpdatesKey is the attribute Key - // conforming to the "aws.dynamodb.global_secondary_index_updates" semantic - // conventions. It represents the JSON-serialized value of each item in the - // the `GlobalSecondaryIndexUpdates` request field. - // - // Type: string[] - // RequirementLevel: Optional - // Stability: experimental - // Examples: '{ "Create": { "IndexName": "string", "KeySchema": [ { - // "AttributeName": "string", "KeyType": "string" } ], "Projection": { - // "NonKeyAttributes": [ "string" ], "ProjectionType": "string" }, - // "ProvisionedThroughput": { "ReadCapacityUnits": number, - // "WriteCapacityUnits": number } }' - AWSDynamoDBGlobalSecondaryIndexUpdatesKey = attribute.Key("aws.dynamodb.global_secondary_index_updates") -) - -// AWSDynamoDBAttributeDefinitions returns an attribute KeyValue conforming -// to the "aws.dynamodb.attribute_definitions" semantic conventions. It -// represents the JSON-serialized value of each item in the -// `AttributeDefinitions` request field. -func AWSDynamoDBAttributeDefinitions(val ...string) attribute.KeyValue { - return AWSDynamoDBAttributeDefinitionsKey.StringSlice(val) -} - -// AWSDynamoDBGlobalSecondaryIndexUpdates returns an attribute KeyValue -// conforming to the "aws.dynamodb.global_secondary_index_updates" semantic -// conventions. It represents the JSON-serialized value of each item in the the -// `GlobalSecondaryIndexUpdates` request field. -func AWSDynamoDBGlobalSecondaryIndexUpdates(val ...string) attribute.KeyValue { - return AWSDynamoDBGlobalSecondaryIndexUpdatesKey.StringSlice(val) -} - -// Attributes that exist for S3 request types. -const ( - // AWSS3BucketKey is the attribute Key conforming to the "aws.s3.bucket" - // semantic conventions. It represents the S3 bucket name the request - // refers to. Corresponds to the `--bucket` parameter of the [S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) - // operations. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'some-bucket-name' - // Note: The `bucket` attribute is applicable to all S3 operations that - // reference a bucket, i.e. that require the bucket name as a mandatory - // parameter. - // This applies to almost all S3 operations except `list-buckets`. - AWSS3BucketKey = attribute.Key("aws.s3.bucket") - - // AWSS3CopySourceKey is the attribute Key conforming to the - // "aws.s3.copy_source" semantic conventions. It represents the source - // object (in the form `bucket`/`key`) for the copy operation. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'someFile.yml' - // Note: The `copy_source` attribute applies to S3 copy operations and - // corresponds to the `--copy-source` parameter - // of the [copy-object operation within the S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html). - // This applies in particular to the following operations: - // - // - - // [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html) - // - - // [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) - AWSS3CopySourceKey = attribute.Key("aws.s3.copy_source") - - // AWSS3DeleteKey is the attribute Key conforming to the "aws.s3.delete" - // semantic conventions. It represents the delete request container that - // specifies the objects to be deleted. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: - // 'Objects=[{Key=string,VersionID=string},{Key=string,VersionID=string}],Quiet=boolean' - // Note: The `delete` attribute is only applicable to the - // [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html) - // operation. - // The `delete` attribute corresponds to the `--delete` parameter of the - // [delete-objects operation within the S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-objects.html). - AWSS3DeleteKey = attribute.Key("aws.s3.delete") - - // AWSS3KeyKey is the attribute Key conforming to the "aws.s3.key" semantic - // conventions. It represents the S3 object key the request refers to. - // Corresponds to the `--key` parameter of the [S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) - // operations. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'someFile.yml' - // Note: The `key` attribute is applicable to all object-related S3 - // operations, i.e. that require the object key as a mandatory parameter. - // This applies in particular to the following operations: - // - // - - // [copy-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/copy-object.html) - // - - // [delete-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/delete-object.html) - // - - // [get-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/get-object.html) - // - - // [head-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/head-object.html) - // - - // [put-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-object.html) - // - - // [restore-object](https://docs.aws.amazon.com/cli/latest/reference/s3api/restore-object.html) - // - - // [select-object-content](https://docs.aws.amazon.com/cli/latest/reference/s3api/select-object-content.html) - // - - // [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html) - // - - // [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html) - // - - // [create-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/create-multipart-upload.html) - // - - // [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html) - // - - // [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html) - // - - // [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) - AWSS3KeyKey = attribute.Key("aws.s3.key") - - // AWSS3PartNumberKey is the attribute Key conforming to the - // "aws.s3.part_number" semantic conventions. It represents the part number - // of the part being uploaded in a multipart-upload operation. This is a - // positive integer between 1 and 10,000. - // - // Type: int - // RequirementLevel: Optional - // Stability: experimental - // Examples: 3456 - // Note: The `part_number` attribute is only applicable to the - // [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html) - // and - // [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) - // operations. - // The `part_number` attribute corresponds to the `--part-number` parameter - // of the - // [upload-part operation within the S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html). - AWSS3PartNumberKey = attribute.Key("aws.s3.part_number") - - // AWSS3UploadIDKey is the attribute Key conforming to the - // "aws.s3.upload_id" semantic conventions. It represents the upload ID - // that identifies the multipart upload. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'dfRtDYWFbkRONycy.Yxwh66Yjlx.cph0gtNBtJ' - // Note: The `upload_id` attribute applies to S3 multipart-upload - // operations and corresponds to the `--upload-id` parameter - // of the [S3 - // API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) - // multipart operations. - // This applies in particular to the following operations: - // - // - - // [abort-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/abort-multipart-upload.html) - // - - // [complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/s3api/complete-multipart-upload.html) - // - - // [list-parts](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-parts.html) - // - - // [upload-part](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part.html) - // - - // [upload-part-copy](https://docs.aws.amazon.com/cli/latest/reference/s3api/upload-part-copy.html) - AWSS3UploadIDKey = attribute.Key("aws.s3.upload_id") -) - -// AWSS3Bucket returns an attribute KeyValue conforming to the -// "aws.s3.bucket" semantic conventions. It represents the S3 bucket name the -// request refers to. Corresponds to the `--bucket` parameter of the [S3 -// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) -// operations. -func AWSS3Bucket(val string) attribute.KeyValue { - return AWSS3BucketKey.String(val) -} - -// AWSS3CopySource returns an attribute KeyValue conforming to the -// "aws.s3.copy_source" semantic conventions. It represents the source object -// (in the form `bucket`/`key`) for the copy operation. -func AWSS3CopySource(val string) attribute.KeyValue { - return AWSS3CopySourceKey.String(val) -} - -// AWSS3Delete returns an attribute KeyValue conforming to the -// "aws.s3.delete" semantic conventions. It represents the delete request -// container that specifies the objects to be deleted. -func AWSS3Delete(val string) attribute.KeyValue { - return AWSS3DeleteKey.String(val) -} - -// AWSS3Key returns an attribute KeyValue conforming to the "aws.s3.key" -// semantic conventions. It represents the S3 object key the request refers to. -// Corresponds to the `--key` parameter of the [S3 -// API](https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html) -// operations. -func AWSS3Key(val string) attribute.KeyValue { - return AWSS3KeyKey.String(val) -} - -// AWSS3PartNumber returns an attribute KeyValue conforming to the -// "aws.s3.part_number" semantic conventions. It represents the part number of -// the part being uploaded in a multipart-upload operation. This is a positive -// integer between 1 and 10,000. -func AWSS3PartNumber(val int) attribute.KeyValue { - return AWSS3PartNumberKey.Int(val) -} - -// AWSS3UploadID returns an attribute KeyValue conforming to the -// "aws.s3.upload_id" semantic conventions. It represents the upload ID that -// identifies the multipart upload. -func AWSS3UploadID(val string) attribute.KeyValue { - return AWSS3UploadIDKey.String(val) -} - -// Semantic conventions to apply when instrumenting the GraphQL implementation. -// They map GraphQL operations to attributes on a Span. -const ( - // GraphqlDocumentKey is the attribute Key conforming to the - // "graphql.document" semantic conventions. It represents the GraphQL - // document being executed. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'query findBookByID { bookByID(id: ?) { name } }' - // Note: The value may be sanitized to exclude sensitive information. - GraphqlDocumentKey = attribute.Key("graphql.document") - - // GraphqlOperationNameKey is the attribute Key conforming to the - // "graphql.operation.name" semantic conventions. It represents the name of - // the operation being executed. - // - // Type: string - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'findBookByID' - GraphqlOperationNameKey = attribute.Key("graphql.operation.name") - - // GraphqlOperationTypeKey is the attribute Key conforming to the - // "graphql.operation.type" semantic conventions. It represents the type of - // the operation being executed. - // - // Type: Enum - // RequirementLevel: Optional - // Stability: experimental - // Examples: 'query', 'mutation', 'subscription' - GraphqlOperationTypeKey = attribute.Key("graphql.operation.type") -) - -var ( - // GraphQL query - GraphqlOperationTypeQuery = GraphqlOperationTypeKey.String("query") - // GraphQL mutation - GraphqlOperationTypeMutation = GraphqlOperationTypeKey.String("mutation") - // GraphQL subscription - GraphqlOperationTypeSubscription = GraphqlOperationTypeKey.String("subscription") -) - -// GraphqlDocument returns an attribute KeyValue conforming to the -// "graphql.document" semantic conventions. It represents the GraphQL document -// being executed. -func GraphqlDocument(val string) attribute.KeyValue { - return GraphqlDocumentKey.String(val) -} - -// GraphqlOperationName returns an attribute KeyValue conforming to the -// "graphql.operation.name" semantic conventions. It represents the name of the -// operation being executed. -func GraphqlOperationName(val string) attribute.KeyValue { - return GraphqlOperationNameKey.String(val) -} diff --git a/vendor/go.opentelemetry.io/otel/trace.go b/vendor/go.opentelemetry.io/otel/trace.go deleted file mode 100644 index 6836c654..00000000 --- a/vendor/go.opentelemetry.io/otel/trace.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package otel // import "go.opentelemetry.io/otel" - -import ( - "go.opentelemetry.io/otel/internal/global" - "go.opentelemetry.io/otel/trace" -) - -// Tracer creates a named tracer that implements Tracer interface. -// If the name is an empty string then provider uses default name. -// -// This is short for GetTracerProvider().Tracer(name, opts...) -func Tracer(name string, opts ...trace.TracerOption) trace.Tracer { - return GetTracerProvider().Tracer(name, opts...) -} - -// GetTracerProvider returns the registered global trace provider. -// If none is registered then an instance of NoopTracerProvider is returned. -// -// Use the trace provider to create a named tracer. E.g. -// -// tracer := otel.GetTracerProvider().Tracer("example.com/foo") -// -// or -// -// tracer := otel.Tracer("example.com/foo") -func GetTracerProvider() trace.TracerProvider { - return global.TracerProvider() -} - -// SetTracerProvider registers `tp` as the global trace provider. -func SetTracerProvider(tp trace.TracerProvider) { - global.SetTracerProvider(tp) -} diff --git a/vendor/go.opentelemetry.io/otel/trace/LICENSE b/vendor/go.opentelemetry.io/otel/trace/LICENSE deleted file mode 100644 index 261eeb9e..00000000 --- a/vendor/go.opentelemetry.io/otel/trace/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/go.opentelemetry.io/otel/trace/README.md b/vendor/go.opentelemetry.io/otel/trace/README.md deleted file mode 100644 index 58ccaba6..00000000 --- a/vendor/go.opentelemetry.io/otel/trace/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Trace API - -[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/trace)](https://pkg.go.dev/go.opentelemetry.io/otel/trace) diff --git a/vendor/go.opentelemetry.io/otel/trace/config.go b/vendor/go.opentelemetry.io/otel/trace/config.go deleted file mode 100644 index 273d58e0..00000000 --- a/vendor/go.opentelemetry.io/otel/trace/config.go +++ /dev/null @@ -1,323 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package trace // import "go.opentelemetry.io/otel/trace" - -import ( - "time" - - "go.opentelemetry.io/otel/attribute" -) - -// TracerConfig is a group of options for a Tracer. -type TracerConfig struct { - instrumentationVersion string - // Schema URL of the telemetry emitted by the Tracer. - schemaURL string - attrs attribute.Set -} - -// InstrumentationVersion returns the version of the library providing instrumentation. -func (t *TracerConfig) InstrumentationVersion() string { - return t.instrumentationVersion -} - -// InstrumentationAttributes returns the attributes associated with the library -// providing instrumentation. -func (t *TracerConfig) InstrumentationAttributes() attribute.Set { - return t.attrs -} - -// SchemaURL returns the Schema URL of the telemetry emitted by the Tracer. -func (t *TracerConfig) SchemaURL() string { - return t.schemaURL -} - -// NewTracerConfig applies all the options to a returned TracerConfig. -func NewTracerConfig(options ...TracerOption) TracerConfig { - var config TracerConfig - for _, option := range options { - config = option.apply(config) - } - return config -} - -// TracerOption applies an option to a TracerConfig. -type TracerOption interface { - apply(TracerConfig) TracerConfig -} - -type tracerOptionFunc func(TracerConfig) TracerConfig - -func (fn tracerOptionFunc) apply(cfg TracerConfig) TracerConfig { - return fn(cfg) -} - -// SpanConfig is a group of options for a Span. -type SpanConfig struct { - attributes []attribute.KeyValue - timestamp time.Time - links []Link - newRoot bool - spanKind SpanKind - stackTrace bool -} - -// Attributes describe the associated qualities of a Span. -func (cfg *SpanConfig) Attributes() []attribute.KeyValue { - return cfg.attributes -} - -// Timestamp is a time in a Span life-cycle. -func (cfg *SpanConfig) Timestamp() time.Time { - return cfg.timestamp -} - -// StackTrace checks whether stack trace capturing is enabled. -func (cfg *SpanConfig) StackTrace() bool { - return cfg.stackTrace -} - -// Links are the associations a Span has with other Spans. -func (cfg *SpanConfig) Links() []Link { - return cfg.links -} - -// NewRoot identifies a Span as the root Span for a new trace. This is -// commonly used when an existing trace crosses trust boundaries and the -// remote parent span context should be ignored for security. -func (cfg *SpanConfig) NewRoot() bool { - return cfg.newRoot -} - -// SpanKind is the role a Span has in a trace. -func (cfg *SpanConfig) SpanKind() SpanKind { - return cfg.spanKind -} - -// NewSpanStartConfig applies all the options to a returned SpanConfig. -// No validation is performed on the returned SpanConfig (e.g. no uniqueness -// checking or bounding of data), it is left to the SDK to perform this -// action. -func NewSpanStartConfig(options ...SpanStartOption) SpanConfig { - var c SpanConfig - for _, option := range options { - c = option.applySpanStart(c) - } - return c -} - -// NewSpanEndConfig applies all the options to a returned SpanConfig. -// No validation is performed on the returned SpanConfig (e.g. no uniqueness -// checking or bounding of data), it is left to the SDK to perform this -// action. -func NewSpanEndConfig(options ...SpanEndOption) SpanConfig { - var c SpanConfig - for _, option := range options { - c = option.applySpanEnd(c) - } - return c -} - -// SpanStartOption applies an option to a SpanConfig. These options are applicable -// only when the span is created. -type SpanStartOption interface { - applySpanStart(SpanConfig) SpanConfig -} - -type spanOptionFunc func(SpanConfig) SpanConfig - -func (fn spanOptionFunc) applySpanStart(cfg SpanConfig) SpanConfig { - return fn(cfg) -} - -// SpanEndOption applies an option to a SpanConfig. These options are -// applicable only when the span is ended. -type SpanEndOption interface { - applySpanEnd(SpanConfig) SpanConfig -} - -// EventConfig is a group of options for an Event. -type EventConfig struct { - attributes []attribute.KeyValue - timestamp time.Time - stackTrace bool -} - -// Attributes describe the associated qualities of an Event. -func (cfg *EventConfig) Attributes() []attribute.KeyValue { - return cfg.attributes -} - -// Timestamp is a time in an Event life-cycle. -func (cfg *EventConfig) Timestamp() time.Time { - return cfg.timestamp -} - -// StackTrace checks whether stack trace capturing is enabled. -func (cfg *EventConfig) StackTrace() bool { - return cfg.stackTrace -} - -// NewEventConfig applies all the EventOptions to a returned EventConfig. If no -// timestamp option is passed, the returned EventConfig will have a Timestamp -// set to the call time, otherwise no validation is performed on the returned -// EventConfig. -func NewEventConfig(options ...EventOption) EventConfig { - var c EventConfig - for _, option := range options { - c = option.applyEvent(c) - } - if c.timestamp.IsZero() { - c.timestamp = time.Now() - } - return c -} - -// EventOption applies span event options to an EventConfig. -type EventOption interface { - applyEvent(EventConfig) EventConfig -} - -// SpanOption are options that can be used at both the beginning and end of a span. -type SpanOption interface { - SpanStartOption - SpanEndOption -} - -// SpanStartEventOption are options that can be used at the start of a span, or with an event. -type SpanStartEventOption interface { - SpanStartOption - EventOption -} - -// SpanEndEventOption are options that can be used at the end of a span, or with an event. -type SpanEndEventOption interface { - SpanEndOption - EventOption -} - -type attributeOption []attribute.KeyValue - -func (o attributeOption) applySpan(c SpanConfig) SpanConfig { - c.attributes = append(c.attributes, []attribute.KeyValue(o)...) - return c -} -func (o attributeOption) applySpanStart(c SpanConfig) SpanConfig { return o.applySpan(c) } -func (o attributeOption) applyEvent(c EventConfig) EventConfig { - c.attributes = append(c.attributes, []attribute.KeyValue(o)...) - return c -} - -var _ SpanStartEventOption = attributeOption{} - -// WithAttributes adds the attributes related to a span life-cycle event. -// These attributes are used to describe the work a Span represents when this -// option is provided to a Span's start or end events. Otherwise, these -// attributes provide additional information about the event being recorded -// (e.g. error, state change, processing progress, system event). -// -// If multiple of these options are passed the attributes of each successive -// option will extend the attributes instead of overwriting. There is no -// guarantee of uniqueness in the resulting attributes. -func WithAttributes(attributes ...attribute.KeyValue) SpanStartEventOption { - return attributeOption(attributes) -} - -// SpanEventOption are options that can be used with an event or a span. -type SpanEventOption interface { - SpanOption - EventOption -} - -type timestampOption time.Time - -func (o timestampOption) applySpan(c SpanConfig) SpanConfig { - c.timestamp = time.Time(o) - return c -} -func (o timestampOption) applySpanStart(c SpanConfig) SpanConfig { return o.applySpan(c) } -func (o timestampOption) applySpanEnd(c SpanConfig) SpanConfig { return o.applySpan(c) } -func (o timestampOption) applyEvent(c EventConfig) EventConfig { - c.timestamp = time.Time(o) - return c -} - -var _ SpanEventOption = timestampOption{} - -// WithTimestamp sets the time of a Span or Event life-cycle moment (e.g. -// started, stopped, errored). -func WithTimestamp(t time.Time) SpanEventOption { - return timestampOption(t) -} - -type stackTraceOption bool - -func (o stackTraceOption) applyEvent(c EventConfig) EventConfig { - c.stackTrace = bool(o) - return c -} - -func (o stackTraceOption) applySpan(c SpanConfig) SpanConfig { - c.stackTrace = bool(o) - return c -} -func (o stackTraceOption) applySpanEnd(c SpanConfig) SpanConfig { return o.applySpan(c) } - -// WithStackTrace sets the flag to capture the error with stack trace (e.g. true, false). -func WithStackTrace(b bool) SpanEndEventOption { - return stackTraceOption(b) -} - -// WithLinks adds links to a Span. The links are added to the existing Span -// links, i.e. this does not overwrite. Links with invalid span context are ignored. -func WithLinks(links ...Link) SpanStartOption { - return spanOptionFunc(func(cfg SpanConfig) SpanConfig { - cfg.links = append(cfg.links, links...) - return cfg - }) -} - -// WithNewRoot specifies that the Span should be treated as a root Span. Any -// existing parent span context will be ignored when defining the Span's trace -// identifiers. -func WithNewRoot() SpanStartOption { - return spanOptionFunc(func(cfg SpanConfig) SpanConfig { - cfg.newRoot = true - return cfg - }) -} - -// WithSpanKind sets the SpanKind of a Span. -func WithSpanKind(kind SpanKind) SpanStartOption { - return spanOptionFunc(func(cfg SpanConfig) SpanConfig { - cfg.spanKind = kind - return cfg - }) -} - -// WithInstrumentationVersion sets the instrumentation version. -func WithInstrumentationVersion(version string) TracerOption { - return tracerOptionFunc(func(cfg TracerConfig) TracerConfig { - cfg.instrumentationVersion = version - return cfg - }) -} - -// WithInstrumentationAttributes sets the instrumentation attributes. -// -// The passed attributes will be de-duplicated. -func WithInstrumentationAttributes(attr ...attribute.KeyValue) TracerOption { - return tracerOptionFunc(func(config TracerConfig) TracerConfig { - config.attrs = attribute.NewSet(attr...) - return config - }) -} - -// WithSchemaURL sets the schema URL for the Tracer. -func WithSchemaURL(schemaURL string) TracerOption { - return tracerOptionFunc(func(cfg TracerConfig) TracerConfig { - cfg.schemaURL = schemaURL - return cfg - }) -} diff --git a/vendor/go.opentelemetry.io/otel/trace/context.go b/vendor/go.opentelemetry.io/otel/trace/context.go deleted file mode 100644 index 5650a174..00000000 --- a/vendor/go.opentelemetry.io/otel/trace/context.go +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package trace // import "go.opentelemetry.io/otel/trace" - -import "context" - -type traceContextKeyType int - -const currentSpanKey traceContextKeyType = iota - -// ContextWithSpan returns a copy of parent with span set as the current Span. -func ContextWithSpan(parent context.Context, span Span) context.Context { - return context.WithValue(parent, currentSpanKey, span) -} - -// ContextWithSpanContext returns a copy of parent with sc as the current -// Span. The Span implementation that wraps sc is non-recording and performs -// no operations other than to return sc as the SpanContext from the -// SpanContext method. -func ContextWithSpanContext(parent context.Context, sc SpanContext) context.Context { - return ContextWithSpan(parent, nonRecordingSpan{sc: sc}) -} - -// ContextWithRemoteSpanContext returns a copy of parent with rsc set explicly -// as a remote SpanContext and as the current Span. The Span implementation -// that wraps rsc is non-recording and performs no operations other than to -// return rsc as the SpanContext from the SpanContext method. -func ContextWithRemoteSpanContext(parent context.Context, rsc SpanContext) context.Context { - return ContextWithSpanContext(parent, rsc.WithRemote(true)) -} - -// SpanFromContext returns the current Span from ctx. -// -// If no Span is currently set in ctx an implementation of a Span that -// performs no operations is returned. -func SpanFromContext(ctx context.Context) Span { - if ctx == nil { - return noopSpanInstance - } - if span, ok := ctx.Value(currentSpanKey).(Span); ok { - return span - } - return noopSpanInstance -} - -// SpanContextFromContext returns the current Span's SpanContext. -func SpanContextFromContext(ctx context.Context) SpanContext { - return SpanFromContext(ctx).SpanContext() -} diff --git a/vendor/go.opentelemetry.io/otel/trace/doc.go b/vendor/go.opentelemetry.io/otel/trace/doc.go deleted file mode 100644 index d661c5d1..00000000 --- a/vendor/go.opentelemetry.io/otel/trace/doc.go +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -/* -Package trace provides an implementation of the tracing part of the -OpenTelemetry API. - -To participate in distributed traces a Span needs to be created for the -operation being performed as part of a traced workflow. In its simplest form: - - var tracer trace.Tracer - - func init() { - tracer = otel.Tracer("instrumentation/package/name") - } - - func operation(ctx context.Context) { - var span trace.Span - ctx, span = tracer.Start(ctx, "operation") - defer span.End() - // ... - } - -A Tracer is unique to the instrumentation and is used to create Spans. -Instrumentation should be designed to accept a TracerProvider from which it -can create its own unique Tracer. Alternatively, the registered global -TracerProvider from the go.opentelemetry.io/otel package can be used as -a default. - - const ( - name = "instrumentation/package/name" - version = "0.1.0" - ) - - type Instrumentation struct { - tracer trace.Tracer - } - - func NewInstrumentation(tp trace.TracerProvider) *Instrumentation { - if tp == nil { - tp = otel.TracerProvider() - } - return &Instrumentation{ - tracer: tp.Tracer(name, trace.WithInstrumentationVersion(version)), - } - } - - func operation(ctx context.Context, inst *Instrumentation) { - var span trace.Span - ctx, span = inst.tracer.Start(ctx, "operation") - defer span.End() - // ... - } - -# API Implementations - -This package does not conform to the standard Go versioning policy; all of its -interfaces may have methods added to them without a package major version bump. -This non-standard API evolution could surprise an uninformed implementation -author. They could unknowingly build their implementation in a way that would -result in a runtime panic for their users that update to the new API. - -The API is designed to help inform an instrumentation author about this -non-standard API evolution. It requires them to choose a default behavior for -unimplemented interface methods. There are three behavior choices they can -make: - - - Compilation failure - - Panic - - Default to another implementation - -All interfaces in this API embed a corresponding interface from -[go.opentelemetry.io/otel/trace/embedded]. If an author wants the default -behavior of their implementations to be a compilation failure, signaling to -their users they need to update to the latest version of that implementation, -they need to embed the corresponding interface from -[go.opentelemetry.io/otel/trace/embedded] in their implementation. For -example, - - import "go.opentelemetry.io/otel/trace/embedded" - - type TracerProvider struct { - embedded.TracerProvider - // ... - } - -If an author wants the default behavior of their implementations to panic, they -can embed the API interface directly. - - import "go.opentelemetry.io/otel/trace" - - type TracerProvider struct { - trace.TracerProvider - // ... - } - -This option is not recommended. It will lead to publishing packages that -contain runtime panics when users update to newer versions of -[go.opentelemetry.io/otel/trace], which may be done with a trasitive -dependency. - -Finally, an author can embed another implementation in theirs. The embedded -implementation will be used for methods not defined by the author. For example, -an author who wants to default to silently dropping the call can use -[go.opentelemetry.io/otel/trace/noop]: - - import "go.opentelemetry.io/otel/trace/noop" - - type TracerProvider struct { - noop.TracerProvider - // ... - } - -It is strongly recommended that authors only embed -[go.opentelemetry.io/otel/trace/noop] if they choose this default behavior. -That implementation is the only one OpenTelemetry authors can guarantee will -fully implement all the API interfaces when a user updates their API. -*/ -package trace // import "go.opentelemetry.io/otel/trace" diff --git a/vendor/go.opentelemetry.io/otel/trace/embedded/README.md b/vendor/go.opentelemetry.io/otel/trace/embedded/README.md deleted file mode 100644 index 7754a239..00000000 --- a/vendor/go.opentelemetry.io/otel/trace/embedded/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Trace Embedded - -[![PkgGoDev](https://pkg.go.dev/badge/go.opentelemetry.io/otel/trace/embedded)](https://pkg.go.dev/go.opentelemetry.io/otel/trace/embedded) diff --git a/vendor/go.opentelemetry.io/otel/trace/embedded/embedded.go b/vendor/go.opentelemetry.io/otel/trace/embedded/embedded.go deleted file mode 100644 index 3e359a00..00000000 --- a/vendor/go.opentelemetry.io/otel/trace/embedded/embedded.go +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -// Package embedded provides interfaces embedded within the [OpenTelemetry -// trace API]. -// -// Implementers of the [OpenTelemetry trace API] can embed the relevant type -// from this package into their implementation directly. Doing so will result -// in a compilation error for users when the [OpenTelemetry trace API] is -// extended (which is something that can happen without a major version bump of -// the API package). -// -// [OpenTelemetry trace API]: https://pkg.go.dev/go.opentelemetry.io/otel/trace -package embedded // import "go.opentelemetry.io/otel/trace/embedded" - -// TracerProvider is embedded in -// [go.opentelemetry.io/otel/trace.TracerProvider]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/trace.TracerProvider] if you want users to -// experience a compilation error, signaling they need to update to your latest -// implementation, when the [go.opentelemetry.io/otel/trace.TracerProvider] -// interface is extended (which is something that can happen without a major -// version bump of the API package). -type TracerProvider interface{ tracerProvider() } - -// Tracer is embedded in [go.opentelemetry.io/otel/trace.Tracer]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/trace.Tracer] if you want users to experience a -// compilation error, signaling they need to update to your latest -// implementation, when the [go.opentelemetry.io/otel/trace.Tracer] interface -// is extended (which is something that can happen without a major version bump -// of the API package). -type Tracer interface{ tracer() } - -// Span is embedded in [go.opentelemetry.io/otel/trace.Span]. -// -// Embed this interface in your implementation of the -// [go.opentelemetry.io/otel/trace.Span] if you want users to experience a -// compilation error, signaling they need to update to your latest -// implementation, when the [go.opentelemetry.io/otel/trace.Span] interface is -// extended (which is something that can happen without a major version bump of -// the API package). -type Span interface{ span() } diff --git a/vendor/go.opentelemetry.io/otel/trace/nonrecording.go b/vendor/go.opentelemetry.io/otel/trace/nonrecording.go deleted file mode 100644 index c00221e7..00000000 --- a/vendor/go.opentelemetry.io/otel/trace/nonrecording.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package trace // import "go.opentelemetry.io/otel/trace" - -// nonRecordingSpan is a minimal implementation of a Span that wraps a -// SpanContext. It performs no operations other than to return the wrapped -// SpanContext. -type nonRecordingSpan struct { - noopSpan - - sc SpanContext -} - -// SpanContext returns the wrapped SpanContext. -func (s nonRecordingSpan) SpanContext() SpanContext { return s.sc } diff --git a/vendor/go.opentelemetry.io/otel/trace/noop.go b/vendor/go.opentelemetry.io/otel/trace/noop.go deleted file mode 100644 index ca20e999..00000000 --- a/vendor/go.opentelemetry.io/otel/trace/noop.go +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package trace // import "go.opentelemetry.io/otel/trace" - -import ( - "context" - - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/codes" - "go.opentelemetry.io/otel/trace/embedded" -) - -// NewNoopTracerProvider returns an implementation of TracerProvider that -// performs no operations. The Tracer and Spans created from the returned -// TracerProvider also perform no operations. -// -// Deprecated: Use [go.opentelemetry.io/otel/trace/noop.NewTracerProvider] -// instead. -func NewNoopTracerProvider() TracerProvider { - return noopTracerProvider{} -} - -type noopTracerProvider struct{ embedded.TracerProvider } - -var _ TracerProvider = noopTracerProvider{} - -// Tracer returns noop implementation of Tracer. -func (p noopTracerProvider) Tracer(string, ...TracerOption) Tracer { - return noopTracer{} -} - -// noopTracer is an implementation of Tracer that performs no operations. -type noopTracer struct{ embedded.Tracer } - -var _ Tracer = noopTracer{} - -// Start carries forward a non-recording Span, if one is present in the context, otherwise it -// creates a no-op Span. -func (t noopTracer) Start(ctx context.Context, name string, _ ...SpanStartOption) (context.Context, Span) { - span := SpanFromContext(ctx) - if _, ok := span.(nonRecordingSpan); !ok { - // span is likely already a noopSpan, but let's be sure - span = noopSpanInstance - } - return ContextWithSpan(ctx, span), span -} - -// noopSpan is an implementation of Span that performs no operations. -type noopSpan struct{ embedded.Span } - -var noopSpanInstance Span = noopSpan{} - -// SpanContext returns an empty span context. -func (noopSpan) SpanContext() SpanContext { return SpanContext{} } - -// IsRecording always returns false. -func (noopSpan) IsRecording() bool { return false } - -// SetStatus does nothing. -func (noopSpan) SetStatus(codes.Code, string) {} - -// SetError does nothing. -func (noopSpan) SetError(bool) {} - -// SetAttributes does nothing. -func (noopSpan) SetAttributes(...attribute.KeyValue) {} - -// End does nothing. -func (noopSpan) End(...SpanEndOption) {} - -// RecordError does nothing. -func (noopSpan) RecordError(error, ...EventOption) {} - -// AddEvent does nothing. -func (noopSpan) AddEvent(string, ...EventOption) {} - -// AddLink does nothing. -func (noopSpan) AddLink(Link) {} - -// SetName does nothing. -func (noopSpan) SetName(string) {} - -// TracerProvider returns a no-op TracerProvider. -func (noopSpan) TracerProvider() TracerProvider { return noopTracerProvider{} } diff --git a/vendor/go.opentelemetry.io/otel/trace/trace.go b/vendor/go.opentelemetry.io/otel/trace/trace.go deleted file mode 100644 index 28877d4a..00000000 --- a/vendor/go.opentelemetry.io/otel/trace/trace.go +++ /dev/null @@ -1,572 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package trace // import "go.opentelemetry.io/otel/trace" - -import ( - "bytes" - "context" - "encoding/hex" - "encoding/json" - - "go.opentelemetry.io/otel/attribute" - "go.opentelemetry.io/otel/codes" - "go.opentelemetry.io/otel/trace/embedded" -) - -const ( - // FlagsSampled is a bitmask with the sampled bit set. A SpanContext - // with the sampling bit set means the span is sampled. - FlagsSampled = TraceFlags(0x01) - - errInvalidHexID errorConst = "trace-id and span-id can only contain [0-9a-f] characters, all lowercase" - - errInvalidTraceIDLength errorConst = "hex encoded trace-id must have length equals to 32" - errNilTraceID errorConst = "trace-id can't be all zero" - - errInvalidSpanIDLength errorConst = "hex encoded span-id must have length equals to 16" - errNilSpanID errorConst = "span-id can't be all zero" -) - -type errorConst string - -func (e errorConst) Error() string { - return string(e) -} - -// TraceID is a unique identity of a trace. -// nolint:revive // revive complains about stutter of `trace.TraceID`. -type TraceID [16]byte - -var ( - nilTraceID TraceID - _ json.Marshaler = nilTraceID -) - -// IsValid checks whether the trace TraceID is valid. A valid trace ID does -// not consist of zeros only. -func (t TraceID) IsValid() bool { - return !bytes.Equal(t[:], nilTraceID[:]) -} - -// MarshalJSON implements a custom marshal function to encode TraceID -// as a hex string. -func (t TraceID) MarshalJSON() ([]byte, error) { - return json.Marshal(t.String()) -} - -// String returns the hex string representation form of a TraceID. -func (t TraceID) String() string { - return hex.EncodeToString(t[:]) -} - -// SpanID is a unique identity of a span in a trace. -type SpanID [8]byte - -var ( - nilSpanID SpanID - _ json.Marshaler = nilSpanID -) - -// IsValid checks whether the SpanID is valid. A valid SpanID does not consist -// of zeros only. -func (s SpanID) IsValid() bool { - return !bytes.Equal(s[:], nilSpanID[:]) -} - -// MarshalJSON implements a custom marshal function to encode SpanID -// as a hex string. -func (s SpanID) MarshalJSON() ([]byte, error) { - return json.Marshal(s.String()) -} - -// String returns the hex string representation form of a SpanID. -func (s SpanID) String() string { - return hex.EncodeToString(s[:]) -} - -// TraceIDFromHex returns a TraceID from a hex string if it is compliant with -// the W3C trace-context specification. See more at -// https://www.w3.org/TR/trace-context/#trace-id -// nolint:revive // revive complains about stutter of `trace.TraceIDFromHex`. -func TraceIDFromHex(h string) (TraceID, error) { - t := TraceID{} - if len(h) != 32 { - return t, errInvalidTraceIDLength - } - - if err := decodeHex(h, t[:]); err != nil { - return t, err - } - - if !t.IsValid() { - return t, errNilTraceID - } - return t, nil -} - -// SpanIDFromHex returns a SpanID from a hex string if it is compliant -// with the w3c trace-context specification. -// See more at https://www.w3.org/TR/trace-context/#parent-id -func SpanIDFromHex(h string) (SpanID, error) { - s := SpanID{} - if len(h) != 16 { - return s, errInvalidSpanIDLength - } - - if err := decodeHex(h, s[:]); err != nil { - return s, err - } - - if !s.IsValid() { - return s, errNilSpanID - } - return s, nil -} - -func decodeHex(h string, b []byte) error { - for _, r := range h { - switch { - case 'a' <= r && r <= 'f': - continue - case '0' <= r && r <= '9': - continue - default: - return errInvalidHexID - } - } - - decoded, err := hex.DecodeString(h) - if err != nil { - return err - } - - copy(b, decoded) - return nil -} - -// TraceFlags contains flags that can be set on a SpanContext. -type TraceFlags byte //nolint:revive // revive complains about stutter of `trace.TraceFlags`. - -// IsSampled returns if the sampling bit is set in the TraceFlags. -func (tf TraceFlags) IsSampled() bool { - return tf&FlagsSampled == FlagsSampled -} - -// WithSampled sets the sampling bit in a new copy of the TraceFlags. -func (tf TraceFlags) WithSampled(sampled bool) TraceFlags { // nolint:revive // sampled is not a control flag. - if sampled { - return tf | FlagsSampled - } - - return tf &^ FlagsSampled -} - -// MarshalJSON implements a custom marshal function to encode TraceFlags -// as a hex string. -func (tf TraceFlags) MarshalJSON() ([]byte, error) { - return json.Marshal(tf.String()) -} - -// String returns the hex string representation form of TraceFlags. -func (tf TraceFlags) String() string { - return hex.EncodeToString([]byte{byte(tf)}[:]) -} - -// SpanContextConfig contains mutable fields usable for constructing -// an immutable SpanContext. -type SpanContextConfig struct { - TraceID TraceID - SpanID SpanID - TraceFlags TraceFlags - TraceState TraceState - Remote bool -} - -// NewSpanContext constructs a SpanContext using values from the provided -// SpanContextConfig. -func NewSpanContext(config SpanContextConfig) SpanContext { - return SpanContext{ - traceID: config.TraceID, - spanID: config.SpanID, - traceFlags: config.TraceFlags, - traceState: config.TraceState, - remote: config.Remote, - } -} - -// SpanContext contains identifying trace information about a Span. -type SpanContext struct { - traceID TraceID - spanID SpanID - traceFlags TraceFlags - traceState TraceState - remote bool -} - -var _ json.Marshaler = SpanContext{} - -// IsValid returns if the SpanContext is valid. A valid span context has a -// valid TraceID and SpanID. -func (sc SpanContext) IsValid() bool { - return sc.HasTraceID() && sc.HasSpanID() -} - -// IsRemote indicates whether the SpanContext represents a remotely-created Span. -func (sc SpanContext) IsRemote() bool { - return sc.remote -} - -// WithRemote returns a copy of sc with the Remote property set to remote. -func (sc SpanContext) WithRemote(remote bool) SpanContext { - return SpanContext{ - traceID: sc.traceID, - spanID: sc.spanID, - traceFlags: sc.traceFlags, - traceState: sc.traceState, - remote: remote, - } -} - -// TraceID returns the TraceID from the SpanContext. -func (sc SpanContext) TraceID() TraceID { - return sc.traceID -} - -// HasTraceID checks if the SpanContext has a valid TraceID. -func (sc SpanContext) HasTraceID() bool { - return sc.traceID.IsValid() -} - -// WithTraceID returns a new SpanContext with the TraceID replaced. -func (sc SpanContext) WithTraceID(traceID TraceID) SpanContext { - return SpanContext{ - traceID: traceID, - spanID: sc.spanID, - traceFlags: sc.traceFlags, - traceState: sc.traceState, - remote: sc.remote, - } -} - -// SpanID returns the SpanID from the SpanContext. -func (sc SpanContext) SpanID() SpanID { - return sc.spanID -} - -// HasSpanID checks if the SpanContext has a valid SpanID. -func (sc SpanContext) HasSpanID() bool { - return sc.spanID.IsValid() -} - -// WithSpanID returns a new SpanContext with the SpanID replaced. -func (sc SpanContext) WithSpanID(spanID SpanID) SpanContext { - return SpanContext{ - traceID: sc.traceID, - spanID: spanID, - traceFlags: sc.traceFlags, - traceState: sc.traceState, - remote: sc.remote, - } -} - -// TraceFlags returns the flags from the SpanContext. -func (sc SpanContext) TraceFlags() TraceFlags { - return sc.traceFlags -} - -// IsSampled returns if the sampling bit is set in the SpanContext's TraceFlags. -func (sc SpanContext) IsSampled() bool { - return sc.traceFlags.IsSampled() -} - -// WithTraceFlags returns a new SpanContext with the TraceFlags replaced. -func (sc SpanContext) WithTraceFlags(flags TraceFlags) SpanContext { - return SpanContext{ - traceID: sc.traceID, - spanID: sc.spanID, - traceFlags: flags, - traceState: sc.traceState, - remote: sc.remote, - } -} - -// TraceState returns the TraceState from the SpanContext. -func (sc SpanContext) TraceState() TraceState { - return sc.traceState -} - -// WithTraceState returns a new SpanContext with the TraceState replaced. -func (sc SpanContext) WithTraceState(state TraceState) SpanContext { - return SpanContext{ - traceID: sc.traceID, - spanID: sc.spanID, - traceFlags: sc.traceFlags, - traceState: state, - remote: sc.remote, - } -} - -// Equal is a predicate that determines whether two SpanContext values are equal. -func (sc SpanContext) Equal(other SpanContext) bool { - return sc.traceID == other.traceID && - sc.spanID == other.spanID && - sc.traceFlags == other.traceFlags && - sc.traceState.String() == other.traceState.String() && - sc.remote == other.remote -} - -// MarshalJSON implements a custom marshal function to encode a SpanContext. -func (sc SpanContext) MarshalJSON() ([]byte, error) { - return json.Marshal(SpanContextConfig{ - TraceID: sc.traceID, - SpanID: sc.spanID, - TraceFlags: sc.traceFlags, - TraceState: sc.traceState, - Remote: sc.remote, - }) -} - -// Span is the individual component of a trace. It represents a single named -// and timed operation of a workflow that is traced. A Tracer is used to -// create a Span and it is then up to the operation the Span represents to -// properly end the Span when the operation itself ends. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Span interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Span - - // End completes the Span. The Span is considered complete and ready to be - // delivered through the rest of the telemetry pipeline after this method - // is called. Therefore, updates to the Span are not allowed after this - // method has been called. - End(options ...SpanEndOption) - - // AddEvent adds an event with the provided name and options. - AddEvent(name string, options ...EventOption) - - // AddLink adds a link. - // Adding links at span creation using WithLinks is preferred to calling AddLink - // later, for contexts that are available during span creation, because head - // sampling decisions can only consider information present during span creation. - AddLink(link Link) - - // IsRecording returns the recording state of the Span. It will return - // true if the Span is active and events can be recorded. - IsRecording() bool - - // RecordError will record err as an exception span event for this span. An - // additional call to SetStatus is required if the Status of the Span should - // be set to Error, as this method does not change the Span status. If this - // span is not being recorded or err is nil then this method does nothing. - RecordError(err error, options ...EventOption) - - // SpanContext returns the SpanContext of the Span. The returned SpanContext - // is usable even after the End method has been called for the Span. - SpanContext() SpanContext - - // SetStatus sets the status of the Span in the form of a code and a - // description, provided the status hasn't already been set to a higher - // value before (OK > Error > Unset). The description is only included in a - // status when the code is for an error. - SetStatus(code codes.Code, description string) - - // SetName sets the Span name. - SetName(name string) - - // SetAttributes sets kv as attributes of the Span. If a key from kv - // already exists for an attribute of the Span it will be overwritten with - // the value contained in kv. - SetAttributes(kv ...attribute.KeyValue) - - // TracerProvider returns a TracerProvider that can be used to generate - // additional Spans on the same telemetry pipeline as the current Span. - TracerProvider() TracerProvider -} - -// Link is the relationship between two Spans. The relationship can be within -// the same Trace or across different Traces. -// -// For example, a Link is used in the following situations: -// -// 1. Batch Processing: A batch of operations may contain operations -// associated with one or more traces/spans. Since there can only be one -// parent SpanContext, a Link is used to keep reference to the -// SpanContext of all operations in the batch. -// 2. Public Endpoint: A SpanContext for an in incoming client request on a -// public endpoint should be considered untrusted. In such a case, a new -// trace with its own identity and sampling decision needs to be created, -// but this new trace needs to be related to the original trace in some -// form. A Link is used to keep reference to the original SpanContext and -// track the relationship. -type Link struct { - // SpanContext of the linked Span. - SpanContext SpanContext - - // Attributes describe the aspects of the link. - Attributes []attribute.KeyValue -} - -// LinkFromContext returns a link encapsulating the SpanContext in the provided ctx. -func LinkFromContext(ctx context.Context, attrs ...attribute.KeyValue) Link { - return Link{ - SpanContext: SpanContextFromContext(ctx), - Attributes: attrs, - } -} - -// SpanKind is the role a Span plays in a Trace. -type SpanKind int - -// As a convenience, these match the proto definition, see -// https://github.com/open-telemetry/opentelemetry-proto/blob/30d237e1ff3ab7aa50e0922b5bebdd93505090af/opentelemetry/proto/trace/v1/trace.proto#L101-L129 -// -// The unspecified value is not a valid `SpanKind`. Use `ValidateSpanKind()` -// to coerce a span kind to a valid value. -const ( - // SpanKindUnspecified is an unspecified SpanKind and is not a valid - // SpanKind. SpanKindUnspecified should be replaced with SpanKindInternal - // if it is received. - SpanKindUnspecified SpanKind = 0 - // SpanKindInternal is a SpanKind for a Span that represents an internal - // operation within an application. - SpanKindInternal SpanKind = 1 - // SpanKindServer is a SpanKind for a Span that represents the operation - // of handling a request from a client. - SpanKindServer SpanKind = 2 - // SpanKindClient is a SpanKind for a Span that represents the operation - // of client making a request to a server. - SpanKindClient SpanKind = 3 - // SpanKindProducer is a SpanKind for a Span that represents the operation - // of a producer sending a message to a message broker. Unlike - // SpanKindClient and SpanKindServer, there is often no direct - // relationship between this kind of Span and a SpanKindConsumer kind. A - // SpanKindProducer Span will end once the message is accepted by the - // message broker which might not overlap with the processing of that - // message. - SpanKindProducer SpanKind = 4 - // SpanKindConsumer is a SpanKind for a Span that represents the operation - // of a consumer receiving a message from a message broker. Like - // SpanKindProducer Spans, there is often no direct relationship between - // this Span and the Span that produced the message. - SpanKindConsumer SpanKind = 5 -) - -// ValidateSpanKind returns a valid span kind value. This will coerce -// invalid values into the default value, SpanKindInternal. -func ValidateSpanKind(spanKind SpanKind) SpanKind { - switch spanKind { - case SpanKindInternal, - SpanKindServer, - SpanKindClient, - SpanKindProducer, - SpanKindConsumer: - // valid - return spanKind - default: - return SpanKindInternal - } -} - -// String returns the specified name of the SpanKind in lower-case. -func (sk SpanKind) String() string { - switch sk { - case SpanKindInternal: - return "internal" - case SpanKindServer: - return "server" - case SpanKindClient: - return "client" - case SpanKindProducer: - return "producer" - case SpanKindConsumer: - return "consumer" - default: - return "unspecified" - } -} - -// Tracer is the creator of Spans. -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type Tracer interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.Tracer - - // Start creates a span and a context.Context containing the newly-created span. - // - // If the context.Context provided in `ctx` contains a Span then the newly-created - // Span will be a child of that span, otherwise it will be a root span. This behavior - // can be overridden by providing `WithNewRoot()` as a SpanOption, causing the - // newly-created Span to be a root span even if `ctx` contains a Span. - // - // When creating a Span it is recommended to provide all known span attributes using - // the `WithAttributes()` SpanOption as samplers will only have access to the - // attributes provided when a Span is created. - // - // Any Span that is created MUST also be ended. This is the responsibility of the user. - // Implementations of this API may leak memory or other resources if Spans are not ended. - Start(ctx context.Context, spanName string, opts ...SpanStartOption) (context.Context, Span) -} - -// TracerProvider provides Tracers that are used by instrumentation code to -// trace computational workflows. -// -// A TracerProvider is the collection destination of all Spans from Tracers it -// provides, it represents a unique telemetry collection pipeline. How that -// pipeline is defined, meaning how those Spans are collected, processed, and -// where they are exported, depends on its implementation. Instrumentation -// authors do not need to define this implementation, rather just use the -// provided Tracers to instrument code. -// -// Commonly, instrumentation code will accept a TracerProvider implementation -// at runtime from its users or it can simply use the globally registered one -// (see https://pkg.go.dev/go.opentelemetry.io/otel#GetTracerProvider). -// -// Warning: Methods may be added to this interface in minor releases. See -// package documentation on API implementation for information on how to set -// default behavior for unimplemented methods. -type TracerProvider interface { - // Users of the interface can ignore this. This embedded type is only used - // by implementations of this interface. See the "API Implementations" - // section of the package documentation for more information. - embedded.TracerProvider - - // Tracer returns a unique Tracer scoped to be used by instrumentation code - // to trace computational workflows. The scope and identity of that - // instrumentation code is uniquely defined by the name and options passed. - // - // The passed name needs to uniquely identify instrumentation code. - // Therefore, it is recommended that name is the Go package name of the - // library providing instrumentation (note: not the code being - // instrumented). Instrumentation libraries can have multiple versions, - // therefore, the WithInstrumentationVersion option should be used to - // distinguish these different codebases. Additionally, instrumentation - // libraries may sometimes use traces to communicate different domains of - // workflow data (i.e. using spans to communicate workflow events only). If - // this is the case, the WithScopeAttributes option should be used to - // uniquely identify Tracers that handle the different domains of workflow - // data. - // - // If the same name and options are passed multiple times, the same Tracer - // will be returned (it is up to the implementation if this will be the - // same underlying instance of that Tracer or not). It is not necessary to - // call this multiple times with the same name and options to get an - // up-to-date Tracer. All implementations will ensure any TracerProvider - // configuration changes are propagated to all provided Tracers. - // - // If name is empty, then an implementation defined default name will be - // used instead. - // - // This method is safe to call concurrently. - Tracer(name string, options ...TracerOption) Tracer -} diff --git a/vendor/go.opentelemetry.io/otel/trace/tracestate.go b/vendor/go.opentelemetry.io/otel/trace/tracestate.go deleted file mode 100644 index 20b5cf24..00000000 --- a/vendor/go.opentelemetry.io/otel/trace/tracestate.go +++ /dev/null @@ -1,320 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package trace // import "go.opentelemetry.io/otel/trace" - -import ( - "encoding/json" - "fmt" - "strings" -) - -const ( - maxListMembers = 32 - - listDelimiters = "," - memberDelimiter = "=" - - errInvalidKey errorConst = "invalid tracestate key" - errInvalidValue errorConst = "invalid tracestate value" - errInvalidMember errorConst = "invalid tracestate list-member" - errMemberNumber errorConst = "too many list-members in tracestate" - errDuplicate errorConst = "duplicate list-member in tracestate" -) - -type member struct { - Key string - Value string -} - -// according to (chr = %x20 / (nblk-char = %x21-2B / %x2D-3C / %x3E-7E) ) -// means (chr = %x20-2B / %x2D-3C / %x3E-7E) . -func checkValueChar(v byte) bool { - return v >= '\x20' && v <= '\x7e' && v != '\x2c' && v != '\x3d' -} - -// according to (nblk-chr = %x21-2B / %x2D-3C / %x3E-7E) . -func checkValueLast(v byte) bool { - return v >= '\x21' && v <= '\x7e' && v != '\x2c' && v != '\x3d' -} - -// based on the W3C Trace Context specification -// -// value = (0*255(chr)) nblk-chr -// nblk-chr = %x21-2B / %x2D-3C / %x3E-7E -// chr = %x20 / nblk-chr -// -// see https://www.w3.org/TR/trace-context-1/#value -func checkValue(val string) bool { - n := len(val) - if n == 0 || n > 256 { - return false - } - for i := 0; i < n-1; i++ { - if !checkValueChar(val[i]) { - return false - } - } - return checkValueLast(val[n-1]) -} - -func checkKeyRemain(key string) bool { - // ( lcalpha / DIGIT / "_" / "-"/ "*" / "/" ) - for _, v := range key { - if isAlphaNum(byte(v)) { - continue - } - switch v { - case '_', '-', '*', '/': - continue - } - return false - } - return true -} - -// according to -// -// simple-key = lcalpha (0*255( lcalpha / DIGIT / "_" / "-"/ "*" / "/" )) -// system-id = lcalpha (0*13( lcalpha / DIGIT / "_" / "-"/ "*" / "/" )) -// -// param n is remain part length, should be 255 in simple-key or 13 in system-id. -func checkKeyPart(key string, n int) bool { - if len(key) == 0 { - return false - } - first := key[0] // key's first char - ret := len(key[1:]) <= n - ret = ret && first >= 'a' && first <= 'z' - return ret && checkKeyRemain(key[1:]) -} - -func isAlphaNum(c byte) bool { - if c >= 'a' && c <= 'z' { - return true - } - return c >= '0' && c <= '9' -} - -// according to -// -// tenant-id = ( lcalpha / DIGIT ) 0*240( lcalpha / DIGIT / "_" / "-"/ "*" / "/" ) -// -// param n is remain part length, should be 240 exactly. -func checkKeyTenant(key string, n int) bool { - if len(key) == 0 { - return false - } - return isAlphaNum(key[0]) && len(key[1:]) <= n && checkKeyRemain(key[1:]) -} - -// based on the W3C Trace Context specification -// -// key = simple-key / multi-tenant-key -// simple-key = lcalpha (0*255( lcalpha / DIGIT / "_" / "-"/ "*" / "/" )) -// multi-tenant-key = tenant-id "@" system-id -// tenant-id = ( lcalpha / DIGIT ) (0*240( lcalpha / DIGIT / "_" / "-"/ "*" / "/" )) -// system-id = lcalpha (0*13( lcalpha / DIGIT / "_" / "-"/ "*" / "/" )) -// lcalpha = %x61-7A ; a-z -// -// see https://www.w3.org/TR/trace-context-1/#tracestate-header. -func checkKey(key string) bool { - tenant, system, ok := strings.Cut(key, "@") - if !ok { - return checkKeyPart(key, 255) - } - return checkKeyTenant(tenant, 240) && checkKeyPart(system, 13) -} - -func newMember(key, value string) (member, error) { - if !checkKey(key) { - return member{}, errInvalidKey - } - if !checkValue(value) { - return member{}, errInvalidValue - } - return member{Key: key, Value: value}, nil -} - -func parseMember(m string) (member, error) { - key, val, ok := strings.Cut(m, memberDelimiter) - if !ok { - return member{}, fmt.Errorf("%w: %s", errInvalidMember, m) - } - key = strings.TrimLeft(key, " \t") - val = strings.TrimRight(val, " \t") - result, e := newMember(key, val) - if e != nil { - return member{}, fmt.Errorf("%w: %s", errInvalidMember, m) - } - return result, nil -} - -// String encodes member into a string compliant with the W3C Trace Context -// specification. -func (m member) String() string { - return m.Key + "=" + m.Value -} - -// TraceState provides additional vendor-specific trace identification -// information across different distributed tracing systems. It represents an -// immutable list consisting of key/value pairs, each pair is referred to as a -// list-member. -// -// TraceState conforms to the W3C Trace Context specification -// (https://www.w3.org/TR/trace-context-1). All operations that create or copy -// a TraceState do so by validating all input and will only produce TraceState -// that conform to the specification. Specifically, this means that all -// list-member's key/value pairs are valid, no duplicate list-members exist, -// and the maximum number of list-members (32) is not exceeded. -type TraceState struct { //nolint:revive // revive complains about stutter of `trace.TraceState` - // list is the members in order. - list []member -} - -var _ json.Marshaler = TraceState{} - -// ParseTraceState attempts to decode a TraceState from the passed -// string. It returns an error if the input is invalid according to the W3C -// Trace Context specification. -func ParseTraceState(ts string) (TraceState, error) { - if ts == "" { - return TraceState{}, nil - } - - wrapErr := func(err error) error { - return fmt.Errorf("failed to parse tracestate: %w", err) - } - - var members []member - found := make(map[string]struct{}) - for ts != "" { - var memberStr string - memberStr, ts, _ = strings.Cut(ts, listDelimiters) - if len(memberStr) == 0 { - continue - } - - m, err := parseMember(memberStr) - if err != nil { - return TraceState{}, wrapErr(err) - } - - if _, ok := found[m.Key]; ok { - return TraceState{}, wrapErr(errDuplicate) - } - found[m.Key] = struct{}{} - - members = append(members, m) - if n := len(members); n > maxListMembers { - return TraceState{}, wrapErr(errMemberNumber) - } - } - - return TraceState{list: members}, nil -} - -// MarshalJSON marshals the TraceState into JSON. -func (ts TraceState) MarshalJSON() ([]byte, error) { - return json.Marshal(ts.String()) -} - -// String encodes the TraceState into a string compliant with the W3C -// Trace Context specification. The returned string will be invalid if the -// TraceState contains any invalid members. -func (ts TraceState) String() string { - if len(ts.list) == 0 { - return "" - } - var n int - n += len(ts.list) // member delimiters: '=' - n += len(ts.list) - 1 // list delimiters: ',' - for _, mem := range ts.list { - n += len(mem.Key) - n += len(mem.Value) - } - - var sb strings.Builder - sb.Grow(n) - _, _ = sb.WriteString(ts.list[0].Key) - _ = sb.WriteByte('=') - _, _ = sb.WriteString(ts.list[0].Value) - for i := 1; i < len(ts.list); i++ { - _ = sb.WriteByte(listDelimiters[0]) - _, _ = sb.WriteString(ts.list[i].Key) - _ = sb.WriteByte('=') - _, _ = sb.WriteString(ts.list[i].Value) - } - return sb.String() -} - -// Get returns the value paired with key from the corresponding TraceState -// list-member if it exists, otherwise an empty string is returned. -func (ts TraceState) Get(key string) string { - for _, member := range ts.list { - if member.Key == key { - return member.Value - } - } - - return "" -} - -// Insert adds a new list-member defined by the key/value pair to the -// TraceState. If a list-member already exists for the given key, that -// list-member's value is updated. The new or updated list-member is always -// moved to the beginning of the TraceState as specified by the W3C Trace -// Context specification. -// -// If key or value are invalid according to the W3C Trace Context -// specification an error is returned with the original TraceState. -// -// If adding a new list-member means the TraceState would have more members -// then is allowed, the new list-member will be inserted and the right-most -// list-member will be dropped in the returned TraceState. -func (ts TraceState) Insert(key, value string) (TraceState, error) { - m, err := newMember(key, value) - if err != nil { - return ts, err - } - n := len(ts.list) - found := n - for i := range ts.list { - if ts.list[i].Key == key { - found = i - } - } - cTS := TraceState{} - if found == n && n < maxListMembers { - cTS.list = make([]member, n+1) - } else { - cTS.list = make([]member, n) - } - cTS.list[0] = m - // When the number of members exceeds capacity, drop the "right-most". - copy(cTS.list[1:], ts.list[0:found]) - if found < n { - copy(cTS.list[1+found:], ts.list[found+1:]) - } - return cTS, nil -} - -// Delete returns a copy of the TraceState with the list-member identified by -// key removed. -func (ts TraceState) Delete(key string) TraceState { - members := make([]member, ts.Len()) - copy(members, ts.list) - for i, member := range ts.list { - if member.Key == key { - members = append(members[:i], members[i+1:]...) - // TraceState should contain no duplicate members. - break - } - } - return TraceState{list: members} -} - -// Len returns the number of list-members in the TraceState. -func (ts TraceState) Len() int { - return len(ts.list) -} diff --git a/vendor/go.opentelemetry.io/otel/verify_examples.sh b/vendor/go.opentelemetry.io/otel/verify_examples.sh deleted file mode 100644 index e57bf57f..00000000 --- a/vendor/go.opentelemetry.io/otel/verify_examples.sh +++ /dev/null @@ -1,74 +0,0 @@ -#!/bin/bash - -# Copyright The OpenTelemetry Authors -# SPDX-License-Identifier: Apache-2.0 - -set -euo pipefail - -cd $(dirname $0) -TOOLS_DIR=$(pwd)/.tools - -if [ -z "${GOPATH}" ] ; then - printf "GOPATH is not defined.\n" - exit -1 -fi - -if [ ! -d "${GOPATH}" ] ; then - printf "GOPATH ${GOPATH} is invalid \n" - exit -1 -fi - -# Pre-requisites -if ! git diff --quiet; then \ - git status - printf "\n\nError: working tree is not clean\n" - exit -1 -fi - -if [ "$(git tag --contains $(git log -1 --pretty=format:"%H"))" = "" ] ; then - printf "$(git log -1)" - printf "\n\nError: HEAD is not pointing to a tagged version" -fi - -make ${TOOLS_DIR}/gojq - -DIR_TMP="${GOPATH}/src/oteltmp/" -rm -rf $DIR_TMP -mkdir -p $DIR_TMP - -printf "Copy examples to ${DIR_TMP}\n" -cp -a ./example ${DIR_TMP} - -# Update go.mod files -printf "Update go.mod: rename module and remove replace\n" - -PACKAGE_DIRS=$(find . -mindepth 2 -type f -name 'go.mod' -exec dirname {} \; | egrep 'example' | sed 's/^\.\///' | sort) - -for dir in $PACKAGE_DIRS; do - printf " Update go.mod for $dir\n" - (cd "${DIR_TMP}/${dir}" && \ - # replaces is ("mod1" "mod2" …) - replaces=($(go mod edit -json | ${TOOLS_DIR}/gojq '.Replace[].Old.Path')) && \ - # strip double quotes - replaces=("${replaces[@]%\"}") && \ - replaces=("${replaces[@]#\"}") && \ - # make an array (-dropreplace=mod1 -dropreplace=mod2 …) - dropreplaces=("${replaces[@]/#/-dropreplace=}") && \ - go mod edit -module "oteltmp/${dir}" "${dropreplaces[@]}" && \ - go mod tidy) -done -printf "Update done:\n\n" - -# Build directories that contain main package. These directories are different than -# directories that contain go.mod files. -printf "Build examples:\n" -EXAMPLES=$(./get_main_pkgs.sh ./example) -for ex in $EXAMPLES; do - printf " Build $ex in ${DIR_TMP}/${ex}\n" - (cd "${DIR_TMP}/${ex}" && \ - go build .) -done - -# Cleanup -printf "Remove copied files.\n" -rm -rf $DIR_TMP diff --git a/vendor/go.opentelemetry.io/otel/verify_readmes.sh b/vendor/go.opentelemetry.io/otel/verify_readmes.sh deleted file mode 100644 index 1e87855e..00000000 --- a/vendor/go.opentelemetry.io/otel/verify_readmes.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -# Copyright The OpenTelemetry Authors -# SPDX-License-Identifier: Apache-2.0 - -set -euo pipefail - -dirs=$(find . -type d -not -path "*/internal*" -not -path "*/test*" -not -path "*/example*" -not -path "*/.*" | sort) - -missingReadme=false -for dir in $dirs; do - if [ ! -f "$dir/README.md" ]; then - echo "couldn't find README.md for $dir" - missingReadme=true - fi -done - -if [ "$missingReadme" = true ] ; then - echo "Error: some READMEs couldn't be found." - exit 1 -fi diff --git a/vendor/go.opentelemetry.io/otel/version.go b/vendor/go.opentelemetry.io/otel/version.go deleted file mode 100644 index ab289605..00000000 --- a/vendor/go.opentelemetry.io/otel/version.go +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -package otel // import "go.opentelemetry.io/otel" - -// Version is the current release version of OpenTelemetry in use. -func Version() string { - return "1.28.0" -} diff --git a/vendor/go.opentelemetry.io/otel/versions.yaml b/vendor/go.opentelemetry.io/otel/versions.yaml deleted file mode 100644 index 241cfc82..00000000 --- a/vendor/go.opentelemetry.io/otel/versions.yaml +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright The OpenTelemetry Authors -# SPDX-License-Identifier: Apache-2.0 - -module-sets: - stable-v1: - version: v1.28.0 - modules: - - go.opentelemetry.io/otel - - go.opentelemetry.io/otel/bridge/opencensus - - go.opentelemetry.io/otel/bridge/opencensus/test - - go.opentelemetry.io/otel/bridge/opentracing - - go.opentelemetry.io/otel/bridge/opentracing/test - - go.opentelemetry.io/otel/example/dice - - go.opentelemetry.io/otel/example/namedtracer - - go.opentelemetry.io/otel/example/opencensus - - go.opentelemetry.io/otel/example/otel-collector - - go.opentelemetry.io/otel/example/passthrough - - go.opentelemetry.io/otel/example/zipkin - - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc - - go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp - - go.opentelemetry.io/otel/exporters/otlp/otlptrace - - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc - - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp - - go.opentelemetry.io/otel/exporters/stdout/stdoutmetric - - go.opentelemetry.io/otel/exporters/stdout/stdouttrace - - go.opentelemetry.io/otel/exporters/zipkin - - go.opentelemetry.io/otel/metric - - go.opentelemetry.io/otel/sdk - - go.opentelemetry.io/otel/sdk/metric - - go.opentelemetry.io/otel/trace - experimental-metrics: - version: v0.50.0 - modules: - - go.opentelemetry.io/otel/example/prometheus - - go.opentelemetry.io/otel/exporters/prometheus - experimental-logs: - version: v0.4.0 - modules: - - go.opentelemetry.io/otel/log - - go.opentelemetry.io/otel/sdk/log - - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp - - go.opentelemetry.io/otel/exporters/stdout/stdoutlog - experimental-schema: - version: v0.0.8 - modules: - - go.opentelemetry.io/otel/schema -excluded-modules: - - go.opentelemetry.io/otel/internal/tools - - go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc diff --git a/vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go b/vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go deleted file mode 100644 index 73687de7..00000000 --- a/vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.5 - -package plan9 - -import "syscall" - -func fixwd() { - syscall.Fixwd() -} - -func Getwd() (wd string, err error) { - return syscall.Getwd() -} - -func Chdir(path string) error { - return syscall.Chdir(path) -} diff --git a/vendor/golang.org/x/sys/plan9/pwd_plan9.go b/vendor/golang.org/x/sys/plan9/pwd_plan9.go index fb945821..7a76489d 100644 --- a/vendor/golang.org/x/sys/plan9/pwd_plan9.go +++ b/vendor/golang.org/x/sys/plan9/pwd_plan9.go @@ -2,22 +2,18 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !go1.5 - package plan9 +import "syscall" + func fixwd() { + syscall.Fixwd() } func Getwd() (wd string, err error) { - fd, err := open(".", O_RDONLY) - if err != nil { - return "", err - } - defer Close(fd) - return Fd2path(fd) + return syscall.Getwd() } func Chdir(path string) error { - return chdir(path) + return syscall.Chdir(path) } diff --git a/vendor/golang.org/x/sys/unix/README.md b/vendor/golang.org/x/sys/unix/README.md index 7d3c060e..6e08a76a 100644 --- a/vendor/golang.org/x/sys/unix/README.md +++ b/vendor/golang.org/x/sys/unix/README.md @@ -156,7 +156,7 @@ from the generated architecture-specific files listed below, and merge these into a common file for each OS. The merge is performed in the following steps: -1. Construct the set of common code that is idential in all architecture-specific files. +1. Construct the set of common code that is identical in all architecture-specific files. 2. Write this common code to the merged file. 3. Remove the common code from all architecture-specific files. diff --git a/vendor/golang.org/x/sys/unix/affinity_linux.go b/vendor/golang.org/x/sys/unix/affinity_linux.go index 6e5c81ac..3ea47038 100644 --- a/vendor/golang.org/x/sys/unix/affinity_linux.go +++ b/vendor/golang.org/x/sys/unix/affinity_linux.go @@ -38,8 +38,15 @@ func SchedSetaffinity(pid int, set *CPUSet) error { // Zero clears the set s, so that it contains no CPUs. func (s *CPUSet) Zero() { + clear(s[:]) +} + +// Fill adds all possible CPU bits to the set s. On Linux, [SchedSetaffinity] +// will silently ignore any invalid CPU bits in [CPUSet] so this is an +// efficient way of resetting the CPU affinity of a process. +func (s *CPUSet) Fill() { for i := range s { - s[i] = 0 + s[i] = ^cpuMask(0) } } diff --git a/vendor/golang.org/x/sys/unix/auxv.go b/vendor/golang.org/x/sys/unix/auxv.go new file mode 100644 index 00000000..37a82528 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/auxv.go @@ -0,0 +1,36 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.21 && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos) + +package unix + +import ( + "syscall" + "unsafe" +) + +//go:linkname runtime_getAuxv runtime.getAuxv +func runtime_getAuxv() []uintptr + +// Auxv returns the ELF auxiliary vector as a sequence of key/value pairs. +// The returned slice is always a fresh copy, owned by the caller. +// It returns an error on non-ELF platforms, or if the auxiliary vector cannot be accessed, +// which happens in some locked-down environments and build modes. +func Auxv() ([][2]uintptr, error) { + vec := runtime_getAuxv() + vecLen := len(vec) + + if vecLen == 0 { + return nil, syscall.ENOENT + } + + if vecLen%2 != 0 { + return nil, syscall.EINVAL + } + + result := make([]uintptr, vecLen) + copy(result, vec) + return unsafe.Slice((*[2]uintptr)(unsafe.Pointer(&result[0])), vecLen/2), nil +} diff --git a/vendor/golang.org/x/sys/unix/auxv_unsupported.go b/vendor/golang.org/x/sys/unix/auxv_unsupported.go new file mode 100644 index 00000000..1200487f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/auxv_unsupported.go @@ -0,0 +1,13 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.21 && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos) + +package unix + +import "syscall" + +func Auxv() ([][2]uintptr, error) { + return nil, syscall.ENOTSUP +} diff --git a/vendor/golang.org/x/sys/unix/fdset.go b/vendor/golang.org/x/sys/unix/fdset.go index 9e83d18c..62ed1264 100644 --- a/vendor/golang.org/x/sys/unix/fdset.go +++ b/vendor/golang.org/x/sys/unix/fdset.go @@ -23,7 +23,5 @@ func (fds *FdSet) IsSet(fd int) bool { // Zero clears the set fds. func (fds *FdSet) Zero() { - for i := range fds.Bits { - fds.Bits[i] = 0 - } + clear(fds.Bits[:]) } diff --git a/vendor/golang.org/x/sys/unix/ifreq_linux.go b/vendor/golang.org/x/sys/unix/ifreq_linux.go index 848840ae..309f5a2b 100644 --- a/vendor/golang.org/x/sys/unix/ifreq_linux.go +++ b/vendor/golang.org/x/sys/unix/ifreq_linux.go @@ -111,9 +111,7 @@ func (ifr *Ifreq) SetUint32(v uint32) { // clear zeroes the ifreq's union field to prevent trailing garbage data from // being sent to the kernel if an ifreq is reused. func (ifr *Ifreq) clear() { - for i := range ifr.raw.Ifru { - ifr.raw.Ifru[i] = 0 - } + clear(ifr.raw.Ifru[:]) } // TODO(mdlayher): export as IfreqData? For now we can provide helpers such as diff --git a/vendor/golang.org/x/sys/unix/ioctl_linux.go b/vendor/golang.org/x/sys/unix/ioctl_linux.go index dbe680ea..7ca4fa12 100644 --- a/vendor/golang.org/x/sys/unix/ioctl_linux.go +++ b/vendor/golang.org/x/sys/unix/ioctl_linux.go @@ -58,6 +58,102 @@ func IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) { return &value, err } +// IoctlGetEthtoolTsInfo fetches ethtool timestamping and PHC +// association for the network device specified by ifname. +func IoctlGetEthtoolTsInfo(fd int, ifname string) (*EthtoolTsInfo, error) { + ifr, err := NewIfreq(ifname) + if err != nil { + return nil, err + } + + value := EthtoolTsInfo{Cmd: ETHTOOL_GET_TS_INFO} + ifrd := ifr.withData(unsafe.Pointer(&value)) + + err = ioctlIfreqData(fd, SIOCETHTOOL, &ifrd) + return &value, err +} + +// IoctlGetHwTstamp retrieves the hardware timestamping configuration +// for the network device specified by ifname. +func IoctlGetHwTstamp(fd int, ifname string) (*HwTstampConfig, error) { + ifr, err := NewIfreq(ifname) + if err != nil { + return nil, err + } + + value := HwTstampConfig{} + ifrd := ifr.withData(unsafe.Pointer(&value)) + + err = ioctlIfreqData(fd, SIOCGHWTSTAMP, &ifrd) + return &value, err +} + +// IoctlSetHwTstamp updates the hardware timestamping configuration for +// the network device specified by ifname. +func IoctlSetHwTstamp(fd int, ifname string, cfg *HwTstampConfig) error { + ifr, err := NewIfreq(ifname) + if err != nil { + return err + } + ifrd := ifr.withData(unsafe.Pointer(cfg)) + return ioctlIfreqData(fd, SIOCSHWTSTAMP, &ifrd) +} + +// FdToClockID derives the clock ID from the file descriptor number +// - see clock_gettime(3), FD_TO_CLOCKID macros. The resulting ID is +// suitable for system calls like ClockGettime. +func FdToClockID(fd int) int32 { return int32((int(^fd) << 3) | 3) } + +// IoctlPtpClockGetcaps returns the description of a given PTP device. +func IoctlPtpClockGetcaps(fd int) (*PtpClockCaps, error) { + var value PtpClockCaps + err := ioctlPtr(fd, PTP_CLOCK_GETCAPS2, unsafe.Pointer(&value)) + return &value, err +} + +// IoctlPtpSysOffsetPrecise returns a description of the clock +// offset compared to the system clock. +func IoctlPtpSysOffsetPrecise(fd int) (*PtpSysOffsetPrecise, error) { + var value PtpSysOffsetPrecise + err := ioctlPtr(fd, PTP_SYS_OFFSET_PRECISE2, unsafe.Pointer(&value)) + return &value, err +} + +// IoctlPtpSysOffsetExtended returns an extended description of the +// clock offset compared to the system clock. The samples parameter +// specifies the desired number of measurements. +func IoctlPtpSysOffsetExtended(fd int, samples uint) (*PtpSysOffsetExtended, error) { + value := PtpSysOffsetExtended{Samples: uint32(samples)} + err := ioctlPtr(fd, PTP_SYS_OFFSET_EXTENDED2, unsafe.Pointer(&value)) + return &value, err +} + +// IoctlPtpPinGetfunc returns the configuration of the specified +// I/O pin on given PTP device. +func IoctlPtpPinGetfunc(fd int, index uint) (*PtpPinDesc, error) { + value := PtpPinDesc{Index: uint32(index)} + err := ioctlPtr(fd, PTP_PIN_GETFUNC2, unsafe.Pointer(&value)) + return &value, err +} + +// IoctlPtpPinSetfunc updates configuration of the specified PTP +// I/O pin. +func IoctlPtpPinSetfunc(fd int, pd *PtpPinDesc) error { + return ioctlPtr(fd, PTP_PIN_SETFUNC2, unsafe.Pointer(pd)) +} + +// IoctlPtpPeroutRequest configures the periodic output mode of the +// PTP I/O pins. +func IoctlPtpPeroutRequest(fd int, r *PtpPeroutRequest) error { + return ioctlPtr(fd, PTP_PEROUT_REQUEST2, unsafe.Pointer(r)) +} + +// IoctlPtpExttsRequest configures the external timestamping mode +// of the PTP I/O pins. +func IoctlPtpExttsRequest(fd int, r *PtpExttsRequest) error { + return ioctlPtr(fd, PTP_EXTTS_REQUEST2, unsafe.Pointer(r)) +} + // IoctlGetWatchdogInfo fetches information about a watchdog device from the // Linux watchdog API. For more information, see: // https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html. diff --git a/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/golang.org/x/sys/unix/mkall.sh index e6f31d37..d0ed6119 100644 --- a/vendor/golang.org/x/sys/unix/mkall.sh +++ b/vendor/golang.org/x/sys/unix/mkall.sh @@ -49,6 +49,7 @@ esac if [[ "$GOOS" = "linux" ]]; then # Use the Docker-based build system # Files generated through docker (use $cmd so you can Ctl-C the build or run) + set -e $cmd docker build --tag generate:$GOOS $GOOS $cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")/.." && pwd):/build generate:$GOOS exit diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index d07dd09e..fd39be4e 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -158,6 +158,16 @@ includes_Linux=' #endif #define _GNU_SOURCE +// See the description in unix/linux/types.go +#if defined(__ARM_EABI__) || \ + (defined(__mips__) && (_MIPS_SIM == _ABIO32)) || \ + (defined(__powerpc__) && (!defined(__powerpc64__))) +# ifdef _TIME_BITS +# undef _TIME_BITS +# endif +# define _TIME_BITS 32 +#endif + // is broken on powerpc64, as it fails to include definitions of // these structures. We just include them copied from . #if defined(__powerpc__) @@ -216,6 +226,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -245,6 +256,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -256,6 +268,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -338,6 +351,9 @@ struct ltchars { #define _HIDIOCGRAWPHYS HIDIOCGRAWPHYS(_HIDIOCGRAWPHYS_LEN) #define _HIDIOCGRAWUNIQ HIDIOCGRAWUNIQ(_HIDIOCGRAWUNIQ_LEN) +// Renamed in v6.16, commit c6d732c38f93 ("net: ethtool: remove duplicate defines for family info") +#define ETHTOOL_FAMILY_NAME ETHTOOL_GENL_NAME +#define ETHTOOL_FAMILY_VERSION ETHTOOL_GENL_VERSION ' includes_NetBSD=' @@ -515,6 +531,7 @@ ccflags="$@" $2 ~ /^O[CNPFPL][A-Z]+[^_][A-Z]+$/ || $2 ~ /^(NL|CR|TAB|BS|VT|FF)DLY$/ || $2 ~ /^(NL|CR|TAB|BS|VT|FF)[0-9]$/ || + $2 ~ /^(DT|EI|ELF|EV|NN|NT|PF|SHF|SHN|SHT|STB|STT|VER)_/ || $2 ~ /^O?XTABS$/ || $2 ~ /^TC[IO](ON|OFF)$/ || $2 ~ /^IN_/ || @@ -527,6 +544,7 @@ ccflags="$@" $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MREMAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ || $2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ || $2 ~ /^NFC_.*_(MAX)?SIZE$/ || + $2 ~ /^PTP_/ || $2 ~ /^RAW_PAYLOAD_/ || $2 ~ /^[US]F_/ || $2 ~ /^TP_STATUS_/ || @@ -552,6 +570,7 @@ ccflags="$@" $2 !~ /^RTC_VL_(ACCURACY|BACKUP|DATA)/ && $2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTC|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P|NETNSA)_/ || $2 ~ /^SOCK_|SK_DIAG_|SKNLGRP_$/ || + $2 ~ /^(CONNECT|SAE)_/ || $2 ~ /^FIORDCHK$/ || $2 ~ /^SIOC/ || $2 ~ /^TIOC/ || @@ -595,7 +614,7 @@ ccflags="$@" $2 !~ /IOC_MAGIC/ && $2 ~ /^[A-Z][A-Z0-9_]+_MAGIC2?$/ || $2 ~ /^(VM|VMADDR)_/ || - $2 ~ /^IOCTL_VM_SOCKETS_/ || + $2 ~ /^(IOCTL_VM_SOCKETS_|IOCTL_MEI_)/ || $2 ~ /^(TASKSTATS|TS)_/ || $2 ~ /^CGROUPSTATS_/ || $2 ~ /^GENL_/ || @@ -655,7 +674,7 @@ errors=$( signals=$( echo '#include ' | $CC -x c - -E -dM $ccflags | awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' | - grep -v 'SIGSTKSIZE\|SIGSTKSZ\|SIGRT\|SIGMAX64' | + grep -E -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' | sort ) @@ -665,7 +684,7 @@ echo '#include ' | $CC -x c - -E -dM $ccflags | sort >_error.grep echo '#include ' | $CC -x c - -E -dM $ccflags | awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' | - grep -v 'SIGSTKSIZE\|SIGSTKSZ\|SIGRT\|SIGMAX64' | + grep -E -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' | sort >_signal.grep echo '// mkerrors.sh' "$@" diff --git a/vendor/golang.org/x/sys/unix/syscall_aix.go b/vendor/golang.org/x/sys/unix/syscall_aix.go index 67ce6cef..6f15ba1e 100644 --- a/vendor/golang.org/x/sys/unix/syscall_aix.go +++ b/vendor/golang.org/x/sys/unix/syscall_aix.go @@ -360,7 +360,7 @@ func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, var status _C_int var r Pid_t err = ERESTART - // AIX wait4 may return with ERESTART errno, while the processus is still + // AIX wait4 may return with ERESTART errno, while the process is still // active. for err == ERESTART { r, err = wait4(Pid_t(pid), &status, options, rusage) diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 2d15200a..7838ca5d 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -566,6 +566,132 @@ func PthreadFchdir(fd int) (err error) { return pthread_fchdir_np(fd) } +// Connectx calls connectx(2) to initiate a connection on a socket. +// +// srcIf, srcAddr, and dstAddr are filled into a [SaEndpoints] struct and passed as the endpoints argument. +// +// - srcIf is the optional source interface index. 0 means unspecified. +// - srcAddr is the optional source address. nil means unspecified. +// - dstAddr is the destination address. +// +// On success, Connectx returns the number of bytes enqueued for transmission. +func Connectx(fd int, srcIf uint32, srcAddr, dstAddr Sockaddr, associd SaeAssocID, flags uint32, iov []Iovec, connid *SaeConnID) (n uintptr, err error) { + endpoints := SaEndpoints{ + Srcif: srcIf, + } + + if srcAddr != nil { + addrp, addrlen, err := srcAddr.sockaddr() + if err != nil { + return 0, err + } + endpoints.Srcaddr = (*RawSockaddr)(addrp) + endpoints.Srcaddrlen = uint32(addrlen) + } + + if dstAddr != nil { + addrp, addrlen, err := dstAddr.sockaddr() + if err != nil { + return 0, err + } + endpoints.Dstaddr = (*RawSockaddr)(addrp) + endpoints.Dstaddrlen = uint32(addrlen) + } + + err = connectx(fd, &endpoints, associd, flags, iov, &n, connid) + return +} + +const minIovec = 8 + +func Readv(fd int, iovs [][]byte) (n int, err error) { + iovecs := make([]Iovec, 0, minIovec) + iovecs = appendBytes(iovecs, iovs) + n, err = readv(fd, iovecs) + readvRacedetect(iovecs, n, err) + return n, err +} + +func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) { + iovecs := make([]Iovec, 0, minIovec) + iovecs = appendBytes(iovecs, iovs) + n, err = preadv(fd, iovecs, offset) + readvRacedetect(iovecs, n, err) + return n, err +} + +func Writev(fd int, iovs [][]byte) (n int, err error) { + iovecs := make([]Iovec, 0, minIovec) + iovecs = appendBytes(iovecs, iovs) + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + n, err = writev(fd, iovecs) + writevRacedetect(iovecs, n) + return n, err +} + +func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) { + iovecs := make([]Iovec, 0, minIovec) + iovecs = appendBytes(iovecs, iovs) + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + n, err = pwritev(fd, iovecs, offset) + writevRacedetect(iovecs, n) + return n, err +} + +func appendBytes(vecs []Iovec, bs [][]byte) []Iovec { + for _, b := range bs { + var v Iovec + v.SetLen(len(b)) + if len(b) > 0 { + v.Base = &b[0] + } else { + v.Base = (*byte)(unsafe.Pointer(&_zero)) + } + vecs = append(vecs, v) + } + return vecs +} + +func writevRacedetect(iovecs []Iovec, n int) { + if !raceenabled { + return + } + for i := 0; n > 0 && i < len(iovecs); i++ { + m := int(iovecs[i].Len) + if m > n { + m = n + } + n -= m + if m > 0 { + raceReadRange(unsafe.Pointer(iovecs[i].Base), m) + } + } +} + +func readvRacedetect(iovecs []Iovec, n int, err error) { + if !raceenabled { + return + } + for i := 0; n > 0 && i < len(iovecs); i++ { + m := int(iovecs[i].Len) + if m > n { + m = n + } + n -= m + if m > 0 { + raceWriteRange(unsafe.Pointer(iovecs[i].Base), m) + } + } + if err == nil { + raceAcquire(unsafe.Pointer(&ioSync)) + } +} + +//sys connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error) //sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) //sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error) @@ -668,3 +794,7 @@ func PthreadFchdir(fd int) (err error) { //sys write(fd int, p []byte) (n int, err error) //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) //sys munmap(addr uintptr, length uintptr) (err error) +//sys readv(fd int, iovecs []Iovec) (n int, err error) +//sys preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) +//sys writev(fd int, iovecs []Iovec) (n int, err error) +//sys pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go index 97cb916f..be8c0020 100644 --- a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go @@ -246,6 +246,18 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e return sendfile(outfd, infd, offset, count) } +func Dup3(oldfd, newfd, flags int) error { + if oldfd == newfd || flags&^O_CLOEXEC != 0 { + return EINVAL + } + how := F_DUP2FD + if flags&O_CLOEXEC != 0 { + how = F_DUP2FD_CLOEXEC + } + _, err := fcntl(oldfd, how, newfd) + return err +} + /* * Exposed directly */ diff --git a/vendor/golang.org/x/sys/unix/syscall_hurd.go b/vendor/golang.org/x/sys/unix/syscall_hurd.go index ba46651f..a6a2d2fc 100644 --- a/vendor/golang.org/x/sys/unix/syscall_hurd.go +++ b/vendor/golang.org/x/sys/unix/syscall_hurd.go @@ -11,6 +11,7 @@ package unix int ioctl(int, unsigned long int, uintptr_t); */ import "C" +import "unsafe" func ioctl(fd int, req uint, arg uintptr) (err error) { r0, er := C.ioctl(C.int(fd), C.ulong(req), C.uintptr_t(arg)) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index 3f1d3d4c..06c0eea6 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -13,6 +13,7 @@ package unix import ( "encoding/binary" + "slices" "strconv" "syscall" "time" @@ -417,7 +418,7 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { return nil, 0, EINVAL } sa.raw.Family = AF_UNIX - for i := 0; i < n; i++ { + for i := range n { sa.raw.Path[i] = int8(name[i]) } // length is family (uint16), name, NUL. @@ -507,7 +508,7 @@ func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) { psm := (*[2]byte)(unsafe.Pointer(&sa.raw.Psm)) psm[0] = byte(sa.PSM) psm[1] = byte(sa.PSM >> 8) - for i := 0; i < len(sa.Addr); i++ { + for i := range len(sa.Addr) { sa.raw.Bdaddr[i] = sa.Addr[len(sa.Addr)-1-i] } cid := (*[2]byte)(unsafe.Pointer(&sa.raw.Cid)) @@ -589,11 +590,11 @@ func (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) { sa.raw.Family = AF_CAN sa.raw.Ifindex = int32(sa.Ifindex) rx := (*[4]byte)(unsafe.Pointer(&sa.RxID)) - for i := 0; i < 4; i++ { + for i := range 4 { sa.raw.Addr[i] = rx[i] } tx := (*[4]byte)(unsafe.Pointer(&sa.TxID)) - for i := 0; i < 4; i++ { + for i := range 4 { sa.raw.Addr[i+4] = tx[i] } return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil @@ -618,11 +619,11 @@ func (sa *SockaddrCANJ1939) sockaddr() (unsafe.Pointer, _Socklen, error) { sa.raw.Family = AF_CAN sa.raw.Ifindex = int32(sa.Ifindex) n := (*[8]byte)(unsafe.Pointer(&sa.Name)) - for i := 0; i < 8; i++ { + for i := range 8 { sa.raw.Addr[i] = n[i] } p := (*[4]byte)(unsafe.Pointer(&sa.PGN)) - for i := 0; i < 4; i++ { + for i := range 4 { sa.raw.Addr[i+8] = p[i] } sa.raw.Addr[12] = sa.Addr @@ -800,9 +801,7 @@ func (sa *SockaddrPPPoE) sockaddr() (unsafe.Pointer, _Socklen, error) { // one. The kernel expects SID to be in network byte order. binary.BigEndian.PutUint16(sa.raw[6:8], sa.SID) copy(sa.raw[8:14], sa.Remote) - for i := 14; i < 14+IFNAMSIZ; i++ { - sa.raw[i] = 0 - } + clear(sa.raw[14 : 14+IFNAMSIZ]) copy(sa.raw[14:], sa.Dev) return unsafe.Pointer(&sa.raw), SizeofSockaddrPPPoX, nil } @@ -911,7 +910,7 @@ func (sa *SockaddrIUCV) sockaddr() (unsafe.Pointer, _Socklen, error) { // These are EBCDIC encoded by the kernel, but we still need to pad them // with blanks. Initializing with blanks allows the caller to feed in either // a padded or an unpadded string. - for i := 0; i < 8; i++ { + for i := range 8 { sa.raw.Nodeid[i] = ' ' sa.raw.User_id[i] = ' ' sa.raw.Name[i] = ' ' @@ -1148,7 +1147,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { var user [8]byte var name [8]byte - for i := 0; i < 8; i++ { + for i := range 8 { user[i] = byte(pp.User_id[i]) name[i] = byte(pp.Name[i]) } @@ -1173,11 +1172,11 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { Ifindex: int(pp.Ifindex), } name := (*[8]byte)(unsafe.Pointer(&sa.Name)) - for i := 0; i < 8; i++ { + for i := range 8 { name[i] = pp.Addr[i] } pgn := (*[4]byte)(unsafe.Pointer(&sa.PGN)) - for i := 0; i < 4; i++ { + for i := range 4 { pgn[i] = pp.Addr[i+8] } addr := (*[1]byte)(unsafe.Pointer(&sa.Addr)) @@ -1188,11 +1187,11 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { Ifindex: int(pp.Ifindex), } rx := (*[4]byte)(unsafe.Pointer(&sa.RxID)) - for i := 0; i < 4; i++ { + for i := range 4 { rx[i] = pp.Addr[i] } tx := (*[4]byte)(unsafe.Pointer(&sa.TxID)) - for i := 0; i < 4; i++ { + for i := range 4 { tx[i] = pp.Addr[i+4] } return sa, nil @@ -1295,6 +1294,48 @@ func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) { return &value, err } +// GetsockoptTCPCCVegasInfo returns algorithm specific congestion control information for a socket using the "vegas" +// algorithm. +// +// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option: +// +// algo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION) +func GetsockoptTCPCCVegasInfo(fd, level, opt int) (*TCPVegasInfo, error) { + var value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment + vallen := _Socklen(SizeofTCPCCInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + out := (*TCPVegasInfo)(unsafe.Pointer(&value[0])) + return out, err +} + +// GetsockoptTCPCCDCTCPInfo returns algorithm specific congestion control information for a socket using the "dctp" +// algorithm. +// +// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option: +// +// algo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION) +func GetsockoptTCPCCDCTCPInfo(fd, level, opt int) (*TCPDCTCPInfo, error) { + var value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment + vallen := _Socklen(SizeofTCPCCInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + out := (*TCPDCTCPInfo)(unsafe.Pointer(&value[0])) + return out, err +} + +// GetsockoptTCPCCBBRInfo returns algorithm specific congestion control information for a socket using the "bbr" +// algorithm. +// +// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option: +// +// algo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION) +func GetsockoptTCPCCBBRInfo(fd, level, opt int) (*TCPBBRInfo, error) { + var value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment + vallen := _Socklen(SizeofTCPCCInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + out := (*TCPBBRInfo)(unsafe.Pointer(&value[0])) + return out, err +} + // GetsockoptString returns the string value of the socket option opt for the // socket associated with fd at the given socket level. func GetsockoptString(fd, level, opt int) (string, error) { @@ -1818,6 +1859,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e //sys ClockAdjtime(clockid int32, buf *Timex) (state int, err error) //sys ClockGetres(clockid int32, res *Timespec) (err error) //sys ClockGettime(clockid int32, time *Timespec) (err error) +//sys ClockSettime(clockid int32, time *Timespec) (err error) //sys ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) //sys Close(fd int) (err error) //sys CloseRange(first uint, last uint, flags uint) (err error) @@ -1959,7 +2001,26 @@ func Getpgrp() (pid int) { //sysnb Getpid() (pid int) //sysnb Getppid() (ppid int) //sys Getpriority(which int, who int) (prio int, err error) -//sys Getrandom(buf []byte, flags int) (n int, err error) + +func Getrandom(buf []byte, flags int) (n int, err error) { + vdsoRet, supported := vgetrandom(buf, uint32(flags)) + if supported { + if vdsoRet < 0 { + return 0, errnoErr(syscall.Errno(-vdsoRet)) + } + return vdsoRet, nil + } + var p *byte + if len(buf) > 0 { + p = &buf[0] + } + r, _, e := Syscall(SYS_GETRANDOM, uintptr(unsafe.Pointer(p)), uintptr(len(buf)), uintptr(flags)) + if e != 0 { + return 0, errnoErr(e) + } + return int(r), nil +} + //sysnb Getrusage(who int, rusage *Rusage) (err error) //sysnb Getsid(pid int) (sid int, err error) //sysnb Gettid() (tid int) @@ -2154,10 +2215,7 @@ func readvRacedetect(iovecs []Iovec, n int, err error) { return } for i := 0; n > 0 && i < len(iovecs); i++ { - m := int(iovecs[i].Len) - if m > n { - m = n - } + m := min(int(iovecs[i].Len), n) n -= m if m > 0 { raceWriteRange(unsafe.Pointer(iovecs[i].Base), m) @@ -2208,10 +2266,7 @@ func writevRacedetect(iovecs []Iovec, n int) { return } for i := 0; n > 0 && i < len(iovecs); i++ { - m := int(iovecs[i].Len) - if m > n { - m = n - } + m := min(int(iovecs[i].Len), n) n -= m if m > 0 { raceReadRange(unsafe.Pointer(iovecs[i].Base), m) @@ -2258,12 +2313,7 @@ func isGroupMember(gid int) bool { return false } - for _, g := range groups { - if g == gid { - return true - } - } - return false + return slices.Contains(groups, gid) } func isCapDacOverrideSet() bool { @@ -2593,3 +2643,9 @@ func SchedGetAttr(pid int, flags uint) (*SchedAttr, error) { //sys Cachestat(fd uint, crange *CachestatRange, cstat *Cachestat_t, flags uint) (err error) //sys Mseal(b []byte, flags uint) (err error) + +//sys setMemPolicy(mode int, mask *CPUSet, size int) (err error) = SYS_SET_MEMPOLICY + +func SetMemPolicy(mode int, mask *CPUSet) error { + return setMemPolicy(mode, mask, _CPU_SETSIZE) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go index cf2ee6c7..745e5c7e 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -182,3 +182,5 @@ func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error } return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) } + +const SYS_FSTATAT = SYS_NEWFSTATAT diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go index 3d0e9845..dd2262a4 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go @@ -214,3 +214,5 @@ func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error } return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) } + +const SYS_FSTATAT = SYS_NEWFSTATAT diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go index 6f5a2889..8cf3670b 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go @@ -187,3 +187,5 @@ func RISCVHWProbe(pairs []RISCVHWProbePairs, set *CPUSet, flags uint) (err error } return riscvHWProbe(pairs, setSize, set, flags) } + +const SYS_FSTATAT = SYS_NEWFSTATAT diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go index 88162099..34a46769 100644 --- a/vendor/golang.org/x/sys/unix/syscall_netbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go @@ -248,6 +248,23 @@ func Statvfs(path string, buf *Statvfs_t) (err error) { return Statvfs1(path, buf, ST_WAIT) } +func Getvfsstat(buf []Statvfs_t, flags int) (n int, err error) { + var ( + _p0 unsafe.Pointer + bufsize uintptr + ) + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statvfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETVFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + /* * Exposed directly */ diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go index 21974af0..18a3d9bd 100644 --- a/vendor/golang.org/x/sys/unix/syscall_solaris.go +++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -629,7 +629,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e //sys Kill(pid int, signum syscall.Signal) (err error) //sys Lchown(path string, uid int, gid int) (err error) //sys Link(path string, link string) (err error) -//sys Listen(s int, backlog int) (err error) = libsocket.__xnet_llisten +//sys Listen(s int, backlog int) (err error) = libsocket.__xnet_listen //sys Lstat(path string, stat *Stat_t) (err error) //sys Madvise(b []byte, advice int) (err error) //sys Mkdir(path string, mode uint32) (err error) @@ -1102,3 +1102,90 @@ func (s *Strioctl) SetInt(i int) { func IoctlSetStrioctlRetInt(fd int, req int, s *Strioctl) (int, error) { return ioctlPtrRet(fd, req, unsafe.Pointer(s)) } + +// Ucred Helpers +// See ucred(3c) and getpeerucred(3c) + +//sys getpeerucred(fd uintptr, ucred *uintptr) (err error) +//sys ucredFree(ucred uintptr) = ucred_free +//sys ucredGet(pid int) (ucred uintptr, err error) = ucred_get +//sys ucredGeteuid(ucred uintptr) (uid int) = ucred_geteuid +//sys ucredGetegid(ucred uintptr) (gid int) = ucred_getegid +//sys ucredGetruid(ucred uintptr) (uid int) = ucred_getruid +//sys ucredGetrgid(ucred uintptr) (gid int) = ucred_getrgid +//sys ucredGetsuid(ucred uintptr) (uid int) = ucred_getsuid +//sys ucredGetsgid(ucred uintptr) (gid int) = ucred_getsgid +//sys ucredGetpid(ucred uintptr) (pid int) = ucred_getpid + +// Ucred is an opaque struct that holds user credentials. +type Ucred struct { + ucred uintptr +} + +// We need to ensure that ucredFree is called on the underlying ucred +// when the Ucred is garbage collected. +func ucredFinalizer(u *Ucred) { + ucredFree(u.ucred) +} + +func GetPeerUcred(fd uintptr) (*Ucred, error) { + var ucred uintptr + err := getpeerucred(fd, &ucred) + if err != nil { + return nil, err + } + result := &Ucred{ + ucred: ucred, + } + // set the finalizer on the result so that the ucred will be freed + runtime.SetFinalizer(result, ucredFinalizer) + return result, nil +} + +func UcredGet(pid int) (*Ucred, error) { + ucred, err := ucredGet(pid) + if err != nil { + return nil, err + } + result := &Ucred{ + ucred: ucred, + } + // set the finalizer on the result so that the ucred will be freed + runtime.SetFinalizer(result, ucredFinalizer) + return result, nil +} + +func (u *Ucred) Geteuid() int { + defer runtime.KeepAlive(u) + return ucredGeteuid(u.ucred) +} + +func (u *Ucred) Getruid() int { + defer runtime.KeepAlive(u) + return ucredGetruid(u.ucred) +} + +func (u *Ucred) Getsuid() int { + defer runtime.KeepAlive(u) + return ucredGetsuid(u.ucred) +} + +func (u *Ucred) Getegid() int { + defer runtime.KeepAlive(u) + return ucredGetegid(u.ucred) +} + +func (u *Ucred) Getrgid() int { + defer runtime.KeepAlive(u) + return ucredGetrgid(u.ucred) +} + +func (u *Ucred) Getsgid() int { + defer runtime.KeepAlive(u) + return ucredGetsgid(u.ucred) +} + +func (u *Ucred) Getpid() int { + defer runtime.KeepAlive(u) + return ucredGetpid(u.ucred) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go index 312ae6ac..7bf5c04b 100644 --- a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go @@ -768,6 +768,15 @@ func Munmap(b []byte) (err error) { return mapper.Munmap(b) } +func MmapPtr(fd int, offset int64, addr unsafe.Pointer, length uintptr, prot int, flags int) (ret unsafe.Pointer, err error) { + xaddr, err := mapper.mmap(uintptr(addr), length, prot, flags, fd, offset) + return unsafe.Pointer(xaddr), err +} + +func MunmapPtr(addr unsafe.Pointer, length uintptr) (err error) { + return mapper.munmap(uintptr(addr), length) +} + //sys Gethostname(buf []byte) (err error) = SYS___GETHOSTNAME_A //sysnb Getgid() (gid int) //sysnb Getpid() (pid int) @@ -816,10 +825,10 @@ func Lstat(path string, stat *Stat_t) (err error) { // for checking symlinks begins with $VERSION/ $SYSNAME/ $SYSSYMR/ $SYSSYMA/ func isSpecialPath(path []byte) (v bool) { var special = [4][8]byte{ - [8]byte{'V', 'E', 'R', 'S', 'I', 'O', 'N', '/'}, - [8]byte{'S', 'Y', 'S', 'N', 'A', 'M', 'E', '/'}, - [8]byte{'S', 'Y', 'S', 'S', 'Y', 'M', 'R', '/'}, - [8]byte{'S', 'Y', 'S', 'S', 'Y', 'M', 'A', '/'}} + {'V', 'E', 'R', 'S', 'I', 'O', 'N', '/'}, + {'S', 'Y', 'S', 'N', 'A', 'M', 'E', '/'}, + {'S', 'Y', 'S', 'S', 'Y', 'M', 'R', '/'}, + {'S', 'Y', 'S', 'S', 'Y', 'M', 'A', '/'}} var i, j int for i = 0; i < len(special); i++ { @@ -3115,3 +3124,90 @@ func legacy_Mkfifoat(dirfd int, path string, mode uint32) (err error) { //sys Posix_openpt(oflag int) (fd int, err error) = SYS_POSIX_OPENPT //sys Grantpt(fildes int) (rc int, err error) = SYS_GRANTPT //sys Unlockpt(fildes int) (rc int, err error) = SYS_UNLOCKPT + +func fcntlAsIs(fd uintptr, cmd int, arg uintptr) (val int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCNTL<<4, uintptr(fd), uintptr(cmd), arg) + runtime.ExitSyscall() + val = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +func Fcntl(fd uintptr, cmd int, op interface{}) (ret int, err error) { + switch op.(type) { + case *Flock_t: + err = FcntlFlock(fd, cmd, op.(*Flock_t)) + if err != nil { + ret = -1 + } + return + case int: + return FcntlInt(fd, cmd, op.(int)) + case *F_cnvrt: + return fcntlAsIs(fd, cmd, uintptr(unsafe.Pointer(op.(*F_cnvrt)))) + case unsafe.Pointer: + return fcntlAsIs(fd, cmd, uintptr(op.(unsafe.Pointer))) + default: + return -1, EINVAL + } + return +} + +func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + return sendfile(outfd, infd, offset, count) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + // TODO: use LE call instead if the call is implemented + originalOffset, err := Seek(infd, 0, SEEK_CUR) + if err != nil { + return -1, err + } + //start reading data from in_fd + if offset != nil { + _, err := Seek(infd, *offset, SEEK_SET) + if err != nil { + return -1, err + } + } + + buf := make([]byte, count) + readBuf := make([]byte, 0) + var n int = 0 + for i := 0; i < count; i += n { + n, err := Read(infd, buf) + if n == 0 { + if err != nil { + return -1, err + } else { // EOF + break + } + } + readBuf = append(readBuf, buf...) + buf = buf[0:0] + } + + n2, err := Write(outfd, readBuf) + if err != nil { + return -1, err + } + + //When sendfile() returns, this variable will be set to the + // offset of the byte following the last byte that was read. + if offset != nil { + *offset = *offset + int64(n) + // If offset is not NULL, then sendfile() does not modify the file + // offset of in_fd + _, err := Seek(infd, originalOffset, SEEK_SET) + if err != nil { + return -1, err + } + } + return n2, nil +} diff --git a/vendor/golang.org/x/sys/unix/vgetrandom_linux.go b/vendor/golang.org/x/sys/unix/vgetrandom_linux.go new file mode 100644 index 00000000..07ac8e09 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/vgetrandom_linux.go @@ -0,0 +1,13 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build linux && go1.24 + +package unix + +import _ "unsafe" + +//go:linkname vgetrandom runtime.vgetrandom +//go:noescape +func vgetrandom(p []byte, flags uint32) (ret int, supported bool) diff --git a/vendor/golang.org/x/sys/unix/vgetrandom_unsupported.go b/vendor/golang.org/x/sys/unix/vgetrandom_unsupported.go new file mode 100644 index 00000000..297e97bc --- /dev/null +++ b/vendor/golang.org/x/sys/unix/vgetrandom_unsupported.go @@ -0,0 +1,11 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !linux || !go1.24 + +package unix + +func vgetrandom(p []byte, flags uint32) (ret int, supported bool) { + return -1, false +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go index 4308ac17..d73c4652 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go @@ -237,6 +237,9 @@ const ( CLOCK_UPTIME_RAW_APPROX = 0x9 CLONE_NOFOLLOW = 0x1 CLONE_NOOWNERCOPY = 0x2 + CONNECT_DATA_AUTHENTICATED = 0x4 + CONNECT_DATA_IDEMPOTENT = 0x2 + CONNECT_RESUME_ON_READ_WRITE = 0x1 CR0 = 0x0 CR1 = 0x1000 CR2 = 0x2000 @@ -1265,6 +1268,10 @@ const ( RTV_SSTHRESH = 0x20 RUSAGE_CHILDREN = -0x1 RUSAGE_SELF = 0x0 + SAE_ASSOCID_ALL = 0xffffffff + SAE_ASSOCID_ANY = 0x0 + SAE_CONNID_ALL = 0xffffffff + SAE_CONNID_ANY = 0x0 SCM_CREDS = 0x3 SCM_RIGHTS = 0x1 SCM_TIMESTAMP = 0x2 diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go index c8068a7a..4a55a400 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go @@ -237,6 +237,9 @@ const ( CLOCK_UPTIME_RAW_APPROX = 0x9 CLONE_NOFOLLOW = 0x1 CLONE_NOOWNERCOPY = 0x2 + CONNECT_DATA_AUTHENTICATED = 0x4 + CONNECT_DATA_IDEMPOTENT = 0x2 + CONNECT_RESUME_ON_READ_WRITE = 0x1 CR0 = 0x0 CR1 = 0x1000 CR2 = 0x2000 @@ -1265,6 +1268,10 @@ const ( RTV_SSTHRESH = 0x20 RUSAGE_CHILDREN = -0x1 RUSAGE_SELF = 0x0 + SAE_ASSOCID_ALL = 0xffffffff + SAE_ASSOCID_ANY = 0x0 + SAE_CONNID_ALL = 0xffffffff + SAE_CONNID_ANY = 0x0 SCM_CREDS = 0x3 SCM_RIGHTS = 0x1 SCM_TIMESTAMP = 0x2 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index 01a70b24..120a7b35 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -319,11 +319,17 @@ const ( AUDIT_INTEGRITY_POLICY_RULE = 0x70f AUDIT_INTEGRITY_RULE = 0x70d AUDIT_INTEGRITY_STATUS = 0x70a + AUDIT_INTEGRITY_USERSPACE = 0x710 AUDIT_IPC = 0x517 AUDIT_IPC_SET_PERM = 0x51f + AUDIT_IPE_ACCESS = 0x58c + AUDIT_IPE_CONFIG_CHANGE = 0x58d + AUDIT_IPE_POLICY_LOAD = 0x58e AUDIT_KERNEL = 0x7d0 AUDIT_KERNEL_OTHER = 0x524 AUDIT_KERN_MODULE = 0x532 + AUDIT_LANDLOCK_ACCESS = 0x58f + AUDIT_LANDLOCK_DOMAIN = 0x590 AUDIT_LAST_FEATURE = 0x1 AUDIT_LAST_KERN_ANOM_MSG = 0x707 AUDIT_LAST_USER_MSG = 0x4af @@ -488,13 +494,16 @@ const ( BPF_F_BEFORE = 0x8 BPF_F_ID = 0x20 BPF_F_NETFILTER_IP_DEFRAG = 0x1 + BPF_F_PREORDER = 0x40 BPF_F_QUERY_EFFECTIVE = 0x1 + BPF_F_REDIRECT_FLAGS = 0x19 BPF_F_REPLACE = 0x4 BPF_F_SLEEPABLE = 0x10 BPF_F_STRICT_ALIGNMENT = 0x1 BPF_F_TEST_REG_INVARIANTS = 0x80 BPF_F_TEST_RND_HI32 = 0x4 BPF_F_TEST_RUN_ON_CPU = 0x1 + BPF_F_TEST_SKB_CHECKSUM_COMPLETE = 0x4 BPF_F_TEST_STATE_FREQ = 0x8 BPF_F_TEST_XDP_LIVE_FRAMES = 0x2 BPF_F_XDP_DEV_BOUND_ONLY = 0x40 @@ -522,6 +531,7 @@ const ( BPF_LDX = 0x1 BPF_LEN = 0x80 BPF_LL_OFF = -0x200000 + BPF_LOAD_ACQ = 0x100 BPF_LSH = 0x60 BPF_MAJOR_VERSION = 0x1 BPF_MAXINSNS = 0x1000 @@ -549,6 +559,7 @@ const ( BPF_RET = 0x6 BPF_RSH = 0x70 BPF_ST = 0x2 + BPF_STORE_REL = 0x110 BPF_STX = 0x3 BPF_SUB = 0x10 BPF_TAG_SIZE = 0x8 @@ -838,24 +849,90 @@ const ( DM_UUID_FLAG = 0x4000 DM_UUID_LEN = 0x81 DM_VERSION = 0xc138fd00 - DM_VERSION_EXTRA = "-ioctl (2023-03-01)" + DM_VERSION_EXTRA = "-ioctl (2025-04-28)" DM_VERSION_MAJOR = 0x4 - DM_VERSION_MINOR = 0x30 + DM_VERSION_MINOR = 0x32 DM_VERSION_PATCHLEVEL = 0x0 + DT_ADDRRNGHI = 0x6ffffeff + DT_ADDRRNGLO = 0x6ffffe00 DT_BLK = 0x6 DT_CHR = 0x2 + DT_DEBUG = 0x15 DT_DIR = 0x4 + DT_ENCODING = 0x20 DT_FIFO = 0x1 + DT_FINI = 0xd + DT_FLAGS_1 = 0x6ffffffb + DT_GNU_HASH = 0x6ffffef5 + DT_HASH = 0x4 + DT_HIOS = 0x6ffff000 + DT_HIPROC = 0x7fffffff + DT_INIT = 0xc + DT_JMPREL = 0x17 DT_LNK = 0xa + DT_LOOS = 0x6000000d + DT_LOPROC = 0x70000000 + DT_NEEDED = 0x1 + DT_NULL = 0x0 + DT_PLTGOT = 0x3 + DT_PLTREL = 0x14 + DT_PLTRELSZ = 0x2 DT_REG = 0x8 + DT_REL = 0x11 + DT_RELA = 0x7 + DT_RELACOUNT = 0x6ffffff9 + DT_RELAENT = 0x9 + DT_RELASZ = 0x8 + DT_RELCOUNT = 0x6ffffffa + DT_RELENT = 0x13 + DT_RELSZ = 0x12 + DT_RPATH = 0xf DT_SOCK = 0xc + DT_SONAME = 0xe + DT_STRSZ = 0xa + DT_STRTAB = 0x5 + DT_SYMBOLIC = 0x10 + DT_SYMENT = 0xb + DT_SYMTAB = 0x6 + DT_TEXTREL = 0x16 DT_UNKNOWN = 0x0 + DT_VALRNGHI = 0x6ffffdff + DT_VALRNGLO = 0x6ffffd00 + DT_VERDEF = 0x6ffffffc + DT_VERDEFNUM = 0x6ffffffd + DT_VERNEED = 0x6ffffffe + DT_VERNEEDNUM = 0x6fffffff + DT_VERSYM = 0x6ffffff0 DT_WHT = 0xe ECHO = 0x8 ECRYPTFS_SUPER_MAGIC = 0xf15f EFD_SEMAPHORE = 0x1 EFIVARFS_MAGIC = 0xde5e81e4 EFS_SUPER_MAGIC = 0x414a53 + EI_CLASS = 0x4 + EI_DATA = 0x5 + EI_MAG0 = 0x0 + EI_MAG1 = 0x1 + EI_MAG2 = 0x2 + EI_MAG3 = 0x3 + EI_NIDENT = 0x10 + EI_OSABI = 0x7 + EI_PAD = 0x8 + EI_VERSION = 0x6 + ELFCLASS32 = 0x1 + ELFCLASS64 = 0x2 + ELFCLASSNONE = 0x0 + ELFCLASSNUM = 0x3 + ELFDATA2LSB = 0x1 + ELFDATA2MSB = 0x2 + ELFDATANONE = 0x0 + ELFMAG = "\177ELF" + ELFMAG0 = 0x7f + ELFMAG1 = 'E' + ELFMAG2 = 'L' + ELFMAG3 = 'F' + ELFOSABI_LINUX = 0x3 + ELFOSABI_NONE = 0x0 EM_386 = 0x3 EM_486 = 0x6 EM_68K = 0x4 @@ -931,11 +1008,10 @@ const ( EPOLL_CTL_MOD = 0x3 EPOLL_IOC_TYPE = 0x8a EROFS_SUPER_MAGIC_V1 = 0xe0f5e1e2 - ESP_V4_FLOW = 0xa - ESP_V6_FLOW = 0xc - ETHER_FLOW = 0x12 ETHTOOL_BUSINFO_LEN = 0x20 ETHTOOL_EROMVERS_LEN = 0x20 + ETHTOOL_FAMILY_NAME = "ethtool" + ETHTOOL_FAMILY_VERSION = 0x1 ETHTOOL_FEC_AUTO = 0x2 ETHTOOL_FEC_BASER = 0x10 ETHTOOL_FEC_LLRS = 0x20 @@ -1142,14 +1218,24 @@ const ( ETH_P_WCCP = 0x883e ETH_P_X25 = 0x805 ETH_P_XDSA = 0xf8 + ET_CORE = 0x4 + ET_DYN = 0x3 + ET_EXEC = 0x2 + ET_HIPROC = 0xffff + ET_LOPROC = 0xff00 + ET_NONE = 0x0 + ET_REL = 0x1 EV_ABS = 0x3 EV_CNT = 0x20 + EV_CURRENT = 0x1 EV_FF = 0x15 EV_FF_STATUS = 0x17 EV_KEY = 0x1 EV_LED = 0x11 EV_MAX = 0x1f EV_MSC = 0x4 + EV_NONE = 0x0 + EV_NUM = 0x2 EV_PWR = 0x16 EV_REL = 0x2 EV_REP = 0x14 @@ -1165,6 +1251,7 @@ const ( EXTA = 0xe EXTB = 0xf F2FS_SUPER_MAGIC = 0xf2f52010 + FALLOC_FL_ALLOCATE_RANGE = 0x0 FALLOC_FL_COLLAPSE_RANGE = 0x8 FALLOC_FL_INSERT_RANGE = 0x20 FALLOC_FL_KEEP_SIZE = 0x1 @@ -1197,13 +1284,18 @@ const ( FAN_DENY = 0x2 FAN_ENABLE_AUDIT = 0x40 FAN_EPIDFD = -0x2 + FAN_ERRNO_BITS = 0x8 + FAN_ERRNO_MASK = 0xff + FAN_ERRNO_SHIFT = 0x18 FAN_EVENT_INFO_TYPE_DFID = 0x3 FAN_EVENT_INFO_TYPE_DFID_NAME = 0x2 FAN_EVENT_INFO_TYPE_ERROR = 0x5 FAN_EVENT_INFO_TYPE_FID = 0x1 + FAN_EVENT_INFO_TYPE_MNT = 0x7 FAN_EVENT_INFO_TYPE_NEW_DFID_NAME = 0xc FAN_EVENT_INFO_TYPE_OLD_DFID_NAME = 0xa FAN_EVENT_INFO_TYPE_PIDFD = 0x4 + FAN_EVENT_INFO_TYPE_RANGE = 0x6 FAN_EVENT_METADATA_LEN = 0x18 FAN_EVENT_ON_CHILD = 0x8000000 FAN_FS_ERROR = 0x8000 @@ -1218,9 +1310,12 @@ const ( FAN_MARK_IGNORED_SURV_MODIFY = 0x40 FAN_MARK_IGNORE_SURV = 0x440 FAN_MARK_INODE = 0x0 + FAN_MARK_MNTNS = 0x110 FAN_MARK_MOUNT = 0x10 FAN_MARK_ONLYDIR = 0x8 FAN_MARK_REMOVE = 0x2 + FAN_MNT_ATTACH = 0x1000000 + FAN_MNT_DETACH = 0x2000000 FAN_MODIFY = 0x2 FAN_MOVE = 0xc0 FAN_MOVED_FROM = 0x40 @@ -1234,12 +1329,15 @@ const ( FAN_OPEN_EXEC = 0x1000 FAN_OPEN_EXEC_PERM = 0x40000 FAN_OPEN_PERM = 0x10000 + FAN_PRE_ACCESS = 0x100000 FAN_Q_OVERFLOW = 0x4000 FAN_RENAME = 0x10000000 FAN_REPORT_DFID_NAME = 0xc00 FAN_REPORT_DFID_NAME_TARGET = 0x1e00 FAN_REPORT_DIR_FID = 0x400 + FAN_REPORT_FD_ERROR = 0x2000 FAN_REPORT_FID = 0x200 + FAN_REPORT_MNT = 0x4000 FAN_REPORT_NAME = 0x800 FAN_REPORT_PIDFD = 0x80 FAN_REPORT_TARGET_FID = 0x1000 @@ -1259,6 +1357,7 @@ const ( FIB_RULE_PERMANENT = 0x1 FIB_RULE_UNRESOLVED = 0x4 FIDEDUPERANGE = 0xc0189436 + FSCRYPT_ADD_KEY_FLAG_HW_WRAPPED = 0x1 FSCRYPT_KEY_DESCRIPTOR_SIZE = 0x8 FSCRYPT_KEY_DESC_PREFIX = "fscrypt:" FSCRYPT_KEY_DESC_PREFIX_SIZE = 0x8 @@ -1324,8 +1423,10 @@ const ( FUSE_SUPER_MAGIC = 0x65735546 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 + F_CREATED_QUERY = 0x404 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x406 + F_DUPFD_QUERY = 0x403 F_EXLCK = 0x4 F_GETFD = 0x1 F_GETFL = 0x3 @@ -1514,6 +1615,8 @@ const ( IN_OPEN = 0x20 IN_Q_OVERFLOW = 0x4000 IN_UNMOUNT = 0x2000 + IOCTL_MEI_CONNECT_CLIENT = 0xc0104801 + IOCTL_MEI_CONNECT_CLIENT_VTAG = 0xc0144804 IPPROTO_AH = 0x33 IPPROTO_BEETPH = 0x5e IPPROTO_COMP = 0x6c @@ -1545,6 +1648,7 @@ const ( IPPROTO_ROUTING = 0x2b IPPROTO_RSVP = 0x2e IPPROTO_SCTP = 0x84 + IPPROTO_SMC = 0x100 IPPROTO_TCP = 0x6 IPPROTO_TP = 0x1d IPPROTO_UDP = 0x11 @@ -1564,7 +1668,6 @@ const ( IPV6_DONTFRAG = 0x3e IPV6_DROP_MEMBERSHIP = 0x15 IPV6_DSTOPTS = 0x3b - IPV6_FLOW = 0x11 IPV6_FREEBIND = 0x4e IPV6_HDRINCL = 0x24 IPV6_HOPLIMIT = 0x34 @@ -1615,8 +1718,9 @@ const ( IPV6_TRANSPARENT = 0x4b IPV6_UNICAST_HOPS = 0x10 IPV6_UNICAST_IF = 0x4c - IPV6_USER_FLOW = 0xe IPV6_V6ONLY = 0x1a + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 IPV6_XFRM_POLICY = 0x23 IP_ADD_MEMBERSHIP = 0x23 IP_ADD_SOURCE_MEMBERSHIP = 0x27 @@ -1675,7 +1779,6 @@ const ( IP_TTL = 0x2 IP_UNBLOCK_SOURCE = 0x25 IP_UNICAST_IF = 0x32 - IP_USER_FLOW = 0xd IP_XFRM_POLICY = 0x11 ISOFS_SUPER_MAGIC = 0x9660 ISTRIP = 0x20 @@ -1797,7 +1900,13 @@ const ( LANDLOCK_ACCESS_FS_WRITE_FILE = 0x2 LANDLOCK_ACCESS_NET_BIND_TCP = 0x1 LANDLOCK_ACCESS_NET_CONNECT_TCP = 0x2 + LANDLOCK_CREATE_RULESET_ERRATA = 0x2 LANDLOCK_CREATE_RULESET_VERSION = 0x1 + LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON = 0x2 + LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF = 0x1 + LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF = 0x4 + LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET = 0x1 + LANDLOCK_SCOPE_SIGNAL = 0x2 LINUX_REBOOT_CMD_CAD_OFF = 0x0 LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef LINUX_REBOOT_CMD_HALT = 0xcdef0123 @@ -1859,6 +1968,7 @@ const ( MADV_UNMERGEABLE = 0xd MADV_WILLNEED = 0x3 MADV_WIPEONFORK = 0x12 + MAP_DROPPABLE = 0x8 MAP_FILE = 0x0 MAP_FIXED = 0x10 MAP_FIXED_NOREPLACE = 0x100000 @@ -1922,6 +2032,8 @@ const ( MNT_EXPIRE = 0x4 MNT_FORCE = 0x1 MNT_ID_REQ_SIZE_VER0 = 0x18 + MNT_ID_REQ_SIZE_VER1 = 0x20 + MNT_NS_INFO_SIZE_VER0 = 0x10 MODULE_INIT_COMPRESSED_FILE = 0x4 MODULE_INIT_IGNORE_MODVERSIONS = 0x1 MODULE_INIT_IGNORE_VERMAGIC = 0x2 @@ -1957,6 +2069,7 @@ const ( MSG_PEEK = 0x2 MSG_PROXY = 0x10 MSG_RST = 0x1000 + MSG_SOCK_DEVMEM = 0x2000000 MSG_SYN = 0x400 MSG_TRUNC = 0x20 MSG_TRYHARD = 0x4 @@ -2073,6 +2186,7 @@ const ( NFC_ATR_REQ_MAXSIZE = 0x40 NFC_ATR_RES_GB_MAXSIZE = 0x2f NFC_ATR_RES_MAXSIZE = 0x40 + NFC_ATS_MAXSIZE = 0x14 NFC_COMM_ACTIVE = 0x0 NFC_COMM_PASSIVE = 0x1 NFC_DEVICE_NAME_MAXSIZE = 0x8 @@ -2153,6 +2267,7 @@ const ( NFNL_SUBSYS_QUEUE = 0x3 NFNL_SUBSYS_ULOG = 0x4 NFS_SUPER_MAGIC = 0x6969 + NFT_BITWISE_BOOL = 0x0 NFT_CHAIN_FLAGS = 0x7 NFT_CHAIN_MAXNAMELEN = 0x100 NFT_CT_MAX = 0x17 @@ -2187,7 +2302,7 @@ const ( NFT_REG_SIZE = 0x10 NFT_REJECT_ICMPX_MAX = 0x3 NFT_RT_MAX = 0x4 - NFT_SECMARK_CTX_MAXLEN = 0x100 + NFT_SECMARK_CTX_MAXLEN = 0x1000 NFT_SET_MAXNAMELEN = 0x100 NFT_SOCKET_MAX = 0x3 NFT_TABLE_F_MASK = 0x7 @@ -2239,7 +2354,167 @@ const ( NLM_F_REPLACE = 0x100 NLM_F_REQUEST = 0x1 NLM_F_ROOT = 0x100 + NN_386_IOPERM = "LINUX" + NN_386_TLS = "LINUX" + NN_ARC_V2 = "LINUX" + NN_ARM_FPMR = "LINUX" + NN_ARM_GCS = "LINUX" + NN_ARM_HW_BREAK = "LINUX" + NN_ARM_HW_WATCH = "LINUX" + NN_ARM_PACA_KEYS = "LINUX" + NN_ARM_PACG_KEYS = "LINUX" + NN_ARM_PAC_ENABLED_KEYS = "LINUX" + NN_ARM_PAC_MASK = "LINUX" + NN_ARM_POE = "LINUX" + NN_ARM_SSVE = "LINUX" + NN_ARM_SVE = "LINUX" + NN_ARM_SYSTEM_CALL = "LINUX" + NN_ARM_TAGGED_ADDR_CTRL = "LINUX" + NN_ARM_TLS = "LINUX" + NN_ARM_VFP = "LINUX" + NN_ARM_ZA = "LINUX" + NN_ARM_ZT = "LINUX" + NN_AUXV = "CORE" + NN_FILE = "CORE" + NN_GNU_PROPERTY_TYPE_0 = "GNU" + NN_LOONGARCH_CPUCFG = "LINUX" + NN_LOONGARCH_CSR = "LINUX" + NN_LOONGARCH_HW_BREAK = "LINUX" + NN_LOONGARCH_HW_WATCH = "LINUX" + NN_LOONGARCH_LASX = "LINUX" + NN_LOONGARCH_LBT = "LINUX" + NN_LOONGARCH_LSX = "LINUX" + NN_MIPS_DSP = "LINUX" + NN_MIPS_FP_MODE = "LINUX" + NN_MIPS_MSA = "LINUX" + NN_PPC_DEXCR = "LINUX" + NN_PPC_DSCR = "LINUX" + NN_PPC_EBB = "LINUX" + NN_PPC_HASHKEYR = "LINUX" + NN_PPC_PKEY = "LINUX" + NN_PPC_PMU = "LINUX" + NN_PPC_PPR = "LINUX" + NN_PPC_SPE = "LINUX" + NN_PPC_TAR = "LINUX" + NN_PPC_TM_CDSCR = "LINUX" + NN_PPC_TM_CFPR = "LINUX" + NN_PPC_TM_CGPR = "LINUX" + NN_PPC_TM_CPPR = "LINUX" + NN_PPC_TM_CTAR = "LINUX" + NN_PPC_TM_CVMX = "LINUX" + NN_PPC_TM_CVSX = "LINUX" + NN_PPC_TM_SPR = "LINUX" + NN_PPC_VMX = "LINUX" + NN_PPC_VSX = "LINUX" + NN_PRFPREG = "CORE" + NN_PRPSINFO = "CORE" + NN_PRSTATUS = "CORE" + NN_PRXFPREG = "LINUX" + NN_RISCV_CSR = "LINUX" + NN_RISCV_TAGGED_ADDR_CTRL = "LINUX" + NN_RISCV_VECTOR = "LINUX" + NN_S390_CTRS = "LINUX" + NN_S390_GS_BC = "LINUX" + NN_S390_GS_CB = "LINUX" + NN_S390_HIGH_GPRS = "LINUX" + NN_S390_LAST_BREAK = "LINUX" + NN_S390_PREFIX = "LINUX" + NN_S390_PV_CPU_DATA = "LINUX" + NN_S390_RI_CB = "LINUX" + NN_S390_SYSTEM_CALL = "LINUX" + NN_S390_TDB = "LINUX" + NN_S390_TIMER = "LINUX" + NN_S390_TODCMP = "LINUX" + NN_S390_TODPREG = "LINUX" + NN_S390_VXRS_HIGH = "LINUX" + NN_S390_VXRS_LOW = "LINUX" + NN_SIGINFO = "CORE" + NN_TASKSTRUCT = "CORE" + NN_VMCOREDD = "LINUX" + NN_X86_SHSTK = "LINUX" + NN_X86_XSAVE_LAYOUT = "LINUX" + NN_X86_XSTATE = "LINUX" NSFS_MAGIC = 0x6e736673 + NT_386_IOPERM = 0x201 + NT_386_TLS = 0x200 + NT_ARC_V2 = 0x600 + NT_ARM_FPMR = 0x40e + NT_ARM_GCS = 0x410 + NT_ARM_HW_BREAK = 0x402 + NT_ARM_HW_WATCH = 0x403 + NT_ARM_PACA_KEYS = 0x407 + NT_ARM_PACG_KEYS = 0x408 + NT_ARM_PAC_ENABLED_KEYS = 0x40a + NT_ARM_PAC_MASK = 0x406 + NT_ARM_POE = 0x40f + NT_ARM_SSVE = 0x40b + NT_ARM_SVE = 0x405 + NT_ARM_SYSTEM_CALL = 0x404 + NT_ARM_TAGGED_ADDR_CTRL = 0x409 + NT_ARM_TLS = 0x401 + NT_ARM_VFP = 0x400 + NT_ARM_ZA = 0x40c + NT_ARM_ZT = 0x40d + NT_AUXV = 0x6 + NT_FILE = 0x46494c45 + NT_GNU_PROPERTY_TYPE_0 = 0x5 + NT_LOONGARCH_CPUCFG = 0xa00 + NT_LOONGARCH_CSR = 0xa01 + NT_LOONGARCH_HW_BREAK = 0xa05 + NT_LOONGARCH_HW_WATCH = 0xa06 + NT_LOONGARCH_LASX = 0xa03 + NT_LOONGARCH_LBT = 0xa04 + NT_LOONGARCH_LSX = 0xa02 + NT_MIPS_DSP = 0x800 + NT_MIPS_FP_MODE = 0x801 + NT_MIPS_MSA = 0x802 + NT_PPC_DEXCR = 0x111 + NT_PPC_DSCR = 0x105 + NT_PPC_EBB = 0x106 + NT_PPC_HASHKEYR = 0x112 + NT_PPC_PKEY = 0x110 + NT_PPC_PMU = 0x107 + NT_PPC_PPR = 0x104 + NT_PPC_SPE = 0x101 + NT_PPC_TAR = 0x103 + NT_PPC_TM_CDSCR = 0x10f + NT_PPC_TM_CFPR = 0x109 + NT_PPC_TM_CGPR = 0x108 + NT_PPC_TM_CPPR = 0x10e + NT_PPC_TM_CTAR = 0x10d + NT_PPC_TM_CVMX = 0x10a + NT_PPC_TM_CVSX = 0x10b + NT_PPC_TM_SPR = 0x10c + NT_PPC_VMX = 0x100 + NT_PPC_VSX = 0x102 + NT_PRFPREG = 0x2 + NT_PRPSINFO = 0x3 + NT_PRSTATUS = 0x1 + NT_PRXFPREG = 0x46e62b7f + NT_RISCV_CSR = 0x900 + NT_RISCV_TAGGED_ADDR_CTRL = 0x902 + NT_RISCV_VECTOR = 0x901 + NT_S390_CTRS = 0x304 + NT_S390_GS_BC = 0x30c + NT_S390_GS_CB = 0x30b + NT_S390_HIGH_GPRS = 0x300 + NT_S390_LAST_BREAK = 0x306 + NT_S390_PREFIX = 0x305 + NT_S390_PV_CPU_DATA = 0x30e + NT_S390_RI_CB = 0x30d + NT_S390_SYSTEM_CALL = 0x307 + NT_S390_TDB = 0x308 + NT_S390_TIMER = 0x301 + NT_S390_TODCMP = 0x302 + NT_S390_TODPREG = 0x303 + NT_S390_VXRS_HIGH = 0x30a + NT_S390_VXRS_LOW = 0x309 + NT_SIGINFO = 0x53494749 + NT_TASKSTRUCT = 0x4 + NT_VMCOREDD = 0x700 + NT_X86_SHSTK = 0x204 + NT_X86_XSAVE_LAYOUT = 0x205 + NT_X86_XSTATE = 0x202 OCFS2_SUPER_MAGIC = 0x7461636f OCRNL = 0x8 OFDEL = 0x80 @@ -2356,9 +2631,11 @@ const ( PERF_MEM_LVLNUM_IO = 0xa PERF_MEM_LVLNUM_L1 = 0x1 PERF_MEM_LVLNUM_L2 = 0x2 + PERF_MEM_LVLNUM_L2_MHB = 0x5 PERF_MEM_LVLNUM_L3 = 0x3 PERF_MEM_LVLNUM_L4 = 0x4 PERF_MEM_LVLNUM_LFB = 0xc + PERF_MEM_LVLNUM_MSC = 0x6 PERF_MEM_LVLNUM_NA = 0xf PERF_MEM_LVLNUM_PMEM = 0xe PERF_MEM_LVLNUM_RAM = 0xd @@ -2424,6 +2701,59 @@ const ( PERF_RECORD_MISC_USER = 0x2 PERF_SAMPLE_BRANCH_PLM_ALL = 0x7 PERF_SAMPLE_WEIGHT_TYPE = 0x1004000 + PF_ALG = 0x26 + PF_APPLETALK = 0x5 + PF_ASH = 0x12 + PF_ATMPVC = 0x8 + PF_ATMSVC = 0x14 + PF_AX25 = 0x3 + PF_BLUETOOTH = 0x1f + PF_BRIDGE = 0x7 + PF_CAIF = 0x25 + PF_CAN = 0x1d + PF_DECnet = 0xc + PF_ECONET = 0x13 + PF_FILE = 0x1 + PF_IB = 0x1b + PF_IEEE802154 = 0x24 + PF_INET = 0x2 + PF_INET6 = 0xa + PF_IPX = 0x4 + PF_IRDA = 0x17 + PF_ISDN = 0x22 + PF_IUCV = 0x20 + PF_KCM = 0x29 + PF_KEY = 0xf + PF_LLC = 0x1a + PF_LOCAL = 0x1 + PF_MAX = 0x2e + PF_MCTP = 0x2d + PF_MPLS = 0x1c + PF_NETBEUI = 0xd + PF_NETLINK = 0x10 + PF_NETROM = 0x6 + PF_NFC = 0x27 + PF_PACKET = 0x11 + PF_PHONET = 0x23 + PF_PPPOX = 0x18 + PF_QIPCRTR = 0x2a + PF_R = 0x4 + PF_RDS = 0x15 + PF_ROSE = 0xb + PF_ROUTE = 0x10 + PF_RXRPC = 0x21 + PF_SECURITY = 0xe + PF_SMC = 0x2b + PF_SNA = 0x16 + PF_TIPC = 0x1e + PF_UNIX = 0x1 + PF_UNSPEC = 0x0 + PF_VSOCK = 0x28 + PF_W = 0x2 + PF_WANPIPE = 0x19 + PF_X = 0x1 + PF_X25 = 0x9 + PF_XDP = 0x2c PID_FS_MAGIC = 0x50494446 PIPEFS_MAGIC = 0x50495045 PPPIOCGNPMODE = 0xc008744c @@ -2431,6 +2761,7 @@ const ( PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 + PROCFS_IOCTL_MAGIC = 'f' PROC_SUPER_MAGIC = 0x9fa0 PROT_EXEC = 0x4 PROT_GROWSDOWN = 0x1000000 @@ -2462,6 +2793,10 @@ const ( PR_FP_EXC_UND = 0x40000 PR_FP_MODE_FR = 0x1 PR_FP_MODE_FRE = 0x2 + PR_FUTEX_HASH = 0x4e + PR_FUTEX_HASH_GET_IMMUTABLE = 0x3 + PR_FUTEX_HASH_GET_SLOTS = 0x2 + PR_FUTEX_HASH_SET_SLOTS = 0x1 PR_GET_AUXV = 0x41555856 PR_GET_CHILD_SUBREAPER = 0x25 PR_GET_DUMPABLE = 0x3 @@ -2478,6 +2813,7 @@ const ( PR_GET_PDEATHSIG = 0x2 PR_GET_SECCOMP = 0x15 PR_GET_SECUREBITS = 0x1b + PR_GET_SHADOW_STACK_STATUS = 0x4a PR_GET_SPECULATION_CTRL = 0x34 PR_GET_TAGGED_ADDR_CTRL = 0x38 PR_GET_THP_DISABLE = 0x2a @@ -2486,6 +2822,7 @@ const ( PR_GET_TIMING = 0xd PR_GET_TSC = 0x19 PR_GET_UNALIGN = 0x5 + PR_LOCK_SHADOW_STACK_STATUS = 0x4c PR_MCE_KILL = 0x21 PR_MCE_KILL_CLEAR = 0x0 PR_MCE_KILL_DEFAULT = 0x2 @@ -2512,6 +2849,8 @@ const ( PR_PAC_GET_ENABLED_KEYS = 0x3d PR_PAC_RESET_KEYS = 0x36 PR_PAC_SET_ENABLED_KEYS = 0x3c + PR_PMLEN_MASK = 0x7f000000 + PR_PMLEN_SHIFT = 0x18 PR_PPC_DEXCR_CTRL_CLEAR = 0x4 PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC = 0x10 PR_PPC_DEXCR_CTRL_EDITABLE = 0x1 @@ -2579,6 +2918,7 @@ const ( PR_SET_PTRACER = 0x59616d61 PR_SET_SECCOMP = 0x16 PR_SET_SECUREBITS = 0x1c + PR_SET_SHADOW_STACK_STATUS = 0x4b PR_SET_SPECULATION_CTRL = 0x35 PR_SET_SYSCALL_USER_DISPATCH = 0x3b PR_SET_TAGGED_ADDR_CTRL = 0x37 @@ -2589,6 +2929,9 @@ const ( PR_SET_UNALIGN = 0x6 PR_SET_VMA = 0x53564d41 PR_SET_VMA_ANON_NAME = 0x0 + PR_SHADOW_STACK_ENABLE = 0x1 + PR_SHADOW_STACK_PUSH = 0x4 + PR_SHADOW_STACK_WRITE = 0x2 PR_SME_GET_VL = 0x40 PR_SME_SET_VL = 0x3f PR_SME_SET_VL_ONEXEC = 0x40000 @@ -2613,6 +2956,10 @@ const ( PR_TAGGED_ADDR_ENABLE = 0x1 PR_TASK_PERF_EVENTS_DISABLE = 0x1f PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMER_CREATE_RESTORE_IDS = 0x4d + PR_TIMER_CREATE_RESTORE_IDS_GET = 0x2 + PR_TIMER_CREATE_RESTORE_IDS_OFF = 0x0 + PR_TIMER_CREATE_RESTORE_IDS_ON = 0x1 PR_TIMING_STATISTICAL = 0x0 PR_TIMING_TIMESTAMP = 0x1 PR_TSC_ENABLE = 0x1 @@ -2620,6 +2967,28 @@ const ( PR_UNALIGN_NOPRINT = 0x1 PR_UNALIGN_SIGBUS = 0x2 PSTOREFS_MAGIC = 0x6165676c + PTP_CLK_MAGIC = '=' + PTP_ENABLE_FEATURE = 0x1 + PTP_EXTTS_EDGES = 0x6 + PTP_EXTTS_EVENT_VALID = 0x1 + PTP_EXTTS_V1_VALID_FLAGS = 0x7 + PTP_EXTTS_VALID_FLAGS = 0x1f + PTP_EXT_OFFSET = 0x10 + PTP_FALLING_EDGE = 0x4 + PTP_MAX_SAMPLES = 0x19 + PTP_PEROUT_DUTY_CYCLE = 0x2 + PTP_PEROUT_ONE_SHOT = 0x1 + PTP_PEROUT_PHASE = 0x4 + PTP_PEROUT_V1_VALID_FLAGS = 0x0 + PTP_PEROUT_VALID_FLAGS = 0x7 + PTP_PIN_GETFUNC = 0xc0603d06 + PTP_PIN_GETFUNC2 = 0xc0603d0f + PTP_RISING_EDGE = 0x2 + PTP_STRICT_FLAGS = 0x8 + PTP_SYS_OFFSET_EXTENDED = 0xc4c03d09 + PTP_SYS_OFFSET_EXTENDED2 = 0xc4c03d12 + PTP_SYS_OFFSET_PRECISE = 0xc0403d08 + PTP_SYS_OFFSET_PRECISE2 = 0xc0403d11 PTRACE_ATTACH = 0x10 PTRACE_CONT = 0x7 PTRACE_DETACH = 0x11 @@ -2671,6 +3040,7 @@ const ( PTRACE_SETREGSET = 0x4205 PTRACE_SETSIGINFO = 0x4203 PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_SYSCALL_INFO = 0x4212 PTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG = 0x4210 PTRACE_SINGLESTEP = 0x9 PTRACE_SYSCALL = 0x18 @@ -2679,6 +3049,23 @@ const ( PTRACE_SYSCALL_INFO_NONE = 0x0 PTRACE_SYSCALL_INFO_SECCOMP = 0x3 PTRACE_TRACEME = 0x0 + PT_AARCH64_MEMTAG_MTE = 0x70000002 + PT_DYNAMIC = 0x2 + PT_GNU_EH_FRAME = 0x6474e550 + PT_GNU_PROPERTY = 0x6474e553 + PT_GNU_RELRO = 0x6474e552 + PT_GNU_STACK = 0x6474e551 + PT_HIOS = 0x6fffffff + PT_HIPROC = 0x7fffffff + PT_INTERP = 0x3 + PT_LOAD = 0x1 + PT_LOOS = 0x60000000 + PT_LOPROC = 0x70000000 + PT_NOTE = 0x4 + PT_NULL = 0x0 + PT_PHDR = 0x6 + PT_SHLIB = 0x5 + PT_TLS = 0x7 P_ALL = 0x0 P_PGID = 0x2 P_PID = 0x1 @@ -2734,7 +3121,7 @@ const ( RTAX_UNSPEC = 0x0 RTAX_WINDOW = 0x3 RTA_ALIGNTO = 0x4 - RTA_MAX = 0x1e + RTA_MAX = 0x1f RTCF_DIRECTSRC = 0x4000000 RTCF_DOREDIRECT = 0x1000000 RTCF_LOG = 0x2000000 @@ -2811,10 +3198,12 @@ const ( RTM_DELACTION = 0x31 RTM_DELADDR = 0x15 RTM_DELADDRLABEL = 0x49 + RTM_DELANYCAST = 0x3d RTM_DELCHAIN = 0x65 RTM_DELLINK = 0x11 RTM_DELLINKPROP = 0x6d RTM_DELMDB = 0x55 + RTM_DELMULTICAST = 0x39 RTM_DELNEIGH = 0x1d RTM_DELNETCONF = 0x51 RTM_DELNEXTHOP = 0x69 @@ -2864,11 +3253,13 @@ const ( RTM_NEWACTION = 0x30 RTM_NEWADDR = 0x14 RTM_NEWADDRLABEL = 0x48 + RTM_NEWANYCAST = 0x3c RTM_NEWCACHEREPORT = 0x60 RTM_NEWCHAIN = 0x64 RTM_NEWLINK = 0x10 RTM_NEWLINKPROP = 0x6c RTM_NEWMDB = 0x54 + RTM_NEWMULTICAST = 0x38 RTM_NEWNDUSEROPT = 0x44 RTM_NEWNEIGH = 0x1c RTM_NEWNEIGHTBL = 0x40 @@ -2876,7 +3267,6 @@ const ( RTM_NEWNEXTHOP = 0x68 RTM_NEWNEXTHOPBUCKET = 0x74 RTM_NEWNSID = 0x58 - RTM_NEWNVLAN = 0x70 RTM_NEWPREFIX = 0x34 RTM_NEWQDISC = 0x24 RTM_NEWROUTE = 0x18 @@ -2885,6 +3275,7 @@ const ( RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c RTM_NEWTUNNEL = 0x78 + RTM_NEWVLAN = 0x70 RTM_NR_FAMILIES = 0x1b RTM_NR_MSGTYPES = 0x6c RTM_SETDCB = 0x4f @@ -2917,6 +3308,7 @@ const ( RTPROT_NTK = 0xf RTPROT_OPENR = 0x63 RTPROT_OSPF = 0xbc + RTPROT_OVN = 0x54 RTPROT_RA = 0x9 RTPROT_REDIRECT = 0x1 RTPROT_RIP = 0xbd @@ -2933,15 +3325,18 @@ const ( RUSAGE_SELF = 0x0 RUSAGE_THREAD = 0x1 RWF_APPEND = 0x10 + RWF_ATOMIC = 0x40 + RWF_DONTCACHE = 0x80 RWF_DSYNC = 0x2 RWF_HIPRI = 0x1 RWF_NOAPPEND = 0x20 RWF_NOWAIT = 0x8 - RWF_SUPPORTED = 0x3f + RWF_SUPPORTED = 0xff RWF_SYNC = 0x4 RWF_WRITE_LIFE_NOT_SET = 0x0 SCHED_BATCH = 0x3 SCHED_DEADLINE = 0x6 + SCHED_EXT = 0x7 SCHED_FIFO = 0x1 SCHED_FLAG_ALL = 0x7f SCHED_FLAG_DL_OVERRUN = 0x4 @@ -3004,6 +3399,47 @@ const ( SEEK_MAX = 0x4 SEEK_SET = 0x0 SELINUX_MAGIC = 0xf97cff8c + SHF_ALLOC = 0x2 + SHF_EXCLUDE = 0x8000000 + SHF_EXECINSTR = 0x4 + SHF_GROUP = 0x200 + SHF_INFO_LINK = 0x40 + SHF_LINK_ORDER = 0x80 + SHF_MASKOS = 0xff00000 + SHF_MASKPROC = 0xf0000000 + SHF_MERGE = 0x10 + SHF_ORDERED = 0x4000000 + SHF_OS_NONCONFORMING = 0x100 + SHF_RELA_LIVEPATCH = 0x100000 + SHF_RO_AFTER_INIT = 0x200000 + SHF_STRINGS = 0x20 + SHF_TLS = 0x400 + SHF_WRITE = 0x1 + SHN_ABS = 0xfff1 + SHN_COMMON = 0xfff2 + SHN_HIPROC = 0xff1f + SHN_HIRESERVE = 0xffff + SHN_LIVEPATCH = 0xff20 + SHN_LOPROC = 0xff00 + SHN_LORESERVE = 0xff00 + SHN_UNDEF = 0x0 + SHT_DYNAMIC = 0x6 + SHT_DYNSYM = 0xb + SHT_HASH = 0x5 + SHT_HIPROC = 0x7fffffff + SHT_HIUSER = 0xffffffff + SHT_LOPROC = 0x70000000 + SHT_LOUSER = 0x80000000 + SHT_NOBITS = 0x8 + SHT_NOTE = 0x7 + SHT_NULL = 0x0 + SHT_NUM = 0xc + SHT_PROGBITS = 0x1 + SHT_REL = 0x9 + SHT_RELA = 0x4 + SHT_SHLIB = 0xa + SHT_STRTAB = 0x3 + SHT_SYMTAB = 0x2 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 @@ -3210,11 +3646,13 @@ const ( STATX_ATTR_MOUNT_ROOT = 0x2000 STATX_ATTR_NODUMP = 0x40 STATX_ATTR_VERITY = 0x100000 + STATX_ATTR_WRITE_ATOMIC = 0x400000 STATX_BASIC_STATS = 0x7ff STATX_BLOCKS = 0x400 STATX_BTIME = 0x800 STATX_CTIME = 0x80 STATX_DIOALIGN = 0x2000 + STATX_DIO_READ_ALIGN = 0x20000 STATX_GID = 0x10 STATX_INO = 0x100 STATX_MNT_ID = 0x1000 @@ -3226,7 +3664,18 @@ const ( STATX_SUBVOL = 0x8000 STATX_TYPE = 0x1 STATX_UID = 0x8 + STATX_WRITE_ATOMIC = 0x10000 STATX__RESERVED = 0x80000000 + STB_GLOBAL = 0x1 + STB_LOCAL = 0x0 + STB_WEAK = 0x2 + STT_COMMON = 0x5 + STT_FILE = 0x4 + STT_FUNC = 0x2 + STT_NOTYPE = 0x0 + STT_OBJECT = 0x1 + STT_SECTION = 0x3 + STT_TLS = 0x6 SYNC_FILE_RANGE_WAIT_AFTER = 0x4 SYNC_FILE_RANGE_WAIT_BEFORE = 0x1 SYNC_FILE_RANGE_WRITE = 0x2 @@ -3265,7 +3714,7 @@ const ( TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 - TASKSTATS_VERSION = 0xe + TASKSTATS_VERSION = 0x10 TCIFLUSH = 0x0 TCIOFF = 0x2 TCIOFLUSH = 0x2 @@ -3335,8 +3784,6 @@ const ( TCP_TX_DELAY = 0x25 TCP_ULP = 0x1f TCP_USER_TIMEOUT = 0x12 - TCP_V4_FLOW = 0x1 - TCP_V6_FLOW = 0x5 TCP_WINDOW_CLAMP = 0xa TCP_ZEROCOPY_RECEIVE = 0x23 TFD_TIMER_ABSTIME = 0x1 @@ -3446,6 +3893,7 @@ const ( TP_STATUS_WRONG_FORMAT = 0x4 TRACEFS_MAGIC = 0x74726163 TS_COMM_LEN = 0x20 + UBI_IOCECNFO = 0xc01c6f06 UDF_SUPER_MAGIC = 0x15013346 UDP_CORK = 0x1 UDP_ENCAP = 0x64 @@ -3458,14 +3906,14 @@ const ( UDP_NO_CHECK6_RX = 0x66 UDP_NO_CHECK6_TX = 0x65 UDP_SEGMENT = 0x67 - UDP_V4_FLOW = 0x2 - UDP_V6_FLOW = 0x6 UMOUNT_NOFOLLOW = 0x8 USBDEVICE_SUPER_MAGIC = 0x9fa2 UTIME_NOW = 0x3fffffff UTIME_OMIT = 0x3ffffffe V9FS_MAGIC = 0x1021997 VERASE = 0x2 + VER_FLG_BASE = 0x1 + VER_FLG_WEAK = 0x2 VINTR = 0x0 VKILL = 0x3 VLNEXT = 0xf @@ -3502,7 +3950,7 @@ const ( WDIOS_TEMPPANIC = 0x4 WDIOS_UNKNOWN = -0x1 WEXITED = 0x4 - WGALLOWEDIP_A_MAX = 0x3 + WGALLOWEDIP_A_MAX = 0x4 WGDEVICE_A_MAX = 0x8 WGPEER_A_MAX = 0xa WG_CMD_MAX = 0x1 @@ -3616,6 +4064,7 @@ const ( XDP_SHARED_UMEM = 0x1 XDP_STATISTICS = 0x7 XDP_TXMD_FLAGS_CHECKSUM = 0x2 + XDP_TXMD_FLAGS_LAUNCH_TIME = 0x4 XDP_TXMD_FLAGS_TIMESTAMP = 0x1 XDP_TX_METADATA = 0x2 XDP_TX_RING = 0x3 @@ -3624,6 +4073,7 @@ const ( XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 XDP_UMEM_PGOFF_FILL_RING = 0x100000000 XDP_UMEM_REG = 0x4 + XDP_UMEM_TX_METADATA_LEN = 0x4 XDP_UMEM_TX_SW_CSUM = 0x2 XDP_UMEM_UNALIGNED_CHUNK_FLAG = 0x1 XDP_USE_NEED_WAKEUP = 0x8 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index 684a5168..97a61fc5 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -109,12 +110,17 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -153,9 +159,14 @@ const ( NFDBITS = 0x20 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -232,6 +243,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_GETFPREGS = 0xe PTRACE_GETFPXREGS = 0x12 PTRACE_GET_THREAD_AREA = 0x19 @@ -278,10 +303,13 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 @@ -316,6 +344,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -332,6 +363,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -344,6 +376,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index 61d74b59..a0d6d498 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -109,12 +110,17 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -153,9 +159,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -232,6 +243,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_ARCH_PRCTL = 0x1e PTRACE_GETFPREGS = 0xe PTRACE_GETFPXREGS = 0x12 @@ -279,10 +304,13 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 @@ -317,6 +345,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -333,6 +364,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -345,6 +377,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index a28c9e3e..dd9c903f 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -108,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -150,9 +156,14 @@ const ( NFDBITS = 0x20 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -229,6 +240,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_GETCRUNCHREGS = 0x19 PTRACE_GETFDPIC = 0x1f PTRACE_GETFDPIC_EXEC = 0x0 @@ -284,10 +309,13 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 @@ -322,6 +350,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -338,6 +369,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -350,6 +382,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index ab5d1fe8..384c61ca 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -109,15 +110,21 @@ const ( F_SETOWN = 0x8 F_UNLCK = 0x2 F_WRLCK = 0x1 + GCS_MAGIC = 0x47435300 HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -154,9 +161,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -200,6 +212,7 @@ const ( PERF_EVENT_IOC_SET_BPF = 0x40042408 PERF_EVENT_IOC_SET_FILTER = 0x40082406 PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + POE_MAGIC = 0x504f4530 PPPIOCATTACH = 0x4004743d PPPIOCATTCHAN = 0x40047438 PPPIOCBRIDGECHAN = 0x40047435 @@ -235,6 +248,20 @@ const ( PROT_BTI = 0x10 PROT_MTE = 0x20 PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_PEEKMTETAGS = 0x21 PTRACE_POKEMTETAGS = 0x22 PTRACE_SYSEMU = 0x1f @@ -275,10 +302,13 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 @@ -313,6 +343,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -329,6 +362,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -341,6 +375,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go index c523090e..6384c983 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -109,12 +110,17 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -154,9 +160,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -233,6 +244,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_SYSEMU = 0x1f PTRACE_SYSEMU_SINGLESTEP = 0x20 RLIMIT_AS = 0x9 @@ -271,10 +296,13 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 @@ -309,6 +337,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -325,6 +356,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -337,6 +369,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index 01e6ea78..553c1c6f 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -108,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x100 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x80 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -150,9 +156,14 @@ const ( NFDBITS = 0x20 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 @@ -229,6 +240,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x20007434 PPPIOCXFERUNIT = 0x2000744e PR_SET_PTRACER_ANY = 0xffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETFPREGS = 0xe PTRACE_GET_THREAD_AREA = 0x19 PTRACE_GET_THREAD_AREA_3264 = 0xc4 @@ -277,10 +302,13 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 @@ -315,6 +343,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x1029 SO_DONTROUTE = 0x10 SO_ERROR = 0x1007 @@ -331,6 +362,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 @@ -343,6 +375,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index 7aa610b1..b3339f20 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -108,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x100 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x80 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -150,9 +156,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 @@ -229,6 +240,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x20007434 PPPIOCXFERUNIT = 0x2000744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETFPREGS = 0xe PTRACE_GET_THREAD_AREA = 0x19 PTRACE_GET_THREAD_AREA_3264 = 0xc4 @@ -277,10 +302,13 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 @@ -315,6 +343,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x1029 SO_DONTROUTE = 0x10 SO_ERROR = 0x1007 @@ -331,6 +362,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 @@ -343,6 +375,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index 92af771b..177091d2 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -108,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x100 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x80 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -150,9 +156,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 @@ -229,6 +240,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x20007434 PPPIOCXFERUNIT = 0x2000744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETFPREGS = 0xe PTRACE_GET_THREAD_AREA = 0x19 PTRACE_GET_THREAD_AREA_3264 = 0xc4 @@ -277,10 +302,13 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 @@ -315,6 +343,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x1029 SO_DONTROUTE = 0x10 SO_ERROR = 0x1007 @@ -331,6 +362,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 @@ -343,6 +375,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index b27ef5e6..c5abf156 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -108,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x100 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x80 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -150,9 +156,14 @@ const ( NFDBITS = 0x20 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 @@ -229,6 +240,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x20007434 PPPIOCXFERUNIT = 0x2000744e PR_SET_PTRACER_ANY = 0xffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETFPREGS = 0xe PTRACE_GET_THREAD_AREA = 0x19 PTRACE_GET_THREAD_AREA_3264 = 0xc4 @@ -277,10 +302,13 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 @@ -315,6 +343,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x1029 SO_DONTROUTE = 0x10 SO_ERROR = 0x1007 @@ -331,6 +362,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 @@ -343,6 +375,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go index 237a2cef..f1f3fadf 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -68,6 +68,7 @@ const ( CS8 = 0x300 CSIZE = 0x300 CSTOPB = 0x400 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x40 @@ -108,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x4000 ICANON = 0x100 IEXTEN = 0x400 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x80 IUCLC = 0x1000 IXOFF = 0x400 @@ -152,9 +158,14 @@ const ( NL3 = 0x300 NLDLY = 0x300 NOFLSH = 0x80000000 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x4 ONLCR = 0x2 @@ -232,6 +243,20 @@ const ( PPPIOCXFERUNIT = 0x2000744e PROT_SAO = 0x10 PR_SET_PTRACER_ANY = 0xffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETEVRREGS = 0x14 PTRACE_GETFPREGS = 0xe PTRACE_GETREGS64 = 0x16 @@ -332,10 +357,13 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 @@ -370,6 +398,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -386,6 +417,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x14 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x15 @@ -398,6 +430,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x10 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index 4a5c555a..203ad9c5 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x300 CSIZE = 0x300 CSTOPB = 0x400 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x40 @@ -108,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x4000 ICANON = 0x100 IEXTEN = 0x400 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x80 IUCLC = 0x1000 IXOFF = 0x400 @@ -152,9 +158,14 @@ const ( NL3 = 0x300 NLDLY = 0x300 NOFLSH = 0x80000000 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x4 ONLCR = 0x2 @@ -232,6 +243,20 @@ const ( PPPIOCXFERUNIT = 0x2000744e PROT_SAO = 0x10 PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETEVRREGS = 0x14 PTRACE_GETFPREGS = 0xe PTRACE_GETREGS64 = 0x16 @@ -336,10 +361,13 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 @@ -374,6 +402,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -390,6 +421,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x14 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x15 @@ -402,6 +434,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x10 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index a02fb49a..4b9abcb2 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -68,6 +68,7 @@ const ( CS8 = 0x300 CSIZE = 0x300 CSTOPB = 0x400 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x40 @@ -108,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x4000 ICANON = 0x100 IEXTEN = 0x400 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x80 IUCLC = 0x1000 IXOFF = 0x400 @@ -152,9 +158,14 @@ const ( NL3 = 0x300 NLDLY = 0x300 NOFLSH = 0x80000000 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x4 ONLCR = 0x2 @@ -232,6 +243,20 @@ const ( PPPIOCXFERUNIT = 0x2000744e PROT_SAO = 0x10 PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETEVRREGS = 0x14 PTRACE_GETFPREGS = 0xe PTRACE_GETREGS64 = 0x16 @@ -336,10 +361,13 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 @@ -374,6 +402,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -390,6 +421,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x14 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x15 @@ -402,6 +434,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x10 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index e26a7c61..f8798303 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -108,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -150,9 +156,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -229,6 +240,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_GETFDPIC = 0x21 PTRACE_GETFDPIC_EXEC = 0x0 PTRACE_GETFDPIC_INTERP = 0x1 @@ -268,10 +293,13 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 @@ -306,6 +334,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -322,6 +353,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -334,6 +366,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index c48f7c21..64347eb3 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -108,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -150,9 +156,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -229,6 +240,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_DISABLE_TE = 0x5010 PTRACE_ENABLE_TE = 0x5009 PTRACE_GET_LAST_BREAK = 0x5006 @@ -340,10 +365,13 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 @@ -378,6 +406,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -394,6 +425,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -406,6 +438,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index ad4b9aac..7d719117 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -71,6 +71,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -112,12 +113,17 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 IN_CLOEXEC = 0x400000 IN_NONBLOCK = 0x4000 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -155,9 +161,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 @@ -234,6 +245,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x20007434 PPPIOCXFERUNIT = 0x2000744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETFPAREGS = 0x14 PTRACE_GETFPREGS = 0xe PTRACE_GETFPREGS64 = 0x19 @@ -331,10 +356,13 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x58 + SCM_DEVMEM_LINEAR = 0x57 SCM_TIMESTAMPING = 0x23 SCM_TIMESTAMPING_OPT_STATS = 0x38 SCM_TIMESTAMPING_PKTINFO = 0x3c SCM_TIMESTAMPNS = 0x21 + SCM_TS_OPT_ID = 0x5a SCM_TXTIME = 0x3f SCM_WIFI_STATUS = 0x25 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 @@ -417,6 +445,9 @@ const ( SO_CNX_ADVICE = 0x37 SO_COOKIE = 0x3b SO_DETACH_REUSEPORT_BPF = 0x47 + SO_DEVMEM_DMABUF = 0x58 + SO_DEVMEM_DONTNEED = 0x59 + SO_DEVMEM_LINEAR = 0x57 SO_DOMAIN = 0x1029 SO_DONTROUTE = 0x10 SO_ERROR = 0x1007 @@ -433,6 +464,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x2 SO_PASSPIDFD = 0x55 + SO_PASSRIGHTS = 0x5c SO_PASSSEC = 0x1f SO_PEEK_OFF = 0x26 SO_PEERCRED = 0x40 @@ -445,6 +477,7 @@ const ( SO_RCVBUFFORCE = 0x100b SO_RCVLOWAT = 0x800 SO_RCVMARK = 0x54 + SO_RCVPRIORITY = 0x5b SO_RCVTIMEO = 0x2000 SO_RCVTIMEO_NEW = 0x44 SO_RCVTIMEO_OLD = 0x2000 diff --git a/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go index da08b2ab..1ec2b140 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go @@ -581,6 +581,8 @@ const ( AT_EMPTY_PATH = 0x1000 AT_REMOVEDIR = 0x200 RENAME_NOREPLACE = 1 << 0 + ST_RDONLY = 1 + ST_NOSUID = 2 ) const ( diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go index b622533e..813c05b6 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -841,6 +841,26 @@ var libc_pthread_fchdir_np_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error) { + var _p0 unsafe.Pointer + if len(iov) > 0 { + _p0 = unsafe.Pointer(&iov[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall9(libc_connectx_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(endpoints)), uintptr(associd), uintptr(flags), uintptr(_p0), uintptr(len(iov)), uintptr(unsafe.Pointer(n)), uintptr(unsafe.Pointer(connid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_connectx_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_connectx connectx "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { _, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) if e1 != 0 { @@ -2492,6 +2512,90 @@ var libc_munmap_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func readv(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_readv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readv readv "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_preadv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_preadv preadv "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writev(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_writev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_writev writev "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pwritev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwritev pwritev "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstat(fd int, stat *Stat_t) (err error) { _, _, e1 := syscall_syscall(libc_fstat64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s index cfe6646b..fda32858 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -248,6 +248,11 @@ TEXT libc_pthread_fchdir_np_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_pthread_fchdir_np_trampoline_addr(SB), RODATA, $8 DATA ·libc_pthread_fchdir_np_trampoline_addr(SB)/8, $libc_pthread_fchdir_np_trampoline<>(SB) +TEXT libc_connectx_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_connectx(SB) +GLOBL ·libc_connectx_trampoline_addr(SB), RODATA, $8 +DATA ·libc_connectx_trampoline_addr(SB)/8, $libc_connectx_trampoline<>(SB) + TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendfile(SB) GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 @@ -733,6 +738,26 @@ TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) +TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readv(SB) +GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB) + +TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_preadv(SB) +GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB) + +TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_writev(SB) +GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB) + +TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwritev(SB) +GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB) + TEXT libc_fstat64_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fstat64(SB) GLOBL ·libc_fstat64_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index 13f624f6..e6f58f3c 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -841,6 +841,26 @@ var libc_pthread_fchdir_np_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error) { + var _p0 unsafe.Pointer + if len(iov) > 0 { + _p0 = unsafe.Pointer(&iov[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall9(libc_connectx_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(endpoints)), uintptr(associd), uintptr(flags), uintptr(_p0), uintptr(len(iov)), uintptr(unsafe.Pointer(n)), uintptr(unsafe.Pointer(connid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_connectx_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_connectx connectx "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { _, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) if e1 != 0 { @@ -2492,6 +2512,90 @@ var libc_munmap_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func readv(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_readv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readv readv "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_preadv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_preadv preadv "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writev(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_writev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_writev writev "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pwritev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwritev pwritev "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstat(fd int, stat *Stat_t) (err error) { _, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s index fe222b75..7f8998b9 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -248,6 +248,11 @@ TEXT libc_pthread_fchdir_np_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_pthread_fchdir_np_trampoline_addr(SB), RODATA, $8 DATA ·libc_pthread_fchdir_np_trampoline_addr(SB)/8, $libc_pthread_fchdir_np_trampoline<>(SB) +TEXT libc_connectx_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_connectx(SB) +GLOBL ·libc_connectx_trampoline_addr(SB), RODATA, $8 +DATA ·libc_connectx_trampoline_addr(SB)/8, $libc_connectx_trampoline<>(SB) + TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendfile(SB) GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 @@ -733,6 +738,26 @@ TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) +TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readv(SB) +GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB) + +TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_preadv(SB) +GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB) + +TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_writev(SB) +GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB) + +TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwritev(SB) +GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB) + TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fstat(SB) GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 1bc1a5ad..8935d10a 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -592,6 +592,16 @@ func ClockGettime(clockid int32, time *Timespec) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func ClockSettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_SETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) { _, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0) if e1 != 0 { @@ -971,23 +981,6 @@ func Getpriority(which int, who int) (prio int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Getrandom(buf []byte, flags int) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Getrusage(who int, rusage *Rusage) (err error) { _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { @@ -2245,3 +2238,13 @@ func Mseal(b []byte, flags uint) (err error) { } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setMemPolicy(mode int, mask *CPUSet, size int) (err error) { + _, _, e1 := Syscall(SYS_SET_MEMPOLICY, uintptr(mode), uintptr(unsafe.Pointer(mask)), uintptr(size)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go index 829b87fe..b4609c20 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go @@ -72,7 +72,7 @@ import ( //go:cgo_import_dynamic libc_kill kill "libc.so" //go:cgo_import_dynamic libc_lchown lchown "libc.so" //go:cgo_import_dynamic libc_link link "libc.so" -//go:cgo_import_dynamic libc___xnet_llisten __xnet_llisten "libsocket.so" +//go:cgo_import_dynamic libc___xnet_listen __xnet_listen "libsocket.so" //go:cgo_import_dynamic libc_lstat lstat "libc.so" //go:cgo_import_dynamic libc_madvise madvise "libc.so" //go:cgo_import_dynamic libc_mkdir mkdir "libc.so" @@ -141,6 +141,16 @@ import ( //go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so" //go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" //go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so" +//go:cgo_import_dynamic libc_getpeerucred getpeerucred "libc.so" +//go:cgo_import_dynamic libc_ucred_get ucred_get "libc.so" +//go:cgo_import_dynamic libc_ucred_geteuid ucred_geteuid "libc.so" +//go:cgo_import_dynamic libc_ucred_getegid ucred_getegid "libc.so" +//go:cgo_import_dynamic libc_ucred_getruid ucred_getruid "libc.so" +//go:cgo_import_dynamic libc_ucred_getrgid ucred_getrgid "libc.so" +//go:cgo_import_dynamic libc_ucred_getsuid ucred_getsuid "libc.so" +//go:cgo_import_dynamic libc_ucred_getsgid ucred_getsgid "libc.so" +//go:cgo_import_dynamic libc_ucred_getpid ucred_getpid "libc.so" +//go:cgo_import_dynamic libc_ucred_free ucred_free "libc.so" //go:cgo_import_dynamic libc_port_create port_create "libc.so" //go:cgo_import_dynamic libc_port_associate port_associate "libc.so" //go:cgo_import_dynamic libc_port_dissociate port_dissociate "libc.so" @@ -211,7 +221,7 @@ import ( //go:linkname procKill libc_kill //go:linkname procLchown libc_lchown //go:linkname procLink libc_link -//go:linkname proc__xnet_llisten libc___xnet_llisten +//go:linkname proc__xnet_listen libc___xnet_listen //go:linkname procLstat libc_lstat //go:linkname procMadvise libc_madvise //go:linkname procMkdir libc_mkdir @@ -280,6 +290,16 @@ import ( //go:linkname procgetpeername libc_getpeername //go:linkname procsetsockopt libc_setsockopt //go:linkname procrecvfrom libc_recvfrom +//go:linkname procgetpeerucred libc_getpeerucred +//go:linkname procucred_get libc_ucred_get +//go:linkname procucred_geteuid libc_ucred_geteuid +//go:linkname procucred_getegid libc_ucred_getegid +//go:linkname procucred_getruid libc_ucred_getruid +//go:linkname procucred_getrgid libc_ucred_getrgid +//go:linkname procucred_getsuid libc_ucred_getsuid +//go:linkname procucred_getsgid libc_ucred_getsgid +//go:linkname procucred_getpid libc_ucred_getpid +//go:linkname procucred_free libc_ucred_free //go:linkname procport_create libc_port_create //go:linkname procport_associate libc_port_associate //go:linkname procport_dissociate libc_port_dissociate @@ -351,7 +371,7 @@ var ( procKill, procLchown, procLink, - proc__xnet_llisten, + proc__xnet_listen, procLstat, procMadvise, procMkdir, @@ -420,6 +440,16 @@ var ( procgetpeername, procsetsockopt, procrecvfrom, + procgetpeerucred, + procucred_get, + procucred_geteuid, + procucred_getegid, + procucred_getruid, + procucred_getrgid, + procucred_getsuid, + procucred_getsgid, + procucred_getpid, + procucred_free, procport_create, procport_associate, procport_dissociate, @@ -1148,7 +1178,7 @@ func Link(path string, link string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Listen(s int, backlog int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_llisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0) + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_listen)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0) if e1 != 0 { err = errnoErr(e1) } @@ -2029,6 +2059,90 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func getpeerucred(fd uintptr, ucred *uintptr) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetpeerucred)), 2, uintptr(fd), uintptr(unsafe.Pointer(ucred)), 0, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGet(pid int) (ucred uintptr, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procucred_get)), 1, uintptr(pid), 0, 0, 0, 0, 0) + ucred = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGeteuid(ucred uintptr) (uid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_geteuid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetegid(ucred uintptr) (gid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getegid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetruid(ucred uintptr) (uid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getruid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetrgid(ucred uintptr) (gid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getrgid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetsuid(ucred uintptr) (uid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getsuid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetsgid(ucred uintptr) (gid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getsgid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetpid(ucred uintptr) (pid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getpid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredFree(ucred uintptr) { + sysvicall6(uintptr(unsafe.Pointer(&procucred_free)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func port_create() (n int, err error) { r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0) n = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go index 524b0820..aca56ee4 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -458,4 +458,9 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go index d3e38f68..2ea1ef58 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -341,6 +341,7 @@ const ( SYS_STATX = 332 SYS_IO_PGETEVENTS = 333 SYS_RSEQ = 334 + SYS_URETPROBE = 335 SYS_PIDFD_SEND_SIGNAL = 424 SYS_IO_URING_SETUP = 425 SYS_IO_URING_ENTER = 426 @@ -380,4 +381,9 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go index 70b35bf3..d22c8af3 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -422,4 +422,9 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go index 6c778c23..5ee264ae 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -85,7 +85,7 @@ const ( SYS_SPLICE = 76 SYS_TEE = 77 SYS_READLINKAT = 78 - SYS_FSTATAT = 79 + SYS_NEWFSTATAT = 79 SYS_FSTAT = 80 SYS_SYNC = 81 SYS_FSYNC = 82 @@ -325,4 +325,9 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go index 37281cf5..f9f03ebf 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go @@ -84,6 +84,8 @@ const ( SYS_SPLICE = 76 SYS_TEE = 77 SYS_READLINKAT = 78 + SYS_NEWFSTATAT = 79 + SYS_FSTAT = 80 SYS_SYNC = 81 SYS_FSYNC = 82 SYS_FDATASYNC = 83 @@ -319,4 +321,9 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go index 7e567f1e..87c2118e 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -442,4 +442,9 @@ const ( SYS_LSM_SET_SELF_ATTR = 4460 SYS_LSM_LIST_MODULES = 4461 SYS_MSEAL = 4462 + SYS_SETXATTRAT = 4463 + SYS_GETXATTRAT = 4464 + SYS_LISTXATTRAT = 4465 + SYS_REMOVEXATTRAT = 4466 + SYS_OPEN_TREE_ATTR = 4467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go index 38ae55e5..391ad102 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -372,4 +372,9 @@ const ( SYS_LSM_SET_SELF_ATTR = 5460 SYS_LSM_LIST_MODULES = 5461 SYS_MSEAL = 5462 + SYS_SETXATTRAT = 5463 + SYS_GETXATTRAT = 5464 + SYS_LISTXATTRAT = 5465 + SYS_REMOVEXATTRAT = 5466 + SYS_OPEN_TREE_ATTR = 5467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go index 55e92e60..56561577 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -372,4 +372,9 @@ const ( SYS_LSM_SET_SELF_ATTR = 5460 SYS_LSM_LIST_MODULES = 5461 SYS_MSEAL = 5462 + SYS_SETXATTRAT = 5463 + SYS_GETXATTRAT = 5464 + SYS_LISTXATTRAT = 5465 + SYS_REMOVEXATTRAT = 5466 + SYS_OPEN_TREE_ATTR = 5467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go index 60658d6a..0482b52e 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -442,4 +442,9 @@ const ( SYS_LSM_SET_SELF_ATTR = 4460 SYS_LSM_LIST_MODULES = 4461 SYS_MSEAL = 4462 + SYS_SETXATTRAT = 4463 + SYS_GETXATTRAT = 4464 + SYS_LISTXATTRAT = 4465 + SYS_REMOVEXATTRAT = 4466 + SYS_OPEN_TREE_ATTR = 4467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go index e203e8a7..71806f08 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go @@ -449,4 +449,9 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go index 5944b97d..e35a7105 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -421,4 +421,9 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go index c66d416d..2aea4767 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -421,4 +421,9 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index 9889f6a5..6c9bb4e5 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -84,7 +84,7 @@ const ( SYS_SPLICE = 76 SYS_TEE = 77 SYS_READLINKAT = 78 - SYS_FSTATAT = 79 + SYS_NEWFSTATAT = 79 SYS_FSTAT = 80 SYS_SYNC = 81 SYS_FSYNC = 82 @@ -326,4 +326,9 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go index 01d86825..680bc991 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -387,4 +387,9 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go index 7b703e77..620f2710 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -400,4 +400,9 @@ const ( SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go index 091d107f..17c53bd9 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go @@ -306,6 +306,19 @@ type XVSockPgen struct { type _Socklen uint32 +type SaeAssocID uint32 + +type SaeConnID uint32 + +type SaEndpoints struct { + Srcif uint32 + Srcaddr *RawSockaddr + Srcaddrlen uint32 + Dstaddr *RawSockaddr + Dstaddrlen uint32 + _ [4]byte +} + type Xucred struct { Version uint32 Uid uint32 @@ -449,11 +462,14 @@ type FdSet struct { const ( SizeofIfMsghdr = 0x70 + SizeofIfMsghdr2 = 0xa0 SizeofIfData = 0x60 + SizeofIfData64 = 0x80 SizeofIfaMsghdr = 0x14 SizeofIfmaMsghdr = 0x10 SizeofIfmaMsghdr2 = 0x14 SizeofRtMsghdr = 0x5c + SizeofRtMsghdr2 = 0x5c SizeofRtMetrics = 0x38 ) @@ -467,6 +483,20 @@ type IfMsghdr struct { Data IfData } +type IfMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Snd_len int32 + Snd_maxlen int32 + Snd_drops int32 + Timer int32 + Data IfData64 +} + type IfData struct { Type uint8 Typelen uint8 @@ -499,6 +529,34 @@ type IfData struct { Reserved2 uint32 } +type IfData64 struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval32 +} + type IfaMsghdr struct { Msglen uint16 Version uint8 @@ -544,6 +602,21 @@ type RtMsghdr struct { Rmx RtMetrics } +type RtMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Flags int32 + Addrs int32 + Refcnt int32 + Parentflags int32 + Reserved int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + type RtMetrics struct { Locks uint32 Mtu uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go index 28ff4ef7..2392226a 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go @@ -306,6 +306,19 @@ type XVSockPgen struct { type _Socklen uint32 +type SaeAssocID uint32 + +type SaeConnID uint32 + +type SaEndpoints struct { + Srcif uint32 + Srcaddr *RawSockaddr + Srcaddrlen uint32 + Dstaddr *RawSockaddr + Dstaddrlen uint32 + _ [4]byte +} + type Xucred struct { Version uint32 Uid uint32 @@ -449,11 +462,14 @@ type FdSet struct { const ( SizeofIfMsghdr = 0x70 + SizeofIfMsghdr2 = 0xa0 SizeofIfData = 0x60 + SizeofIfData64 = 0x80 SizeofIfaMsghdr = 0x14 SizeofIfmaMsghdr = 0x10 SizeofIfmaMsghdr2 = 0x14 SizeofRtMsghdr = 0x5c + SizeofRtMsghdr2 = 0x5c SizeofRtMetrics = 0x38 ) @@ -467,6 +483,20 @@ type IfMsghdr struct { Data IfData } +type IfMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Snd_len int32 + Snd_maxlen int32 + Snd_drops int32 + Timer int32 + Data IfData64 +} + type IfData struct { Type uint8 Typelen uint8 @@ -499,6 +529,34 @@ type IfData struct { Reserved2 uint32 } +type IfData64 struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval32 +} + type IfaMsghdr struct { Msglen uint16 Version uint8 @@ -544,6 +602,21 @@ type RtMsghdr struct { Rmx RtMetrics } +type RtMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Flags int32 + Addrs int32 + Refcnt int32 + Parentflags int32 + Reserved int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + type RtMetrics struct { Locks uint32 Mtu uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go index 6cbd094a..51e13eb0 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go @@ -625,6 +625,7 @@ const ( POLLRDNORM = 0x40 POLLWRBAND = 0x100 POLLWRNORM = 0x4 + POLLRDHUP = 0x4000 ) type CapRights struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go index 7c03b6ee..d002d8ef 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go @@ -630,6 +630,7 @@ const ( POLLRDNORM = 0x40 POLLWRBAND = 0x100 POLLWRNORM = 0x4 + POLLRDHUP = 0x4000 ) type CapRights struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go index 422107ee..3f863d89 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go @@ -616,6 +616,7 @@ const ( POLLRDNORM = 0x40 POLLWRBAND = 0x100 POLLWRNORM = 0x4 + POLLRDHUP = 0x4000 ) type CapRights struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go index 505a12ac..61c72931 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go @@ -610,6 +610,7 @@ const ( POLLRDNORM = 0x40 POLLWRBAND = 0x100 POLLWRNORM = 0x4 + POLLRDHUP = 0x4000 ) type CapRights struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go index cc986c79..b5d17414 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go @@ -612,6 +612,7 @@ const ( POLLRDNORM = 0x40 POLLWRBAND = 0x100 POLLWRNORM = 0x4 + POLLRDHUP = 0x4000 ) type CapRights struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index 7f1961b9..c1a46701 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -87,31 +87,37 @@ type StatxTimestamp struct { } type Statx_t struct { - Mask uint32 - Blksize uint32 - Attributes uint64 - Nlink uint32 - Uid uint32 - Gid uint32 - Mode uint16 - _ [1]uint16 - Ino uint64 - Size uint64 - Blocks uint64 - Attributes_mask uint64 - Atime StatxTimestamp - Btime StatxTimestamp - Ctime StatxTimestamp - Mtime StatxTimestamp - Rdev_major uint32 - Rdev_minor uint32 - Dev_major uint32 - Dev_minor uint32 - Mnt_id uint64 - Dio_mem_align uint32 - Dio_offset_align uint32 - Subvol uint64 - _ [11]uint64 + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + Mnt_id uint64 + Dio_mem_align uint32 + Dio_offset_align uint32 + Subvol uint64 + Atomic_write_unit_min uint32 + Atomic_write_unit_max uint32 + Atomic_write_segments_max uint32 + Dio_read_offset_align uint32 + Atomic_write_unit_max_opt uint32 + _ [1]uint32 + _ [8]uint64 } type Fsid struct { @@ -195,7 +201,8 @@ type FscryptAddKeyArg struct { Key_spec FscryptKeySpecifier Raw_size uint32 Key_id uint32 - _ [8]uint32 + Flags uint32 + _ [7]uint32 } type FscryptRemoveKeyArg struct { @@ -516,6 +523,29 @@ type TCPInfo struct { Total_rto_time uint32 } +type TCPVegasInfo struct { + Enabled uint32 + Rttcnt uint32 + Rtt uint32 + Minrtt uint32 +} + +type TCPDCTCPInfo struct { + Enabled uint16 + Ce_state uint16 + Alpha uint32 + Ab_ecn uint32 + Ab_tot uint32 +} + +type TCPBBRInfo struct { + Bw_lo uint32 + Bw_hi uint32 + Min_rtt uint32 + Pacing_gain uint32 + Cwnd_gain uint32 +} + type CanFilter struct { Id uint32 Mask uint32 @@ -557,6 +587,7 @@ const ( SizeofICMPv6Filter = 0x20 SizeofUcred = 0xc SizeofTCPInfo = 0xf8 + SizeofTCPCCInfo = 0x14 SizeofCanFilter = 0x8 SizeofTCPRepairOpt = 0x8 ) @@ -601,6 +632,8 @@ const ( IFA_FLAGS = 0x8 IFA_RT_PRIORITY = 0x9 IFA_TARGET_NETNSID = 0xa + IFAL_LABEL = 0x2 + IFAL_ADDRESS = 0x1 RT_SCOPE_UNIVERSE = 0x0 RT_SCOPE_SITE = 0xc8 RT_SCOPE_LINK = 0xfd @@ -658,6 +691,7 @@ const ( SizeofRtAttr = 0x4 SizeofIfInfomsg = 0x10 SizeofIfAddrmsg = 0x8 + SizeofIfAddrlblmsg = 0xc SizeofIfaCacheinfo = 0x10 SizeofRtMsg = 0xc SizeofRtNexthop = 0x8 @@ -709,6 +743,15 @@ type IfAddrmsg struct { Index uint32 } +type IfAddrlblmsg struct { + Family uint8 + _ uint8 + Prefixlen uint8 + Flags uint8 + Index uint32 + Seq uint32 +} + type IfaCacheinfo struct { Prefered uint32 Valid uint32 @@ -1724,12 +1767,6 @@ const ( IFLA_IPVLAN_UNSPEC = 0x0 IFLA_IPVLAN_MODE = 0x1 IFLA_IPVLAN_FLAGS = 0x2 - NETKIT_NEXT = -0x1 - NETKIT_PASS = 0x0 - NETKIT_DROP = 0x2 - NETKIT_REDIRECT = 0x7 - NETKIT_L2 = 0x0 - NETKIT_L3 = 0x1 IFLA_NETKIT_UNSPEC = 0x0 IFLA_NETKIT_PEER_INFO = 0x1 IFLA_NETKIT_PRIMARY = 0x2 @@ -1768,6 +1805,7 @@ const ( IFLA_VXLAN_DF = 0x1d IFLA_VXLAN_VNIFILTER = 0x1e IFLA_VXLAN_LOCALBYPASS = 0x1f + IFLA_VXLAN_LABEL_POLICY = 0x20 IFLA_GENEVE_UNSPEC = 0x0 IFLA_GENEVE_ID = 0x1 IFLA_GENEVE_REMOTE = 0x2 @@ -1797,6 +1835,8 @@ const ( IFLA_GTP_ROLE = 0x4 IFLA_GTP_CREATE_SOCKETS = 0x5 IFLA_GTP_RESTART_COUNT = 0x6 + IFLA_GTP_LOCAL = 0x7 + IFLA_GTP_LOCAL6 = 0x8 IFLA_BOND_UNSPEC = 0x0 IFLA_BOND_MODE = 0x1 IFLA_BOND_ACTIVE_SLAVE = 0x2 @@ -1829,6 +1869,7 @@ const ( IFLA_BOND_AD_LACP_ACTIVE = 0x1d IFLA_BOND_MISSED_MAX = 0x1e IFLA_BOND_NS_IP6_TARGET = 0x1f + IFLA_BOND_COUPLED_CONTROL = 0x20 IFLA_BOND_AD_INFO_UNSPEC = 0x0 IFLA_BOND_AD_INFO_AGGREGATOR = 0x1 IFLA_BOND_AD_INFO_NUM_PORTS = 0x2 @@ -1897,6 +1938,7 @@ const ( IFLA_HSR_SEQ_NR = 0x5 IFLA_HSR_VERSION = 0x6 IFLA_HSR_PROTOCOL = 0x7 + IFLA_HSR_INTERLINK = 0x8 IFLA_STATS_UNSPEC = 0x0 IFLA_STATS_LINK_64 = 0x1 IFLA_STATS_LINK_XSTATS = 0x2 @@ -1949,6 +1991,15 @@ const ( IFLA_DSA_MASTER = 0x1 ) +const ( + NETKIT_NEXT = -0x1 + NETKIT_PASS = 0x0 + NETKIT_DROP = 0x2 + NETKIT_REDIRECT = 0x7 + NETKIT_L2 = 0x0 + NETKIT_L3 = 0x1 +) + const ( NF_INET_PRE_ROUTING = 0x0 NF_INET_LOCAL_IN = 0x1 @@ -2190,8 +2241,11 @@ const ( NFT_PAYLOAD_LL_HEADER = 0x0 NFT_PAYLOAD_NETWORK_HEADER = 0x1 NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 + NFT_PAYLOAD_INNER_HEADER = 0x3 + NFT_PAYLOAD_TUN_HEADER = 0x4 NFT_PAYLOAD_CSUM_NONE = 0x0 NFT_PAYLOAD_CSUM_INET = 0x1 + NFT_PAYLOAD_CSUM_SCTP = 0x2 NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 NFTA_PAYLOAD_UNSPEC = 0x0 NFTA_PAYLOAD_DREG = 0x1 @@ -2278,6 +2332,11 @@ const ( NFT_CT_AVGPKT = 0x10 NFT_CT_ZONE = 0x11 NFT_CT_EVENTMASK = 0x12 + NFT_CT_SRC_IP = 0x13 + NFT_CT_DST_IP = 0x14 + NFT_CT_SRC_IP6 = 0x15 + NFT_CT_DST_IP6 = 0x16 + NFT_CT_ID = 0x17 NFTA_CT_UNSPEC = 0x0 NFTA_CT_DREG = 0x1 NFTA_CT_KEY = 0x2 @@ -2486,7 +2545,7 @@ type XDPMmapOffsets struct { type XDPUmemReg struct { Addr uint64 Len uint64 - Chunk_size uint32 + Size uint32 Headroom uint32 Flags uint32 Tx_metadata_len uint32 @@ -2558,8 +2617,8 @@ const ( SOF_TIMESTAMPING_BIND_PHC = 0x8000 SOF_TIMESTAMPING_OPT_ID_TCP = 0x10000 - SOF_TIMESTAMPING_LAST = 0x10000 - SOF_TIMESTAMPING_MASK = 0x1ffff + SOF_TIMESTAMPING_LAST = 0x40000 + SOF_TIMESTAMPING_MASK = 0x7ffff SCM_TSTAMP_SND = 0x0 SCM_TSTAMP_SCHED = 0x1 @@ -3005,6 +3064,23 @@ const ( ) const ( + TCA_UNSPEC = 0x0 + TCA_KIND = 0x1 + TCA_OPTIONS = 0x2 + TCA_STATS = 0x3 + TCA_XSTATS = 0x4 + TCA_RATE = 0x5 + TCA_FCNT = 0x6 + TCA_STATS2 = 0x7 + TCA_STAB = 0x8 + TCA_PAD = 0x9 + TCA_DUMP_INVISIBLE = 0xa + TCA_CHAIN = 0xb + TCA_HW_OFFLOAD = 0xc + TCA_INGRESS_BLOCK = 0xd + TCA_EGRESS_BLOCK = 0xe + TCA_DUMP_FLAGS = 0xf + TCA_EXT_WARN_MSG = 0x10 RTNLGRP_NONE = 0x0 RTNLGRP_LINK = 0x1 RTNLGRP_NOTIFY = 0x2 @@ -3039,6 +3115,18 @@ const ( RTNLGRP_IPV6_MROUTE_R = 0x1f RTNLGRP_NEXTHOP = 0x20 RTNLGRP_BRVLAN = 0x21 + RTNLGRP_MCTP_IFADDR = 0x22 + RTNLGRP_TUNNEL = 0x23 + RTNLGRP_STATS = 0x24 + RTNLGRP_IPV4_MCADDR = 0x25 + RTNLGRP_IPV6_MCADDR = 0x26 + RTNLGRP_IPV6_ACADDR = 0x27 + TCA_ROOT_UNSPEC = 0x0 + TCA_ROOT_TAB = 0x1 + TCA_ROOT_FLAGS = 0x2 + TCA_ROOT_COUNT = 0x3 + TCA_ROOT_TIME_DELTA = 0x4 + TCA_ROOT_EXT_WARN_MSG = 0x5 ) type CapUserHeader struct { @@ -3502,13 +3590,17 @@ type Nhmsg struct { Flags uint32 } +const SizeofNhmsg = 0x8 + type NexthopGrp struct { Id uint32 Weight uint8 - Resvd1 uint8 + High uint8 Resvd2 uint16 } +const SizeofNexthopGrp = 0x8 + const ( NHA_UNSPEC = 0x0 NHA_ID = 0x1 @@ -3766,7 +3858,16 @@ const ( ETHTOOL_MSG_PSE_GET = 0x24 ETHTOOL_MSG_PSE_SET = 0x25 ETHTOOL_MSG_RSS_GET = 0x26 - ETHTOOL_MSG_USER_MAX = 0x2b + ETHTOOL_MSG_PLCA_GET_CFG = 0x27 + ETHTOOL_MSG_PLCA_SET_CFG = 0x28 + ETHTOOL_MSG_PLCA_GET_STATUS = 0x29 + ETHTOOL_MSG_MM_GET = 0x2a + ETHTOOL_MSG_MM_SET = 0x2b + ETHTOOL_MSG_MODULE_FW_FLASH_ACT = 0x2c + ETHTOOL_MSG_PHY_GET = 0x2d + ETHTOOL_MSG_TSCONFIG_GET = 0x2e + ETHTOOL_MSG_TSCONFIG_SET = 0x2f + ETHTOOL_MSG_USER_MAX = 0x2f ETHTOOL_MSG_KERNEL_NONE = 0x0 ETHTOOL_MSG_STRSET_GET_REPLY = 0x1 ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2 @@ -3806,7 +3907,17 @@ const ( ETHTOOL_MSG_MODULE_NTF = 0x24 ETHTOOL_MSG_PSE_GET_REPLY = 0x25 ETHTOOL_MSG_RSS_GET_REPLY = 0x26 - ETHTOOL_MSG_KERNEL_MAX = 0x2b + ETHTOOL_MSG_PLCA_GET_CFG_REPLY = 0x27 + ETHTOOL_MSG_PLCA_GET_STATUS_REPLY = 0x28 + ETHTOOL_MSG_PLCA_NTF = 0x29 + ETHTOOL_MSG_MM_GET_REPLY = 0x2a + ETHTOOL_MSG_MM_NTF = 0x2b + ETHTOOL_MSG_MODULE_FW_FLASH_NTF = 0x2c + ETHTOOL_MSG_PHY_GET_REPLY = 0x2d + ETHTOOL_MSG_PHY_NTF = 0x2e + ETHTOOL_MSG_TSCONFIG_GET_REPLY = 0x2f + ETHTOOL_MSG_TSCONFIG_SET_REPLY = 0x30 + ETHTOOL_MSG_KERNEL_MAX = 0x30 ETHTOOL_FLAG_COMPACT_BITSETS = 0x1 ETHTOOL_FLAG_OMIT_REPLY = 0x2 ETHTOOL_FLAG_STATS = 0x4 @@ -3814,7 +3925,7 @@ const ( ETHTOOL_A_HEADER_DEV_INDEX = 0x1 ETHTOOL_A_HEADER_DEV_NAME = 0x2 ETHTOOL_A_HEADER_FLAGS = 0x3 - ETHTOOL_A_HEADER_MAX = 0x3 + ETHTOOL_A_HEADER_MAX = 0x4 ETHTOOL_A_BITSET_BIT_UNSPEC = 0x0 ETHTOOL_A_BITSET_BIT_INDEX = 0x1 ETHTOOL_A_BITSET_BIT_NAME = 0x2 @@ -3913,7 +4024,12 @@ const ( ETHTOOL_A_RINGS_TCP_DATA_SPLIT = 0xb ETHTOOL_A_RINGS_CQE_SIZE = 0xc ETHTOOL_A_RINGS_TX_PUSH = 0xd - ETHTOOL_A_RINGS_MAX = 0x10 + ETHTOOL_A_RINGS_RX_PUSH = 0xe + ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN = 0xf + ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN_MAX = 0x10 + ETHTOOL_A_RINGS_HDS_THRESH = 0x11 + ETHTOOL_A_RINGS_HDS_THRESH_MAX = 0x12 + ETHTOOL_A_RINGS_MAX = 0x12 ETHTOOL_A_CHANNELS_UNSPEC = 0x0 ETHTOOL_A_CHANNELS_HEADER = 0x1 ETHTOOL_A_CHANNELS_RX_MAX = 0x2 @@ -3951,7 +4067,7 @@ const ( ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 0x17 ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 0x18 ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 0x19 - ETHTOOL_A_COALESCE_MAX = 0x1c + ETHTOOL_A_COALESCE_MAX = 0x1e ETHTOOL_A_PAUSE_UNSPEC = 0x0 ETHTOOL_A_PAUSE_HEADER = 0x1 ETHTOOL_A_PAUSE_AUTONEG = 0x2 @@ -3979,7 +4095,9 @@ const ( ETHTOOL_A_TSINFO_TX_TYPES = 0x3 ETHTOOL_A_TSINFO_RX_FILTERS = 0x4 ETHTOOL_A_TSINFO_PHC_INDEX = 0x5 - ETHTOOL_A_TSINFO_MAX = 0x6 + ETHTOOL_A_TSINFO_STATS = 0x6 + ETHTOOL_A_TSINFO_HWTSTAMP_PROVIDER = 0x7 + ETHTOOL_A_TSINFO_MAX = 0x9 ETHTOOL_A_CABLE_TEST_UNSPEC = 0x0 ETHTOOL_A_CABLE_TEST_HEADER = 0x1 ETHTOOL_A_CABLE_TEST_MAX = 0x1 @@ -3995,11 +4113,11 @@ const ( ETHTOOL_A_CABLE_RESULT_UNSPEC = 0x0 ETHTOOL_A_CABLE_RESULT_PAIR = 0x1 ETHTOOL_A_CABLE_RESULT_CODE = 0x2 - ETHTOOL_A_CABLE_RESULT_MAX = 0x2 + ETHTOOL_A_CABLE_RESULT_MAX = 0x3 ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = 0x0 ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = 0x1 ETHTOOL_A_CABLE_FAULT_LENGTH_CM = 0x2 - ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 0x2 + ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 0x3 ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = 0x0 ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = 0x1 ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 0x2 @@ -4065,6 +4183,19 @@ const ( ETHTOOL_A_TUNNEL_INFO_MAX = 0x2 ) +const ( + TCP_V4_FLOW = 0x1 + UDP_V4_FLOW = 0x2 + TCP_V6_FLOW = 0x5 + UDP_V6_FLOW = 0x6 + ESP_V4_FLOW = 0xa + ESP_V6_FLOW = 0xc + IP_USER_FLOW = 0xd + IPV6_USER_FLOW = 0xe + IPV6_FLOW = 0x11 + ETHER_FLOW = 0x12 +) + const SPEED_UNKNOWN = -0x1 type EthtoolDrvinfo struct { @@ -4082,6 +4213,107 @@ type EthtoolDrvinfo struct { Regdump_len uint32 } +type EthtoolTsInfo struct { + Cmd uint32 + So_timestamping uint32 + Phc_index int32 + Tx_types uint32 + Tx_reserved [3]uint32 + Rx_filters uint32 + Rx_reserved [3]uint32 +} + +type HwTstampConfig struct { + Flags int32 + Tx_type int32 + Rx_filter int32 +} + +const ( + HWTSTAMP_FILTER_NONE = 0x0 + HWTSTAMP_FILTER_ALL = 0x1 + HWTSTAMP_FILTER_SOME = 0x2 + HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 0x3 + HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 0x6 + HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 0x9 + HWTSTAMP_FILTER_PTP_V2_EVENT = 0xc +) + +const ( + HWTSTAMP_TX_OFF = 0x0 + HWTSTAMP_TX_ON = 0x1 + HWTSTAMP_TX_ONESTEP_SYNC = 0x2 +) + +type ( + PtpClockCaps struct { + Max_adj int32 + N_alarm int32 + N_ext_ts int32 + N_per_out int32 + Pps int32 + N_pins int32 + Cross_timestamping int32 + Adjust_phase int32 + Max_phase_adj int32 + Rsv [11]int32 + } + PtpClockTime struct { + Sec int64 + Nsec uint32 + Reserved uint32 + } + PtpExttsEvent struct { + T PtpClockTime + Index uint32 + Flags uint32 + Rsv [2]uint32 + } + PtpExttsRequest struct { + Index uint32 + Flags uint32 + Rsv [2]uint32 + } + PtpPeroutRequest struct { + StartOrPhase PtpClockTime + Period PtpClockTime + Index uint32 + Flags uint32 + On PtpClockTime + } + PtpPinDesc struct { + Name [64]byte + Index uint32 + Func uint32 + Chan uint32 + Rsv [5]uint32 + } + PtpSysOffset struct { + Samples uint32 + Rsv [3]uint32 + Ts [51]PtpClockTime + } + PtpSysOffsetExtended struct { + Samples uint32 + Clockid int32 + Rsv [2]uint32 + Ts [25][3]PtpClockTime + } + PtpSysOffsetPrecise struct { + Device PtpClockTime + Realtime PtpClockTime + Monoraw PtpClockTime + Rsv [4]uint32 + } +) + +const ( + PTP_PF_NONE = 0x0 + PTP_PF_EXTTS = 0x1 + PTP_PF_PEROUT = 0x2 + PTP_PF_PHYSYNC = 0x3 +) + type ( HIDRawReportDescriptor struct { Size uint32 @@ -4263,6 +4495,7 @@ const ( type LandlockRulesetAttr struct { Access_fs uint64 Access_net uint64 + Scoped uint64 } type LandlockPathBeneathAttr struct { @@ -4475,6 +4708,7 @@ const ( NL80211_ATTR_AKM_SUITES = 0x4c NL80211_ATTR_AP_ISOLATE = 0x60 NL80211_ATTR_AP_SETTINGS_FLAGS = 0x135 + NL80211_ATTR_ASSOC_SPP_AMSDU = 0x14a NL80211_ATTR_AUTH_DATA = 0x9c NL80211_ATTR_AUTH_TYPE = 0x35 NL80211_ATTR_BANDS = 0xef @@ -4485,6 +4719,7 @@ const ( NL80211_ATTR_BSS_BASIC_RATES = 0x24 NL80211_ATTR_BSS = 0x2f NL80211_ATTR_BSS_CTS_PROT = 0x1c + NL80211_ATTR_BSS_DUMP_INCLUDE_USE_DATA = 0x147 NL80211_ATTR_BSS_HT_OPMODE = 0x6d NL80211_ATTR_BSSID = 0xf5 NL80211_ATTR_BSS_SELECT = 0xe3 @@ -4544,6 +4779,7 @@ const ( NL80211_ATTR_DTIM_PERIOD = 0xd NL80211_ATTR_DURATION = 0x57 NL80211_ATTR_EHT_CAPABILITY = 0x136 + NL80211_ATTR_EMA_RNR_ELEMS = 0x145 NL80211_ATTR_EML_CAPABILITY = 0x13d NL80211_ATTR_EXT_CAPA = 0xa9 NL80211_ATTR_EXT_CAPA_MASK = 0xaa @@ -4579,6 +4815,7 @@ const ( NL80211_ATTR_HIDDEN_SSID = 0x7e NL80211_ATTR_HT_CAPABILITY = 0x1f NL80211_ATTR_HT_CAPABILITY_MASK = 0x94 + NL80211_ATTR_HW_TIMESTAMP_ENABLED = 0x144 NL80211_ATTR_IE_ASSOC_RESP = 0x80 NL80211_ATTR_IE = 0x2a NL80211_ATTR_IE_PROBE_RESP = 0x7f @@ -4609,9 +4846,10 @@ const ( NL80211_ATTR_MAC_HINT = 0xc8 NL80211_ATTR_MAC_MASK = 0xd7 NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca - NL80211_ATTR_MAX = 0x14a + NL80211_ATTR_MAX = 0x151 NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 NL80211_ATTR_MAX_CSA_COUNTERS = 0xce + NL80211_ATTR_MAX_HW_TIMESTAMP_PEERS = 0x143 NL80211_ATTR_MAX_MATCH_SETS = 0x85 NL80211_ATTR_MAX_NUM_AKM_SUITES = 0x13c NL80211_ATTR_MAX_NUM_PMKIDS = 0x56 @@ -4636,9 +4874,12 @@ const ( NL80211_ATTR_MGMT_SUBTYPE = 0x29 NL80211_ATTR_MLD_ADDR = 0x13a NL80211_ATTR_MLD_CAPA_AND_OPS = 0x13e + NL80211_ATTR_MLO_LINK_DISABLED = 0x146 NL80211_ATTR_MLO_LINK_ID = 0x139 NL80211_ATTR_MLO_LINKS = 0x138 NL80211_ATTR_MLO_SUPPORT = 0x13b + NL80211_ATTR_MLO_TTLM_DLINK = 0x148 + NL80211_ATTR_MLO_TTLM_ULINK = 0x149 NL80211_ATTR_MNTR_FLAGS = 0x17 NL80211_ATTR_MPATH_INFO = 0x1b NL80211_ATTR_MPATH_NEXT_HOP = 0x1a @@ -4671,12 +4912,14 @@ const ( NL80211_ATTR_PORT_AUTHORIZED = 0x103 NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN = 0x5 NL80211_ATTR_POWER_RULE_MAX_EIRP = 0x6 + NL80211_ATTR_POWER_RULE_PSD = 0x8 NL80211_ATTR_PREV_BSSID = 0x4f NL80211_ATTR_PRIVACY = 0x46 NL80211_ATTR_PROBE_RESP = 0x91 NL80211_ATTR_PROBE_RESP_OFFLOAD = 0x90 NL80211_ATTR_PROTOCOL_FEATURES = 0xad NL80211_ATTR_PS_STATE = 0x5d + NL80211_ATTR_PUNCT_BITMAP = 0x142 NL80211_ATTR_QOS_MAP = 0xc7 NL80211_ATTR_RADAR_BACKGROUND = 0x134 NL80211_ATTR_RADAR_EVENT = 0xa8 @@ -4805,7 +5048,9 @@ const ( NL80211_ATTR_WIPHY_FREQ = 0x26 NL80211_ATTR_WIPHY_FREQ_HINT = 0xc9 NL80211_ATTR_WIPHY_FREQ_OFFSET = 0x122 + NL80211_ATTR_WIPHY_INTERFACE_COMBINATIONS = 0x14c NL80211_ATTR_WIPHY_NAME = 0x2 + NL80211_ATTR_WIPHY_RADIOS = 0x14b NL80211_ATTR_WIPHY_RETRY_LONG = 0x3e NL80211_ATTR_WIPHY_RETRY_SHORT = 0x3d NL80211_ATTR_WIPHY_RTS_THRESHOLD = 0x40 @@ -4840,6 +5085,8 @@ const ( NL80211_BAND_ATTR_IFTYPE_DATA = 0x9 NL80211_BAND_ATTR_MAX = 0xd NL80211_BAND_ATTR_RATES = 0x2 + NL80211_BAND_ATTR_S1G_CAPA = 0xd + NL80211_BAND_ATTR_S1G_MCS_NSS_SET = 0xc NL80211_BAND_ATTR_VHT_CAPA = 0x8 NL80211_BAND_ATTR_VHT_MCS_SET = 0x7 NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MAC = 0x8 @@ -4863,6 +5110,10 @@ const ( NL80211_BSS_BEACON_INTERVAL = 0x4 NL80211_BSS_BEACON_TSF = 0xd NL80211_BSS_BSSID = 0x1 + NL80211_BSS_CANNOT_USE_6GHZ_PWR_MISMATCH = 0x2 + NL80211_BSS_CANNOT_USE_NSTR_NONPRIMARY = 0x1 + NL80211_BSS_CANNOT_USE_REASONS = 0x18 + NL80211_BSS_CANNOT_USE_UHB_PWR_MISMATCH = 0x2 NL80211_BSS_CAPABILITY = 0x5 NL80211_BSS_CHAIN_SIGNAL = 0x13 NL80211_BSS_CHAN_WIDTH_10 = 0x1 @@ -4894,6 +5145,9 @@ const ( NL80211_BSS_STATUS = 0x9 NL80211_BSS_STATUS_IBSS_JOINED = 0x2 NL80211_BSS_TSF = 0x3 + NL80211_BSS_USE_FOR = 0x17 + NL80211_BSS_USE_FOR_MLD_LINK = 0x2 + NL80211_BSS_USE_FOR_NORMAL = 0x1 NL80211_CHAN_HT20 = 0x1 NL80211_CHAN_HT40MINUS = 0x2 NL80211_CHAN_HT40PLUS = 0x3 @@ -4979,7 +5233,8 @@ const ( NL80211_CMD_LEAVE_IBSS = 0x2c NL80211_CMD_LEAVE_MESH = 0x45 NL80211_CMD_LEAVE_OCB = 0x6d - NL80211_CMD_MAX = 0x9b + NL80211_CMD_LINKS_REMOVED = 0x9a + NL80211_CMD_MAX = 0x9d NL80211_CMD_MICHAEL_MIC_FAILURE = 0x29 NL80211_CMD_MODIFY_LINK_STA = 0x97 NL80211_CMD_NAN_MATCH = 0x78 @@ -5023,6 +5278,7 @@ const ( NL80211_CMD_SET_COALESCE = 0x65 NL80211_CMD_SET_CQM = 0x3f NL80211_CMD_SET_FILS_AAD = 0x92 + NL80211_CMD_SET_HW_TIMESTAMP = 0x99 NL80211_CMD_SET_INTERFACE = 0x6 NL80211_CMD_SET_KEY = 0xa NL80211_CMD_SET_MAC_ACL = 0x5d @@ -5042,6 +5298,7 @@ const ( NL80211_CMD_SET_SAR_SPECS = 0x8c NL80211_CMD_SET_STATION = 0x12 NL80211_CMD_SET_TID_CONFIG = 0x89 + NL80211_CMD_SET_TID_TO_LINK_MAPPING = 0x9b NL80211_CMD_SET_TX_BITRATE_MASK = 0x39 NL80211_CMD_SET_WDS_PEER = 0x42 NL80211_CMD_SET_WIPHY = 0x2 @@ -5109,6 +5366,7 @@ const ( NL80211_EXT_FEATURE_AIRTIME_FAIRNESS = 0x21 NL80211_EXT_FEATURE_AP_PMKSA_CACHING = 0x22 NL80211_EXT_FEATURE_AQL = 0x28 + NL80211_EXT_FEATURE_AUTH_AND_DEAUTH_RANDOM_TA = 0x40 NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT = 0x2e NL80211_EXT_FEATURE_BEACON_PROTECTION = 0x29 NL80211_EXT_FEATURE_BEACON_RATE_HE = 0x36 @@ -5124,6 +5382,7 @@ const ( NL80211_EXT_FEATURE_CQM_RSSI_LIST = 0xd NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT = 0x1b NL80211_EXT_FEATURE_DEL_IBSS_STA = 0x2c + NL80211_EXT_FEATURE_DFS_CONCURRENT = 0x43 NL80211_EXT_FEATURE_DFS_OFFLOAD = 0x19 NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER = 0x20 NL80211_EXT_FEATURE_EXT_KEY_ID = 0x24 @@ -5143,9 +5402,12 @@ const ( NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 0x14 NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE = 0x13 NL80211_EXT_FEATURE_OPERATING_CHANNEL_VALIDATION = 0x31 + NL80211_EXT_FEATURE_OWE_OFFLOAD_AP = 0x42 + NL80211_EXT_FEATURE_OWE_OFFLOAD = 0x41 NL80211_EXT_FEATURE_POWERED_ADDR_CHANGE = 0x3d NL80211_EXT_FEATURE_PROTECTED_TWT = 0x2b NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE = 0x39 + NL80211_EXT_FEATURE_PUNCT = 0x3e NL80211_EXT_FEATURE_RADAR_BACKGROUND = 0x3c NL80211_EXT_FEATURE_RRM = 0x1 NL80211_EXT_FEATURE_SAE_OFFLOAD_AP = 0x33 @@ -5157,8 +5419,10 @@ const ( NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD = 0x23 NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI = 0xc NL80211_EXT_FEATURE_SECURE_LTF = 0x37 + NL80211_EXT_FEATURE_SECURE_NAN = 0x3f NL80211_EXT_FEATURE_SECURE_RTT = 0x38 NL80211_EXT_FEATURE_SET_SCAN_DWELL = 0x5 + NL80211_EXT_FEATURE_SPP_AMSDU_SUPPORT = 0x44 NL80211_EXT_FEATURE_STA_TX_PWR = 0x25 NL80211_EXT_FEATURE_TXQS = 0x1c NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP = 0x35 @@ -5205,7 +5469,10 @@ const ( NL80211_FREQUENCY_ATTR_2MHZ = 0x16 NL80211_FREQUENCY_ATTR_4MHZ = 0x17 NL80211_FREQUENCY_ATTR_8MHZ = 0x18 + NL80211_FREQUENCY_ATTR_ALLOW_6GHZ_VLP_AP = 0x21 + NL80211_FREQUENCY_ATTR_CAN_MONITOR = 0x20 NL80211_FREQUENCY_ATTR_DFS_CAC_TIME = 0xd + NL80211_FREQUENCY_ATTR_DFS_CONCURRENT = 0x1d NL80211_FREQUENCY_ATTR_DFS_STATE = 0x7 NL80211_FREQUENCY_ATTR_DFS_TIME = 0x8 NL80211_FREQUENCY_ATTR_DISABLED = 0x2 @@ -5213,12 +5480,14 @@ const ( NL80211_FREQUENCY_ATTR_GO_CONCURRENT = 0xf NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 0xe NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 0xf - NL80211_FREQUENCY_ATTR_MAX = 0x20 + NL80211_FREQUENCY_ATTR_MAX = 0x22 NL80211_FREQUENCY_ATTR_MAX_TX_POWER = 0x6 NL80211_FREQUENCY_ATTR_NO_10MHZ = 0x11 NL80211_FREQUENCY_ATTR_NO_160MHZ = 0xc NL80211_FREQUENCY_ATTR_NO_20MHZ = 0x10 NL80211_FREQUENCY_ATTR_NO_320MHZ = 0x1a + NL80211_FREQUENCY_ATTR_NO_6GHZ_AFC_CLIENT = 0x1f + NL80211_FREQUENCY_ATTR_NO_6GHZ_VLP_CLIENT = 0x1e NL80211_FREQUENCY_ATTR_NO_80MHZ = 0xb NL80211_FREQUENCY_ATTR_NO_EHT = 0x1b NL80211_FREQUENCY_ATTR_NO_HE = 0x13 @@ -5226,8 +5495,11 @@ const ( NL80211_FREQUENCY_ATTR_NO_HT40_PLUS = 0xa NL80211_FREQUENCY_ATTR_NO_IBSS = 0x3 NL80211_FREQUENCY_ATTR_NO_IR = 0x3 + NL80211_FREQUENCY_ATTR_NO_UHB_AFC_CLIENT = 0x1f + NL80211_FREQUENCY_ATTR_NO_UHB_VLP_CLIENT = 0x1e NL80211_FREQUENCY_ATTR_OFFSET = 0x14 NL80211_FREQUENCY_ATTR_PASSIVE_SCAN = 0x3 + NL80211_FREQUENCY_ATTR_PSD = 0x1c NL80211_FREQUENCY_ATTR_RADAR = 0x5 NL80211_FREQUENCY_ATTR_WMM = 0x12 NL80211_FTM_RESP_ATTR_CIVICLOC = 0x3 @@ -5292,6 +5564,7 @@ const ( NL80211_IFTYPE_STATION = 0x2 NL80211_IFTYPE_UNSPECIFIED = 0x0 NL80211_IFTYPE_WDS = 0x5 + NL80211_KCK_EXT_LEN_32 = 0x20 NL80211_KCK_EXT_LEN = 0x18 NL80211_KCK_LEN = 0x10 NL80211_KEK_EXT_LEN = 0x20 @@ -5320,9 +5593,10 @@ const ( NL80211_MAX_SUPP_HT_RATES = 0x4d NL80211_MAX_SUPP_RATES = 0x20 NL80211_MAX_SUPP_REG_RULES = 0x80 + NL80211_MAX_SUPP_SELECTORS = 0x80 NL80211_MBSSID_CONFIG_ATTR_EMA = 0x5 NL80211_MBSSID_CONFIG_ATTR_INDEX = 0x3 - NL80211_MBSSID_CONFIG_ATTR_MAX = 0x5 + NL80211_MBSSID_CONFIG_ATTR_MAX = 0x6 NL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY = 0x2 NL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES = 0x1 NL80211_MBSSID_CONFIG_ATTR_TX_IFINDEX = 0x4 @@ -5381,7 +5655,7 @@ const ( NL80211_MNTR_FLAG_CONTROL = 0x3 NL80211_MNTR_FLAG_COOK_FRAMES = 0x5 NL80211_MNTR_FLAG_FCSFAIL = 0x1 - NL80211_MNTR_FLAG_MAX = 0x6 + NL80211_MNTR_FLAG_MAX = 0x7 NL80211_MNTR_FLAG_OTHER_BSS = 0x4 NL80211_MNTR_FLAG_PLCPFAIL = 0x2 NL80211_MPATH_FLAG_ACTIVE = 0x1 @@ -5565,11 +5839,16 @@ const ( NL80211_RADAR_PRE_CAC_EXPIRED = 0x4 NL80211_RATE_INFO_10_MHZ_WIDTH = 0xb NL80211_RATE_INFO_160_MHZ_WIDTH = 0xa + NL80211_RATE_INFO_16_MHZ_WIDTH = 0x1d + NL80211_RATE_INFO_1_MHZ_WIDTH = 0x19 + NL80211_RATE_INFO_2_MHZ_WIDTH = 0x1a NL80211_RATE_INFO_320_MHZ_WIDTH = 0x12 NL80211_RATE_INFO_40_MHZ_WIDTH = 0x3 + NL80211_RATE_INFO_4_MHZ_WIDTH = 0x1b NL80211_RATE_INFO_5_MHZ_WIDTH = 0xc NL80211_RATE_INFO_80_MHZ_WIDTH = 0x8 NL80211_RATE_INFO_80P80_MHZ_WIDTH = 0x9 + NL80211_RATE_INFO_8_MHZ_WIDTH = 0x1c NL80211_RATE_INFO_BITRATE32 = 0x5 NL80211_RATE_INFO_BITRATE = 0x1 NL80211_RATE_INFO_EHT_GI_0_8 = 0x0 @@ -5615,6 +5894,8 @@ const ( NL80211_RATE_INFO_HE_RU_ALLOC = 0x11 NL80211_RATE_INFO_MAX = 0x1d NL80211_RATE_INFO_MCS = 0x2 + NL80211_RATE_INFO_S1G_MCS = 0x17 + NL80211_RATE_INFO_S1G_NSS = 0x18 NL80211_RATE_INFO_SHORT_GI = 0x4 NL80211_RATE_INFO_VHT_MCS = 0x6 NL80211_RATE_INFO_VHT_NSS = 0x7 @@ -5632,14 +5913,19 @@ const ( NL80211_REKEY_DATA_KEK = 0x1 NL80211_REKEY_DATA_REPLAY_CTR = 0x3 NL80211_REPLAY_CTR_LEN = 0x8 + NL80211_RRF_ALLOW_6GHZ_VLP_AP = 0x1000000 NL80211_RRF_AUTO_BW = 0x800 NL80211_RRF_DFS = 0x10 + NL80211_RRF_DFS_CONCURRENT = 0x200000 NL80211_RRF_GO_CONCURRENT = 0x1000 NL80211_RRF_IR_CONCURRENT = 0x1000 NL80211_RRF_NO_160MHZ = 0x10000 NL80211_RRF_NO_320MHZ = 0x40000 + NL80211_RRF_NO_6GHZ_AFC_CLIENT = 0x800000 + NL80211_RRF_NO_6GHZ_VLP_CLIENT = 0x400000 NL80211_RRF_NO_80MHZ = 0x8000 NL80211_RRF_NO_CCK = 0x2 + NL80211_RRF_NO_EHT = 0x80000 NL80211_RRF_NO_HE = 0x20000 NL80211_RRF_NO_HT40 = 0x6000 NL80211_RRF_NO_HT40MINUS = 0x2000 @@ -5650,7 +5936,10 @@ const ( NL80211_RRF_NO_IR = 0x80 NL80211_RRF_NO_OFDM = 0x1 NL80211_RRF_NO_OUTDOOR = 0x8 + NL80211_RRF_NO_UHB_AFC_CLIENT = 0x800000 + NL80211_RRF_NO_UHB_VLP_CLIENT = 0x400000 NL80211_RRF_PASSIVE_SCAN = 0x80 + NL80211_RRF_PSD = 0x100000 NL80211_RRF_PTMP_ONLY = 0x40 NL80211_RRF_PTP_ONLY = 0x20 NL80211_RXMGMT_FLAG_ANSWERED = 0x1 @@ -5711,6 +6000,7 @@ const ( NL80211_STA_FLAG_MAX_OLD_API = 0x6 NL80211_STA_FLAG_MFP = 0x4 NL80211_STA_FLAG_SHORT_PREAMBLE = 0x2 + NL80211_STA_FLAG_SPP_AMSDU = 0x8 NL80211_STA_FLAG_TDLS_PEER = 0x6 NL80211_STA_FLAG_WME = 0x3 NL80211_STA_INFO_ACK_SIGNAL_AVG = 0x23 @@ -5869,6 +6159,13 @@ const ( NL80211_VHT_CAPABILITY_LEN = 0xc NL80211_VHT_NSS_MAX = 0x8 NL80211_WIPHY_NAME_MAXLEN = 0x40 + NL80211_WIPHY_RADIO_ATTR_FREQ_RANGE = 0x2 + NL80211_WIPHY_RADIO_ATTR_INDEX = 0x1 + NL80211_WIPHY_RADIO_ATTR_INTERFACE_COMBINATION = 0x3 + NL80211_WIPHY_RADIO_ATTR_MAX = 0x4 + NL80211_WIPHY_RADIO_FREQ_ATTR_END = 0x2 + NL80211_WIPHY_RADIO_FREQ_ATTR_MAX = 0x2 + NL80211_WIPHY_RADIO_FREQ_ATTR_START = 0x1 NL80211_WMMR_AIFSN = 0x3 NL80211_WMMR_CW_MAX = 0x2 NL80211_WMMR_CW_MIN = 0x1 @@ -5900,6 +6197,7 @@ const ( NL80211_WOWLAN_TRIG_PKT_PATTERN = 0x4 NL80211_WOWLAN_TRIG_RFKILL_RELEASE = 0x9 NL80211_WOWLAN_TRIG_TCP_CONNECTION = 0xe + NL80211_WOWLAN_TRIG_UNPROTECTED_DEAUTH_DISASSOC = 0x14 NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211 = 0xa NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN = 0xb NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023 = 0xc @@ -6036,3 +6334,32 @@ type SockDiagReq struct { Family uint8 Protocol uint8 } + +const RTM_NEWNVLAN = 0x70 + +const ( + MPOL_BIND = 0x2 + MPOL_DEFAULT = 0x0 + MPOL_F_ADDR = 0x2 + MPOL_F_MEMS_ALLOWED = 0x4 + MPOL_F_MOF = 0x8 + MPOL_F_MORON = 0x10 + MPOL_F_NODE = 0x1 + MPOL_F_NUMA_BALANCING = 0x2000 + MPOL_F_RELATIVE_NODES = 0x4000 + MPOL_F_SHARED = 0x1 + MPOL_F_STATIC_NODES = 0x8000 + MPOL_INTERLEAVE = 0x3 + MPOL_LOCAL = 0x4 + MPOL_MAX = 0x7 + MPOL_MF_INTERNAL = 0x10 + MPOL_MF_LAZY = 0x8 + MPOL_MF_MOVE_ALL = 0x4 + MPOL_MF_MOVE = 0x2 + MPOL_MF_STRICT = 0x1 + MPOL_MF_VALID = 0x7 + MPOL_MODE_FLAGS = 0xe000 + MPOL_PREFERRED = 0x1 + MPOL_PREFERRED_MANY = 0x5 + MPOL_WEIGHTED_INTERLEAVE = 0x6 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go index fd402da4..485f2d3a 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -282,7 +282,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -338,6 +338,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go index eb7a5e18..ecbd1ad8 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -351,6 +351,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go index d78ac108..02f0463a 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -91,7 +91,7 @@ type Stat_t struct { Gid uint32 Rdev uint64 _ uint16 - _ [4]byte + _ [6]byte Size int64 Blksize int32 _ [4]byte @@ -273,7 +273,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -329,6 +329,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go index cd06d47f..6f4d400d 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -330,6 +330,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go index 2f28fe26..cd532cfa 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go @@ -331,6 +331,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go index 71d6cac2..41336208 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -278,7 +278,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -334,6 +334,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go index 8596d453..eaa37eb7 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -333,6 +333,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go index cd60ea18..98ae6a1e 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -333,6 +333,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go index b0ae420c..cae19615 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -278,7 +278,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -334,6 +334,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go index 83597287..6ce3b4e0 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -90,7 +90,7 @@ type Stat_t struct { Gid uint32 Rdev uint64 _ uint16 - _ [4]byte + _ [6]byte Size int64 Blksize int32 _ [4]byte @@ -285,7 +285,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -341,6 +341,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go index 69eb6a5c..c7429c6a 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -340,6 +340,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go index 5f583cb6..4bf4baf4 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -340,6 +340,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index 15adc041..e9709d70 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -358,6 +358,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 @@ -727,6 +743,37 @@ const ( RISCV_HWPROBE_EXT_ZBA = 0x8 RISCV_HWPROBE_EXT_ZBB = 0x10 RISCV_HWPROBE_EXT_ZBS = 0x20 + RISCV_HWPROBE_EXT_ZICBOZ = 0x40 + RISCV_HWPROBE_EXT_ZBC = 0x80 + RISCV_HWPROBE_EXT_ZBKB = 0x100 + RISCV_HWPROBE_EXT_ZBKC = 0x200 + RISCV_HWPROBE_EXT_ZBKX = 0x400 + RISCV_HWPROBE_EXT_ZKND = 0x800 + RISCV_HWPROBE_EXT_ZKNE = 0x1000 + RISCV_HWPROBE_EXT_ZKNH = 0x2000 + RISCV_HWPROBE_EXT_ZKSED = 0x4000 + RISCV_HWPROBE_EXT_ZKSH = 0x8000 + RISCV_HWPROBE_EXT_ZKT = 0x10000 + RISCV_HWPROBE_EXT_ZVBB = 0x20000 + RISCV_HWPROBE_EXT_ZVBC = 0x40000 + RISCV_HWPROBE_EXT_ZVKB = 0x80000 + RISCV_HWPROBE_EXT_ZVKG = 0x100000 + RISCV_HWPROBE_EXT_ZVKNED = 0x200000 + RISCV_HWPROBE_EXT_ZVKNHA = 0x400000 + RISCV_HWPROBE_EXT_ZVKNHB = 0x800000 + RISCV_HWPROBE_EXT_ZVKSED = 0x1000000 + RISCV_HWPROBE_EXT_ZVKSH = 0x2000000 + RISCV_HWPROBE_EXT_ZVKT = 0x4000000 + RISCV_HWPROBE_EXT_ZFH = 0x8000000 + RISCV_HWPROBE_EXT_ZFHMIN = 0x10000000 + RISCV_HWPROBE_EXT_ZIHINTNTL = 0x20000000 + RISCV_HWPROBE_EXT_ZVFH = 0x40000000 + RISCV_HWPROBE_EXT_ZVFHMIN = 0x80000000 + RISCV_HWPROBE_EXT_ZFA = 0x100000000 + RISCV_HWPROBE_EXT_ZTSO = 0x200000000 + RISCV_HWPROBE_EXT_ZACAS = 0x400000000 + RISCV_HWPROBE_EXT_ZICOND = 0x800000000 + RISCV_HWPROBE_EXT_ZIHINTPAUSE = 0x1000000000 RISCV_HWPROBE_KEY_CPUPERF_0 = 0x5 RISCV_HWPROBE_MISALIGNED_UNKNOWN = 0x0 RISCV_HWPROBE_MISALIGNED_EMULATED = 0x1 @@ -734,4 +781,6 @@ const ( RISCV_HWPROBE_MISALIGNED_FAST = 0x3 RISCV_HWPROBE_MISALIGNED_UNSUPPORTED = 0x4 RISCV_HWPROBE_MISALIGNED_MASK = 0x7 + RISCV_HWPROBE_KEY_ZICBOZ_BLOCK_SIZE = 0x6 + RISCV_HWPROBE_WHICH_CPUS = 0x1 ) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go index cf3ce900..fb44268c 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -353,6 +353,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go index 590b5673..9c38265c 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -335,6 +335,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go index 439548ec..50e8e644 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go @@ -104,7 +104,7 @@ type Statvfs_t struct { Fsid uint32 Namemax uint32 Owner uint32 - Spare [4]uint32 + Spare [4]uint64 Fstypename [32]byte Mntonname [1024]byte Mntfromname [1024]byte diff --git a/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go index d9a13af4..2e5d5a44 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go @@ -377,6 +377,12 @@ type Flock_t struct { Pid int32 } +type F_cnvrt struct { + Cvtcmd int32 + Pccsid int16 + Fccsid int16 +} + type Termios struct { Cflag uint32 Iflag uint32 diff --git a/vendor/golang.org/x/sys/windows/dll_windows.go b/vendor/golang.org/x/sys/windows/dll_windows.go index 115341fb..3ca814f5 100644 --- a/vendor/golang.org/x/sys/windows/dll_windows.go +++ b/vendor/golang.org/x/sys/windows/dll_windows.go @@ -43,8 +43,8 @@ type DLL struct { // LoadDLL loads DLL file into memory. // // Warning: using LoadDLL without an absolute path name is subject to -// DLL preloading attacks. To safely load a system DLL, use LazyDLL -// with System set to true, or use LoadLibraryEx directly. +// DLL preloading attacks. To safely load a system DLL, use [NewLazySystemDLL], +// or use [LoadLibraryEx] directly. func LoadDLL(name string) (dll *DLL, err error) { namep, err := UTF16PtrFromString(name) if err != nil { @@ -65,7 +65,7 @@ func LoadDLL(name string) (dll *DLL, err error) { return d, nil } -// MustLoadDLL is like LoadDLL but panics if load operation failes. +// MustLoadDLL is like LoadDLL but panics if load operation fails. func MustLoadDLL(name string) *DLL { d, e := LoadDLL(name) if e != nil { @@ -271,6 +271,9 @@ func (d *LazyDLL) NewProc(name string) *LazyProc { } // NewLazyDLL creates new LazyDLL associated with DLL file. +// +// Warning: using NewLazyDLL without an absolute path name is subject to +// DLL preloading attacks. To safely load a system DLL, use [NewLazySystemDLL]. func NewLazyDLL(name string) *LazyDLL { return &LazyDLL{Name: name} } @@ -410,7 +413,3 @@ func loadLibraryEx(name string, system bool) (*DLL, error) { } return &DLL{Name: name, Handle: h}, nil } - -type errString string - -func (s errString) Error() string { return string(s) } diff --git a/vendor/golang.org/x/sys/windows/security_windows.go b/vendor/golang.org/x/sys/windows/security_windows.go index b6e1ab76..a8b0364c 100644 --- a/vendor/golang.org/x/sys/windows/security_windows.go +++ b/vendor/golang.org/x/sys/windows/security_windows.go @@ -1303,7 +1303,10 @@ func (selfRelativeSD *SECURITY_DESCRIPTOR) ToAbsolute() (absoluteSD *SECURITY_DE return nil, err } if absoluteSDSize > 0 { - absoluteSD = (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&make([]byte, absoluteSDSize)[0])) + absoluteSD = new(SECURITY_DESCRIPTOR) + if unsafe.Sizeof(*absoluteSD) < uintptr(absoluteSDSize) { + panic("sizeof(SECURITY_DESCRIPTOR) too small") + } } var ( dacl *ACL @@ -1312,19 +1315,55 @@ func (selfRelativeSD *SECURITY_DESCRIPTOR) ToAbsolute() (absoluteSD *SECURITY_DE group *SID ) if daclSize > 0 { - dacl = (*ACL)(unsafe.Pointer(&make([]byte, daclSize)[0])) + dacl = (*ACL)(unsafe.Pointer(unsafe.SliceData(make([]byte, daclSize)))) } if saclSize > 0 { - sacl = (*ACL)(unsafe.Pointer(&make([]byte, saclSize)[0])) + sacl = (*ACL)(unsafe.Pointer(unsafe.SliceData(make([]byte, saclSize)))) } if ownerSize > 0 { - owner = (*SID)(unsafe.Pointer(&make([]byte, ownerSize)[0])) + owner = (*SID)(unsafe.Pointer(unsafe.SliceData(make([]byte, ownerSize)))) } if groupSize > 0 { - group = (*SID)(unsafe.Pointer(&make([]byte, groupSize)[0])) + group = (*SID)(unsafe.Pointer(unsafe.SliceData(make([]byte, groupSize)))) } + // We call into Windows via makeAbsoluteSD, which sets up + // pointers within absoluteSD that point to other chunks of memory + // we pass into makeAbsoluteSD, and that happens outside the view of the GC. + // We therefore take some care here to then verify the pointers are as we expect + // and set them explicitly in view of the GC. See https://go.dev/issue/73199. + // TODO: consider weak pointers once Go 1.24 is appropriate. See suggestion in https://go.dev/cl/663575. err = makeAbsoluteSD(selfRelativeSD, absoluteSD, &absoluteSDSize, dacl, &daclSize, sacl, &saclSize, owner, &ownerSize, group, &groupSize) + if err != nil { + // Don't return absoluteSD, which might be partially initialized. + return nil, err + } + // Before using any fields, verify absoluteSD is in the format we expect according to Windows. + // See https://learn.microsoft.com/en-us/windows/win32/secauthz/absolute-and-self-relative-security-descriptors + absControl, _, err := absoluteSD.Control() + if err != nil { + panic("absoluteSD: " + err.Error()) + } + if absControl&SE_SELF_RELATIVE != 0 { + panic("absoluteSD not in absolute format") + } + if absoluteSD.dacl != dacl { + panic("dacl pointer mismatch") + } + if absoluteSD.sacl != sacl { + panic("sacl pointer mismatch") + } + if absoluteSD.owner != owner { + panic("owner pointer mismatch") + } + if absoluteSD.group != group { + panic("group pointer mismatch") + } + absoluteSD.dacl = dacl + absoluteSD.sacl = sacl + absoluteSD.owner = owner + absoluteSD.group = group + return } diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go index 1fa34fd1..69439df2 100644 --- a/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -168,6 +168,8 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *SecurityAttributes) (handle Handle, err error) [failretval==InvalidHandle] = CreateNamedPipeW //sys ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error) //sys DisconnectNamedPipe(pipe Handle) (err error) +//sys GetNamedPipeClientProcessId(pipe Handle, clientProcessID *uint32) (err error) +//sys GetNamedPipeServerProcessId(pipe Handle, serverProcessID *uint32) (err error) //sys GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) //sys GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW //sys SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) = SetNamedPipeHandleState @@ -313,8 +315,14 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys SetConsoleMode(console Handle, mode uint32) (err error) = kernel32.SetConsoleMode //sys GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) = kernel32.GetConsoleScreenBufferInfo //sys setConsoleCursorPosition(console Handle, position uint32) (err error) = kernel32.SetConsoleCursorPosition +//sys GetConsoleCP() (cp uint32, err error) = kernel32.GetConsoleCP +//sys GetConsoleOutputCP() (cp uint32, err error) = kernel32.GetConsoleOutputCP +//sys SetConsoleCP(cp uint32) (err error) = kernel32.SetConsoleCP +//sys SetConsoleOutputCP(cp uint32) (err error) = kernel32.SetConsoleOutputCP //sys WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) = kernel32.WriteConsoleW //sys ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) = kernel32.ReadConsoleW +//sys GetNumberOfConsoleInputEvents(console Handle, numevents *uint32) (err error) = kernel32.GetNumberOfConsoleInputEvents +//sys FlushConsoleInputBuffer(console Handle) (err error) = kernel32.FlushConsoleInputBuffer //sys resizePseudoConsole(pconsole Handle, size uint32) (hr error) = kernel32.ResizePseudoConsole //sys CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.CreateToolhelp32Snapshot //sys Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) = kernel32.Module32FirstW @@ -721,20 +729,12 @@ func DurationSinceBoot() time.Duration { } func Ftruncate(fd Handle, length int64) (err error) { - curoffset, e := Seek(fd, 0, 1) - if e != nil { - return e + type _FILE_END_OF_FILE_INFO struct { + EndOfFile int64 } - defer Seek(fd, curoffset, 0) - _, e = Seek(fd, length, 0) - if e != nil { - return e - } - e = SetEndOfFile(fd) - if e != nil { - return e - } - return nil + var info _FILE_END_OF_FILE_INFO + info.EndOfFile = length + return SetFileInformationByHandle(fd, FileEndOfFileInfo, (*byte)(unsafe.Pointer(&info)), uint32(unsafe.Sizeof(info))) } func Gettimeofday(tv *Timeval) (err error) { @@ -872,6 +872,7 @@ const socket_error = uintptr(^uint32(0)) //sys WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecvFrom //sys WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASendTo //sys WSASocket(af int32, typ int32, protocol int32, protoInfo *WSAProtocolInfo, group uint32, flags uint32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.WSASocketW +//sys WSADuplicateSocket(s Handle, processID uint32, info *WSAProtocolInfo) (err error) [failretval!=0] = ws2_32.WSADuplicateSocketW //sys GetHostByName(name string) (h *Hostent, err error) [failretval==nil] = ws2_32.gethostbyname //sys GetServByName(name string, proto string) (s *Servent, err error) [failretval==nil] = ws2_32.getservbyname //sys Ntohs(netshort uint16) (u uint16) = ws2_32.ntohs @@ -890,6 +891,15 @@ const socket_error = uintptr(^uint32(0)) //sys GetACP() (acp uint32) = kernel32.GetACP //sys MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar //sys getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) = iphlpapi.GetBestInterfaceEx +//sys GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) = iphlpapi.GetIfEntry2Ex +//sys GetIpForwardEntry2(row *MibIpForwardRow2) (errcode error) = iphlpapi.GetIpForwardEntry2 +//sys GetIpForwardTable2(family uint16, table **MibIpForwardTable2) (errcode error) = iphlpapi.GetIpForwardTable2 +//sys GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) = iphlpapi.GetUnicastIpAddressEntry +//sys FreeMibTable(memory unsafe.Pointer) = iphlpapi.FreeMibTable +//sys NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyIpInterfaceChange +//sys NotifyRouteChange2(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyRouteChange2 +//sys NotifyUnicastIpAddressChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyUnicastIpAddressChange +//sys CancelMibChangeNotify2(notificationHandle Handle) (errcode error) = iphlpapi.CancelMibChangeNotify2 // For testing: clients can set this flag to force // creation of IPv6 sockets to return EAFNOSUPPORT. @@ -910,6 +920,17 @@ type RawSockaddrInet6 struct { Scope_id uint32 } +// RawSockaddrInet is a union that contains an IPv4, an IPv6 address, or an address family. See +// https://learn.microsoft.com/en-us/windows/win32/api/ws2ipdef/ns-ws2ipdef-sockaddr_inet. +// +// A [*RawSockaddrInet] may be converted to a [*RawSockaddrInet4] or [*RawSockaddrInet6] using +// unsafe, depending on the address family. +type RawSockaddrInet struct { + Family uint16 + Port uint16 + Data [6]uint32 +} + type RawSockaddr struct { Family uint16 Data [14]int8 @@ -1681,19 +1702,23 @@ func (s NTStatus) Error() string { // do not use NTUnicodeString, and instead UTF16PtrFromString should be used for // the more common *uint16 string type. func NewNTUnicodeString(s string) (*NTUnicodeString, error) { - var u NTUnicodeString - s16, err := UTF16PtrFromString(s) + s16, err := UTF16FromString(s) if err != nil { return nil, err } - RtlInitUnicodeString(&u, s16) - return &u, nil + n := uint16(len(s16) * 2) + return &NTUnicodeString{ + Length: n - 2, // subtract 2 bytes for the NULL terminator + MaximumLength: n, + Buffer: &s16[0], + }, nil } // Slice returns a uint16 slice that aliases the data in the NTUnicodeString. func (s *NTUnicodeString) Slice() []uint16 { - slice := unsafe.Slice(s.Buffer, s.MaximumLength) - return slice[:s.Length] + // Note: this rounds the length down, if it happens + // to (incorrectly) be odd. Probably safer than rounding up. + return unsafe.Slice(s.Buffer, s.MaximumLength/2)[:s.Length/2] } func (s *NTUnicodeString) String() string { diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go index 3f03b3d5..6e4f50eb 100644 --- a/vendor/golang.org/x/sys/windows/types_windows.go +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -65,6 +65,22 @@ var signals = [...]string{ 15: "terminated", } +// File flags for [os.OpenFile]. The O_ prefix is used to indicate +// that these flags are specific to the OpenFile function. +const ( + O_FILE_FLAG_OPEN_NO_RECALL = FILE_FLAG_OPEN_NO_RECALL + O_FILE_FLAG_OPEN_REPARSE_POINT = FILE_FLAG_OPEN_REPARSE_POINT + O_FILE_FLAG_SESSION_AWARE = FILE_FLAG_SESSION_AWARE + O_FILE_FLAG_POSIX_SEMANTICS = FILE_FLAG_POSIX_SEMANTICS + O_FILE_FLAG_BACKUP_SEMANTICS = FILE_FLAG_BACKUP_SEMANTICS + O_FILE_FLAG_DELETE_ON_CLOSE = FILE_FLAG_DELETE_ON_CLOSE + O_FILE_FLAG_SEQUENTIAL_SCAN = FILE_FLAG_SEQUENTIAL_SCAN + O_FILE_FLAG_RANDOM_ACCESS = FILE_FLAG_RANDOM_ACCESS + O_FILE_FLAG_NO_BUFFERING = FILE_FLAG_NO_BUFFERING + O_FILE_FLAG_OVERLAPPED = FILE_FLAG_OVERLAPPED + O_FILE_FLAG_WRITE_THROUGH = FILE_FLAG_WRITE_THROUGH +) + const ( FILE_READ_DATA = 0x00000001 FILE_READ_ATTRIBUTES = 0x00000080 @@ -176,6 +192,7 @@ const ( WAIT_FAILED = 0xFFFFFFFF // Access rights for process. + PROCESS_ALL_ACCESS = 0xFFFF PROCESS_CREATE_PROCESS = 0x0080 PROCESS_CREATE_THREAD = 0x0002 PROCESS_DUP_HANDLE = 0x0040 @@ -1060,6 +1077,7 @@ const ( SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6 SIO_KEEPALIVE_VALS = IOC_IN | IOC_VENDOR | 4 SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12 + SIO_UDP_NETRESET = IOC_IN | IOC_VENDOR | 15 // cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460 @@ -1072,6 +1090,7 @@ const ( IP_ADD_MEMBERSHIP = 0xc IP_DROP_MEMBERSHIP = 0xd IP_PKTINFO = 0x13 + IP_MTU_DISCOVER = 0x47 IPV6_V6ONLY = 0x1b IPV6_UNICAST_HOPS = 0x4 @@ -1081,6 +1100,7 @@ const ( IPV6_JOIN_GROUP = 0xc IPV6_LEAVE_GROUP = 0xd IPV6_PKTINFO = 0x13 + IPV6_MTU_DISCOVER = 0x47 MSG_OOB = 0x1 MSG_PEEK = 0x2 @@ -1130,6 +1150,15 @@ const ( WSASYS_STATUS_LEN = 128 ) +// enum PMTUD_STATE from ws2ipdef.h +const ( + IP_PMTUDISC_NOT_SET = 0 + IP_PMTUDISC_DO = 1 + IP_PMTUDISC_DONT = 2 + IP_PMTUDISC_PROBE = 3 + IP_PMTUDISC_MAX = 4 +) + type WSABuf struct { Len uint32 Buf *byte @@ -1144,6 +1173,22 @@ type WSAMsg struct { Flags uint32 } +type WSACMSGHDR struct { + Len uintptr + Level int32 + Type int32 +} + +type IN_PKTINFO struct { + Addr [4]byte + Ifindex uint32 +} + +type IN6_PKTINFO struct { + Addr [16]byte + Ifindex uint32 +} + // Flags for WSASocket const ( WSA_FLAG_OVERLAPPED = 0x01 @@ -1947,6 +1992,12 @@ const ( SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1 ) +// FILE_ZERO_DATA_INFORMATION from winioctl.h +type FileZeroDataInformation struct { + FileOffset int64 + BeyondFinalZero int64 +} + const ( ComputerNameNetBIOS = 0 ComputerNameDnsHostname = 1 @@ -2202,6 +2253,208 @@ const ( IfOperStatusLowerLayerDown = 7 ) +const ( + IF_MAX_PHYS_ADDRESS_LENGTH = 32 + IF_MAX_STRING_SIZE = 256 +) + +// MIB_IF_ENTRY_LEVEL enumeration from netioapi.h or +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/nf-netioapi-getifentry2ex. +const ( + MibIfEntryNormal = 0 + MibIfEntryNormalWithoutStatistics = 2 +) + +// MIB_NOTIFICATION_TYPE enumeration from netioapi.h or +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ne-netioapi-mib_notification_type. +const ( + MibParameterNotification = 0 + MibAddInstance = 1 + MibDeleteInstance = 2 + MibInitialNotification = 3 +) + +// MibIfRow2 stores information about a particular interface. See +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_if_row2. +type MibIfRow2 struct { + InterfaceLuid uint64 + InterfaceIndex uint32 + InterfaceGuid GUID + Alias [IF_MAX_STRING_SIZE + 1]uint16 + Description [IF_MAX_STRING_SIZE + 1]uint16 + PhysicalAddressLength uint32 + PhysicalAddress [IF_MAX_PHYS_ADDRESS_LENGTH]uint8 + PermanentPhysicalAddress [IF_MAX_PHYS_ADDRESS_LENGTH]uint8 + Mtu uint32 + Type uint32 + TunnelType uint32 + MediaType uint32 + PhysicalMediumType uint32 + AccessType uint32 + DirectionType uint32 + InterfaceAndOperStatusFlags uint8 + OperStatus uint32 + AdminStatus uint32 + MediaConnectState uint32 + NetworkGuid GUID + ConnectionType uint32 + TransmitLinkSpeed uint64 + ReceiveLinkSpeed uint64 + InOctets uint64 + InUcastPkts uint64 + InNUcastPkts uint64 + InDiscards uint64 + InErrors uint64 + InUnknownProtos uint64 + InUcastOctets uint64 + InMulticastOctets uint64 + InBroadcastOctets uint64 + OutOctets uint64 + OutUcastPkts uint64 + OutNUcastPkts uint64 + OutDiscards uint64 + OutErrors uint64 + OutUcastOctets uint64 + OutMulticastOctets uint64 + OutBroadcastOctets uint64 + OutQLen uint64 +} + +// IP_ADDRESS_PREFIX stores an IP address prefix. See +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-ip_address_prefix. +type IpAddressPrefix struct { + Prefix RawSockaddrInet + PrefixLength uint8 +} + +// NL_ROUTE_ORIGIN enumeration from nldef.h or +// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_route_origin. +const ( + NlroManual = 0 + NlroWellKnown = 1 + NlroDHCP = 2 + NlroRouterAdvertisement = 3 + Nlro6to4 = 4 +) + +// NL_ROUTE_ORIGIN enumeration from nldef.h or +// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_route_protocol. +const ( + MIB_IPPROTO_OTHER = 1 + MIB_IPPROTO_LOCAL = 2 + MIB_IPPROTO_NETMGMT = 3 + MIB_IPPROTO_ICMP = 4 + MIB_IPPROTO_EGP = 5 + MIB_IPPROTO_GGP = 6 + MIB_IPPROTO_HELLO = 7 + MIB_IPPROTO_RIP = 8 + MIB_IPPROTO_IS_IS = 9 + MIB_IPPROTO_ES_IS = 10 + MIB_IPPROTO_CISCO = 11 + MIB_IPPROTO_BBN = 12 + MIB_IPPROTO_OSPF = 13 + MIB_IPPROTO_BGP = 14 + MIB_IPPROTO_IDPR = 15 + MIB_IPPROTO_EIGRP = 16 + MIB_IPPROTO_DVMRP = 17 + MIB_IPPROTO_RPL = 18 + MIB_IPPROTO_DHCP = 19 + MIB_IPPROTO_NT_AUTOSTATIC = 10002 + MIB_IPPROTO_NT_STATIC = 10006 + MIB_IPPROTO_NT_STATIC_NON_DOD = 10007 +) + +// MIB_IPFORWARD_ROW2 stores information about an IP route entry. See +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_ipforward_row2. +type MibIpForwardRow2 struct { + InterfaceLuid uint64 + InterfaceIndex uint32 + DestinationPrefix IpAddressPrefix + NextHop RawSockaddrInet + SitePrefixLength uint8 + ValidLifetime uint32 + PreferredLifetime uint32 + Metric uint32 + Protocol uint32 + Loopback uint8 + AutoconfigureAddress uint8 + Publish uint8 + Immortal uint8 + Age uint32 + Origin uint32 +} + +// MIB_IPFORWARD_TABLE2 contains a table of IP route entries. See +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_ipforward_table2. +type MibIpForwardTable2 struct { + NumEntries uint32 + Table [1]MibIpForwardRow2 +} + +// Rows returns the IP route entries in the table. +func (t *MibIpForwardTable2) Rows() []MibIpForwardRow2 { + return unsafe.Slice(&t.Table[0], t.NumEntries) +} + +// MIB_UNICASTIPADDRESS_ROW stores information about a unicast IP address. See +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_unicastipaddress_row. +type MibUnicastIpAddressRow struct { + Address RawSockaddrInet6 // SOCKADDR_INET union + InterfaceLuid uint64 + InterfaceIndex uint32 + PrefixOrigin uint32 + SuffixOrigin uint32 + ValidLifetime uint32 + PreferredLifetime uint32 + OnLinkPrefixLength uint8 + SkipAsSource uint8 + DadState uint32 + ScopeId uint32 + CreationTimeStamp Filetime +} + +const ScopeLevelCount = 16 + +// MIB_IPINTERFACE_ROW stores interface management information for a particular IP address family on a network interface. +// See https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_ipinterface_row. +type MibIpInterfaceRow struct { + Family uint16 + InterfaceLuid uint64 + InterfaceIndex uint32 + MaxReassemblySize uint32 + InterfaceIdentifier uint64 + MinRouterAdvertisementInterval uint32 + MaxRouterAdvertisementInterval uint32 + AdvertisingEnabled uint8 + ForwardingEnabled uint8 + WeakHostSend uint8 + WeakHostReceive uint8 + UseAutomaticMetric uint8 + UseNeighborUnreachabilityDetection uint8 + ManagedAddressConfigurationSupported uint8 + OtherStatefulConfigurationSupported uint8 + AdvertiseDefaultRoute uint8 + RouterDiscoveryBehavior uint32 + DadTransmits uint32 + BaseReachableTime uint32 + RetransmitTime uint32 + PathMtuDiscoveryTimeout uint32 + LinkLocalAddressBehavior uint32 + LinkLocalAddressTimeout uint32 + ZoneIndices [ScopeLevelCount]uint32 + SitePrefixLength uint32 + Metric uint32 + NlMtu uint32 + Connected uint8 + SupportsWakeUpPatterns uint8 + SupportsNeighborDiscovery uint8 + SupportsRouterDiscovery uint8 + ReachableTime uint32 + TransmitOffload uint32 + ReceiveOffload uint32 + DisableDefaultRoutes uint8 +} + // Console related constants used for the mode parameter to SetConsoleMode. See // https://docs.microsoft.com/en-us/windows/console/setconsolemode for details. @@ -2545,6 +2798,8 @@ type CommTimeouts struct { // NTUnicodeString is a UTF-16 string for NT native APIs, corresponding to UNICODE_STRING. type NTUnicodeString struct { + // Note: Length and MaximumLength are in *bytes*, not uint16s. + // They should always be even. Length uint16 MaximumLength uint16 Buffer *uint16 @@ -3473,3 +3728,213 @@ const ( KLF_NOTELLSHELL = 0x00000080 KLF_SETFORPROCESS = 0x00000100 ) + +// Virtual Key codes +// https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes +const ( + VK_LBUTTON = 0x01 + VK_RBUTTON = 0x02 + VK_CANCEL = 0x03 + VK_MBUTTON = 0x04 + VK_XBUTTON1 = 0x05 + VK_XBUTTON2 = 0x06 + VK_BACK = 0x08 + VK_TAB = 0x09 + VK_CLEAR = 0x0C + VK_RETURN = 0x0D + VK_SHIFT = 0x10 + VK_CONTROL = 0x11 + VK_MENU = 0x12 + VK_PAUSE = 0x13 + VK_CAPITAL = 0x14 + VK_KANA = 0x15 + VK_HANGEUL = 0x15 + VK_HANGUL = 0x15 + VK_IME_ON = 0x16 + VK_JUNJA = 0x17 + VK_FINAL = 0x18 + VK_HANJA = 0x19 + VK_KANJI = 0x19 + VK_IME_OFF = 0x1A + VK_ESCAPE = 0x1B + VK_CONVERT = 0x1C + VK_NONCONVERT = 0x1D + VK_ACCEPT = 0x1E + VK_MODECHANGE = 0x1F + VK_SPACE = 0x20 + VK_PRIOR = 0x21 + VK_NEXT = 0x22 + VK_END = 0x23 + VK_HOME = 0x24 + VK_LEFT = 0x25 + VK_UP = 0x26 + VK_RIGHT = 0x27 + VK_DOWN = 0x28 + VK_SELECT = 0x29 + VK_PRINT = 0x2A + VK_EXECUTE = 0x2B + VK_SNAPSHOT = 0x2C + VK_INSERT = 0x2D + VK_DELETE = 0x2E + VK_HELP = 0x2F + VK_LWIN = 0x5B + VK_RWIN = 0x5C + VK_APPS = 0x5D + VK_SLEEP = 0x5F + VK_NUMPAD0 = 0x60 + VK_NUMPAD1 = 0x61 + VK_NUMPAD2 = 0x62 + VK_NUMPAD3 = 0x63 + VK_NUMPAD4 = 0x64 + VK_NUMPAD5 = 0x65 + VK_NUMPAD6 = 0x66 + VK_NUMPAD7 = 0x67 + VK_NUMPAD8 = 0x68 + VK_NUMPAD9 = 0x69 + VK_MULTIPLY = 0x6A + VK_ADD = 0x6B + VK_SEPARATOR = 0x6C + VK_SUBTRACT = 0x6D + VK_DECIMAL = 0x6E + VK_DIVIDE = 0x6F + VK_F1 = 0x70 + VK_F2 = 0x71 + VK_F3 = 0x72 + VK_F4 = 0x73 + VK_F5 = 0x74 + VK_F6 = 0x75 + VK_F7 = 0x76 + VK_F8 = 0x77 + VK_F9 = 0x78 + VK_F10 = 0x79 + VK_F11 = 0x7A + VK_F12 = 0x7B + VK_F13 = 0x7C + VK_F14 = 0x7D + VK_F15 = 0x7E + VK_F16 = 0x7F + VK_F17 = 0x80 + VK_F18 = 0x81 + VK_F19 = 0x82 + VK_F20 = 0x83 + VK_F21 = 0x84 + VK_F22 = 0x85 + VK_F23 = 0x86 + VK_F24 = 0x87 + VK_NUMLOCK = 0x90 + VK_SCROLL = 0x91 + VK_OEM_NEC_EQUAL = 0x92 + VK_OEM_FJ_JISHO = 0x92 + VK_OEM_FJ_MASSHOU = 0x93 + VK_OEM_FJ_TOUROKU = 0x94 + VK_OEM_FJ_LOYA = 0x95 + VK_OEM_FJ_ROYA = 0x96 + VK_LSHIFT = 0xA0 + VK_RSHIFT = 0xA1 + VK_LCONTROL = 0xA2 + VK_RCONTROL = 0xA3 + VK_LMENU = 0xA4 + VK_RMENU = 0xA5 + VK_BROWSER_BACK = 0xA6 + VK_BROWSER_FORWARD = 0xA7 + VK_BROWSER_REFRESH = 0xA8 + VK_BROWSER_STOP = 0xA9 + VK_BROWSER_SEARCH = 0xAA + VK_BROWSER_FAVORITES = 0xAB + VK_BROWSER_HOME = 0xAC + VK_VOLUME_MUTE = 0xAD + VK_VOLUME_DOWN = 0xAE + VK_VOLUME_UP = 0xAF + VK_MEDIA_NEXT_TRACK = 0xB0 + VK_MEDIA_PREV_TRACK = 0xB1 + VK_MEDIA_STOP = 0xB2 + VK_MEDIA_PLAY_PAUSE = 0xB3 + VK_LAUNCH_MAIL = 0xB4 + VK_LAUNCH_MEDIA_SELECT = 0xB5 + VK_LAUNCH_APP1 = 0xB6 + VK_LAUNCH_APP2 = 0xB7 + VK_OEM_1 = 0xBA + VK_OEM_PLUS = 0xBB + VK_OEM_COMMA = 0xBC + VK_OEM_MINUS = 0xBD + VK_OEM_PERIOD = 0xBE + VK_OEM_2 = 0xBF + VK_OEM_3 = 0xC0 + VK_OEM_4 = 0xDB + VK_OEM_5 = 0xDC + VK_OEM_6 = 0xDD + VK_OEM_7 = 0xDE + VK_OEM_8 = 0xDF + VK_OEM_AX = 0xE1 + VK_OEM_102 = 0xE2 + VK_ICO_HELP = 0xE3 + VK_ICO_00 = 0xE4 + VK_PROCESSKEY = 0xE5 + VK_ICO_CLEAR = 0xE6 + VK_OEM_RESET = 0xE9 + VK_OEM_JUMP = 0xEA + VK_OEM_PA1 = 0xEB + VK_OEM_PA2 = 0xEC + VK_OEM_PA3 = 0xED + VK_OEM_WSCTRL = 0xEE + VK_OEM_CUSEL = 0xEF + VK_OEM_ATTN = 0xF0 + VK_OEM_FINISH = 0xF1 + VK_OEM_COPY = 0xF2 + VK_OEM_AUTO = 0xF3 + VK_OEM_ENLW = 0xF4 + VK_OEM_BACKTAB = 0xF5 + VK_ATTN = 0xF6 + VK_CRSEL = 0xF7 + VK_EXSEL = 0xF8 + VK_EREOF = 0xF9 + VK_PLAY = 0xFA + VK_ZOOM = 0xFB + VK_NONAME = 0xFC + VK_PA1 = 0xFD + VK_OEM_CLEAR = 0xFE +) + +// Mouse button constants. +// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str +const ( + FROM_LEFT_1ST_BUTTON_PRESSED = 0x0001 + RIGHTMOST_BUTTON_PRESSED = 0x0002 + FROM_LEFT_2ND_BUTTON_PRESSED = 0x0004 + FROM_LEFT_3RD_BUTTON_PRESSED = 0x0008 + FROM_LEFT_4TH_BUTTON_PRESSED = 0x0010 +) + +// Control key state constaints. +// https://docs.microsoft.com/en-us/windows/console/key-event-record-str +// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str +const ( + CAPSLOCK_ON = 0x0080 + ENHANCED_KEY = 0x0100 + LEFT_ALT_PRESSED = 0x0002 + LEFT_CTRL_PRESSED = 0x0008 + NUMLOCK_ON = 0x0020 + RIGHT_ALT_PRESSED = 0x0001 + RIGHT_CTRL_PRESSED = 0x0004 + SCROLLLOCK_ON = 0x0040 + SHIFT_PRESSED = 0x0010 +) + +// Mouse event record event flags. +// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str +const ( + MOUSE_MOVED = 0x0001 + DOUBLE_CLICK = 0x0002 + MOUSE_WHEELED = 0x0004 + MOUSE_HWHEELED = 0x0008 +) + +// Input Record Event Types +// https://learn.microsoft.com/en-us/windows/console/input-record-str +const ( + FOCUS_EVENT = 0x0010 + KEY_EVENT = 0x0001 + MENU_EVENT = 0x0008 + MOUSE_EVENT = 0x0002 + WINDOW_BUFFER_SIZE_EVENT = 0x0004 +) diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go index 9bb979a3..f25b7308 100644 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -181,10 +181,19 @@ var ( procDnsRecordListFree = moddnsapi.NewProc("DnsRecordListFree") procDwmGetWindowAttribute = moddwmapi.NewProc("DwmGetWindowAttribute") procDwmSetWindowAttribute = moddwmapi.NewProc("DwmSetWindowAttribute") + procCancelMibChangeNotify2 = modiphlpapi.NewProc("CancelMibChangeNotify2") + procFreeMibTable = modiphlpapi.NewProc("FreeMibTable") procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses") procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo") procGetBestInterfaceEx = modiphlpapi.NewProc("GetBestInterfaceEx") procGetIfEntry = modiphlpapi.NewProc("GetIfEntry") + procGetIfEntry2Ex = modiphlpapi.NewProc("GetIfEntry2Ex") + procGetIpForwardEntry2 = modiphlpapi.NewProc("GetIpForwardEntry2") + procGetIpForwardTable2 = modiphlpapi.NewProc("GetIpForwardTable2") + procGetUnicastIpAddressEntry = modiphlpapi.NewProc("GetUnicastIpAddressEntry") + procNotifyIpInterfaceChange = modiphlpapi.NewProc("NotifyIpInterfaceChange") + procNotifyRouteChange2 = modiphlpapi.NewProc("NotifyRouteChange2") + procNotifyUnicastIpAddressChange = modiphlpapi.NewProc("NotifyUnicastIpAddressChange") procAddDllDirectory = modkernel32.NewProc("AddDllDirectory") procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject") procCancelIo = modkernel32.NewProc("CancelIo") @@ -233,6 +242,7 @@ var ( procFindResourceW = modkernel32.NewProc("FindResourceW") procFindVolumeClose = modkernel32.NewProc("FindVolumeClose") procFindVolumeMountPointClose = modkernel32.NewProc("FindVolumeMountPointClose") + procFlushConsoleInputBuffer = modkernel32.NewProc("FlushConsoleInputBuffer") procFlushFileBuffers = modkernel32.NewProc("FlushFileBuffers") procFlushViewOfFile = modkernel32.NewProc("FlushViewOfFile") procFormatMessageW = modkernel32.NewProc("FormatMessageW") @@ -247,7 +257,9 @@ var ( procGetCommandLineW = modkernel32.NewProc("GetCommandLineW") procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW") procGetComputerNameW = modkernel32.NewProc("GetComputerNameW") + procGetConsoleCP = modkernel32.NewProc("GetConsoleCP") procGetConsoleMode = modkernel32.NewProc("GetConsoleMode") + procGetConsoleOutputCP = modkernel32.NewProc("GetConsoleOutputCP") procGetConsoleScreenBufferInfo = modkernel32.NewProc("GetConsoleScreenBufferInfo") procGetCurrentDirectoryW = modkernel32.NewProc("GetCurrentDirectoryW") procGetCurrentProcessId = modkernel32.NewProc("GetCurrentProcessId") @@ -273,8 +285,11 @@ var ( procGetMaximumProcessorCount = modkernel32.NewProc("GetMaximumProcessorCount") procGetModuleFileNameW = modkernel32.NewProc("GetModuleFileNameW") procGetModuleHandleExW = modkernel32.NewProc("GetModuleHandleExW") + procGetNamedPipeClientProcessId = modkernel32.NewProc("GetNamedPipeClientProcessId") procGetNamedPipeHandleStateW = modkernel32.NewProc("GetNamedPipeHandleStateW") procGetNamedPipeInfo = modkernel32.NewProc("GetNamedPipeInfo") + procGetNamedPipeServerProcessId = modkernel32.NewProc("GetNamedPipeServerProcessId") + procGetNumberOfConsoleInputEvents = modkernel32.NewProc("GetNumberOfConsoleInputEvents") procGetOverlappedResult = modkernel32.NewProc("GetOverlappedResult") procGetPriorityClass = modkernel32.NewProc("GetPriorityClass") procGetProcAddress = modkernel32.NewProc("GetProcAddress") @@ -347,8 +362,10 @@ var ( procSetCommMask = modkernel32.NewProc("SetCommMask") procSetCommState = modkernel32.NewProc("SetCommState") procSetCommTimeouts = modkernel32.NewProc("SetCommTimeouts") + procSetConsoleCP = modkernel32.NewProc("SetConsoleCP") procSetConsoleCursorPosition = modkernel32.NewProc("SetConsoleCursorPosition") procSetConsoleMode = modkernel32.NewProc("SetConsoleMode") + procSetConsoleOutputCP = modkernel32.NewProc("SetConsoleOutputCP") procSetCurrentDirectoryW = modkernel32.NewProc("SetCurrentDirectoryW") procSetDefaultDllDirectories = modkernel32.NewProc("SetDefaultDllDirectories") procSetDllDirectoryW = modkernel32.NewProc("SetDllDirectoryW") @@ -500,6 +517,7 @@ var ( procFreeAddrInfoW = modws2_32.NewProc("FreeAddrInfoW") procGetAddrInfoW = modws2_32.NewProc("GetAddrInfoW") procWSACleanup = modws2_32.NewProc("WSACleanup") + procWSADuplicateSocketW = modws2_32.NewProc("WSADuplicateSocketW") procWSAEnumProtocolsW = modws2_32.NewProc("WSAEnumProtocolsW") procWSAGetOverlappedResult = modws2_32.NewProc("WSAGetOverlappedResult") procWSAIoctl = modws2_32.NewProc("WSAIoctl") @@ -534,25 +552,25 @@ var ( ) func cm_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) (ret CONFIGRET) { - r0, _, _ := syscall.Syscall6(procCM_Get_DevNode_Status.Addr(), 4, uintptr(unsafe.Pointer(status)), uintptr(unsafe.Pointer(problemNumber)), uintptr(devInst), uintptr(flags), 0, 0) + r0, _, _ := syscall.SyscallN(procCM_Get_DevNode_Status.Addr(), uintptr(unsafe.Pointer(status)), uintptr(unsafe.Pointer(problemNumber)), uintptr(devInst), uintptr(flags)) ret = CONFIGRET(r0) return } func cm_Get_Device_Interface_List(interfaceClass *GUID, deviceID *uint16, buffer *uint16, bufferLen uint32, flags uint32) (ret CONFIGRET) { - r0, _, _ := syscall.Syscall6(procCM_Get_Device_Interface_ListW.Addr(), 5, uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(unsafe.Pointer(buffer)), uintptr(bufferLen), uintptr(flags), 0) + r0, _, _ := syscall.SyscallN(procCM_Get_Device_Interface_ListW.Addr(), uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(unsafe.Pointer(buffer)), uintptr(bufferLen), uintptr(flags)) ret = CONFIGRET(r0) return } func cm_Get_Device_Interface_List_Size(len *uint32, interfaceClass *GUID, deviceID *uint16, flags uint32) (ret CONFIGRET) { - r0, _, _ := syscall.Syscall6(procCM_Get_Device_Interface_List_SizeW.Addr(), 4, uintptr(unsafe.Pointer(len)), uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(flags), 0, 0) + r0, _, _ := syscall.SyscallN(procCM_Get_Device_Interface_List_SizeW.Addr(), uintptr(unsafe.Pointer(len)), uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(flags)) ret = CONFIGRET(r0) return } func cm_MapCrToWin32Err(configRet CONFIGRET, defaultWin32Error Errno) (ret Errno) { - r0, _, _ := syscall.Syscall(procCM_MapCrToWin32Err.Addr(), 2, uintptr(configRet), uintptr(defaultWin32Error), 0) + r0, _, _ := syscall.SyscallN(procCM_MapCrToWin32Err.Addr(), uintptr(configRet), uintptr(defaultWin32Error)) ret = Errno(r0) return } @@ -562,7 +580,7 @@ func AdjustTokenGroups(token Token, resetToDefault bool, newstate *Tokengroups, if resetToDefault { _p0 = 1 } - r1, _, e1 := syscall.Syscall6(procAdjustTokenGroups.Addr(), 6, uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(newstate)), uintptr(buflen), uintptr(unsafe.Pointer(prevstate)), uintptr(unsafe.Pointer(returnlen))) + r1, _, e1 := syscall.SyscallN(procAdjustTokenGroups.Addr(), uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(newstate)), uintptr(buflen), uintptr(unsafe.Pointer(prevstate)), uintptr(unsafe.Pointer(returnlen))) if r1 == 0 { err = errnoErr(e1) } @@ -574,7 +592,7 @@ func AdjustTokenPrivileges(token Token, disableAllPrivileges bool, newstate *Tok if disableAllPrivileges { _p0 = 1 } - r1, _, e1 := syscall.Syscall6(procAdjustTokenPrivileges.Addr(), 6, uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(newstate)), uintptr(buflen), uintptr(unsafe.Pointer(prevstate)), uintptr(unsafe.Pointer(returnlen))) + r1, _, e1 := syscall.SyscallN(procAdjustTokenPrivileges.Addr(), uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(newstate)), uintptr(buflen), uintptr(unsafe.Pointer(prevstate)), uintptr(unsafe.Pointer(returnlen))) if r1 == 0 { err = errnoErr(e1) } @@ -582,7 +600,7 @@ func AdjustTokenPrivileges(token Token, disableAllPrivileges bool, newstate *Tok } func AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) { - r1, _, e1 := syscall.Syscall12(procAllocateAndInitializeSid.Addr(), 11, uintptr(unsafe.Pointer(identAuth)), uintptr(subAuth), uintptr(subAuth0), uintptr(subAuth1), uintptr(subAuth2), uintptr(subAuth3), uintptr(subAuth4), uintptr(subAuth5), uintptr(subAuth6), uintptr(subAuth7), uintptr(unsafe.Pointer(sid)), 0) + r1, _, e1 := syscall.SyscallN(procAllocateAndInitializeSid.Addr(), uintptr(unsafe.Pointer(identAuth)), uintptr(subAuth), uintptr(subAuth0), uintptr(subAuth1), uintptr(subAuth2), uintptr(subAuth3), uintptr(subAuth4), uintptr(subAuth5), uintptr(subAuth6), uintptr(subAuth7), uintptr(unsafe.Pointer(sid))) if r1 == 0 { err = errnoErr(e1) } @@ -590,7 +608,7 @@ func AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, s } func buildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, countAccessEntries uint32, accessEntries *EXPLICIT_ACCESS, countAuditEntries uint32, auditEntries *EXPLICIT_ACCESS, oldSecurityDescriptor *SECURITY_DESCRIPTOR, sizeNewSecurityDescriptor *uint32, newSecurityDescriptor **SECURITY_DESCRIPTOR) (ret error) { - r0, _, _ := syscall.Syscall9(procBuildSecurityDescriptorW.Addr(), 9, uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(countAccessEntries), uintptr(unsafe.Pointer(accessEntries)), uintptr(countAuditEntries), uintptr(unsafe.Pointer(auditEntries)), uintptr(unsafe.Pointer(oldSecurityDescriptor)), uintptr(unsafe.Pointer(sizeNewSecurityDescriptor)), uintptr(unsafe.Pointer(newSecurityDescriptor))) + r0, _, _ := syscall.SyscallN(procBuildSecurityDescriptorW.Addr(), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(countAccessEntries), uintptr(unsafe.Pointer(accessEntries)), uintptr(countAuditEntries), uintptr(unsafe.Pointer(auditEntries)), uintptr(unsafe.Pointer(oldSecurityDescriptor)), uintptr(unsafe.Pointer(sizeNewSecurityDescriptor)), uintptr(unsafe.Pointer(newSecurityDescriptor))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -598,7 +616,7 @@ func buildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, countAccessEntries } func ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) { - r1, _, e1 := syscall.Syscall(procChangeServiceConfig2W.Addr(), 3, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(info))) + r1, _, e1 := syscall.SyscallN(procChangeServiceConfig2W.Addr(), uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(info))) if r1 == 0 { err = errnoErr(e1) } @@ -606,7 +624,7 @@ func ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err err } func ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, errorControl uint32, binaryPathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16, displayName *uint16) (err error) { - r1, _, e1 := syscall.Syscall12(procChangeServiceConfigW.Addr(), 11, uintptr(service), uintptr(serviceType), uintptr(startType), uintptr(errorControl), uintptr(unsafe.Pointer(binaryPathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), uintptr(unsafe.Pointer(displayName)), 0) + r1, _, e1 := syscall.SyscallN(procChangeServiceConfigW.Addr(), uintptr(service), uintptr(serviceType), uintptr(startType), uintptr(errorControl), uintptr(unsafe.Pointer(binaryPathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), uintptr(unsafe.Pointer(displayName))) if r1 == 0 { err = errnoErr(e1) } @@ -614,7 +632,7 @@ func ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, e } func checkTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) (err error) { - r1, _, e1 := syscall.Syscall(procCheckTokenMembership.Addr(), 3, uintptr(tokenHandle), uintptr(unsafe.Pointer(sidToCheck)), uintptr(unsafe.Pointer(isMember))) + r1, _, e1 := syscall.SyscallN(procCheckTokenMembership.Addr(), uintptr(tokenHandle), uintptr(unsafe.Pointer(sidToCheck)), uintptr(unsafe.Pointer(isMember))) if r1 == 0 { err = errnoErr(e1) } @@ -622,7 +640,7 @@ func checkTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) ( } func CloseServiceHandle(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procCloseServiceHandle.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procCloseServiceHandle.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -630,7 +648,7 @@ func CloseServiceHandle(handle Handle) (err error) { } func ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) { - r1, _, e1 := syscall.Syscall(procControlService.Addr(), 3, uintptr(service), uintptr(control), uintptr(unsafe.Pointer(status))) + r1, _, e1 := syscall.SyscallN(procControlService.Addr(), uintptr(service), uintptr(control), uintptr(unsafe.Pointer(status))) if r1 == 0 { err = errnoErr(e1) } @@ -638,7 +656,7 @@ func ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err } func convertSecurityDescriptorToStringSecurityDescriptor(sd *SECURITY_DESCRIPTOR, revision uint32, securityInformation SECURITY_INFORMATION, str **uint16, strLen *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procConvertSecurityDescriptorToStringSecurityDescriptorW.Addr(), 5, uintptr(unsafe.Pointer(sd)), uintptr(revision), uintptr(securityInformation), uintptr(unsafe.Pointer(str)), uintptr(unsafe.Pointer(strLen)), 0) + r1, _, e1 := syscall.SyscallN(procConvertSecurityDescriptorToStringSecurityDescriptorW.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(revision), uintptr(securityInformation), uintptr(unsafe.Pointer(str)), uintptr(unsafe.Pointer(strLen))) if r1 == 0 { err = errnoErr(e1) } @@ -646,7 +664,7 @@ func convertSecurityDescriptorToStringSecurityDescriptor(sd *SECURITY_DESCRIPTOR } func ConvertSidToStringSid(sid *SID, stringSid **uint16) (err error) { - r1, _, e1 := syscall.Syscall(procConvertSidToStringSidW.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(stringSid)), 0) + r1, _, e1 := syscall.SyscallN(procConvertSidToStringSidW.Addr(), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(stringSid))) if r1 == 0 { err = errnoErr(e1) } @@ -663,7 +681,7 @@ func convertStringSecurityDescriptorToSecurityDescriptor(str string, revision ui } func _convertStringSecurityDescriptorToSecurityDescriptor(str *uint16, revision uint32, sd **SECURITY_DESCRIPTOR, size *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procConvertStringSecurityDescriptorToSecurityDescriptorW.Addr(), 4, uintptr(unsafe.Pointer(str)), uintptr(revision), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(size)), 0, 0) + r1, _, e1 := syscall.SyscallN(procConvertStringSecurityDescriptorToSecurityDescriptorW.Addr(), uintptr(unsafe.Pointer(str)), uintptr(revision), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(size))) if r1 == 0 { err = errnoErr(e1) } @@ -671,7 +689,7 @@ func _convertStringSecurityDescriptorToSecurityDescriptor(str *uint16, revision } func ConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) { - r1, _, e1 := syscall.Syscall(procConvertStringSidToSidW.Addr(), 2, uintptr(unsafe.Pointer(stringSid)), uintptr(unsafe.Pointer(sid)), 0) + r1, _, e1 := syscall.SyscallN(procConvertStringSidToSidW.Addr(), uintptr(unsafe.Pointer(stringSid)), uintptr(unsafe.Pointer(sid))) if r1 == 0 { err = errnoErr(e1) } @@ -679,7 +697,7 @@ func ConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) { } func CopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) { - r1, _, e1 := syscall.Syscall(procCopySid.Addr(), 3, uintptr(destSidLen), uintptr(unsafe.Pointer(destSid)), uintptr(unsafe.Pointer(srcSid))) + r1, _, e1 := syscall.SyscallN(procCopySid.Addr(), uintptr(destSidLen), uintptr(unsafe.Pointer(destSid)), uintptr(unsafe.Pointer(srcSid))) if r1 == 0 { err = errnoErr(e1) } @@ -691,7 +709,7 @@ func CreateProcessAsUser(token Token, appName *uint16, commandLine *uint16, proc if inheritHandles { _p0 = 1 } - r1, _, e1 := syscall.Syscall12(procCreateProcessAsUserW.Addr(), 11, uintptr(token), uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo)), 0) + r1, _, e1 := syscall.SyscallN(procCreateProcessAsUserW.Addr(), uintptr(token), uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo))) if r1 == 0 { err = errnoErr(e1) } @@ -699,7 +717,7 @@ func CreateProcessAsUser(token Token, appName *uint16, commandLine *uint16, proc } func CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall15(procCreateServiceW.Addr(), 13, uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(unsafe.Pointer(displayName)), uintptr(access), uintptr(srvType), uintptr(startType), uintptr(errCtl), uintptr(unsafe.Pointer(pathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), 0, 0) + r0, _, e1 := syscall.SyscallN(procCreateServiceW.Addr(), uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(unsafe.Pointer(displayName)), uintptr(access), uintptr(srvType), uintptr(startType), uintptr(errCtl), uintptr(unsafe.Pointer(pathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password))) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -708,7 +726,7 @@ func CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access } func createWellKnownSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID, sid *SID, sizeSid *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procCreateWellKnownSid.Addr(), 4, uintptr(sidType), uintptr(unsafe.Pointer(domainSid)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sizeSid)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCreateWellKnownSid.Addr(), uintptr(sidType), uintptr(unsafe.Pointer(domainSid)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sizeSid))) if r1 == 0 { err = errnoErr(e1) } @@ -716,7 +734,7 @@ func createWellKnownSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID, sid *SID, s } func CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procCryptAcquireContextW.Addr(), 5, uintptr(unsafe.Pointer(provhandle)), uintptr(unsafe.Pointer(container)), uintptr(unsafe.Pointer(provider)), uintptr(provtype), uintptr(flags), 0) + r1, _, e1 := syscall.SyscallN(procCryptAcquireContextW.Addr(), uintptr(unsafe.Pointer(provhandle)), uintptr(unsafe.Pointer(container)), uintptr(unsafe.Pointer(provider)), uintptr(provtype), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -724,7 +742,7 @@ func CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16 } func CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) { - r1, _, e1 := syscall.Syscall(procCryptGenRandom.Addr(), 3, uintptr(provhandle), uintptr(buflen), uintptr(unsafe.Pointer(buf))) + r1, _, e1 := syscall.SyscallN(procCryptGenRandom.Addr(), uintptr(provhandle), uintptr(buflen), uintptr(unsafe.Pointer(buf))) if r1 == 0 { err = errnoErr(e1) } @@ -732,7 +750,7 @@ func CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) { } func CryptReleaseContext(provhandle Handle, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procCryptReleaseContext.Addr(), 2, uintptr(provhandle), uintptr(flags), 0) + r1, _, e1 := syscall.SyscallN(procCryptReleaseContext.Addr(), uintptr(provhandle), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -740,7 +758,7 @@ func CryptReleaseContext(provhandle Handle, flags uint32) (err error) { } func DeleteService(service Handle) (err error) { - r1, _, e1 := syscall.Syscall(procDeleteService.Addr(), 1, uintptr(service), 0, 0) + r1, _, e1 := syscall.SyscallN(procDeleteService.Addr(), uintptr(service)) if r1 == 0 { err = errnoErr(e1) } @@ -748,7 +766,7 @@ func DeleteService(service Handle) (err error) { } func DeregisterEventSource(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procDeregisterEventSource.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procDeregisterEventSource.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -756,7 +774,7 @@ func DeregisterEventSource(handle Handle) (err error) { } func DuplicateTokenEx(existingToken Token, desiredAccess uint32, tokenAttributes *SecurityAttributes, impersonationLevel uint32, tokenType uint32, newToken *Token) (err error) { - r1, _, e1 := syscall.Syscall6(procDuplicateTokenEx.Addr(), 6, uintptr(existingToken), uintptr(desiredAccess), uintptr(unsafe.Pointer(tokenAttributes)), uintptr(impersonationLevel), uintptr(tokenType), uintptr(unsafe.Pointer(newToken))) + r1, _, e1 := syscall.SyscallN(procDuplicateTokenEx.Addr(), uintptr(existingToken), uintptr(desiredAccess), uintptr(unsafe.Pointer(tokenAttributes)), uintptr(impersonationLevel), uintptr(tokenType), uintptr(unsafe.Pointer(newToken))) if r1 == 0 { err = errnoErr(e1) } @@ -764,7 +782,7 @@ func DuplicateTokenEx(existingToken Token, desiredAccess uint32, tokenAttributes } func EnumDependentServices(service Handle, activityState uint32, services *ENUM_SERVICE_STATUS, buffSize uint32, bytesNeeded *uint32, servicesReturned *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procEnumDependentServicesW.Addr(), 6, uintptr(service), uintptr(activityState), uintptr(unsafe.Pointer(services)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned))) + r1, _, e1 := syscall.SyscallN(procEnumDependentServicesW.Addr(), uintptr(service), uintptr(activityState), uintptr(unsafe.Pointer(services)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned))) if r1 == 0 { err = errnoErr(e1) } @@ -772,7 +790,7 @@ func EnumDependentServices(service Handle, activityState uint32, services *ENUM_ } func EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) { - r1, _, e1 := syscall.Syscall12(procEnumServicesStatusExW.Addr(), 10, uintptr(mgr), uintptr(infoLevel), uintptr(serviceType), uintptr(serviceState), uintptr(unsafe.Pointer(services)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)), uintptr(unsafe.Pointer(resumeHandle)), uintptr(unsafe.Pointer(groupName)), 0, 0) + r1, _, e1 := syscall.SyscallN(procEnumServicesStatusExW.Addr(), uintptr(mgr), uintptr(infoLevel), uintptr(serviceType), uintptr(serviceState), uintptr(unsafe.Pointer(services)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)), uintptr(unsafe.Pointer(resumeHandle)), uintptr(unsafe.Pointer(groupName))) if r1 == 0 { err = errnoErr(e1) } @@ -780,13 +798,13 @@ func EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serv } func EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) { - r0, _, _ := syscall.Syscall(procEqualSid.Addr(), 2, uintptr(unsafe.Pointer(sid1)), uintptr(unsafe.Pointer(sid2)), 0) + r0, _, _ := syscall.SyscallN(procEqualSid.Addr(), uintptr(unsafe.Pointer(sid1)), uintptr(unsafe.Pointer(sid2))) isEqual = r0 != 0 return } func FreeSid(sid *SID) (err error) { - r1, _, e1 := syscall.Syscall(procFreeSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + r1, _, e1 := syscall.SyscallN(procFreeSid.Addr(), uintptr(unsafe.Pointer(sid))) if r1 != 0 { err = errnoErr(e1) } @@ -794,7 +812,7 @@ func FreeSid(sid *SID) (err error) { } func GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (err error) { - r1, _, e1 := syscall.Syscall(procGetAce.Addr(), 3, uintptr(unsafe.Pointer(acl)), uintptr(aceIndex), uintptr(unsafe.Pointer(pAce))) + r1, _, e1 := syscall.SyscallN(procGetAce.Addr(), uintptr(unsafe.Pointer(acl)), uintptr(aceIndex), uintptr(unsafe.Pointer(pAce))) if r1 == 0 { err = errnoErr(e1) } @@ -802,7 +820,7 @@ func GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (err error) { } func GetLengthSid(sid *SID) (len uint32) { - r0, _, _ := syscall.Syscall(procGetLengthSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetLengthSid.Addr(), uintptr(unsafe.Pointer(sid))) len = uint32(r0) return } @@ -817,7 +835,7 @@ func getNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, security } func _getNamedSecurityInfo(objectName *uint16, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) { - r0, _, _ := syscall.Syscall9(procGetNamedSecurityInfoW.Addr(), 8, uintptr(unsafe.Pointer(objectName)), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(sd)), 0) + r0, _, _ := syscall.SyscallN(procGetNamedSecurityInfoW.Addr(), uintptr(unsafe.Pointer(objectName)), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(sd))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -825,7 +843,7 @@ func _getNamedSecurityInfo(objectName *uint16, objectType SE_OBJECT_TYPE, securi } func getSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, control *SECURITY_DESCRIPTOR_CONTROL, revision *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetSecurityDescriptorControl.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(control)), uintptr(unsafe.Pointer(revision))) + r1, _, e1 := syscall.SyscallN(procGetSecurityDescriptorControl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(control)), uintptr(unsafe.Pointer(revision))) if r1 == 0 { err = errnoErr(e1) } @@ -841,7 +859,7 @@ func getSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent *bool, dacl if *daclDefaulted { _p1 = 1 } - r1, _, e1 := syscall.Syscall6(procGetSecurityDescriptorDacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(&_p0)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(&_p1)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetSecurityDescriptorDacl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(&_p0)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(&_p1))) *daclPresent = _p0 != 0 *daclDefaulted = _p1 != 0 if r1 == 0 { @@ -855,7 +873,7 @@ func getSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group **SID, groupDefau if *groupDefaulted { _p0 = 1 } - r1, _, e1 := syscall.Syscall(procGetSecurityDescriptorGroup.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(&_p0))) + r1, _, e1 := syscall.SyscallN(procGetSecurityDescriptorGroup.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(&_p0))) *groupDefaulted = _p0 != 0 if r1 == 0 { err = errnoErr(e1) @@ -864,7 +882,7 @@ func getSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group **SID, groupDefau } func getSecurityDescriptorLength(sd *SECURITY_DESCRIPTOR) (len uint32) { - r0, _, _ := syscall.Syscall(procGetSecurityDescriptorLength.Addr(), 1, uintptr(unsafe.Pointer(sd)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetSecurityDescriptorLength.Addr(), uintptr(unsafe.Pointer(sd))) len = uint32(r0) return } @@ -874,7 +892,7 @@ func getSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner **SID, ownerDefau if *ownerDefaulted { _p0 = 1 } - r1, _, e1 := syscall.Syscall(procGetSecurityDescriptorOwner.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(&_p0))) + r1, _, e1 := syscall.SyscallN(procGetSecurityDescriptorOwner.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(&_p0))) *ownerDefaulted = _p0 != 0 if r1 == 0 { err = errnoErr(e1) @@ -883,7 +901,7 @@ func getSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner **SID, ownerDefau } func getSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) (ret error) { - r0, _, _ := syscall.Syscall(procGetSecurityDescriptorRMControl.Addr(), 2, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(rmControl)), 0) + r0, _, _ := syscall.SyscallN(procGetSecurityDescriptorRMControl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(rmControl))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -899,7 +917,7 @@ func getSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent *bool, sacl if *saclDefaulted { _p1 = 1 } - r1, _, e1 := syscall.Syscall6(procGetSecurityDescriptorSacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(&_p0)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(&_p1)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetSecurityDescriptorSacl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(&_p0)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(&_p1))) *saclPresent = _p0 != 0 *saclDefaulted = _p1 != 0 if r1 == 0 { @@ -909,7 +927,7 @@ func getSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent *bool, sacl } func getSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) { - r0, _, _ := syscall.Syscall9(procGetSecurityInfo.Addr(), 8, uintptr(handle), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(sd)), 0) + r0, _, _ := syscall.SyscallN(procGetSecurityInfo.Addr(), uintptr(handle), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(sd))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -917,25 +935,25 @@ func getSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformati } func getSidIdentifierAuthority(sid *SID) (authority *SidIdentifierAuthority) { - r0, _, _ := syscall.Syscall(procGetSidIdentifierAuthority.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetSidIdentifierAuthority.Addr(), uintptr(unsafe.Pointer(sid))) authority = (*SidIdentifierAuthority)(unsafe.Pointer(r0)) return } func getSidSubAuthority(sid *SID, index uint32) (subAuthority *uint32) { - r0, _, _ := syscall.Syscall(procGetSidSubAuthority.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(index), 0) + r0, _, _ := syscall.SyscallN(procGetSidSubAuthority.Addr(), uintptr(unsafe.Pointer(sid)), uintptr(index)) subAuthority = (*uint32)(unsafe.Pointer(r0)) return } func getSidSubAuthorityCount(sid *SID) (count *uint8) { - r0, _, _ := syscall.Syscall(procGetSidSubAuthorityCount.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetSidSubAuthorityCount.Addr(), uintptr(unsafe.Pointer(sid))) count = (*uint8)(unsafe.Pointer(r0)) return } func GetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetTokenInformation.Addr(), 5, uintptr(token), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen), uintptr(unsafe.Pointer(returnedLen)), 0) + r1, _, e1 := syscall.SyscallN(procGetTokenInformation.Addr(), uintptr(token), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen), uintptr(unsafe.Pointer(returnedLen))) if r1 == 0 { err = errnoErr(e1) } @@ -943,7 +961,7 @@ func GetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint } func ImpersonateSelf(impersonationlevel uint32) (err error) { - r1, _, e1 := syscall.Syscall(procImpersonateSelf.Addr(), 1, uintptr(impersonationlevel), 0, 0) + r1, _, e1 := syscall.SyscallN(procImpersonateSelf.Addr(), uintptr(impersonationlevel)) if r1 == 0 { err = errnoErr(e1) } @@ -951,7 +969,7 @@ func ImpersonateSelf(impersonationlevel uint32) (err error) { } func initializeSecurityDescriptor(absoluteSD *SECURITY_DESCRIPTOR, revision uint32) (err error) { - r1, _, e1 := syscall.Syscall(procInitializeSecurityDescriptor.Addr(), 2, uintptr(unsafe.Pointer(absoluteSD)), uintptr(revision), 0) + r1, _, e1 := syscall.SyscallN(procInitializeSecurityDescriptor.Addr(), uintptr(unsafe.Pointer(absoluteSD)), uintptr(revision)) if r1 == 0 { err = errnoErr(e1) } @@ -967,7 +985,7 @@ func InitiateSystemShutdownEx(machineName *uint16, message *uint16, timeout uint if rebootAfterShutdown { _p1 = 1 } - r1, _, e1 := syscall.Syscall6(procInitiateSystemShutdownExW.Addr(), 6, uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(message)), uintptr(timeout), uintptr(_p0), uintptr(_p1), uintptr(reason)) + r1, _, e1 := syscall.SyscallN(procInitiateSystemShutdownExW.Addr(), uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(message)), uintptr(timeout), uintptr(_p0), uintptr(_p1), uintptr(reason)) if r1 == 0 { err = errnoErr(e1) } @@ -975,7 +993,7 @@ func InitiateSystemShutdownEx(machineName *uint16, message *uint16, timeout uint } func isTokenRestricted(tokenHandle Token) (ret bool, err error) { - r0, _, e1 := syscall.Syscall(procIsTokenRestricted.Addr(), 1, uintptr(tokenHandle), 0, 0) + r0, _, e1 := syscall.SyscallN(procIsTokenRestricted.Addr(), uintptr(tokenHandle)) ret = r0 != 0 if !ret { err = errnoErr(e1) @@ -984,25 +1002,25 @@ func isTokenRestricted(tokenHandle Token) (ret bool, err error) { } func isValidSecurityDescriptor(sd *SECURITY_DESCRIPTOR) (isValid bool) { - r0, _, _ := syscall.Syscall(procIsValidSecurityDescriptor.Addr(), 1, uintptr(unsafe.Pointer(sd)), 0, 0) + r0, _, _ := syscall.SyscallN(procIsValidSecurityDescriptor.Addr(), uintptr(unsafe.Pointer(sd))) isValid = r0 != 0 return } func isValidSid(sid *SID) (isValid bool) { - r0, _, _ := syscall.Syscall(procIsValidSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + r0, _, _ := syscall.SyscallN(procIsValidSid.Addr(), uintptr(unsafe.Pointer(sid))) isValid = r0 != 0 return } func isWellKnownSid(sid *SID, sidType WELL_KNOWN_SID_TYPE) (isWellKnown bool) { - r0, _, _ := syscall.Syscall(procIsWellKnownSid.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(sidType), 0) + r0, _, _ := syscall.SyscallN(procIsWellKnownSid.Addr(), uintptr(unsafe.Pointer(sid)), uintptr(sidType)) isWellKnown = r0 != 0 return } func LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procLookupAccountNameW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)), 0, 0) + r1, _, e1 := syscall.SyscallN(procLookupAccountNameW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use))) if r1 == 0 { err = errnoErr(e1) } @@ -1010,7 +1028,7 @@ func LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen } func LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procLookupAccountSidW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)), 0, 0) + r1, _, e1 := syscall.SyscallN(procLookupAccountSidW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use))) if r1 == 0 { err = errnoErr(e1) } @@ -1018,7 +1036,7 @@ func LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint3 } func LookupPrivilegeValue(systemname *uint16, name *uint16, luid *LUID) (err error) { - r1, _, e1 := syscall.Syscall(procLookupPrivilegeValueW.Addr(), 3, uintptr(unsafe.Pointer(systemname)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid))) + r1, _, e1 := syscall.SyscallN(procLookupPrivilegeValueW.Addr(), uintptr(unsafe.Pointer(systemname)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid))) if r1 == 0 { err = errnoErr(e1) } @@ -1026,7 +1044,7 @@ func LookupPrivilegeValue(systemname *uint16, name *uint16, luid *LUID) (err err } func makeAbsoluteSD(selfRelativeSD *SECURITY_DESCRIPTOR, absoluteSD *SECURITY_DESCRIPTOR, absoluteSDSize *uint32, dacl *ACL, daclSize *uint32, sacl *ACL, saclSize *uint32, owner *SID, ownerSize *uint32, group *SID, groupSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall12(procMakeAbsoluteSD.Addr(), 11, uintptr(unsafe.Pointer(selfRelativeSD)), uintptr(unsafe.Pointer(absoluteSD)), uintptr(unsafe.Pointer(absoluteSDSize)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(daclSize)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(saclSize)), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(ownerSize)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(groupSize)), 0) + r1, _, e1 := syscall.SyscallN(procMakeAbsoluteSD.Addr(), uintptr(unsafe.Pointer(selfRelativeSD)), uintptr(unsafe.Pointer(absoluteSD)), uintptr(unsafe.Pointer(absoluteSDSize)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(daclSize)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(saclSize)), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(ownerSize)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(groupSize))) if r1 == 0 { err = errnoErr(e1) } @@ -1034,7 +1052,7 @@ func makeAbsoluteSD(selfRelativeSD *SECURITY_DESCRIPTOR, absoluteSD *SECURITY_DE } func makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURITY_DESCRIPTOR, selfRelativeSDSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procMakeSelfRelativeSD.Addr(), 3, uintptr(unsafe.Pointer(absoluteSD)), uintptr(unsafe.Pointer(selfRelativeSD)), uintptr(unsafe.Pointer(selfRelativeSDSize))) + r1, _, e1 := syscall.SyscallN(procMakeSelfRelativeSD.Addr(), uintptr(unsafe.Pointer(absoluteSD)), uintptr(unsafe.Pointer(selfRelativeSD)), uintptr(unsafe.Pointer(selfRelativeSDSize))) if r1 == 0 { err = errnoErr(e1) } @@ -1042,7 +1060,7 @@ func makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURIT } func NotifyServiceStatusChange(service Handle, notifyMask uint32, notifier *SERVICE_NOTIFY) (ret error) { - r0, _, _ := syscall.Syscall(procNotifyServiceStatusChangeW.Addr(), 3, uintptr(service), uintptr(notifyMask), uintptr(unsafe.Pointer(notifier))) + r0, _, _ := syscall.SyscallN(procNotifyServiceStatusChangeW.Addr(), uintptr(service), uintptr(notifyMask), uintptr(unsafe.Pointer(notifier))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -1050,7 +1068,7 @@ func NotifyServiceStatusChange(service Handle, notifyMask uint32, notifier *SERV } func OpenProcessToken(process Handle, access uint32, token *Token) (err error) { - r1, _, e1 := syscall.Syscall(procOpenProcessToken.Addr(), 3, uintptr(process), uintptr(access), uintptr(unsafe.Pointer(token))) + r1, _, e1 := syscall.SyscallN(procOpenProcessToken.Addr(), uintptr(process), uintptr(access), uintptr(unsafe.Pointer(token))) if r1 == 0 { err = errnoErr(e1) } @@ -1058,7 +1076,7 @@ func OpenProcessToken(process Handle, access uint32, token *Token) (err error) { } func OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procOpenSCManagerW.Addr(), 3, uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(databaseName)), uintptr(access)) + r0, _, e1 := syscall.SyscallN(procOpenSCManagerW.Addr(), uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(databaseName)), uintptr(access)) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -1067,7 +1085,7 @@ func OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (ha } func OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procOpenServiceW.Addr(), 3, uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(access)) + r0, _, e1 := syscall.SyscallN(procOpenServiceW.Addr(), uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(access)) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -1080,7 +1098,7 @@ func OpenThreadToken(thread Handle, access uint32, openAsSelf bool, token *Token if openAsSelf { _p0 = 1 } - r1, _, e1 := syscall.Syscall6(procOpenThreadToken.Addr(), 4, uintptr(thread), uintptr(access), uintptr(_p0), uintptr(unsafe.Pointer(token)), 0, 0) + r1, _, e1 := syscall.SyscallN(procOpenThreadToken.Addr(), uintptr(thread), uintptr(access), uintptr(_p0), uintptr(unsafe.Pointer(token))) if r1 == 0 { err = errnoErr(e1) } @@ -1088,7 +1106,7 @@ func OpenThreadToken(thread Handle, access uint32, openAsSelf bool, token *Token } func QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procQueryServiceConfig2W.Addr(), 5, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), 0) + r1, _, e1 := syscall.SyscallN(procQueryServiceConfig2W.Addr(), uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded))) if r1 == 0 { err = errnoErr(e1) } @@ -1096,7 +1114,7 @@ func QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize } func QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procQueryServiceConfigW.Addr(), 4, uintptr(service), uintptr(unsafe.Pointer(serviceConfig)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), 0, 0) + r1, _, e1 := syscall.SyscallN(procQueryServiceConfigW.Addr(), uintptr(service), uintptr(unsafe.Pointer(serviceConfig)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded))) if r1 == 0 { err = errnoErr(e1) } @@ -1108,7 +1126,7 @@ func QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInf if err != nil { return } - r1, _, e1 := syscall.Syscall(procQueryServiceDynamicInformation.Addr(), 3, uintptr(service), uintptr(infoLevel), uintptr(dynamicInfo)) + r1, _, e1 := syscall.SyscallN(procQueryServiceDynamicInformation.Addr(), uintptr(service), uintptr(infoLevel), uintptr(dynamicInfo)) if r1 == 0 { err = errnoErr(e1) } @@ -1116,7 +1134,7 @@ func QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInf } func QueryServiceLockStatus(mgr Handle, lockStatus *QUERY_SERVICE_LOCK_STATUS, bufSize uint32, bytesNeeded *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procQueryServiceLockStatusW.Addr(), 4, uintptr(mgr), uintptr(unsafe.Pointer(lockStatus)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), 0, 0) + r1, _, e1 := syscall.SyscallN(procQueryServiceLockStatusW.Addr(), uintptr(mgr), uintptr(unsafe.Pointer(lockStatus)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded))) if r1 == 0 { err = errnoErr(e1) } @@ -1124,7 +1142,7 @@ func QueryServiceLockStatus(mgr Handle, lockStatus *QUERY_SERVICE_LOCK_STATUS, b } func QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) { - r1, _, e1 := syscall.Syscall(procQueryServiceStatus.Addr(), 2, uintptr(service), uintptr(unsafe.Pointer(status)), 0) + r1, _, e1 := syscall.SyscallN(procQueryServiceStatus.Addr(), uintptr(service), uintptr(unsafe.Pointer(status))) if r1 == 0 { err = errnoErr(e1) } @@ -1132,7 +1150,7 @@ func QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) { } func QueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procQueryServiceStatusEx.Addr(), 5, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), 0) + r1, _, e1 := syscall.SyscallN(procQueryServiceStatusEx.Addr(), uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded))) if r1 == 0 { err = errnoErr(e1) } @@ -1140,7 +1158,7 @@ func QueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize } func RegCloseKey(key Handle) (regerrno error) { - r0, _, _ := syscall.Syscall(procRegCloseKey.Addr(), 1, uintptr(key), 0, 0) + r0, _, _ := syscall.SyscallN(procRegCloseKey.Addr(), uintptr(key)) if r0 != 0 { regerrno = syscall.Errno(r0) } @@ -1148,7 +1166,7 @@ func RegCloseKey(key Handle) (regerrno error) { } func RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) { - r0, _, _ := syscall.Syscall9(procRegEnumKeyExW.Addr(), 8, uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(lastWriteTime)), 0) + r0, _, _ := syscall.SyscallN(procRegEnumKeyExW.Addr(), uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(lastWriteTime))) if r0 != 0 { regerrno = syscall.Errno(r0) } @@ -1164,7 +1182,7 @@ func RegNotifyChangeKeyValue(key Handle, watchSubtree bool, notifyFilter uint32, if asynchronous { _p1 = 1 } - r0, _, _ := syscall.Syscall6(procRegNotifyChangeKeyValue.Addr(), 5, uintptr(key), uintptr(_p0), uintptr(notifyFilter), uintptr(event), uintptr(_p1), 0) + r0, _, _ := syscall.SyscallN(procRegNotifyChangeKeyValue.Addr(), uintptr(key), uintptr(_p0), uintptr(notifyFilter), uintptr(event), uintptr(_p1)) if r0 != 0 { regerrno = syscall.Errno(r0) } @@ -1172,7 +1190,7 @@ func RegNotifyChangeKeyValue(key Handle, watchSubtree bool, notifyFilter uint32, } func RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) { - r0, _, _ := syscall.Syscall6(procRegOpenKeyExW.Addr(), 5, uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(options), uintptr(desiredAccess), uintptr(unsafe.Pointer(result)), 0) + r0, _, _ := syscall.SyscallN(procRegOpenKeyExW.Addr(), uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(options), uintptr(desiredAccess), uintptr(unsafe.Pointer(result))) if r0 != 0 { regerrno = syscall.Errno(r0) } @@ -1180,7 +1198,7 @@ func RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint } func RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) { - r0, _, _ := syscall.Syscall12(procRegQueryInfoKeyW.Addr(), 12, uintptr(key), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(subkeysLen)), uintptr(unsafe.Pointer(maxSubkeyLen)), uintptr(unsafe.Pointer(maxClassLen)), uintptr(unsafe.Pointer(valuesLen)), uintptr(unsafe.Pointer(maxValueNameLen)), uintptr(unsafe.Pointer(maxValueLen)), uintptr(unsafe.Pointer(saLen)), uintptr(unsafe.Pointer(lastWriteTime))) + r0, _, _ := syscall.SyscallN(procRegQueryInfoKeyW.Addr(), uintptr(key), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(subkeysLen)), uintptr(unsafe.Pointer(maxSubkeyLen)), uintptr(unsafe.Pointer(maxClassLen)), uintptr(unsafe.Pointer(valuesLen)), uintptr(unsafe.Pointer(maxValueNameLen)), uintptr(unsafe.Pointer(maxValueLen)), uintptr(unsafe.Pointer(saLen)), uintptr(unsafe.Pointer(lastWriteTime))) if r0 != 0 { regerrno = syscall.Errno(r0) } @@ -1188,7 +1206,7 @@ func RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint } func RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) { - r0, _, _ := syscall.Syscall6(procRegQueryValueExW.Addr(), 6, uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen))) + r0, _, _ := syscall.SyscallN(procRegQueryValueExW.Addr(), uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen))) if r0 != 0 { regerrno = syscall.Errno(r0) } @@ -1196,7 +1214,7 @@ func RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32 } func RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procRegisterEventSourceW.Addr(), 2, uintptr(unsafe.Pointer(uncServerName)), uintptr(unsafe.Pointer(sourceName)), 0) + r0, _, e1 := syscall.SyscallN(procRegisterEventSourceW.Addr(), uintptr(unsafe.Pointer(uncServerName)), uintptr(unsafe.Pointer(sourceName))) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -1205,7 +1223,7 @@ func RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Hand } func RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procRegisterServiceCtrlHandlerExW.Addr(), 3, uintptr(unsafe.Pointer(serviceName)), uintptr(handlerProc), uintptr(context)) + r0, _, e1 := syscall.SyscallN(procRegisterServiceCtrlHandlerExW.Addr(), uintptr(unsafe.Pointer(serviceName)), uintptr(handlerProc), uintptr(context)) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -1214,7 +1232,7 @@ func RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, cont } func ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) { - r1, _, e1 := syscall.Syscall9(procReportEventW.Addr(), 9, uintptr(log), uintptr(etype), uintptr(category), uintptr(eventId), uintptr(usrSId), uintptr(numStrings), uintptr(dataSize), uintptr(unsafe.Pointer(strings)), uintptr(unsafe.Pointer(rawData))) + r1, _, e1 := syscall.SyscallN(procReportEventW.Addr(), uintptr(log), uintptr(etype), uintptr(category), uintptr(eventId), uintptr(usrSId), uintptr(numStrings), uintptr(dataSize), uintptr(unsafe.Pointer(strings)), uintptr(unsafe.Pointer(rawData))) if r1 == 0 { err = errnoErr(e1) } @@ -1222,7 +1240,7 @@ func ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrS } func RevertToSelf() (err error) { - r1, _, e1 := syscall.Syscall(procRevertToSelf.Addr(), 0, 0, 0, 0) + r1, _, e1 := syscall.SyscallN(procRevertToSelf.Addr()) if r1 == 0 { err = errnoErr(e1) } @@ -1230,7 +1248,7 @@ func RevertToSelf() (err error) { } func setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCESS, oldACL *ACL, newACL **ACL) (ret error) { - r0, _, _ := syscall.Syscall6(procSetEntriesInAclW.Addr(), 4, uintptr(countExplicitEntries), uintptr(unsafe.Pointer(explicitEntries)), uintptr(unsafe.Pointer(oldACL)), uintptr(unsafe.Pointer(newACL)), 0, 0) + r0, _, _ := syscall.SyscallN(procSetEntriesInAclW.Addr(), uintptr(countExplicitEntries), uintptr(unsafe.Pointer(explicitEntries)), uintptr(unsafe.Pointer(oldACL)), uintptr(unsafe.Pointer(newACL))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -1238,7 +1256,7 @@ func setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCE } func SetKernelObjectSecurity(handle Handle, securityInformation SECURITY_INFORMATION, securityDescriptor *SECURITY_DESCRIPTOR) (err error) { - r1, _, e1 := syscall.Syscall(procSetKernelObjectSecurity.Addr(), 3, uintptr(handle), uintptr(securityInformation), uintptr(unsafe.Pointer(securityDescriptor))) + r1, _, e1 := syscall.SyscallN(procSetKernelObjectSecurity.Addr(), uintptr(handle), uintptr(securityInformation), uintptr(unsafe.Pointer(securityDescriptor))) if r1 == 0 { err = errnoErr(e1) } @@ -1255,7 +1273,7 @@ func SetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, security } func _SetNamedSecurityInfo(objectName *uint16, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) { - r0, _, _ := syscall.Syscall9(procSetNamedSecurityInfoW.Addr(), 7, uintptr(unsafe.Pointer(objectName)), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), 0, 0) + r0, _, _ := syscall.SyscallN(procSetNamedSecurityInfoW.Addr(), uintptr(unsafe.Pointer(objectName)), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -1263,7 +1281,7 @@ func _SetNamedSecurityInfo(objectName *uint16, objectType SE_OBJECT_TYPE, securi } func setSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, controlBitsOfInterest SECURITY_DESCRIPTOR_CONTROL, controlBitsToSet SECURITY_DESCRIPTOR_CONTROL) (err error) { - r1, _, e1 := syscall.Syscall(procSetSecurityDescriptorControl.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(controlBitsOfInterest), uintptr(controlBitsToSet)) + r1, _, e1 := syscall.SyscallN(procSetSecurityDescriptorControl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(controlBitsOfInterest), uintptr(controlBitsToSet)) if r1 == 0 { err = errnoErr(e1) } @@ -1279,7 +1297,7 @@ func setSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent bool, dacl * if daclDefaulted { _p1 = 1 } - r1, _, e1 := syscall.Syscall6(procSetSecurityDescriptorDacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(_p0), uintptr(unsafe.Pointer(dacl)), uintptr(_p1), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetSecurityDescriptorDacl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(_p0), uintptr(unsafe.Pointer(dacl)), uintptr(_p1)) if r1 == 0 { err = errnoErr(e1) } @@ -1291,7 +1309,7 @@ func setSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group *SID, groupDefaul if groupDefaulted { _p0 = 1 } - r1, _, e1 := syscall.Syscall(procSetSecurityDescriptorGroup.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(group)), uintptr(_p0)) + r1, _, e1 := syscall.SyscallN(procSetSecurityDescriptorGroup.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(group)), uintptr(_p0)) if r1 == 0 { err = errnoErr(e1) } @@ -1303,7 +1321,7 @@ func setSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner *SID, ownerDefaul if ownerDefaulted { _p0 = 1 } - r1, _, e1 := syscall.Syscall(procSetSecurityDescriptorOwner.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(owner)), uintptr(_p0)) + r1, _, e1 := syscall.SyscallN(procSetSecurityDescriptorOwner.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(owner)), uintptr(_p0)) if r1 == 0 { err = errnoErr(e1) } @@ -1311,7 +1329,7 @@ func setSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner *SID, ownerDefaul } func setSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) { - syscall.Syscall(procSetSecurityDescriptorRMControl.Addr(), 2, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(rmControl)), 0) + syscall.SyscallN(procSetSecurityDescriptorRMControl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(rmControl))) return } @@ -1324,7 +1342,7 @@ func setSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent bool, sacl * if saclDefaulted { _p1 = 1 } - r1, _, e1 := syscall.Syscall6(procSetSecurityDescriptorSacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(_p0), uintptr(unsafe.Pointer(sacl)), uintptr(_p1), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetSecurityDescriptorSacl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(_p0), uintptr(unsafe.Pointer(sacl)), uintptr(_p1)) if r1 == 0 { err = errnoErr(e1) } @@ -1332,7 +1350,7 @@ func setSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent bool, sacl * } func SetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) { - r0, _, _ := syscall.Syscall9(procSetSecurityInfo.Addr(), 7, uintptr(handle), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), 0, 0) + r0, _, _ := syscall.SyscallN(procSetSecurityInfo.Addr(), uintptr(handle), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -1340,7 +1358,7 @@ func SetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformati } func SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) { - r1, _, e1 := syscall.Syscall(procSetServiceStatus.Addr(), 2, uintptr(service), uintptr(unsafe.Pointer(serviceStatus)), 0) + r1, _, e1 := syscall.SyscallN(procSetServiceStatus.Addr(), uintptr(service), uintptr(unsafe.Pointer(serviceStatus))) if r1 == 0 { err = errnoErr(e1) } @@ -1348,7 +1366,7 @@ func SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) } func SetThreadToken(thread *Handle, token Token) (err error) { - r1, _, e1 := syscall.Syscall(procSetThreadToken.Addr(), 2, uintptr(unsafe.Pointer(thread)), uintptr(token), 0) + r1, _, e1 := syscall.SyscallN(procSetThreadToken.Addr(), uintptr(unsafe.Pointer(thread)), uintptr(token)) if r1 == 0 { err = errnoErr(e1) } @@ -1356,7 +1374,7 @@ func SetThreadToken(thread *Handle, token Token) (err error) { } func SetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetTokenInformation.Addr(), 4, uintptr(token), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetTokenInformation.Addr(), uintptr(token), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen)) if r1 == 0 { err = errnoErr(e1) } @@ -1364,7 +1382,7 @@ func SetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint } func StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) { - r1, _, e1 := syscall.Syscall(procStartServiceCtrlDispatcherW.Addr(), 1, uintptr(unsafe.Pointer(serviceTable)), 0, 0) + r1, _, e1 := syscall.SyscallN(procStartServiceCtrlDispatcherW.Addr(), uintptr(unsafe.Pointer(serviceTable))) if r1 == 0 { err = errnoErr(e1) } @@ -1372,7 +1390,7 @@ func StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) { } func StartService(service Handle, numArgs uint32, argVectors **uint16) (err error) { - r1, _, e1 := syscall.Syscall(procStartServiceW.Addr(), 3, uintptr(service), uintptr(numArgs), uintptr(unsafe.Pointer(argVectors))) + r1, _, e1 := syscall.SyscallN(procStartServiceW.Addr(), uintptr(service), uintptr(numArgs), uintptr(unsafe.Pointer(argVectors))) if r1 == 0 { err = errnoErr(e1) } @@ -1380,7 +1398,7 @@ func StartService(service Handle, numArgs uint32, argVectors **uint16) (err erro } func CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) { - r1, _, e1 := syscall.Syscall6(procCertAddCertificateContextToStore.Addr(), 4, uintptr(store), uintptr(unsafe.Pointer(certContext)), uintptr(addDisposition), uintptr(unsafe.Pointer(storeContext)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCertAddCertificateContextToStore.Addr(), uintptr(store), uintptr(unsafe.Pointer(certContext)), uintptr(addDisposition), uintptr(unsafe.Pointer(storeContext))) if r1 == 0 { err = errnoErr(e1) } @@ -1388,7 +1406,7 @@ func CertAddCertificateContextToStore(store Handle, certContext *CertContext, ad } func CertCloseStore(store Handle, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procCertCloseStore.Addr(), 2, uintptr(store), uintptr(flags), 0) + r1, _, e1 := syscall.SyscallN(procCertCloseStore.Addr(), uintptr(store), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -1396,7 +1414,7 @@ func CertCloseStore(store Handle, flags uint32) (err error) { } func CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) { - r0, _, e1 := syscall.Syscall(procCertCreateCertificateContext.Addr(), 3, uintptr(certEncodingType), uintptr(unsafe.Pointer(certEncoded)), uintptr(encodedLen)) + r0, _, e1 := syscall.SyscallN(procCertCreateCertificateContext.Addr(), uintptr(certEncodingType), uintptr(unsafe.Pointer(certEncoded)), uintptr(encodedLen)) context = (*CertContext)(unsafe.Pointer(r0)) if context == nil { err = errnoErr(e1) @@ -1405,7 +1423,7 @@ func CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, en } func CertDeleteCertificateFromStore(certContext *CertContext) (err error) { - r1, _, e1 := syscall.Syscall(procCertDeleteCertificateFromStore.Addr(), 1, uintptr(unsafe.Pointer(certContext)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCertDeleteCertificateFromStore.Addr(), uintptr(unsafe.Pointer(certContext))) if r1 == 0 { err = errnoErr(e1) } @@ -1413,13 +1431,13 @@ func CertDeleteCertificateFromStore(certContext *CertContext) (err error) { } func CertDuplicateCertificateContext(certContext *CertContext) (dupContext *CertContext) { - r0, _, _ := syscall.Syscall(procCertDuplicateCertificateContext.Addr(), 1, uintptr(unsafe.Pointer(certContext)), 0, 0) + r0, _, _ := syscall.SyscallN(procCertDuplicateCertificateContext.Addr(), uintptr(unsafe.Pointer(certContext))) dupContext = (*CertContext)(unsafe.Pointer(r0)) return } func CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) { - r0, _, e1 := syscall.Syscall(procCertEnumCertificatesInStore.Addr(), 2, uintptr(store), uintptr(unsafe.Pointer(prevContext)), 0) + r0, _, e1 := syscall.SyscallN(procCertEnumCertificatesInStore.Addr(), uintptr(store), uintptr(unsafe.Pointer(prevContext))) context = (*CertContext)(unsafe.Pointer(r0)) if context == nil { err = errnoErr(e1) @@ -1428,7 +1446,7 @@ func CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (contex } func CertFindCertificateInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevCertContext *CertContext) (cert *CertContext, err error) { - r0, _, e1 := syscall.Syscall6(procCertFindCertificateInStore.Addr(), 6, uintptr(store), uintptr(certEncodingType), uintptr(findFlags), uintptr(findType), uintptr(findPara), uintptr(unsafe.Pointer(prevCertContext))) + r0, _, e1 := syscall.SyscallN(procCertFindCertificateInStore.Addr(), uintptr(store), uintptr(certEncodingType), uintptr(findFlags), uintptr(findType), uintptr(findPara), uintptr(unsafe.Pointer(prevCertContext))) cert = (*CertContext)(unsafe.Pointer(r0)) if cert == nil { err = errnoErr(e1) @@ -1437,7 +1455,7 @@ func CertFindCertificateInStore(store Handle, certEncodingType uint32, findFlags } func CertFindChainInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevChainContext *CertChainContext) (certchain *CertChainContext, err error) { - r0, _, e1 := syscall.Syscall6(procCertFindChainInStore.Addr(), 6, uintptr(store), uintptr(certEncodingType), uintptr(findFlags), uintptr(findType), uintptr(findPara), uintptr(unsafe.Pointer(prevChainContext))) + r0, _, e1 := syscall.SyscallN(procCertFindChainInStore.Addr(), uintptr(store), uintptr(certEncodingType), uintptr(findFlags), uintptr(findType), uintptr(findPara), uintptr(unsafe.Pointer(prevChainContext))) certchain = (*CertChainContext)(unsafe.Pointer(r0)) if certchain == nil { err = errnoErr(e1) @@ -1446,18 +1464,18 @@ func CertFindChainInStore(store Handle, certEncodingType uint32, findFlags uint3 } func CertFindExtension(objId *byte, countExtensions uint32, extensions *CertExtension) (ret *CertExtension) { - r0, _, _ := syscall.Syscall(procCertFindExtension.Addr(), 3, uintptr(unsafe.Pointer(objId)), uintptr(countExtensions), uintptr(unsafe.Pointer(extensions))) + r0, _, _ := syscall.SyscallN(procCertFindExtension.Addr(), uintptr(unsafe.Pointer(objId)), uintptr(countExtensions), uintptr(unsafe.Pointer(extensions))) ret = (*CertExtension)(unsafe.Pointer(r0)) return } func CertFreeCertificateChain(ctx *CertChainContext) { - syscall.Syscall(procCertFreeCertificateChain.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0) + syscall.SyscallN(procCertFreeCertificateChain.Addr(), uintptr(unsafe.Pointer(ctx))) return } func CertFreeCertificateContext(ctx *CertContext) (err error) { - r1, _, e1 := syscall.Syscall(procCertFreeCertificateContext.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCertFreeCertificateContext.Addr(), uintptr(unsafe.Pointer(ctx))) if r1 == 0 { err = errnoErr(e1) } @@ -1465,7 +1483,7 @@ func CertFreeCertificateContext(ctx *CertContext) (err error) { } func CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) { - r1, _, e1 := syscall.Syscall9(procCertGetCertificateChain.Addr(), 8, uintptr(engine), uintptr(unsafe.Pointer(leaf)), uintptr(unsafe.Pointer(time)), uintptr(additionalStore), uintptr(unsafe.Pointer(para)), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(chainCtx)), 0) + r1, _, e1 := syscall.SyscallN(procCertGetCertificateChain.Addr(), uintptr(engine), uintptr(unsafe.Pointer(leaf)), uintptr(unsafe.Pointer(time)), uintptr(additionalStore), uintptr(unsafe.Pointer(para)), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(chainCtx))) if r1 == 0 { err = errnoErr(e1) } @@ -1473,13 +1491,13 @@ func CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, a } func CertGetNameString(certContext *CertContext, nameType uint32, flags uint32, typePara unsafe.Pointer, name *uint16, size uint32) (chars uint32) { - r0, _, _ := syscall.Syscall6(procCertGetNameStringW.Addr(), 6, uintptr(unsafe.Pointer(certContext)), uintptr(nameType), uintptr(flags), uintptr(typePara), uintptr(unsafe.Pointer(name)), uintptr(size)) + r0, _, _ := syscall.SyscallN(procCertGetNameStringW.Addr(), uintptr(unsafe.Pointer(certContext)), uintptr(nameType), uintptr(flags), uintptr(typePara), uintptr(unsafe.Pointer(name)), uintptr(size)) chars = uint32(r0) return } func CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCertOpenStore.Addr(), 5, uintptr(storeProvider), uintptr(msgAndCertEncodingType), uintptr(cryptProv), uintptr(flags), uintptr(para), 0) + r0, _, e1 := syscall.SyscallN(procCertOpenStore.Addr(), uintptr(storeProvider), uintptr(msgAndCertEncodingType), uintptr(cryptProv), uintptr(flags), uintptr(para)) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -1488,7 +1506,7 @@ func CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptPr } func CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) { - r0, _, e1 := syscall.Syscall(procCertOpenSystemStoreW.Addr(), 2, uintptr(hprov), uintptr(unsafe.Pointer(name)), 0) + r0, _, e1 := syscall.SyscallN(procCertOpenSystemStoreW.Addr(), uintptr(hprov), uintptr(unsafe.Pointer(name))) store = Handle(r0) if store == 0 { err = errnoErr(e1) @@ -1497,7 +1515,7 @@ func CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) { } func CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) { - r1, _, e1 := syscall.Syscall6(procCertVerifyCertificateChainPolicy.Addr(), 4, uintptr(policyOID), uintptr(unsafe.Pointer(chain)), uintptr(unsafe.Pointer(para)), uintptr(unsafe.Pointer(status)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCertVerifyCertificateChainPolicy.Addr(), uintptr(policyOID), uintptr(unsafe.Pointer(chain)), uintptr(unsafe.Pointer(para)), uintptr(unsafe.Pointer(status))) if r1 == 0 { err = errnoErr(e1) } @@ -1509,7 +1527,7 @@ func CryptAcquireCertificatePrivateKey(cert *CertContext, flags uint32, paramete if *callerFreeProvOrNCryptKey { _p0 = 1 } - r1, _, e1 := syscall.Syscall6(procCryptAcquireCertificatePrivateKey.Addr(), 6, uintptr(unsafe.Pointer(cert)), uintptr(flags), uintptr(parameters), uintptr(unsafe.Pointer(cryptProvOrNCryptKey)), uintptr(unsafe.Pointer(keySpec)), uintptr(unsafe.Pointer(&_p0))) + r1, _, e1 := syscall.SyscallN(procCryptAcquireCertificatePrivateKey.Addr(), uintptr(unsafe.Pointer(cert)), uintptr(flags), uintptr(parameters), uintptr(unsafe.Pointer(cryptProvOrNCryptKey)), uintptr(unsafe.Pointer(keySpec)), uintptr(unsafe.Pointer(&_p0))) *callerFreeProvOrNCryptKey = _p0 != 0 if r1 == 0 { err = errnoErr(e1) @@ -1518,7 +1536,7 @@ func CryptAcquireCertificatePrivateKey(cert *CertContext, flags uint32, paramete } func CryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte, lenEncodedBytes uint32, flags uint32, decoded unsafe.Pointer, decodedLen *uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procCryptDecodeObject.Addr(), 7, uintptr(encodingType), uintptr(unsafe.Pointer(structType)), uintptr(unsafe.Pointer(encodedBytes)), uintptr(lenEncodedBytes), uintptr(flags), uintptr(decoded), uintptr(unsafe.Pointer(decodedLen)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCryptDecodeObject.Addr(), uintptr(encodingType), uintptr(unsafe.Pointer(structType)), uintptr(unsafe.Pointer(encodedBytes)), uintptr(lenEncodedBytes), uintptr(flags), uintptr(decoded), uintptr(unsafe.Pointer(decodedLen))) if r1 == 0 { err = errnoErr(e1) } @@ -1526,7 +1544,7 @@ func CryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte } func CryptProtectData(dataIn *DataBlob, name *uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) { - r1, _, e1 := syscall.Syscall9(procCryptProtectData.Addr(), 7, uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCryptProtectData.Addr(), uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut))) if r1 == 0 { err = errnoErr(e1) } @@ -1534,7 +1552,7 @@ func CryptProtectData(dataIn *DataBlob, name *uint16, optionalEntropy *DataBlob, } func CryptQueryObject(objectType uint32, object unsafe.Pointer, expectedContentTypeFlags uint32, expectedFormatTypeFlags uint32, flags uint32, msgAndCertEncodingType *uint32, contentType *uint32, formatType *uint32, certStore *Handle, msg *Handle, context *unsafe.Pointer) (err error) { - r1, _, e1 := syscall.Syscall12(procCryptQueryObject.Addr(), 11, uintptr(objectType), uintptr(object), uintptr(expectedContentTypeFlags), uintptr(expectedFormatTypeFlags), uintptr(flags), uintptr(unsafe.Pointer(msgAndCertEncodingType)), uintptr(unsafe.Pointer(contentType)), uintptr(unsafe.Pointer(formatType)), uintptr(unsafe.Pointer(certStore)), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(context)), 0) + r1, _, e1 := syscall.SyscallN(procCryptQueryObject.Addr(), uintptr(objectType), uintptr(object), uintptr(expectedContentTypeFlags), uintptr(expectedFormatTypeFlags), uintptr(flags), uintptr(unsafe.Pointer(msgAndCertEncodingType)), uintptr(unsafe.Pointer(contentType)), uintptr(unsafe.Pointer(formatType)), uintptr(unsafe.Pointer(certStore)), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(context))) if r1 == 0 { err = errnoErr(e1) } @@ -1542,7 +1560,7 @@ func CryptQueryObject(objectType uint32, object unsafe.Pointer, expectedContentT } func CryptUnprotectData(dataIn *DataBlob, name **uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) { - r1, _, e1 := syscall.Syscall9(procCryptUnprotectData.Addr(), 7, uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCryptUnprotectData.Addr(), uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut))) if r1 == 0 { err = errnoErr(e1) } @@ -1550,7 +1568,7 @@ func CryptUnprotectData(dataIn *DataBlob, name **uint16, optionalEntropy *DataBl } func PFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (store Handle, err error) { - r0, _, e1 := syscall.Syscall(procPFXImportCertStore.Addr(), 3, uintptr(unsafe.Pointer(pfx)), uintptr(unsafe.Pointer(password)), uintptr(flags)) + r0, _, e1 := syscall.SyscallN(procPFXImportCertStore.Addr(), uintptr(unsafe.Pointer(pfx)), uintptr(unsafe.Pointer(password)), uintptr(flags)) store = Handle(r0) if store == 0 { err = errnoErr(e1) @@ -1559,7 +1577,7 @@ func PFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (sto } func DnsNameCompare(name1 *uint16, name2 *uint16) (same bool) { - r0, _, _ := syscall.Syscall(procDnsNameCompare_W.Addr(), 2, uintptr(unsafe.Pointer(name1)), uintptr(unsafe.Pointer(name2)), 0) + r0, _, _ := syscall.SyscallN(procDnsNameCompare_W.Addr(), uintptr(unsafe.Pointer(name1)), uintptr(unsafe.Pointer(name2))) same = r0 != 0 return } @@ -1574,7 +1592,7 @@ func DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **DNSR } func _DnsQuery(name *uint16, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) { - r0, _, _ := syscall.Syscall6(procDnsQuery_W.Addr(), 6, uintptr(unsafe.Pointer(name)), uintptr(qtype), uintptr(options), uintptr(unsafe.Pointer(extra)), uintptr(unsafe.Pointer(qrs)), uintptr(unsafe.Pointer(pr))) + r0, _, _ := syscall.SyscallN(procDnsQuery_W.Addr(), uintptr(unsafe.Pointer(name)), uintptr(qtype), uintptr(options), uintptr(unsafe.Pointer(extra)), uintptr(unsafe.Pointer(qrs)), uintptr(unsafe.Pointer(pr))) if r0 != 0 { status = syscall.Errno(r0) } @@ -1582,12 +1600,12 @@ func _DnsQuery(name *uint16, qtype uint16, options uint32, extra *byte, qrs **DN } func DnsRecordListFree(rl *DNSRecord, freetype uint32) { - syscall.Syscall(procDnsRecordListFree.Addr(), 2, uintptr(unsafe.Pointer(rl)), uintptr(freetype), 0) + syscall.SyscallN(procDnsRecordListFree.Addr(), uintptr(unsafe.Pointer(rl)), uintptr(freetype)) return } func DwmGetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) { - r0, _, _ := syscall.Syscall6(procDwmGetWindowAttribute.Addr(), 4, uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size), 0, 0) + r0, _, _ := syscall.SyscallN(procDwmGetWindowAttribute.Addr(), uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size)) if r0 != 0 { ret = syscall.Errno(r0) } @@ -1595,15 +1613,28 @@ func DwmGetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, si } func DwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) { - r0, _, _ := syscall.Syscall6(procDwmSetWindowAttribute.Addr(), 4, uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size), 0, 0) + r0, _, _ := syscall.SyscallN(procDwmSetWindowAttribute.Addr(), uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size)) if r0 != 0 { ret = syscall.Errno(r0) } return } +func CancelMibChangeNotify2(notificationHandle Handle) (errcode error) { + r0, _, _ := syscall.SyscallN(procCancelMibChangeNotify2.Addr(), uintptr(notificationHandle)) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func FreeMibTable(memory unsafe.Pointer) { + syscall.SyscallN(procFreeMibTable.Addr(), uintptr(memory)) + return +} + func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) { - r0, _, _ := syscall.Syscall6(procGetAdaptersAddresses.Addr(), 5, uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer)), 0) + r0, _, _ := syscall.SyscallN(procGetAdaptersAddresses.Addr(), uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer))) if r0 != 0 { errcode = syscall.Errno(r0) } @@ -1611,7 +1642,7 @@ func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapter } func GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) { - r0, _, _ := syscall.Syscall(procGetAdaptersInfo.Addr(), 2, uintptr(unsafe.Pointer(ai)), uintptr(unsafe.Pointer(ol)), 0) + r0, _, _ := syscall.SyscallN(procGetAdaptersInfo.Addr(), uintptr(unsafe.Pointer(ai)), uintptr(unsafe.Pointer(ol))) if r0 != 0 { errcode = syscall.Errno(r0) } @@ -1619,7 +1650,7 @@ func GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) { } func getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) { - r0, _, _ := syscall.Syscall(procGetBestInterfaceEx.Addr(), 2, uintptr(sockaddr), uintptr(unsafe.Pointer(pdwBestIfIndex)), 0) + r0, _, _ := syscall.SyscallN(procGetBestInterfaceEx.Addr(), uintptr(sockaddr), uintptr(unsafe.Pointer(pdwBestIfIndex))) if r0 != 0 { errcode = syscall.Errno(r0) } @@ -1627,7 +1658,75 @@ func getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcod } func GetIfEntry(pIfRow *MibIfRow) (errcode error) { - r0, _, _ := syscall.Syscall(procGetIfEntry.Addr(), 1, uintptr(unsafe.Pointer(pIfRow)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetIfEntry.Addr(), uintptr(unsafe.Pointer(pIfRow))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) { + r0, _, _ := syscall.SyscallN(procGetIfEntry2Ex.Addr(), uintptr(level), uintptr(unsafe.Pointer(row))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetIpForwardEntry2(row *MibIpForwardRow2) (errcode error) { + r0, _, _ := syscall.SyscallN(procGetIpForwardEntry2.Addr(), uintptr(unsafe.Pointer(row))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetIpForwardTable2(family uint16, table **MibIpForwardTable2) (errcode error) { + r0, _, _ := syscall.SyscallN(procGetIpForwardTable2.Addr(), uintptr(family), uintptr(unsafe.Pointer(table))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) { + r0, _, _ := syscall.SyscallN(procGetUnicastIpAddressEntry.Addr(), uintptr(unsafe.Pointer(row))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) { + var _p0 uint32 + if initialNotification { + _p0 = 1 + } + r0, _, _ := syscall.SyscallN(procNotifyIpInterfaceChange.Addr(), uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func NotifyRouteChange2(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) { + var _p0 uint32 + if initialNotification { + _p0 = 1 + } + r0, _, _ := syscall.SyscallN(procNotifyRouteChange2.Addr(), uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func NotifyUnicastIpAddressChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) { + var _p0 uint32 + if initialNotification { + _p0 = 1 + } + r0, _, _ := syscall.SyscallN(procNotifyUnicastIpAddressChange.Addr(), uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle))) if r0 != 0 { errcode = syscall.Errno(r0) } @@ -1635,7 +1734,7 @@ func GetIfEntry(pIfRow *MibIfRow) (errcode error) { } func AddDllDirectory(path *uint16) (cookie uintptr, err error) { - r0, _, e1 := syscall.Syscall(procAddDllDirectory.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + r0, _, e1 := syscall.SyscallN(procAddDllDirectory.Addr(), uintptr(unsafe.Pointer(path))) cookie = uintptr(r0) if cookie == 0 { err = errnoErr(e1) @@ -1644,7 +1743,7 @@ func AddDllDirectory(path *uint16) (cookie uintptr, err error) { } func AssignProcessToJobObject(job Handle, process Handle) (err error) { - r1, _, e1 := syscall.Syscall(procAssignProcessToJobObject.Addr(), 2, uintptr(job), uintptr(process), 0) + r1, _, e1 := syscall.SyscallN(procAssignProcessToJobObject.Addr(), uintptr(job), uintptr(process)) if r1 == 0 { err = errnoErr(e1) } @@ -1652,7 +1751,7 @@ func AssignProcessToJobObject(job Handle, process Handle) (err error) { } func CancelIo(s Handle) (err error) { - r1, _, e1 := syscall.Syscall(procCancelIo.Addr(), 1, uintptr(s), 0, 0) + r1, _, e1 := syscall.SyscallN(procCancelIo.Addr(), uintptr(s)) if r1 == 0 { err = errnoErr(e1) } @@ -1660,7 +1759,7 @@ func CancelIo(s Handle) (err error) { } func CancelIoEx(s Handle, o *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall(procCancelIoEx.Addr(), 2, uintptr(s), uintptr(unsafe.Pointer(o)), 0) + r1, _, e1 := syscall.SyscallN(procCancelIoEx.Addr(), uintptr(s), uintptr(unsafe.Pointer(o))) if r1 == 0 { err = errnoErr(e1) } @@ -1668,7 +1767,7 @@ func CancelIoEx(s Handle, o *Overlapped) (err error) { } func ClearCommBreak(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procClearCommBreak.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procClearCommBreak.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -1676,7 +1775,7 @@ func ClearCommBreak(handle Handle) (err error) { } func ClearCommError(handle Handle, lpErrors *uint32, lpStat *ComStat) (err error) { - r1, _, e1 := syscall.Syscall(procClearCommError.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(lpErrors)), uintptr(unsafe.Pointer(lpStat))) + r1, _, e1 := syscall.SyscallN(procClearCommError.Addr(), uintptr(handle), uintptr(unsafe.Pointer(lpErrors)), uintptr(unsafe.Pointer(lpStat))) if r1 == 0 { err = errnoErr(e1) } @@ -1684,7 +1783,7 @@ func ClearCommError(handle Handle, lpErrors *uint32, lpStat *ComStat) (err error } func CloseHandle(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procCloseHandle.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procCloseHandle.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -1692,12 +1791,12 @@ func CloseHandle(handle Handle) (err error) { } func ClosePseudoConsole(console Handle) { - syscall.Syscall(procClosePseudoConsole.Addr(), 1, uintptr(console), 0, 0) + syscall.SyscallN(procClosePseudoConsole.Addr(), uintptr(console)) return } func ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall(procConnectNamedPipe.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(overlapped)), 0) + r1, _, e1 := syscall.SyscallN(procConnectNamedPipe.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(overlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -1705,7 +1804,7 @@ func ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error) { } func CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) { - r1, _, e1 := syscall.Syscall(procCreateDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(sa)), 0) + r1, _, e1 := syscall.SyscallN(procCreateDirectoryW.Addr(), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(sa))) if r1 == 0 { err = errnoErr(e1) } @@ -1713,7 +1812,7 @@ func CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) { } func CreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCreateEventExW.Addr(), 4, uintptr(unsafe.Pointer(eventAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess), 0, 0) + r0, _, e1 := syscall.SyscallN(procCreateEventExW.Addr(), uintptr(unsafe.Pointer(eventAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess)) handle = Handle(r0) if handle == 0 || e1 == ERROR_ALREADY_EXISTS { err = errnoErr(e1) @@ -1722,7 +1821,7 @@ func CreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, d } func CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCreateEventW.Addr(), 4, uintptr(unsafe.Pointer(eventAttrs)), uintptr(manualReset), uintptr(initialState), uintptr(unsafe.Pointer(name)), 0, 0) + r0, _, e1 := syscall.SyscallN(procCreateEventW.Addr(), uintptr(unsafe.Pointer(eventAttrs)), uintptr(manualReset), uintptr(initialState), uintptr(unsafe.Pointer(name))) handle = Handle(r0) if handle == 0 || e1 == ERROR_ALREADY_EXISTS { err = errnoErr(e1) @@ -1731,7 +1830,7 @@ func CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialStat } func CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCreateFileMappingW.Addr(), 6, uintptr(fhandle), uintptr(unsafe.Pointer(sa)), uintptr(prot), uintptr(maxSizeHigh), uintptr(maxSizeLow), uintptr(unsafe.Pointer(name))) + r0, _, e1 := syscall.SyscallN(procCreateFileMappingW.Addr(), uintptr(fhandle), uintptr(unsafe.Pointer(sa)), uintptr(prot), uintptr(maxSizeHigh), uintptr(maxSizeLow), uintptr(unsafe.Pointer(name))) handle = Handle(r0) if handle == 0 || e1 == ERROR_ALREADY_EXISTS { err = errnoErr(e1) @@ -1740,7 +1839,7 @@ func CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxS } func CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile Handle) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall9(procCreateFileW.Addr(), 7, uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile), 0, 0) + r0, _, e1 := syscall.SyscallN(procCreateFileW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile)) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -1749,7 +1848,7 @@ func CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes } func CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procCreateHardLinkW.Addr(), 3, uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(existingfilename)), uintptr(reserved)) + r1, _, e1 := syscall.SyscallN(procCreateHardLinkW.Addr(), uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(existingfilename)), uintptr(reserved)) if r1&0xff == 0 { err = errnoErr(e1) } @@ -1757,7 +1856,7 @@ func CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr } func CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uintptr, threadcnt uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCreateIoCompletionPort.Addr(), 4, uintptr(filehandle), uintptr(cphandle), uintptr(key), uintptr(threadcnt), 0, 0) + r0, _, e1 := syscall.SyscallN(procCreateIoCompletionPort.Addr(), uintptr(filehandle), uintptr(cphandle), uintptr(key), uintptr(threadcnt)) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -1766,7 +1865,7 @@ func CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uintptr, thr } func CreateJobObject(jobAttr *SecurityAttributes, name *uint16) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procCreateJobObjectW.Addr(), 2, uintptr(unsafe.Pointer(jobAttr)), uintptr(unsafe.Pointer(name)), 0) + r0, _, e1 := syscall.SyscallN(procCreateJobObjectW.Addr(), uintptr(unsafe.Pointer(jobAttr)), uintptr(unsafe.Pointer(name))) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -1775,7 +1874,7 @@ func CreateJobObject(jobAttr *SecurityAttributes, name *uint16) (handle Handle, } func CreateMutexEx(mutexAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCreateMutexExW.Addr(), 4, uintptr(unsafe.Pointer(mutexAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess), 0, 0) + r0, _, e1 := syscall.SyscallN(procCreateMutexExW.Addr(), uintptr(unsafe.Pointer(mutexAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess)) handle = Handle(r0) if handle == 0 || e1 == ERROR_ALREADY_EXISTS { err = errnoErr(e1) @@ -1788,7 +1887,7 @@ func CreateMutex(mutexAttrs *SecurityAttributes, initialOwner bool, name *uint16 if initialOwner { _p0 = 1 } - r0, _, e1 := syscall.Syscall(procCreateMutexW.Addr(), 3, uintptr(unsafe.Pointer(mutexAttrs)), uintptr(_p0), uintptr(unsafe.Pointer(name))) + r0, _, e1 := syscall.SyscallN(procCreateMutexW.Addr(), uintptr(unsafe.Pointer(mutexAttrs)), uintptr(_p0), uintptr(unsafe.Pointer(name))) handle = Handle(r0) if handle == 0 || e1 == ERROR_ALREADY_EXISTS { err = errnoErr(e1) @@ -1797,7 +1896,7 @@ func CreateMutex(mutexAttrs *SecurityAttributes, initialOwner bool, name *uint16 } func CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *SecurityAttributes) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall9(procCreateNamedPipeW.Addr(), 8, uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(pipeMode), uintptr(maxInstances), uintptr(outSize), uintptr(inSize), uintptr(defaultTimeout), uintptr(unsafe.Pointer(sa)), 0) + r0, _, e1 := syscall.SyscallN(procCreateNamedPipeW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(pipeMode), uintptr(maxInstances), uintptr(outSize), uintptr(inSize), uintptr(defaultTimeout), uintptr(unsafe.Pointer(sa))) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -1806,7 +1905,7 @@ func CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances u } func CreatePipe(readhandle *Handle, writehandle *Handle, sa *SecurityAttributes, size uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procCreatePipe.Addr(), 4, uintptr(unsafe.Pointer(readhandle)), uintptr(unsafe.Pointer(writehandle)), uintptr(unsafe.Pointer(sa)), uintptr(size), 0, 0) + r1, _, e1 := syscall.SyscallN(procCreatePipe.Addr(), uintptr(unsafe.Pointer(readhandle)), uintptr(unsafe.Pointer(writehandle)), uintptr(unsafe.Pointer(sa)), uintptr(size)) if r1 == 0 { err = errnoErr(e1) } @@ -1818,7 +1917,7 @@ func CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityA if inheritHandles { _p0 = 1 } - r1, _, e1 := syscall.Syscall12(procCreateProcessW.Addr(), 10, uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCreateProcessW.Addr(), uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo))) if r1 == 0 { err = errnoErr(e1) } @@ -1826,7 +1925,7 @@ func CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityA } func createPseudoConsole(size uint32, in Handle, out Handle, flags uint32, pconsole *Handle) (hr error) { - r0, _, _ := syscall.Syscall6(procCreatePseudoConsole.Addr(), 5, uintptr(size), uintptr(in), uintptr(out), uintptr(flags), uintptr(unsafe.Pointer(pconsole)), 0) + r0, _, _ := syscall.SyscallN(procCreatePseudoConsole.Addr(), uintptr(size), uintptr(in), uintptr(out), uintptr(flags), uintptr(unsafe.Pointer(pconsole))) if r0 != 0 { hr = syscall.Errno(r0) } @@ -1834,7 +1933,7 @@ func createPseudoConsole(size uint32, in Handle, out Handle, flags uint32, pcons } func CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procCreateSymbolicLinkW.Addr(), 3, uintptr(unsafe.Pointer(symlinkfilename)), uintptr(unsafe.Pointer(targetfilename)), uintptr(flags)) + r1, _, e1 := syscall.SyscallN(procCreateSymbolicLinkW.Addr(), uintptr(unsafe.Pointer(symlinkfilename)), uintptr(unsafe.Pointer(targetfilename)), uintptr(flags)) if r1&0xff == 0 { err = errnoErr(e1) } @@ -1842,7 +1941,7 @@ func CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags u } func CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procCreateToolhelp32Snapshot.Addr(), 2, uintptr(flags), uintptr(processId), 0) + r0, _, e1 := syscall.SyscallN(procCreateToolhelp32Snapshot.Addr(), uintptr(flags), uintptr(processId)) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -1851,7 +1950,7 @@ func CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, er } func DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procDefineDosDeviceW.Addr(), 3, uintptr(flags), uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath))) + r1, _, e1 := syscall.SyscallN(procDefineDosDeviceW.Addr(), uintptr(flags), uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath))) if r1 == 0 { err = errnoErr(e1) } @@ -1859,7 +1958,7 @@ func DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err } func DeleteFile(path *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procDeleteFileW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + r1, _, e1 := syscall.SyscallN(procDeleteFileW.Addr(), uintptr(unsafe.Pointer(path))) if r1 == 0 { err = errnoErr(e1) } @@ -1867,12 +1966,12 @@ func DeleteFile(path *uint16) (err error) { } func deleteProcThreadAttributeList(attrlist *ProcThreadAttributeList) { - syscall.Syscall(procDeleteProcThreadAttributeList.Addr(), 1, uintptr(unsafe.Pointer(attrlist)), 0, 0) + syscall.SyscallN(procDeleteProcThreadAttributeList.Addr(), uintptr(unsafe.Pointer(attrlist))) return } func DeleteVolumeMountPoint(volumeMountPoint *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procDeleteVolumeMountPointW.Addr(), 1, uintptr(unsafe.Pointer(volumeMountPoint)), 0, 0) + r1, _, e1 := syscall.SyscallN(procDeleteVolumeMountPointW.Addr(), uintptr(unsafe.Pointer(volumeMountPoint))) if r1 == 0 { err = errnoErr(e1) } @@ -1880,7 +1979,7 @@ func DeleteVolumeMountPoint(volumeMountPoint *uint16) (err error) { } func DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall9(procDeviceIoControl.Addr(), 8, uintptr(handle), uintptr(ioControlCode), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferSize), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferSize), uintptr(unsafe.Pointer(bytesReturned)), uintptr(unsafe.Pointer(overlapped)), 0) + r1, _, e1 := syscall.SyscallN(procDeviceIoControl.Addr(), uintptr(handle), uintptr(ioControlCode), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferSize), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferSize), uintptr(unsafe.Pointer(bytesReturned)), uintptr(unsafe.Pointer(overlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -1888,7 +1987,7 @@ func DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBuff } func DisconnectNamedPipe(pipe Handle) (err error) { - r1, _, e1 := syscall.Syscall(procDisconnectNamedPipe.Addr(), 1, uintptr(pipe), 0, 0) + r1, _, e1 := syscall.SyscallN(procDisconnectNamedPipe.Addr(), uintptr(pipe)) if r1 == 0 { err = errnoErr(e1) } @@ -1900,7 +1999,7 @@ func DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetP if bInheritHandle { _p0 = 1 } - r1, _, e1 := syscall.Syscall9(procDuplicateHandle.Addr(), 7, uintptr(hSourceProcessHandle), uintptr(hSourceHandle), uintptr(hTargetProcessHandle), uintptr(unsafe.Pointer(lpTargetHandle)), uintptr(dwDesiredAccess), uintptr(_p0), uintptr(dwOptions), 0, 0) + r1, _, e1 := syscall.SyscallN(procDuplicateHandle.Addr(), uintptr(hSourceProcessHandle), uintptr(hSourceHandle), uintptr(hTargetProcessHandle), uintptr(unsafe.Pointer(lpTargetHandle)), uintptr(dwDesiredAccess), uintptr(_p0), uintptr(dwOptions)) if r1 == 0 { err = errnoErr(e1) } @@ -1908,7 +2007,7 @@ func DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetP } func EscapeCommFunction(handle Handle, dwFunc uint32) (err error) { - r1, _, e1 := syscall.Syscall(procEscapeCommFunction.Addr(), 2, uintptr(handle), uintptr(dwFunc), 0) + r1, _, e1 := syscall.SyscallN(procEscapeCommFunction.Addr(), uintptr(handle), uintptr(dwFunc)) if r1 == 0 { err = errnoErr(e1) } @@ -1916,12 +2015,12 @@ func EscapeCommFunction(handle Handle, dwFunc uint32) (err error) { } func ExitProcess(exitcode uint32) { - syscall.Syscall(procExitProcess.Addr(), 1, uintptr(exitcode), 0, 0) + syscall.SyscallN(procExitProcess.Addr(), uintptr(exitcode)) return } func ExpandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procExpandEnvironmentStringsW.Addr(), 3, uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size)) + r0, _, e1 := syscall.SyscallN(procExpandEnvironmentStringsW.Addr(), uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size)) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -1930,7 +2029,7 @@ func ExpandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, } func FindClose(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procFindClose.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procFindClose.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -1938,7 +2037,7 @@ func FindClose(handle Handle) (err error) { } func FindCloseChangeNotification(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procFindCloseChangeNotification.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procFindCloseChangeNotification.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -1959,7 +2058,7 @@ func _FindFirstChangeNotification(path *uint16, watchSubtree bool, notifyFilter if watchSubtree { _p1 = 1 } - r0, _, e1 := syscall.Syscall(procFindFirstChangeNotificationW.Addr(), 3, uintptr(unsafe.Pointer(path)), uintptr(_p1), uintptr(notifyFilter)) + r0, _, e1 := syscall.SyscallN(procFindFirstChangeNotificationW.Addr(), uintptr(unsafe.Pointer(path)), uintptr(_p1), uintptr(notifyFilter)) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -1968,7 +2067,7 @@ func _FindFirstChangeNotification(path *uint16, watchSubtree bool, notifyFilter } func findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procFindFirstFileW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(data)), 0) + r0, _, e1 := syscall.SyscallN(procFindFirstFileW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(data))) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -1977,7 +2076,7 @@ func findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err erro } func FindFirstVolumeMountPoint(rootPathName *uint16, volumeMountPoint *uint16, bufferLength uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procFindFirstVolumeMountPointW.Addr(), 3, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength)) + r0, _, e1 := syscall.SyscallN(procFindFirstVolumeMountPointW.Addr(), uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength)) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -1986,7 +2085,7 @@ func FindFirstVolumeMountPoint(rootPathName *uint16, volumeMountPoint *uint16, b } func FindFirstVolume(volumeName *uint16, bufferLength uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procFindFirstVolumeW.Addr(), 2, uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength), 0) + r0, _, e1 := syscall.SyscallN(procFindFirstVolumeW.Addr(), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength)) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -1995,7 +2094,7 @@ func FindFirstVolume(volumeName *uint16, bufferLength uint32) (handle Handle, er } func FindNextChangeNotification(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procFindNextChangeNotification.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procFindNextChangeNotification.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -2003,7 +2102,7 @@ func FindNextChangeNotification(handle Handle) (err error) { } func findNextFile1(handle Handle, data *win32finddata1) (err error) { - r1, _, e1 := syscall.Syscall(procFindNextFileW.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0) + r1, _, e1 := syscall.SyscallN(procFindNextFileW.Addr(), uintptr(handle), uintptr(unsafe.Pointer(data))) if r1 == 0 { err = errnoErr(e1) } @@ -2011,7 +2110,7 @@ func findNextFile1(handle Handle, data *win32finddata1) (err error) { } func FindNextVolumeMountPoint(findVolumeMountPoint Handle, volumeMountPoint *uint16, bufferLength uint32) (err error) { - r1, _, e1 := syscall.Syscall(procFindNextVolumeMountPointW.Addr(), 3, uintptr(findVolumeMountPoint), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength)) + r1, _, e1 := syscall.SyscallN(procFindNextVolumeMountPointW.Addr(), uintptr(findVolumeMountPoint), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength)) if r1 == 0 { err = errnoErr(e1) } @@ -2019,7 +2118,7 @@ func FindNextVolumeMountPoint(findVolumeMountPoint Handle, volumeMountPoint *uin } func FindNextVolume(findVolume Handle, volumeName *uint16, bufferLength uint32) (err error) { - r1, _, e1 := syscall.Syscall(procFindNextVolumeW.Addr(), 3, uintptr(findVolume), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength)) + r1, _, e1 := syscall.SyscallN(procFindNextVolumeW.Addr(), uintptr(findVolume), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength)) if r1 == 0 { err = errnoErr(e1) } @@ -2027,7 +2126,7 @@ func FindNextVolume(findVolume Handle, volumeName *uint16, bufferLength uint32) } func findResource(module Handle, name uintptr, resType uintptr) (resInfo Handle, err error) { - r0, _, e1 := syscall.Syscall(procFindResourceW.Addr(), 3, uintptr(module), uintptr(name), uintptr(resType)) + r0, _, e1 := syscall.SyscallN(procFindResourceW.Addr(), uintptr(module), uintptr(name), uintptr(resType)) resInfo = Handle(r0) if resInfo == 0 { err = errnoErr(e1) @@ -2036,7 +2135,7 @@ func findResource(module Handle, name uintptr, resType uintptr) (resInfo Handle, } func FindVolumeClose(findVolume Handle) (err error) { - r1, _, e1 := syscall.Syscall(procFindVolumeClose.Addr(), 1, uintptr(findVolume), 0, 0) + r1, _, e1 := syscall.SyscallN(procFindVolumeClose.Addr(), uintptr(findVolume)) if r1 == 0 { err = errnoErr(e1) } @@ -2044,7 +2143,15 @@ func FindVolumeClose(findVolume Handle) (err error) { } func FindVolumeMountPointClose(findVolumeMountPoint Handle) (err error) { - r1, _, e1 := syscall.Syscall(procFindVolumeMountPointClose.Addr(), 1, uintptr(findVolumeMountPoint), 0, 0) + r1, _, e1 := syscall.SyscallN(procFindVolumeMountPointClose.Addr(), uintptr(findVolumeMountPoint)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FlushConsoleInputBuffer(console Handle) (err error) { + r1, _, e1 := syscall.SyscallN(procFlushConsoleInputBuffer.Addr(), uintptr(console)) if r1 == 0 { err = errnoErr(e1) } @@ -2052,7 +2159,7 @@ func FindVolumeMountPointClose(findVolumeMountPoint Handle) (err error) { } func FlushFileBuffers(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procFlushFileBuffers.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procFlushFileBuffers.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -2060,7 +2167,7 @@ func FlushFileBuffers(handle Handle) (err error) { } func FlushViewOfFile(addr uintptr, length uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procFlushViewOfFile.Addr(), 2, uintptr(addr), uintptr(length), 0) + r1, _, e1 := syscall.SyscallN(procFlushViewOfFile.Addr(), uintptr(addr), uintptr(length)) if r1 == 0 { err = errnoErr(e1) } @@ -2072,7 +2179,7 @@ func FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, bu if len(buf) > 0 { _p0 = &buf[0] } - r0, _, e1 := syscall.Syscall9(procFormatMessageW.Addr(), 7, uintptr(flags), uintptr(msgsrc), uintptr(msgid), uintptr(langid), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(args)), 0, 0) + r0, _, e1 := syscall.SyscallN(procFormatMessageW.Addr(), uintptr(flags), uintptr(msgsrc), uintptr(msgid), uintptr(langid), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(args))) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2081,7 +2188,7 @@ func FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, bu } func FreeEnvironmentStrings(envs *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procFreeEnvironmentStringsW.Addr(), 1, uintptr(unsafe.Pointer(envs)), 0, 0) + r1, _, e1 := syscall.SyscallN(procFreeEnvironmentStringsW.Addr(), uintptr(unsafe.Pointer(envs))) if r1 == 0 { err = errnoErr(e1) } @@ -2089,7 +2196,7 @@ func FreeEnvironmentStrings(envs *uint16) (err error) { } func FreeLibrary(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procFreeLibrary.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procFreeLibrary.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -2097,7 +2204,7 @@ func FreeLibrary(handle Handle) (err error) { } func GenerateConsoleCtrlEvent(ctrlEvent uint32, processGroupID uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGenerateConsoleCtrlEvent.Addr(), 2, uintptr(ctrlEvent), uintptr(processGroupID), 0) + r1, _, e1 := syscall.SyscallN(procGenerateConsoleCtrlEvent.Addr(), uintptr(ctrlEvent), uintptr(processGroupID)) if r1 == 0 { err = errnoErr(e1) } @@ -2105,19 +2212,19 @@ func GenerateConsoleCtrlEvent(ctrlEvent uint32, processGroupID uint32) (err erro } func GetACP() (acp uint32) { - r0, _, _ := syscall.Syscall(procGetACP.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetACP.Addr()) acp = uint32(r0) return } func GetActiveProcessorCount(groupNumber uint16) (ret uint32) { - r0, _, _ := syscall.Syscall(procGetActiveProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0) + r0, _, _ := syscall.SyscallN(procGetActiveProcessorCount.Addr(), uintptr(groupNumber)) ret = uint32(r0) return } func GetCommModemStatus(handle Handle, lpModemStat *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetCommModemStatus.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(lpModemStat)), 0) + r1, _, e1 := syscall.SyscallN(procGetCommModemStatus.Addr(), uintptr(handle), uintptr(unsafe.Pointer(lpModemStat))) if r1 == 0 { err = errnoErr(e1) } @@ -2125,7 +2232,7 @@ func GetCommModemStatus(handle Handle, lpModemStat *uint32) (err error) { } func GetCommState(handle Handle, lpDCB *DCB) (err error) { - r1, _, e1 := syscall.Syscall(procGetCommState.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(lpDCB)), 0) + r1, _, e1 := syscall.SyscallN(procGetCommState.Addr(), uintptr(handle), uintptr(unsafe.Pointer(lpDCB))) if r1 == 0 { err = errnoErr(e1) } @@ -2133,7 +2240,7 @@ func GetCommState(handle Handle, lpDCB *DCB) (err error) { } func GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) { - r1, _, e1 := syscall.Syscall(procGetCommTimeouts.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(timeouts)), 0) + r1, _, e1 := syscall.SyscallN(procGetCommTimeouts.Addr(), uintptr(handle), uintptr(unsafe.Pointer(timeouts))) if r1 == 0 { err = errnoErr(e1) } @@ -2141,13 +2248,13 @@ func GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) { } func GetCommandLine() (cmd *uint16) { - r0, _, _ := syscall.Syscall(procGetCommandLineW.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetCommandLineW.Addr()) cmd = (*uint16)(unsafe.Pointer(r0)) return } func GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetComputerNameExW.Addr(), 3, uintptr(nametype), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n))) + r1, _, e1 := syscall.SyscallN(procGetComputerNameExW.Addr(), uintptr(nametype), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n))) if r1 == 0 { err = errnoErr(e1) } @@ -2155,23 +2262,41 @@ func GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) { } func GetComputerName(buf *uint16, n *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetComputerNameW.Addr(), 2, uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n)), 0) + r1, _, e1 := syscall.SyscallN(procGetComputerNameW.Addr(), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n))) if r1 == 0 { err = errnoErr(e1) } return } +func GetConsoleCP() (cp uint32, err error) { + r0, _, e1 := syscall.SyscallN(procGetConsoleCP.Addr()) + cp = uint32(r0) + if cp == 0 { + err = errnoErr(e1) + } + return +} + func GetConsoleMode(console Handle, mode *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(mode)), 0) + r1, _, e1 := syscall.SyscallN(procGetConsoleMode.Addr(), uintptr(console), uintptr(unsafe.Pointer(mode))) if r1 == 0 { err = errnoErr(e1) } return } +func GetConsoleOutputCP() (cp uint32, err error) { + r0, _, e1 := syscall.SyscallN(procGetConsoleOutputCP.Addr()) + cp = uint32(r0) + if cp == 0 { + err = errnoErr(e1) + } + return +} + func GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) { - r1, _, e1 := syscall.Syscall(procGetConsoleScreenBufferInfo.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(info)), 0) + r1, _, e1 := syscall.SyscallN(procGetConsoleScreenBufferInfo.Addr(), uintptr(console), uintptr(unsafe.Pointer(info))) if r1 == 0 { err = errnoErr(e1) } @@ -2179,7 +2304,7 @@ func GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) ( } func GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetCurrentDirectoryW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0) + r0, _, e1 := syscall.SyscallN(procGetCurrentDirectoryW.Addr(), uintptr(buflen), uintptr(unsafe.Pointer(buf))) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2188,19 +2313,19 @@ func GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) { } func GetCurrentProcessId() (pid uint32) { - r0, _, _ := syscall.Syscall(procGetCurrentProcessId.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetCurrentProcessId.Addr()) pid = uint32(r0) return } func GetCurrentThreadId() (id uint32) { - r0, _, _ := syscall.Syscall(procGetCurrentThreadId.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetCurrentThreadId.Addr()) id = uint32(r0) return } func GetDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *uint64, totalNumberOfBytes *uint64, totalNumberOfFreeBytes *uint64) (err error) { - r1, _, e1 := syscall.Syscall6(procGetDiskFreeSpaceExW.Addr(), 4, uintptr(unsafe.Pointer(directoryName)), uintptr(unsafe.Pointer(freeBytesAvailableToCaller)), uintptr(unsafe.Pointer(totalNumberOfBytes)), uintptr(unsafe.Pointer(totalNumberOfFreeBytes)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetDiskFreeSpaceExW.Addr(), uintptr(unsafe.Pointer(directoryName)), uintptr(unsafe.Pointer(freeBytesAvailableToCaller)), uintptr(unsafe.Pointer(totalNumberOfBytes)), uintptr(unsafe.Pointer(totalNumberOfFreeBytes))) if r1 == 0 { err = errnoErr(e1) } @@ -2208,13 +2333,13 @@ func GetDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *uint6 } func GetDriveType(rootPathName *uint16) (driveType uint32) { - r0, _, _ := syscall.Syscall(procGetDriveTypeW.Addr(), 1, uintptr(unsafe.Pointer(rootPathName)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetDriveTypeW.Addr(), uintptr(unsafe.Pointer(rootPathName))) driveType = uint32(r0) return } func GetEnvironmentStrings() (envs *uint16, err error) { - r0, _, e1 := syscall.Syscall(procGetEnvironmentStringsW.Addr(), 0, 0, 0, 0) + r0, _, e1 := syscall.SyscallN(procGetEnvironmentStringsW.Addr()) envs = (*uint16)(unsafe.Pointer(r0)) if envs == nil { err = errnoErr(e1) @@ -2223,7 +2348,7 @@ func GetEnvironmentStrings() (envs *uint16, err error) { } func GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetEnvironmentVariableW.Addr(), 3, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(size)) + r0, _, e1 := syscall.SyscallN(procGetEnvironmentVariableW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(size)) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2232,7 +2357,7 @@ func GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32 } func GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetExitCodeProcess.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(exitcode)), 0) + r1, _, e1 := syscall.SyscallN(procGetExitCodeProcess.Addr(), uintptr(handle), uintptr(unsafe.Pointer(exitcode))) if r1 == 0 { err = errnoErr(e1) } @@ -2240,7 +2365,7 @@ func GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) { } func GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) { - r1, _, e1 := syscall.Syscall(procGetFileAttributesExW.Addr(), 3, uintptr(unsafe.Pointer(name)), uintptr(level), uintptr(unsafe.Pointer(info))) + r1, _, e1 := syscall.SyscallN(procGetFileAttributesExW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(level), uintptr(unsafe.Pointer(info))) if r1 == 0 { err = errnoErr(e1) } @@ -2248,7 +2373,7 @@ func GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) { } func GetFileAttributes(name *uint16) (attrs uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetFileAttributesW.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + r0, _, e1 := syscall.SyscallN(procGetFileAttributesW.Addr(), uintptr(unsafe.Pointer(name))) attrs = uint32(r0) if attrs == INVALID_FILE_ATTRIBUTES { err = errnoErr(e1) @@ -2257,7 +2382,7 @@ func GetFileAttributes(name *uint16) (attrs uint32, err error) { } func GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error) { - r1, _, e1 := syscall.Syscall(procGetFileInformationByHandle.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0) + r1, _, e1 := syscall.SyscallN(procGetFileInformationByHandle.Addr(), uintptr(handle), uintptr(unsafe.Pointer(data))) if r1 == 0 { err = errnoErr(e1) } @@ -2265,7 +2390,7 @@ func GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (e } func GetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte, outBufferLen uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetFileInformationByHandleEx.Addr(), 4, uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferLen), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetFileInformationByHandleEx.Addr(), uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferLen)) if r1 == 0 { err = errnoErr(e1) } @@ -2273,7 +2398,7 @@ func GetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte, } func GetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) { - r1, _, e1 := syscall.Syscall6(procGetFileTime.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetFileTime.Addr(), uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime))) if r1 == 0 { err = errnoErr(e1) } @@ -2281,7 +2406,7 @@ func GetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetim } func GetFileType(filehandle Handle) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetFileType.Addr(), 1, uintptr(filehandle), 0, 0) + r0, _, e1 := syscall.SyscallN(procGetFileType.Addr(), uintptr(filehandle)) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2290,7 +2415,7 @@ func GetFileType(filehandle Handle) (n uint32, err error) { } func GetFinalPathNameByHandle(file Handle, filePath *uint16, filePathSize uint32, flags uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall6(procGetFinalPathNameByHandleW.Addr(), 4, uintptr(file), uintptr(unsafe.Pointer(filePath)), uintptr(filePathSize), uintptr(flags), 0, 0) + r0, _, e1 := syscall.SyscallN(procGetFinalPathNameByHandleW.Addr(), uintptr(file), uintptr(unsafe.Pointer(filePath)), uintptr(filePathSize), uintptr(flags)) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2299,7 +2424,7 @@ func GetFinalPathNameByHandle(file Handle, filePath *uint16, filePathSize uint32 } func GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, err error) { - r0, _, e1 := syscall.Syscall6(procGetFullPathNameW.Addr(), 4, uintptr(unsafe.Pointer(path)), uintptr(buflen), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(fname)), 0, 0) + r0, _, e1 := syscall.SyscallN(procGetFullPathNameW.Addr(), uintptr(unsafe.Pointer(path)), uintptr(buflen), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(fname))) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2308,13 +2433,13 @@ func GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) ( } func GetLargePageMinimum() (size uintptr) { - r0, _, _ := syscall.Syscall(procGetLargePageMinimum.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetLargePageMinimum.Addr()) size = uintptr(r0) return } func GetLastError() (lasterr error) { - r0, _, _ := syscall.Syscall(procGetLastError.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetLastError.Addr()) if r0 != 0 { lasterr = syscall.Errno(r0) } @@ -2322,7 +2447,7 @@ func GetLastError() (lasterr error) { } func GetLogicalDriveStrings(bufferLength uint32, buffer *uint16) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetLogicalDriveStringsW.Addr(), 2, uintptr(bufferLength), uintptr(unsafe.Pointer(buffer)), 0) + r0, _, e1 := syscall.SyscallN(procGetLogicalDriveStringsW.Addr(), uintptr(bufferLength), uintptr(unsafe.Pointer(buffer))) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2331,7 +2456,7 @@ func GetLogicalDriveStrings(bufferLength uint32, buffer *uint16) (n uint32, err } func GetLogicalDrives() (drivesBitMask uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetLogicalDrives.Addr(), 0, 0, 0, 0) + r0, _, e1 := syscall.SyscallN(procGetLogicalDrives.Addr()) drivesBitMask = uint32(r0) if drivesBitMask == 0 { err = errnoErr(e1) @@ -2340,7 +2465,7 @@ func GetLogicalDrives() (drivesBitMask uint32, err error) { } func GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetLongPathNameW.Addr(), 3, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(buf)), uintptr(buflen)) + r0, _, e1 := syscall.SyscallN(procGetLongPathNameW.Addr(), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(buf)), uintptr(buflen)) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2349,13 +2474,13 @@ func GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err er } func GetMaximumProcessorCount(groupNumber uint16) (ret uint32) { - r0, _, _ := syscall.Syscall(procGetMaximumProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0) + r0, _, _ := syscall.SyscallN(procGetMaximumProcessorCount.Addr(), uintptr(groupNumber)) ret = uint32(r0) return } func GetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetModuleFileNameW.Addr(), 3, uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size)) + r0, _, e1 := syscall.SyscallN(procGetModuleFileNameW.Addr(), uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size)) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2364,7 +2489,15 @@ func GetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, } func GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err error) { - r1, _, e1 := syscall.Syscall(procGetModuleHandleExW.Addr(), 3, uintptr(flags), uintptr(unsafe.Pointer(moduleName)), uintptr(unsafe.Pointer(module))) + r1, _, e1 := syscall.SyscallN(procGetModuleHandleExW.Addr(), uintptr(flags), uintptr(unsafe.Pointer(moduleName)), uintptr(unsafe.Pointer(module))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetNamedPipeClientProcessId(pipe Handle, clientProcessID *uint32) (err error) { + r1, _, e1 := syscall.SyscallN(procGetNamedPipeClientProcessId.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(clientProcessID))) if r1 == 0 { err = errnoErr(e1) } @@ -2372,7 +2505,7 @@ func GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err er } func GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procGetNamedPipeHandleStateW.Addr(), 7, uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetNamedPipeHandleStateW.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize)) if r1 == 0 { err = errnoErr(e1) } @@ -2380,7 +2513,23 @@ func GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, m } func GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetNamedPipeInfo.Addr(), 5, uintptr(pipe), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(outSize)), uintptr(unsafe.Pointer(inSize)), uintptr(unsafe.Pointer(maxInstances)), 0) + r1, _, e1 := syscall.SyscallN(procGetNamedPipeInfo.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(outSize)), uintptr(unsafe.Pointer(inSize)), uintptr(unsafe.Pointer(maxInstances))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetNamedPipeServerProcessId(pipe Handle, serverProcessID *uint32) (err error) { + r1, _, e1 := syscall.SyscallN(procGetNamedPipeServerProcessId.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(serverProcessID))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetNumberOfConsoleInputEvents(console Handle, numevents *uint32) (err error) { + r1, _, e1 := syscall.SyscallN(procGetNumberOfConsoleInputEvents.Addr(), uintptr(console), uintptr(unsafe.Pointer(numevents))) if r1 == 0 { err = errnoErr(e1) } @@ -2392,7 +2541,7 @@ func GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wa if wait { _p0 = 1 } - r1, _, e1 := syscall.Syscall6(procGetOverlappedResult.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(done)), uintptr(_p0), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetOverlappedResult.Addr(), uintptr(handle), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(done)), uintptr(_p0)) if r1 == 0 { err = errnoErr(e1) } @@ -2400,7 +2549,7 @@ func GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wa } func GetPriorityClass(process Handle) (ret uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetPriorityClass.Addr(), 1, uintptr(process), 0, 0) + r0, _, e1 := syscall.SyscallN(procGetPriorityClass.Addr(), uintptr(process)) ret = uint32(r0) if ret == 0 { err = errnoErr(e1) @@ -2418,7 +2567,7 @@ func GetProcAddress(module Handle, procname string) (proc uintptr, err error) { } func _GetProcAddress(module Handle, procname *byte) (proc uintptr, err error) { - r0, _, e1 := syscall.Syscall(procGetProcAddress.Addr(), 2, uintptr(module), uintptr(unsafe.Pointer(procname)), 0) + r0, _, e1 := syscall.SyscallN(procGetProcAddress.Addr(), uintptr(module), uintptr(unsafe.Pointer(procname))) proc = uintptr(r0) if proc == 0 { err = errnoErr(e1) @@ -2427,7 +2576,7 @@ func _GetProcAddress(module Handle, procname *byte) (proc uintptr, err error) { } func GetProcessId(process Handle) (id uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetProcessId.Addr(), 1, uintptr(process), 0, 0) + r0, _, e1 := syscall.SyscallN(procGetProcessId.Addr(), uintptr(process)) id = uint32(r0) if id == 0 { err = errnoErr(e1) @@ -2436,7 +2585,7 @@ func GetProcessId(process Handle) (id uint32, err error) { } func getProcessPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetProcessPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetProcessPreferredUILanguages.Addr(), uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize))) if r1 == 0 { err = errnoErr(e1) } @@ -2444,7 +2593,7 @@ func getProcessPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uin } func GetProcessShutdownParameters(level *uint32, flags *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetProcessShutdownParameters.Addr(), 2, uintptr(unsafe.Pointer(level)), uintptr(unsafe.Pointer(flags)), 0) + r1, _, e1 := syscall.SyscallN(procGetProcessShutdownParameters.Addr(), uintptr(unsafe.Pointer(level)), uintptr(unsafe.Pointer(flags))) if r1 == 0 { err = errnoErr(e1) } @@ -2452,7 +2601,7 @@ func GetProcessShutdownParameters(level *uint32, flags *uint32) (err error) { } func GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error) { - r1, _, e1 := syscall.Syscall6(procGetProcessTimes.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(creationTime)), uintptr(unsafe.Pointer(exitTime)), uintptr(unsafe.Pointer(kernelTime)), uintptr(unsafe.Pointer(userTime)), 0) + r1, _, e1 := syscall.SyscallN(procGetProcessTimes.Addr(), uintptr(handle), uintptr(unsafe.Pointer(creationTime)), uintptr(unsafe.Pointer(exitTime)), uintptr(unsafe.Pointer(kernelTime)), uintptr(unsafe.Pointer(userTime))) if r1 == 0 { err = errnoErr(e1) } @@ -2460,12 +2609,12 @@ func GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, } func GetProcessWorkingSetSizeEx(hProcess Handle, lpMinimumWorkingSetSize *uintptr, lpMaximumWorkingSetSize *uintptr, flags *uint32) { - syscall.Syscall6(procGetProcessWorkingSetSizeEx.Addr(), 4, uintptr(hProcess), uintptr(unsafe.Pointer(lpMinimumWorkingSetSize)), uintptr(unsafe.Pointer(lpMaximumWorkingSetSize)), uintptr(unsafe.Pointer(flags)), 0, 0) + syscall.SyscallN(procGetProcessWorkingSetSizeEx.Addr(), uintptr(hProcess), uintptr(unsafe.Pointer(lpMinimumWorkingSetSize)), uintptr(unsafe.Pointer(lpMaximumWorkingSetSize)), uintptr(unsafe.Pointer(flags))) return } func GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uintptr, overlapped **Overlapped, timeout uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetQueuedCompletionStatus.Addr(), 5, uintptr(cphandle), uintptr(unsafe.Pointer(qty)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(overlapped)), uintptr(timeout), 0) + r1, _, e1 := syscall.SyscallN(procGetQueuedCompletionStatus.Addr(), uintptr(cphandle), uintptr(unsafe.Pointer(qty)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(overlapped)), uintptr(timeout)) if r1 == 0 { err = errnoErr(e1) } @@ -2473,7 +2622,7 @@ func GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uintptr, overl } func GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetShortPathNameW.Addr(), 3, uintptr(unsafe.Pointer(longpath)), uintptr(unsafe.Pointer(shortpath)), uintptr(buflen)) + r0, _, e1 := syscall.SyscallN(procGetShortPathNameW.Addr(), uintptr(unsafe.Pointer(longpath)), uintptr(unsafe.Pointer(shortpath)), uintptr(buflen)) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2482,12 +2631,12 @@ func GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uin } func getStartupInfo(startupInfo *StartupInfo) { - syscall.Syscall(procGetStartupInfoW.Addr(), 1, uintptr(unsafe.Pointer(startupInfo)), 0, 0) + syscall.SyscallN(procGetStartupInfoW.Addr(), uintptr(unsafe.Pointer(startupInfo))) return } func GetStdHandle(stdhandle uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procGetStdHandle.Addr(), 1, uintptr(stdhandle), 0, 0) + r0, _, e1 := syscall.SyscallN(procGetStdHandle.Addr(), uintptr(stdhandle)) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -2496,7 +2645,7 @@ func GetStdHandle(stdhandle uint32) (handle Handle, err error) { } func getSystemDirectory(dir *uint16, dirLen uint32) (len uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetSystemDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(dir)), uintptr(dirLen), 0) + r0, _, e1 := syscall.SyscallN(procGetSystemDirectoryW.Addr(), uintptr(unsafe.Pointer(dir)), uintptr(dirLen)) len = uint32(r0) if len == 0 { err = errnoErr(e1) @@ -2505,7 +2654,7 @@ func getSystemDirectory(dir *uint16, dirLen uint32) (len uint32, err error) { } func getSystemPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetSystemPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetSystemPreferredUILanguages.Addr(), uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize))) if r1 == 0 { err = errnoErr(e1) } @@ -2513,17 +2662,17 @@ func getSystemPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint } func GetSystemTimeAsFileTime(time *Filetime) { - syscall.Syscall(procGetSystemTimeAsFileTime.Addr(), 1, uintptr(unsafe.Pointer(time)), 0, 0) + syscall.SyscallN(procGetSystemTimeAsFileTime.Addr(), uintptr(unsafe.Pointer(time))) return } func GetSystemTimePreciseAsFileTime(time *Filetime) { - syscall.Syscall(procGetSystemTimePreciseAsFileTime.Addr(), 1, uintptr(unsafe.Pointer(time)), 0, 0) + syscall.SyscallN(procGetSystemTimePreciseAsFileTime.Addr(), uintptr(unsafe.Pointer(time))) return } func getSystemWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetSystemWindowsDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(dir)), uintptr(dirLen), 0) + r0, _, e1 := syscall.SyscallN(procGetSystemWindowsDirectoryW.Addr(), uintptr(unsafe.Pointer(dir)), uintptr(dirLen)) len = uint32(r0) if len == 0 { err = errnoErr(e1) @@ -2532,7 +2681,7 @@ func getSystemWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err erro } func GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetTempPathW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0) + r0, _, e1 := syscall.SyscallN(procGetTempPathW.Addr(), uintptr(buflen), uintptr(unsafe.Pointer(buf))) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2541,7 +2690,7 @@ func GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) { } func getThreadPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetThreadPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetThreadPreferredUILanguages.Addr(), uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize))) if r1 == 0 { err = errnoErr(e1) } @@ -2549,13 +2698,13 @@ func getThreadPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint } func getTickCount64() (ms uint64) { - r0, _, _ := syscall.Syscall(procGetTickCount64.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetTickCount64.Addr()) ms = uint64(r0) return } func GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetTimeZoneInformation.Addr(), 1, uintptr(unsafe.Pointer(tzi)), 0, 0) + r0, _, e1 := syscall.SyscallN(procGetTimeZoneInformation.Addr(), uintptr(unsafe.Pointer(tzi))) rc = uint32(r0) if rc == 0xffffffff { err = errnoErr(e1) @@ -2564,7 +2713,7 @@ func GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) { } func getUserPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetUserPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetUserPreferredUILanguages.Addr(), uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize))) if r1 == 0 { err = errnoErr(e1) } @@ -2572,7 +2721,7 @@ func getUserPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16 } func GetVersion() (ver uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetVersion.Addr(), 0, 0, 0, 0) + r0, _, e1 := syscall.SyscallN(procGetVersion.Addr()) ver = uint32(r0) if ver == 0 { err = errnoErr(e1) @@ -2581,7 +2730,7 @@ func GetVersion() (ver uint32, err error) { } func GetVolumeInformationByHandle(file Handle, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procGetVolumeInformationByHandleW.Addr(), 8, uintptr(file), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize), 0) + r1, _, e1 := syscall.SyscallN(procGetVolumeInformationByHandleW.Addr(), uintptr(file), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize)) if r1 == 0 { err = errnoErr(e1) } @@ -2589,7 +2738,7 @@ func GetVolumeInformationByHandle(file Handle, volumeNameBuffer *uint16, volumeN } func GetVolumeInformation(rootPathName *uint16, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procGetVolumeInformationW.Addr(), 8, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize), 0) + r1, _, e1 := syscall.SyscallN(procGetVolumeInformationW.Addr(), uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize)) if r1 == 0 { err = errnoErr(e1) } @@ -2597,7 +2746,7 @@ func GetVolumeInformation(rootPathName *uint16, volumeNameBuffer *uint16, volume } func GetVolumeNameForVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16, bufferlength uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetVolumeNameForVolumeMountPointW.Addr(), 3, uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferlength)) + r1, _, e1 := syscall.SyscallN(procGetVolumeNameForVolumeMountPointW.Addr(), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferlength)) if r1 == 0 { err = errnoErr(e1) } @@ -2605,7 +2754,7 @@ func GetVolumeNameForVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint } func GetVolumePathName(fileName *uint16, volumePathName *uint16, bufferLength uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetVolumePathNameW.Addr(), 3, uintptr(unsafe.Pointer(fileName)), uintptr(unsafe.Pointer(volumePathName)), uintptr(bufferLength)) + r1, _, e1 := syscall.SyscallN(procGetVolumePathNameW.Addr(), uintptr(unsafe.Pointer(fileName)), uintptr(unsafe.Pointer(volumePathName)), uintptr(bufferLength)) if r1 == 0 { err = errnoErr(e1) } @@ -2613,7 +2762,7 @@ func GetVolumePathName(fileName *uint16, volumePathName *uint16, bufferLength ui } func GetVolumePathNamesForVolumeName(volumeName *uint16, volumePathNames *uint16, bufferLength uint32, returnLength *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetVolumePathNamesForVolumeNameW.Addr(), 4, uintptr(unsafe.Pointer(volumeName)), uintptr(unsafe.Pointer(volumePathNames)), uintptr(bufferLength), uintptr(unsafe.Pointer(returnLength)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetVolumePathNamesForVolumeNameW.Addr(), uintptr(unsafe.Pointer(volumeName)), uintptr(unsafe.Pointer(volumePathNames)), uintptr(bufferLength), uintptr(unsafe.Pointer(returnLength))) if r1 == 0 { err = errnoErr(e1) } @@ -2621,7 +2770,7 @@ func GetVolumePathNamesForVolumeName(volumeName *uint16, volumePathNames *uint16 } func getWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetWindowsDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(dir)), uintptr(dirLen), 0) + r0, _, e1 := syscall.SyscallN(procGetWindowsDirectoryW.Addr(), uintptr(unsafe.Pointer(dir)), uintptr(dirLen)) len = uint32(r0) if len == 0 { err = errnoErr(e1) @@ -2630,7 +2779,7 @@ func getWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) { } func initializeProcThreadAttributeList(attrlist *ProcThreadAttributeList, attrcount uint32, flags uint32, size *uintptr) (err error) { - r1, _, e1 := syscall.Syscall6(procInitializeProcThreadAttributeList.Addr(), 4, uintptr(unsafe.Pointer(attrlist)), uintptr(attrcount), uintptr(flags), uintptr(unsafe.Pointer(size)), 0, 0) + r1, _, e1 := syscall.SyscallN(procInitializeProcThreadAttributeList.Addr(), uintptr(unsafe.Pointer(attrlist)), uintptr(attrcount), uintptr(flags), uintptr(unsafe.Pointer(size))) if r1 == 0 { err = errnoErr(e1) } @@ -2642,7 +2791,7 @@ func IsWow64Process(handle Handle, isWow64 *bool) (err error) { if *isWow64 { _p0 = 1 } - r1, _, e1 := syscall.Syscall(procIsWow64Process.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(&_p0)), 0) + r1, _, e1 := syscall.SyscallN(procIsWow64Process.Addr(), uintptr(handle), uintptr(unsafe.Pointer(&_p0))) *isWow64 = _p0 != 0 if r1 == 0 { err = errnoErr(e1) @@ -2655,7 +2804,7 @@ func IsWow64Process2(handle Handle, processMachine *uint16, nativeMachine *uint1 if err != nil { return } - r1, _, e1 := syscall.Syscall(procIsWow64Process2.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(processMachine)), uintptr(unsafe.Pointer(nativeMachine))) + r1, _, e1 := syscall.SyscallN(procIsWow64Process2.Addr(), uintptr(handle), uintptr(unsafe.Pointer(processMachine)), uintptr(unsafe.Pointer(nativeMachine))) if r1 == 0 { err = errnoErr(e1) } @@ -2672,7 +2821,7 @@ func LoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, e } func _LoadLibraryEx(libname *uint16, zero Handle, flags uintptr) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procLoadLibraryExW.Addr(), 3, uintptr(unsafe.Pointer(libname)), uintptr(zero), uintptr(flags)) + r0, _, e1 := syscall.SyscallN(procLoadLibraryExW.Addr(), uintptr(unsafe.Pointer(libname)), uintptr(zero), uintptr(flags)) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -2690,7 +2839,7 @@ func LoadLibrary(libname string) (handle Handle, err error) { } func _LoadLibrary(libname *uint16) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procLoadLibraryW.Addr(), 1, uintptr(unsafe.Pointer(libname)), 0, 0) + r0, _, e1 := syscall.SyscallN(procLoadLibraryW.Addr(), uintptr(unsafe.Pointer(libname))) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -2699,7 +2848,7 @@ func _LoadLibrary(libname *uint16) (handle Handle, err error) { } func LoadResource(module Handle, resInfo Handle) (resData Handle, err error) { - r0, _, e1 := syscall.Syscall(procLoadResource.Addr(), 2, uintptr(module), uintptr(resInfo), 0) + r0, _, e1 := syscall.SyscallN(procLoadResource.Addr(), uintptr(module), uintptr(resInfo)) resData = Handle(r0) if resData == 0 { err = errnoErr(e1) @@ -2708,7 +2857,7 @@ func LoadResource(module Handle, resInfo Handle) (resData Handle, err error) { } func LocalAlloc(flags uint32, length uint32) (ptr uintptr, err error) { - r0, _, e1 := syscall.Syscall(procLocalAlloc.Addr(), 2, uintptr(flags), uintptr(length), 0) + r0, _, e1 := syscall.SyscallN(procLocalAlloc.Addr(), uintptr(flags), uintptr(length)) ptr = uintptr(r0) if ptr == 0 { err = errnoErr(e1) @@ -2717,7 +2866,7 @@ func LocalAlloc(flags uint32, length uint32) (ptr uintptr, err error) { } func LocalFree(hmem Handle) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procLocalFree.Addr(), 1, uintptr(hmem), 0, 0) + r0, _, e1 := syscall.SyscallN(procLocalFree.Addr(), uintptr(hmem)) handle = Handle(r0) if handle != 0 { err = errnoErr(e1) @@ -2726,7 +2875,7 @@ func LocalFree(hmem Handle) (handle Handle, err error) { } func LockFileEx(file Handle, flags uint32, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall6(procLockFileEx.Addr(), 6, uintptr(file), uintptr(flags), uintptr(reserved), uintptr(bytesLow), uintptr(bytesHigh), uintptr(unsafe.Pointer(overlapped))) + r1, _, e1 := syscall.SyscallN(procLockFileEx.Addr(), uintptr(file), uintptr(flags), uintptr(reserved), uintptr(bytesLow), uintptr(bytesHigh), uintptr(unsafe.Pointer(overlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -2734,7 +2883,7 @@ func LockFileEx(file Handle, flags uint32, reserved uint32, bytesLow uint32, byt } func LockResource(resData Handle) (addr uintptr, err error) { - r0, _, e1 := syscall.Syscall(procLockResource.Addr(), 1, uintptr(resData), 0, 0) + r0, _, e1 := syscall.SyscallN(procLockResource.Addr(), uintptr(resData)) addr = uintptr(r0) if addr == 0 { err = errnoErr(e1) @@ -2743,7 +2892,7 @@ func LockResource(resData Handle) (addr uintptr, err error) { } func MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, err error) { - r0, _, e1 := syscall.Syscall6(procMapViewOfFile.Addr(), 5, uintptr(handle), uintptr(access), uintptr(offsetHigh), uintptr(offsetLow), uintptr(length), 0) + r0, _, e1 := syscall.SyscallN(procMapViewOfFile.Addr(), uintptr(handle), uintptr(access), uintptr(offsetHigh), uintptr(offsetLow), uintptr(length)) addr = uintptr(r0) if addr == 0 { err = errnoErr(e1) @@ -2752,7 +2901,7 @@ func MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow ui } func Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) { - r1, _, e1 := syscall.Syscall(procModule32FirstW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry)), 0) + r1, _, e1 := syscall.SyscallN(procModule32FirstW.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry))) if r1 == 0 { err = errnoErr(e1) } @@ -2760,7 +2909,7 @@ func Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) { } func Module32Next(snapshot Handle, moduleEntry *ModuleEntry32) (err error) { - r1, _, e1 := syscall.Syscall(procModule32NextW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry)), 0) + r1, _, e1 := syscall.SyscallN(procModule32NextW.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry))) if r1 == 0 { err = errnoErr(e1) } @@ -2768,7 +2917,7 @@ func Module32Next(snapshot Handle, moduleEntry *ModuleEntry32) (err error) { } func MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procMoveFileExW.Addr(), 3, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), uintptr(flags)) + r1, _, e1 := syscall.SyscallN(procMoveFileExW.Addr(), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -2776,7 +2925,7 @@ func MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) { } func MoveFile(from *uint16, to *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procMoveFileW.Addr(), 2, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), 0) + r1, _, e1 := syscall.SyscallN(procMoveFileW.Addr(), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to))) if r1 == 0 { err = errnoErr(e1) } @@ -2784,7 +2933,7 @@ func MoveFile(from *uint16, to *uint16) (err error) { } func MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) { - r0, _, e1 := syscall.Syscall6(procMultiByteToWideChar.Addr(), 6, uintptr(codePage), uintptr(dwFlags), uintptr(unsafe.Pointer(str)), uintptr(nstr), uintptr(unsafe.Pointer(wchar)), uintptr(nwchar)) + r0, _, e1 := syscall.SyscallN(procMultiByteToWideChar.Addr(), uintptr(codePage), uintptr(dwFlags), uintptr(unsafe.Pointer(str)), uintptr(nstr), uintptr(unsafe.Pointer(wchar)), uintptr(nwchar)) nwrite = int32(r0) if nwrite == 0 { err = errnoErr(e1) @@ -2797,7 +2946,7 @@ func OpenEvent(desiredAccess uint32, inheritHandle bool, name *uint16) (handle H if inheritHandle { _p0 = 1 } - r0, _, e1 := syscall.Syscall(procOpenEventW.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name))) + r0, _, e1 := syscall.SyscallN(procOpenEventW.Addr(), uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name))) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -2810,7 +2959,7 @@ func OpenMutex(desiredAccess uint32, inheritHandle bool, name *uint16) (handle H if inheritHandle { _p0 = 1 } - r0, _, e1 := syscall.Syscall(procOpenMutexW.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name))) + r0, _, e1 := syscall.SyscallN(procOpenMutexW.Addr(), uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name))) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -2823,7 +2972,7 @@ func OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (ha if inheritHandle { _p0 = 1 } - r0, _, e1 := syscall.Syscall(procOpenProcess.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(processId)) + r0, _, e1 := syscall.SyscallN(procOpenProcess.Addr(), uintptr(desiredAccess), uintptr(_p0), uintptr(processId)) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -2836,7 +2985,7 @@ func OpenThread(desiredAccess uint32, inheritHandle bool, threadId uint32) (hand if inheritHandle { _p0 = 1 } - r0, _, e1 := syscall.Syscall(procOpenThread.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(threadId)) + r0, _, e1 := syscall.SyscallN(procOpenThread.Addr(), uintptr(desiredAccess), uintptr(_p0), uintptr(threadId)) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -2845,7 +2994,7 @@ func OpenThread(desiredAccess uint32, inheritHandle bool, threadId uint32) (hand } func PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uintptr, overlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall6(procPostQueuedCompletionStatus.Addr(), 4, uintptr(cphandle), uintptr(qty), uintptr(key), uintptr(unsafe.Pointer(overlapped)), 0, 0) + r1, _, e1 := syscall.SyscallN(procPostQueuedCompletionStatus.Addr(), uintptr(cphandle), uintptr(qty), uintptr(key), uintptr(unsafe.Pointer(overlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -2853,7 +3002,7 @@ func PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uintptr, overla } func Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) { - r1, _, e1 := syscall.Syscall(procProcess32FirstW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)), 0) + r1, _, e1 := syscall.SyscallN(procProcess32FirstW.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(procEntry))) if r1 == 0 { err = errnoErr(e1) } @@ -2861,7 +3010,7 @@ func Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) { } func Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) { - r1, _, e1 := syscall.Syscall(procProcess32NextW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)), 0) + r1, _, e1 := syscall.SyscallN(procProcess32NextW.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(procEntry))) if r1 == 0 { err = errnoErr(e1) } @@ -2869,7 +3018,7 @@ func Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) { } func ProcessIdToSessionId(pid uint32, sessionid *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procProcessIdToSessionId.Addr(), 2, uintptr(pid), uintptr(unsafe.Pointer(sessionid)), 0) + r1, _, e1 := syscall.SyscallN(procProcessIdToSessionId.Addr(), uintptr(pid), uintptr(unsafe.Pointer(sessionid))) if r1 == 0 { err = errnoErr(e1) } @@ -2877,7 +3026,7 @@ func ProcessIdToSessionId(pid uint32, sessionid *uint32) (err error) { } func PulseEvent(event Handle) (err error) { - r1, _, e1 := syscall.Syscall(procPulseEvent.Addr(), 1, uintptr(event), 0, 0) + r1, _, e1 := syscall.SyscallN(procPulseEvent.Addr(), uintptr(event)) if r1 == 0 { err = errnoErr(e1) } @@ -2885,7 +3034,7 @@ func PulseEvent(event Handle) (err error) { } func PurgeComm(handle Handle, dwFlags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procPurgeComm.Addr(), 2, uintptr(handle), uintptr(dwFlags), 0) + r1, _, e1 := syscall.SyscallN(procPurgeComm.Addr(), uintptr(handle), uintptr(dwFlags)) if r1 == 0 { err = errnoErr(e1) } @@ -2893,7 +3042,7 @@ func PurgeComm(handle Handle, dwFlags uint32) (err error) { } func QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procQueryDosDeviceW.Addr(), 3, uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath)), uintptr(max)) + r0, _, e1 := syscall.SyscallN(procQueryDosDeviceW.Addr(), uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath)), uintptr(max)) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2902,7 +3051,7 @@ func QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint3 } func QueryFullProcessImageName(proc Handle, flags uint32, exeName *uint16, size *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procQueryFullProcessImageNameW.Addr(), 4, uintptr(proc), uintptr(flags), uintptr(unsafe.Pointer(exeName)), uintptr(unsafe.Pointer(size)), 0, 0) + r1, _, e1 := syscall.SyscallN(procQueryFullProcessImageNameW.Addr(), uintptr(proc), uintptr(flags), uintptr(unsafe.Pointer(exeName)), uintptr(unsafe.Pointer(size))) if r1 == 0 { err = errnoErr(e1) } @@ -2910,7 +3059,7 @@ func QueryFullProcessImageName(proc Handle, flags uint32, exeName *uint16, size } func QueryInformationJobObject(job Handle, JobObjectInformationClass int32, JobObjectInformation uintptr, JobObjectInformationLength uint32, retlen *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procQueryInformationJobObject.Addr(), 5, uintptr(job), uintptr(JobObjectInformationClass), uintptr(JobObjectInformation), uintptr(JobObjectInformationLength), uintptr(unsafe.Pointer(retlen)), 0) + r1, _, e1 := syscall.SyscallN(procQueryInformationJobObject.Addr(), uintptr(job), uintptr(JobObjectInformationClass), uintptr(JobObjectInformation), uintptr(JobObjectInformationLength), uintptr(unsafe.Pointer(retlen))) if r1 == 0 { err = errnoErr(e1) } @@ -2918,7 +3067,7 @@ func QueryInformationJobObject(job Handle, JobObjectInformationClass int32, JobO } func ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) { - r1, _, e1 := syscall.Syscall6(procReadConsoleW.Addr(), 5, uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(toread), uintptr(unsafe.Pointer(read)), uintptr(unsafe.Pointer(inputControl)), 0) + r1, _, e1 := syscall.SyscallN(procReadConsoleW.Addr(), uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(toread), uintptr(unsafe.Pointer(read)), uintptr(unsafe.Pointer(inputControl))) if r1 == 0 { err = errnoErr(e1) } @@ -2930,7 +3079,7 @@ func ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree if watchSubTree { _p0 = 1 } - r1, _, e1 := syscall.Syscall9(procReadDirectoryChangesW.Addr(), 8, uintptr(handle), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(_p0), uintptr(mask), uintptr(unsafe.Pointer(retlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine), 0) + r1, _, e1 := syscall.SyscallN(procReadDirectoryChangesW.Addr(), uintptr(handle), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(_p0), uintptr(mask), uintptr(unsafe.Pointer(retlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine)) if r1 == 0 { err = errnoErr(e1) } @@ -2942,7 +3091,7 @@ func readFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) ( if len(buf) > 0 { _p0 = &buf[0] } - r1, _, e1 := syscall.Syscall6(procReadFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)), 0) + r1, _, e1 := syscall.SyscallN(procReadFile.Addr(), uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -2950,7 +3099,7 @@ func readFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) ( } func ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesRead *uintptr) (err error) { - r1, _, e1 := syscall.Syscall6(procReadProcessMemory.Addr(), 5, uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesRead)), 0) + r1, _, e1 := syscall.SyscallN(procReadProcessMemory.Addr(), uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesRead))) if r1 == 0 { err = errnoErr(e1) } @@ -2958,7 +3107,7 @@ func ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size u } func ReleaseMutex(mutex Handle) (err error) { - r1, _, e1 := syscall.Syscall(procReleaseMutex.Addr(), 1, uintptr(mutex), 0, 0) + r1, _, e1 := syscall.SyscallN(procReleaseMutex.Addr(), uintptr(mutex)) if r1 == 0 { err = errnoErr(e1) } @@ -2966,7 +3115,7 @@ func ReleaseMutex(mutex Handle) (err error) { } func RemoveDirectory(path *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procRemoveDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + r1, _, e1 := syscall.SyscallN(procRemoveDirectoryW.Addr(), uintptr(unsafe.Pointer(path))) if r1 == 0 { err = errnoErr(e1) } @@ -2974,7 +3123,7 @@ func RemoveDirectory(path *uint16) (err error) { } func RemoveDllDirectory(cookie uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procRemoveDllDirectory.Addr(), 1, uintptr(cookie), 0, 0) + r1, _, e1 := syscall.SyscallN(procRemoveDllDirectory.Addr(), uintptr(cookie)) if r1 == 0 { err = errnoErr(e1) } @@ -2982,7 +3131,7 @@ func RemoveDllDirectory(cookie uintptr) (err error) { } func ResetEvent(event Handle) (err error) { - r1, _, e1 := syscall.Syscall(procResetEvent.Addr(), 1, uintptr(event), 0, 0) + r1, _, e1 := syscall.SyscallN(procResetEvent.Addr(), uintptr(event)) if r1 == 0 { err = errnoErr(e1) } @@ -2990,7 +3139,7 @@ func ResetEvent(event Handle) (err error) { } func resizePseudoConsole(pconsole Handle, size uint32) (hr error) { - r0, _, _ := syscall.Syscall(procResizePseudoConsole.Addr(), 2, uintptr(pconsole), uintptr(size), 0) + r0, _, _ := syscall.SyscallN(procResizePseudoConsole.Addr(), uintptr(pconsole), uintptr(size)) if r0 != 0 { hr = syscall.Errno(r0) } @@ -2998,7 +3147,7 @@ func resizePseudoConsole(pconsole Handle, size uint32) (hr error) { } func ResumeThread(thread Handle) (ret uint32, err error) { - r0, _, e1 := syscall.Syscall(procResumeThread.Addr(), 1, uintptr(thread), 0, 0) + r0, _, e1 := syscall.SyscallN(procResumeThread.Addr(), uintptr(thread)) ret = uint32(r0) if ret == 0xffffffff { err = errnoErr(e1) @@ -3007,7 +3156,7 @@ func ResumeThread(thread Handle) (ret uint32, err error) { } func SetCommBreak(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procSetCommBreak.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetCommBreak.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -3015,7 +3164,7 @@ func SetCommBreak(handle Handle) (err error) { } func SetCommMask(handle Handle, dwEvtMask uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetCommMask.Addr(), 2, uintptr(handle), uintptr(dwEvtMask), 0) + r1, _, e1 := syscall.SyscallN(procSetCommMask.Addr(), uintptr(handle), uintptr(dwEvtMask)) if r1 == 0 { err = errnoErr(e1) } @@ -3023,7 +3172,7 @@ func SetCommMask(handle Handle, dwEvtMask uint32) (err error) { } func SetCommState(handle Handle, lpDCB *DCB) (err error) { - r1, _, e1 := syscall.Syscall(procSetCommState.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(lpDCB)), 0) + r1, _, e1 := syscall.SyscallN(procSetCommState.Addr(), uintptr(handle), uintptr(unsafe.Pointer(lpDCB))) if r1 == 0 { err = errnoErr(e1) } @@ -3031,7 +3180,15 @@ func SetCommState(handle Handle, lpDCB *DCB) (err error) { } func SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) { - r1, _, e1 := syscall.Syscall(procSetCommTimeouts.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(timeouts)), 0) + r1, _, e1 := syscall.SyscallN(procSetCommTimeouts.Addr(), uintptr(handle), uintptr(unsafe.Pointer(timeouts))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetConsoleCP(cp uint32) (err error) { + r1, _, e1 := syscall.SyscallN(procSetConsoleCP.Addr(), uintptr(cp)) if r1 == 0 { err = errnoErr(e1) } @@ -3039,7 +3196,7 @@ func SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) { } func setConsoleCursorPosition(console Handle, position uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetConsoleCursorPosition.Addr(), 2, uintptr(console), uintptr(position), 0) + r1, _, e1 := syscall.SyscallN(procSetConsoleCursorPosition.Addr(), uintptr(console), uintptr(position)) if r1 == 0 { err = errnoErr(e1) } @@ -3047,7 +3204,15 @@ func setConsoleCursorPosition(console Handle, position uint32) (err error) { } func SetConsoleMode(console Handle, mode uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(console), uintptr(mode), 0) + r1, _, e1 := syscall.SyscallN(procSetConsoleMode.Addr(), uintptr(console), uintptr(mode)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetConsoleOutputCP(cp uint32) (err error) { + r1, _, e1 := syscall.SyscallN(procSetConsoleOutputCP.Addr(), uintptr(cp)) if r1 == 0 { err = errnoErr(e1) } @@ -3055,7 +3220,7 @@ func SetConsoleMode(console Handle, mode uint32) (err error) { } func SetCurrentDirectory(path *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procSetCurrentDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetCurrentDirectoryW.Addr(), uintptr(unsafe.Pointer(path))) if r1 == 0 { err = errnoErr(e1) } @@ -3063,7 +3228,7 @@ func SetCurrentDirectory(path *uint16) (err error) { } func SetDefaultDllDirectories(directoryFlags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetDefaultDllDirectories.Addr(), 1, uintptr(directoryFlags), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetDefaultDllDirectories.Addr(), uintptr(directoryFlags)) if r1 == 0 { err = errnoErr(e1) } @@ -3080,7 +3245,7 @@ func SetDllDirectory(path string) (err error) { } func _SetDllDirectory(path *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procSetDllDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetDllDirectoryW.Addr(), uintptr(unsafe.Pointer(path))) if r1 == 0 { err = errnoErr(e1) } @@ -3088,7 +3253,7 @@ func _SetDllDirectory(path *uint16) (err error) { } func SetEndOfFile(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procSetEndOfFile.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetEndOfFile.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -3096,7 +3261,7 @@ func SetEndOfFile(handle Handle) (err error) { } func SetEnvironmentVariable(name *uint16, value *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procSetEnvironmentVariableW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value)), 0) + r1, _, e1 := syscall.SyscallN(procSetEnvironmentVariableW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value))) if r1 == 0 { err = errnoErr(e1) } @@ -3104,13 +3269,13 @@ func SetEnvironmentVariable(name *uint16, value *uint16) (err error) { } func SetErrorMode(mode uint32) (ret uint32) { - r0, _, _ := syscall.Syscall(procSetErrorMode.Addr(), 1, uintptr(mode), 0, 0) + r0, _, _ := syscall.SyscallN(procSetErrorMode.Addr(), uintptr(mode)) ret = uint32(r0) return } func SetEvent(event Handle) (err error) { - r1, _, e1 := syscall.Syscall(procSetEvent.Addr(), 1, uintptr(event), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetEvent.Addr(), uintptr(event)) if r1 == 0 { err = errnoErr(e1) } @@ -3118,7 +3283,7 @@ func SetEvent(event Handle) (err error) { } func SetFileAttributes(name *uint16, attrs uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetFileAttributesW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(attrs), 0) + r1, _, e1 := syscall.SyscallN(procSetFileAttributesW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(attrs)) if r1 == 0 { err = errnoErr(e1) } @@ -3126,7 +3291,7 @@ func SetFileAttributes(name *uint16, attrs uint32) (err error) { } func SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) { - r1, _, e1 := syscall.Syscall(procSetFileCompletionNotificationModes.Addr(), 2, uintptr(handle), uintptr(flags), 0) + r1, _, e1 := syscall.SyscallN(procSetFileCompletionNotificationModes.Addr(), uintptr(handle), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -3134,7 +3299,7 @@ func SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) } func SetFileInformationByHandle(handle Handle, class uint32, inBuffer *byte, inBufferLen uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetFileInformationByHandle.Addr(), 4, uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetFileInformationByHandle.Addr(), uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen)) if r1 == 0 { err = errnoErr(e1) } @@ -3142,7 +3307,7 @@ func SetFileInformationByHandle(handle Handle, class uint32, inBuffer *byte, inB } func SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) { - r0, _, e1 := syscall.Syscall6(procSetFilePointer.Addr(), 4, uintptr(handle), uintptr(lowoffset), uintptr(unsafe.Pointer(highoffsetptr)), uintptr(whence), 0, 0) + r0, _, e1 := syscall.SyscallN(procSetFilePointer.Addr(), uintptr(handle), uintptr(lowoffset), uintptr(unsafe.Pointer(highoffsetptr)), uintptr(whence)) newlowoffset = uint32(r0) if newlowoffset == 0xffffffff { err = errnoErr(e1) @@ -3151,7 +3316,7 @@ func SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence } func SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) { - r1, _, e1 := syscall.Syscall6(procSetFileTime.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime)), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetFileTime.Addr(), uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime))) if r1 == 0 { err = errnoErr(e1) } @@ -3159,7 +3324,7 @@ func SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetim } func SetFileValidData(handle Handle, validDataLength int64) (err error) { - r1, _, e1 := syscall.Syscall(procSetFileValidData.Addr(), 2, uintptr(handle), uintptr(validDataLength), 0) + r1, _, e1 := syscall.SyscallN(procSetFileValidData.Addr(), uintptr(handle), uintptr(validDataLength)) if r1 == 0 { err = errnoErr(e1) } @@ -3167,7 +3332,7 @@ func SetFileValidData(handle Handle, validDataLength int64) (err error) { } func SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetHandleInformation.Addr(), 3, uintptr(handle), uintptr(mask), uintptr(flags)) + r1, _, e1 := syscall.SyscallN(procSetHandleInformation.Addr(), uintptr(handle), uintptr(mask), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -3175,7 +3340,7 @@ func SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) } func SetInformationJobObject(job Handle, JobObjectInformationClass uint32, JobObjectInformation uintptr, JobObjectInformationLength uint32) (ret int, err error) { - r0, _, e1 := syscall.Syscall6(procSetInformationJobObject.Addr(), 4, uintptr(job), uintptr(JobObjectInformationClass), uintptr(JobObjectInformation), uintptr(JobObjectInformationLength), 0, 0) + r0, _, e1 := syscall.SyscallN(procSetInformationJobObject.Addr(), uintptr(job), uintptr(JobObjectInformationClass), uintptr(JobObjectInformation), uintptr(JobObjectInformationLength)) ret = int(r0) if ret == 0 { err = errnoErr(e1) @@ -3184,7 +3349,7 @@ func SetInformationJobObject(job Handle, JobObjectInformationClass uint32, JobOb } func SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetNamedPipeHandleState.Addr(), 4, uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetNamedPipeHandleState.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout))) if r1 == 0 { err = errnoErr(e1) } @@ -3192,7 +3357,7 @@ func SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uin } func SetPriorityClass(process Handle, priorityClass uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetPriorityClass.Addr(), 2, uintptr(process), uintptr(priorityClass), 0) + r1, _, e1 := syscall.SyscallN(procSetPriorityClass.Addr(), uintptr(process), uintptr(priorityClass)) if r1 == 0 { err = errnoErr(e1) } @@ -3204,7 +3369,7 @@ func SetProcessPriorityBoost(process Handle, disable bool) (err error) { if disable { _p0 = 1 } - r1, _, e1 := syscall.Syscall(procSetProcessPriorityBoost.Addr(), 2, uintptr(process), uintptr(_p0), 0) + r1, _, e1 := syscall.SyscallN(procSetProcessPriorityBoost.Addr(), uintptr(process), uintptr(_p0)) if r1 == 0 { err = errnoErr(e1) } @@ -3212,7 +3377,7 @@ func SetProcessPriorityBoost(process Handle, disable bool) (err error) { } func SetProcessShutdownParameters(level uint32, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetProcessShutdownParameters.Addr(), 2, uintptr(level), uintptr(flags), 0) + r1, _, e1 := syscall.SyscallN(procSetProcessShutdownParameters.Addr(), uintptr(level), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -3220,7 +3385,7 @@ func SetProcessShutdownParameters(level uint32, flags uint32) (err error) { } func SetProcessWorkingSetSizeEx(hProcess Handle, dwMinimumWorkingSetSize uintptr, dwMaximumWorkingSetSize uintptr, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetProcessWorkingSetSizeEx.Addr(), 4, uintptr(hProcess), uintptr(dwMinimumWorkingSetSize), uintptr(dwMaximumWorkingSetSize), uintptr(flags), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetProcessWorkingSetSizeEx.Addr(), uintptr(hProcess), uintptr(dwMinimumWorkingSetSize), uintptr(dwMaximumWorkingSetSize), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -3228,7 +3393,7 @@ func SetProcessWorkingSetSizeEx(hProcess Handle, dwMinimumWorkingSetSize uintptr } func SetStdHandle(stdhandle uint32, handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procSetStdHandle.Addr(), 2, uintptr(stdhandle), uintptr(handle), 0) + r1, _, e1 := syscall.SyscallN(procSetStdHandle.Addr(), uintptr(stdhandle), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -3236,7 +3401,7 @@ func SetStdHandle(stdhandle uint32, handle Handle) (err error) { } func SetVolumeLabel(rootPathName *uint16, volumeName *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procSetVolumeLabelW.Addr(), 2, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeName)), 0) + r1, _, e1 := syscall.SyscallN(procSetVolumeLabelW.Addr(), uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeName))) if r1 == 0 { err = errnoErr(e1) } @@ -3244,7 +3409,7 @@ func SetVolumeLabel(rootPathName *uint16, volumeName *uint16) (err error) { } func SetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procSetVolumeMountPointW.Addr(), 2, uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName)), 0) + r1, _, e1 := syscall.SyscallN(procSetVolumeMountPointW.Addr(), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName))) if r1 == 0 { err = errnoErr(e1) } @@ -3252,7 +3417,7 @@ func SetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err erro } func SetupComm(handle Handle, dwInQueue uint32, dwOutQueue uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetupComm.Addr(), 3, uintptr(handle), uintptr(dwInQueue), uintptr(dwOutQueue)) + r1, _, e1 := syscall.SyscallN(procSetupComm.Addr(), uintptr(handle), uintptr(dwInQueue), uintptr(dwOutQueue)) if r1 == 0 { err = errnoErr(e1) } @@ -3260,7 +3425,7 @@ func SetupComm(handle Handle, dwInQueue uint32, dwOutQueue uint32) (err error) { } func SizeofResource(module Handle, resInfo Handle) (size uint32, err error) { - r0, _, e1 := syscall.Syscall(procSizeofResource.Addr(), 2, uintptr(module), uintptr(resInfo), 0) + r0, _, e1 := syscall.SyscallN(procSizeofResource.Addr(), uintptr(module), uintptr(resInfo)) size = uint32(r0) if size == 0 { err = errnoErr(e1) @@ -3273,13 +3438,13 @@ func SleepEx(milliseconds uint32, alertable bool) (ret uint32) { if alertable { _p0 = 1 } - r0, _, _ := syscall.Syscall(procSleepEx.Addr(), 2, uintptr(milliseconds), uintptr(_p0), 0) + r0, _, _ := syscall.SyscallN(procSleepEx.Addr(), uintptr(milliseconds), uintptr(_p0)) ret = uint32(r0) return } func TerminateJobObject(job Handle, exitCode uint32) (err error) { - r1, _, e1 := syscall.Syscall(procTerminateJobObject.Addr(), 2, uintptr(job), uintptr(exitCode), 0) + r1, _, e1 := syscall.SyscallN(procTerminateJobObject.Addr(), uintptr(job), uintptr(exitCode)) if r1 == 0 { err = errnoErr(e1) } @@ -3287,7 +3452,7 @@ func TerminateJobObject(job Handle, exitCode uint32) (err error) { } func TerminateProcess(handle Handle, exitcode uint32) (err error) { - r1, _, e1 := syscall.Syscall(procTerminateProcess.Addr(), 2, uintptr(handle), uintptr(exitcode), 0) + r1, _, e1 := syscall.SyscallN(procTerminateProcess.Addr(), uintptr(handle), uintptr(exitcode)) if r1 == 0 { err = errnoErr(e1) } @@ -3295,7 +3460,7 @@ func TerminateProcess(handle Handle, exitcode uint32) (err error) { } func Thread32First(snapshot Handle, threadEntry *ThreadEntry32) (err error) { - r1, _, e1 := syscall.Syscall(procThread32First.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(threadEntry)), 0) + r1, _, e1 := syscall.SyscallN(procThread32First.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(threadEntry))) if r1 == 0 { err = errnoErr(e1) } @@ -3303,7 +3468,7 @@ func Thread32First(snapshot Handle, threadEntry *ThreadEntry32) (err error) { } func Thread32Next(snapshot Handle, threadEntry *ThreadEntry32) (err error) { - r1, _, e1 := syscall.Syscall(procThread32Next.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(threadEntry)), 0) + r1, _, e1 := syscall.SyscallN(procThread32Next.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(threadEntry))) if r1 == 0 { err = errnoErr(e1) } @@ -3311,7 +3476,7 @@ func Thread32Next(snapshot Handle, threadEntry *ThreadEntry32) (err error) { } func UnlockFileEx(file Handle, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall6(procUnlockFileEx.Addr(), 5, uintptr(file), uintptr(reserved), uintptr(bytesLow), uintptr(bytesHigh), uintptr(unsafe.Pointer(overlapped)), 0) + r1, _, e1 := syscall.SyscallN(procUnlockFileEx.Addr(), uintptr(file), uintptr(reserved), uintptr(bytesLow), uintptr(bytesHigh), uintptr(unsafe.Pointer(overlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -3319,7 +3484,7 @@ func UnlockFileEx(file Handle, reserved uint32, bytesLow uint32, bytesHigh uint3 } func UnmapViewOfFile(addr uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procUnmapViewOfFile.Addr(), 1, uintptr(addr), 0, 0) + r1, _, e1 := syscall.SyscallN(procUnmapViewOfFile.Addr(), uintptr(addr)) if r1 == 0 { err = errnoErr(e1) } @@ -3327,7 +3492,7 @@ func UnmapViewOfFile(addr uintptr) (err error) { } func updateProcThreadAttribute(attrlist *ProcThreadAttributeList, flags uint32, attr uintptr, value unsafe.Pointer, size uintptr, prevvalue unsafe.Pointer, returnedsize *uintptr) (err error) { - r1, _, e1 := syscall.Syscall9(procUpdateProcThreadAttribute.Addr(), 7, uintptr(unsafe.Pointer(attrlist)), uintptr(flags), uintptr(attr), uintptr(value), uintptr(size), uintptr(prevvalue), uintptr(unsafe.Pointer(returnedsize)), 0, 0) + r1, _, e1 := syscall.SyscallN(procUpdateProcThreadAttribute.Addr(), uintptr(unsafe.Pointer(attrlist)), uintptr(flags), uintptr(attr), uintptr(value), uintptr(size), uintptr(prevvalue), uintptr(unsafe.Pointer(returnedsize))) if r1 == 0 { err = errnoErr(e1) } @@ -3335,7 +3500,7 @@ func updateProcThreadAttribute(attrlist *ProcThreadAttributeList, flags uint32, } func VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) { - r0, _, e1 := syscall.Syscall6(procVirtualAlloc.Addr(), 4, uintptr(address), uintptr(size), uintptr(alloctype), uintptr(protect), 0, 0) + r0, _, e1 := syscall.SyscallN(procVirtualAlloc.Addr(), uintptr(address), uintptr(size), uintptr(alloctype), uintptr(protect)) value = uintptr(r0) if value == 0 { err = errnoErr(e1) @@ -3344,7 +3509,7 @@ func VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint3 } func VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) { - r1, _, e1 := syscall.Syscall(procVirtualFree.Addr(), 3, uintptr(address), uintptr(size), uintptr(freetype)) + r1, _, e1 := syscall.SyscallN(procVirtualFree.Addr(), uintptr(address), uintptr(size), uintptr(freetype)) if r1 == 0 { err = errnoErr(e1) } @@ -3352,7 +3517,7 @@ func VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) { } func VirtualLock(addr uintptr, length uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procVirtualLock.Addr(), 2, uintptr(addr), uintptr(length), 0) + r1, _, e1 := syscall.SyscallN(procVirtualLock.Addr(), uintptr(addr), uintptr(length)) if r1 == 0 { err = errnoErr(e1) } @@ -3360,7 +3525,7 @@ func VirtualLock(addr uintptr, length uintptr) (err error) { } func VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procVirtualProtect.Addr(), 4, uintptr(address), uintptr(size), uintptr(newprotect), uintptr(unsafe.Pointer(oldprotect)), 0, 0) + r1, _, e1 := syscall.SyscallN(procVirtualProtect.Addr(), uintptr(address), uintptr(size), uintptr(newprotect), uintptr(unsafe.Pointer(oldprotect))) if r1 == 0 { err = errnoErr(e1) } @@ -3368,7 +3533,7 @@ func VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect } func VirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect uint32, oldProtect *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procVirtualProtectEx.Addr(), 5, uintptr(process), uintptr(address), uintptr(size), uintptr(newProtect), uintptr(unsafe.Pointer(oldProtect)), 0) + r1, _, e1 := syscall.SyscallN(procVirtualProtectEx.Addr(), uintptr(process), uintptr(address), uintptr(size), uintptr(newProtect), uintptr(unsafe.Pointer(oldProtect))) if r1 == 0 { err = errnoErr(e1) } @@ -3376,7 +3541,7 @@ func VirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect } func VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procVirtualQuery.Addr(), 3, uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length)) + r1, _, e1 := syscall.SyscallN(procVirtualQuery.Addr(), uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length)) if r1 == 0 { err = errnoErr(e1) } @@ -3384,7 +3549,7 @@ func VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintpt } func VirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) { - r1, _, e1 := syscall.Syscall6(procVirtualQueryEx.Addr(), 4, uintptr(process), uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length), 0, 0) + r1, _, e1 := syscall.SyscallN(procVirtualQueryEx.Addr(), uintptr(process), uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length)) if r1 == 0 { err = errnoErr(e1) } @@ -3392,7 +3557,7 @@ func VirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformat } func VirtualUnlock(addr uintptr, length uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procVirtualUnlock.Addr(), 2, uintptr(addr), uintptr(length), 0) + r1, _, e1 := syscall.SyscallN(procVirtualUnlock.Addr(), uintptr(addr), uintptr(length)) if r1 == 0 { err = errnoErr(e1) } @@ -3400,13 +3565,13 @@ func VirtualUnlock(addr uintptr, length uintptr) (err error) { } func WTSGetActiveConsoleSessionId() (sessionID uint32) { - r0, _, _ := syscall.Syscall(procWTSGetActiveConsoleSessionId.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procWTSGetActiveConsoleSessionId.Addr()) sessionID = uint32(r0) return } func WaitCommEvent(handle Handle, lpEvtMask *uint32, lpOverlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall(procWaitCommEvent.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(lpEvtMask)), uintptr(unsafe.Pointer(lpOverlapped))) + r1, _, e1 := syscall.SyscallN(procWaitCommEvent.Addr(), uintptr(handle), uintptr(unsafe.Pointer(lpEvtMask)), uintptr(unsafe.Pointer(lpOverlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -3418,7 +3583,7 @@ func waitForMultipleObjects(count uint32, handles uintptr, waitAll bool, waitMil if waitAll { _p0 = 1 } - r0, _, e1 := syscall.Syscall6(procWaitForMultipleObjects.Addr(), 4, uintptr(count), uintptr(handles), uintptr(_p0), uintptr(waitMilliseconds), 0, 0) + r0, _, e1 := syscall.SyscallN(procWaitForMultipleObjects.Addr(), uintptr(count), uintptr(handles), uintptr(_p0), uintptr(waitMilliseconds)) event = uint32(r0) if event == 0xffffffff { err = errnoErr(e1) @@ -3427,7 +3592,7 @@ func waitForMultipleObjects(count uint32, handles uintptr, waitAll bool, waitMil } func WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) { - r0, _, e1 := syscall.Syscall(procWaitForSingleObject.Addr(), 2, uintptr(handle), uintptr(waitMilliseconds), 0) + r0, _, e1 := syscall.SyscallN(procWaitForSingleObject.Addr(), uintptr(handle), uintptr(waitMilliseconds)) event = uint32(r0) if event == 0xffffffff { err = errnoErr(e1) @@ -3436,7 +3601,7 @@ func WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, } func WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) { - r1, _, e1 := syscall.Syscall6(procWriteConsoleW.Addr(), 5, uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(towrite), uintptr(unsafe.Pointer(written)), uintptr(unsafe.Pointer(reserved)), 0) + r1, _, e1 := syscall.SyscallN(procWriteConsoleW.Addr(), uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(towrite), uintptr(unsafe.Pointer(written)), uintptr(unsafe.Pointer(reserved))) if r1 == 0 { err = errnoErr(e1) } @@ -3448,7 +3613,7 @@ func writeFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) if len(buf) > 0 { _p0 = &buf[0] } - r1, _, e1 := syscall.Syscall6(procWriteFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)), 0) + r1, _, e1 := syscall.SyscallN(procWriteFile.Addr(), uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -3456,7 +3621,7 @@ func writeFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) } func WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesWritten *uintptr) (err error) { - r1, _, e1 := syscall.Syscall6(procWriteProcessMemory.Addr(), 5, uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesWritten)), 0) + r1, _, e1 := syscall.SyscallN(procWriteProcessMemory.Addr(), uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesWritten))) if r1 == 0 { err = errnoErr(e1) } @@ -3464,7 +3629,7 @@ func WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size } func AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall9(procAcceptEx.Addr(), 8, uintptr(ls), uintptr(as), uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(overlapped)), 0) + r1, _, e1 := syscall.SyscallN(procAcceptEx.Addr(), uintptr(ls), uintptr(as), uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(overlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -3472,12 +3637,12 @@ func AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32 } func GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) { - syscall.Syscall9(procGetAcceptExSockaddrs.Addr(), 8, uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(lrsa)), uintptr(unsafe.Pointer(lrsalen)), uintptr(unsafe.Pointer(rrsa)), uintptr(unsafe.Pointer(rrsalen)), 0) + syscall.SyscallN(procGetAcceptExSockaddrs.Addr(), uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(lrsa)), uintptr(unsafe.Pointer(lrsalen)), uintptr(unsafe.Pointer(rrsa)), uintptr(unsafe.Pointer(rrsalen))) return } func TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procTransmitFile.Addr(), 7, uintptr(s), uintptr(handle), uintptr(bytesToWrite), uintptr(bytsPerSend), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(transmitFileBuf)), uintptr(flags), 0, 0) + r1, _, e1 := syscall.SyscallN(procTransmitFile.Addr(), uintptr(s), uintptr(handle), uintptr(bytesToWrite), uintptr(bytsPerSend), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(transmitFileBuf)), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -3485,7 +3650,7 @@ func TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint } func NetApiBufferFree(buf *byte) (neterr error) { - r0, _, _ := syscall.Syscall(procNetApiBufferFree.Addr(), 1, uintptr(unsafe.Pointer(buf)), 0, 0) + r0, _, _ := syscall.SyscallN(procNetApiBufferFree.Addr(), uintptr(unsafe.Pointer(buf))) if r0 != 0 { neterr = syscall.Errno(r0) } @@ -3493,7 +3658,7 @@ func NetApiBufferFree(buf *byte) (neterr error) { } func NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (neterr error) { - r0, _, _ := syscall.Syscall(procNetGetJoinInformation.Addr(), 3, uintptr(unsafe.Pointer(server)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bufType))) + r0, _, _ := syscall.SyscallN(procNetGetJoinInformation.Addr(), uintptr(unsafe.Pointer(server)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bufType))) if r0 != 0 { neterr = syscall.Errno(r0) } @@ -3501,7 +3666,7 @@ func NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (nete } func NetUserEnum(serverName *uint16, level uint32, filter uint32, buf **byte, prefMaxLen uint32, entriesRead *uint32, totalEntries *uint32, resumeHandle *uint32) (neterr error) { - r0, _, _ := syscall.Syscall9(procNetUserEnum.Addr(), 8, uintptr(unsafe.Pointer(serverName)), uintptr(level), uintptr(filter), uintptr(unsafe.Pointer(buf)), uintptr(prefMaxLen), uintptr(unsafe.Pointer(entriesRead)), uintptr(unsafe.Pointer(totalEntries)), uintptr(unsafe.Pointer(resumeHandle)), 0) + r0, _, _ := syscall.SyscallN(procNetUserEnum.Addr(), uintptr(unsafe.Pointer(serverName)), uintptr(level), uintptr(filter), uintptr(unsafe.Pointer(buf)), uintptr(prefMaxLen), uintptr(unsafe.Pointer(entriesRead)), uintptr(unsafe.Pointer(totalEntries)), uintptr(unsafe.Pointer(resumeHandle))) if r0 != 0 { neterr = syscall.Errno(r0) } @@ -3509,7 +3674,7 @@ func NetUserEnum(serverName *uint16, level uint32, filter uint32, buf **byte, pr } func NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) { - r0, _, _ := syscall.Syscall6(procNetUserGetInfo.Addr(), 4, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(userName)), uintptr(level), uintptr(unsafe.Pointer(buf)), 0, 0) + r0, _, _ := syscall.SyscallN(procNetUserGetInfo.Addr(), uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(userName)), uintptr(level), uintptr(unsafe.Pointer(buf))) if r0 != 0 { neterr = syscall.Errno(r0) } @@ -3517,7 +3682,7 @@ func NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **by } func NtCreateFile(handle *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, allocationSize *int64, attributes uint32, share uint32, disposition uint32, options uint32, eabuffer uintptr, ealength uint32) (ntstatus error) { - r0, _, _ := syscall.Syscall12(procNtCreateFile.Addr(), 11, uintptr(unsafe.Pointer(handle)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(allocationSize)), uintptr(attributes), uintptr(share), uintptr(disposition), uintptr(options), uintptr(eabuffer), uintptr(ealength), 0) + r0, _, _ := syscall.SyscallN(procNtCreateFile.Addr(), uintptr(unsafe.Pointer(handle)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(allocationSize)), uintptr(attributes), uintptr(share), uintptr(disposition), uintptr(options), uintptr(eabuffer), uintptr(ealength)) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3525,7 +3690,7 @@ func NtCreateFile(handle *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO } func NtCreateNamedPipeFile(pipe *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (ntstatus error) { - r0, _, _ := syscall.Syscall15(procNtCreateNamedPipeFile.Addr(), 14, uintptr(unsafe.Pointer(pipe)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(share), uintptr(disposition), uintptr(options), uintptr(typ), uintptr(readMode), uintptr(completionMode), uintptr(maxInstances), uintptr(inboundQuota), uintptr(outputQuota), uintptr(unsafe.Pointer(timeout)), 0) + r0, _, _ := syscall.SyscallN(procNtCreateNamedPipeFile.Addr(), uintptr(unsafe.Pointer(pipe)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(share), uintptr(disposition), uintptr(options), uintptr(typ), uintptr(readMode), uintptr(completionMode), uintptr(maxInstances), uintptr(inboundQuota), uintptr(outputQuota), uintptr(unsafe.Pointer(timeout))) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3533,7 +3698,7 @@ func NtCreateNamedPipeFile(pipe *Handle, access uint32, oa *OBJECT_ATTRIBUTES, i } func NtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32, retLen *uint32) (ntstatus error) { - r0, _, _ := syscall.Syscall6(procNtQueryInformationProcess.Addr(), 5, uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen), uintptr(unsafe.Pointer(retLen)), 0) + r0, _, _ := syscall.SyscallN(procNtQueryInformationProcess.Addr(), uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen), uintptr(unsafe.Pointer(retLen))) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3541,7 +3706,7 @@ func NtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe } func NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32, retLen *uint32) (ntstatus error) { - r0, _, _ := syscall.Syscall6(procNtQuerySystemInformation.Addr(), 4, uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen), uintptr(unsafe.Pointer(retLen)), 0, 0) + r0, _, _ := syscall.SyscallN(procNtQuerySystemInformation.Addr(), uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen), uintptr(unsafe.Pointer(retLen))) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3549,7 +3714,7 @@ func NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInf } func NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32, class uint32) (ntstatus error) { - r0, _, _ := syscall.Syscall6(procNtSetInformationFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen), uintptr(class), 0) + r0, _, _ := syscall.SyscallN(procNtSetInformationFile.Addr(), uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen), uintptr(class)) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3557,7 +3722,7 @@ func NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, } func NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32) (ntstatus error) { - r0, _, _ := syscall.Syscall6(procNtSetInformationProcess.Addr(), 4, uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen), 0, 0) + r0, _, _ := syscall.SyscallN(procNtSetInformationProcess.Addr(), uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen)) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3565,7 +3730,7 @@ func NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.P } func NtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32) (ntstatus error) { - r0, _, _ := syscall.Syscall(procNtSetSystemInformation.Addr(), 3, uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen)) + r0, _, _ := syscall.SyscallN(procNtSetSystemInformation.Addr(), uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen)) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3573,13 +3738,13 @@ func NtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoL } func RtlAddFunctionTable(functionTable *RUNTIME_FUNCTION, entryCount uint32, baseAddress uintptr) (ret bool) { - r0, _, _ := syscall.Syscall(procRtlAddFunctionTable.Addr(), 3, uintptr(unsafe.Pointer(functionTable)), uintptr(entryCount), uintptr(baseAddress)) + r0, _, _ := syscall.SyscallN(procRtlAddFunctionTable.Addr(), uintptr(unsafe.Pointer(functionTable)), uintptr(entryCount), uintptr(baseAddress)) ret = r0 != 0 return } func RtlDefaultNpAcl(acl **ACL) (ntstatus error) { - r0, _, _ := syscall.Syscall(procRtlDefaultNpAcl.Addr(), 1, uintptr(unsafe.Pointer(acl)), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlDefaultNpAcl.Addr(), uintptr(unsafe.Pointer(acl))) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3587,13 +3752,13 @@ func RtlDefaultNpAcl(acl **ACL) (ntstatus error) { } func RtlDeleteFunctionTable(functionTable *RUNTIME_FUNCTION) (ret bool) { - r0, _, _ := syscall.Syscall(procRtlDeleteFunctionTable.Addr(), 1, uintptr(unsafe.Pointer(functionTable)), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlDeleteFunctionTable.Addr(), uintptr(unsafe.Pointer(functionTable))) ret = r0 != 0 return } func RtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) { - r0, _, _ := syscall.Syscall6(procRtlDosPathNameToNtPathName_U_WithStatus.Addr(), 4, uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName)), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlDosPathNameToNtPathName_U_WithStatus.Addr(), uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName))) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3601,7 +3766,7 @@ func RtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFile } func RtlDosPathNameToRelativeNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) { - r0, _, _ := syscall.Syscall6(procRtlDosPathNameToRelativeNtPathName_U_WithStatus.Addr(), 4, uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName)), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlDosPathNameToRelativeNtPathName_U_WithStatus.Addr(), uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName))) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3609,18 +3774,18 @@ func RtlDosPathNameToRelativeNtPathName(dosName *uint16, ntName *NTUnicodeString } func RtlGetCurrentPeb() (peb *PEB) { - r0, _, _ := syscall.Syscall(procRtlGetCurrentPeb.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procRtlGetCurrentPeb.Addr()) peb = (*PEB)(unsafe.Pointer(r0)) return } func rtlGetNtVersionNumbers(majorVersion *uint32, minorVersion *uint32, buildNumber *uint32) { - syscall.Syscall(procRtlGetNtVersionNumbers.Addr(), 3, uintptr(unsafe.Pointer(majorVersion)), uintptr(unsafe.Pointer(minorVersion)), uintptr(unsafe.Pointer(buildNumber))) + syscall.SyscallN(procRtlGetNtVersionNumbers.Addr(), uintptr(unsafe.Pointer(majorVersion)), uintptr(unsafe.Pointer(minorVersion)), uintptr(unsafe.Pointer(buildNumber))) return } func rtlGetVersion(info *OsVersionInfoEx) (ntstatus error) { - r0, _, _ := syscall.Syscall(procRtlGetVersion.Addr(), 1, uintptr(unsafe.Pointer(info)), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlGetVersion.Addr(), uintptr(unsafe.Pointer(info))) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3628,23 +3793,23 @@ func rtlGetVersion(info *OsVersionInfoEx) (ntstatus error) { } func RtlInitString(destinationString *NTString, sourceString *byte) { - syscall.Syscall(procRtlInitString.Addr(), 2, uintptr(unsafe.Pointer(destinationString)), uintptr(unsafe.Pointer(sourceString)), 0) + syscall.SyscallN(procRtlInitString.Addr(), uintptr(unsafe.Pointer(destinationString)), uintptr(unsafe.Pointer(sourceString))) return } func RtlInitUnicodeString(destinationString *NTUnicodeString, sourceString *uint16) { - syscall.Syscall(procRtlInitUnicodeString.Addr(), 2, uintptr(unsafe.Pointer(destinationString)), uintptr(unsafe.Pointer(sourceString)), 0) + syscall.SyscallN(procRtlInitUnicodeString.Addr(), uintptr(unsafe.Pointer(destinationString)), uintptr(unsafe.Pointer(sourceString))) return } func rtlNtStatusToDosErrorNoTeb(ntstatus NTStatus) (ret syscall.Errno) { - r0, _, _ := syscall.Syscall(procRtlNtStatusToDosErrorNoTeb.Addr(), 1, uintptr(ntstatus), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlNtStatusToDosErrorNoTeb.Addr(), uintptr(ntstatus)) ret = syscall.Errno(r0) return } func clsidFromString(lpsz *uint16, pclsid *GUID) (ret error) { - r0, _, _ := syscall.Syscall(procCLSIDFromString.Addr(), 2, uintptr(unsafe.Pointer(lpsz)), uintptr(unsafe.Pointer(pclsid)), 0) + r0, _, _ := syscall.SyscallN(procCLSIDFromString.Addr(), uintptr(unsafe.Pointer(lpsz)), uintptr(unsafe.Pointer(pclsid))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -3652,7 +3817,7 @@ func clsidFromString(lpsz *uint16, pclsid *GUID) (ret error) { } func coCreateGuid(pguid *GUID) (ret error) { - r0, _, _ := syscall.Syscall(procCoCreateGuid.Addr(), 1, uintptr(unsafe.Pointer(pguid)), 0, 0) + r0, _, _ := syscall.SyscallN(procCoCreateGuid.Addr(), uintptr(unsafe.Pointer(pguid))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -3660,7 +3825,7 @@ func coCreateGuid(pguid *GUID) (ret error) { } func CoGetObject(name *uint16, bindOpts *BIND_OPTS3, guid *GUID, functionTable **uintptr) (ret error) { - r0, _, _ := syscall.Syscall6(procCoGetObject.Addr(), 4, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bindOpts)), uintptr(unsafe.Pointer(guid)), uintptr(unsafe.Pointer(functionTable)), 0, 0) + r0, _, _ := syscall.SyscallN(procCoGetObject.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bindOpts)), uintptr(unsafe.Pointer(guid)), uintptr(unsafe.Pointer(functionTable))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -3668,7 +3833,7 @@ func CoGetObject(name *uint16, bindOpts *BIND_OPTS3, guid *GUID, functionTable * } func CoInitializeEx(reserved uintptr, coInit uint32) (ret error) { - r0, _, _ := syscall.Syscall(procCoInitializeEx.Addr(), 2, uintptr(reserved), uintptr(coInit), 0) + r0, _, _ := syscall.SyscallN(procCoInitializeEx.Addr(), uintptr(reserved), uintptr(coInit)) if r0 != 0 { ret = syscall.Errno(r0) } @@ -3676,23 +3841,23 @@ func CoInitializeEx(reserved uintptr, coInit uint32) (ret error) { } func CoTaskMemFree(address unsafe.Pointer) { - syscall.Syscall(procCoTaskMemFree.Addr(), 1, uintptr(address), 0, 0) + syscall.SyscallN(procCoTaskMemFree.Addr(), uintptr(address)) return } func CoUninitialize() { - syscall.Syscall(procCoUninitialize.Addr(), 0, 0, 0, 0) + syscall.SyscallN(procCoUninitialize.Addr()) return } func stringFromGUID2(rguid *GUID, lpsz *uint16, cchMax int32) (chars int32) { - r0, _, _ := syscall.Syscall(procStringFromGUID2.Addr(), 3, uintptr(unsafe.Pointer(rguid)), uintptr(unsafe.Pointer(lpsz)), uintptr(cchMax)) + r0, _, _ := syscall.SyscallN(procStringFromGUID2.Addr(), uintptr(unsafe.Pointer(rguid)), uintptr(unsafe.Pointer(lpsz)), uintptr(cchMax)) chars = int32(r0) return } func EnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procEnumProcessModules.Addr(), 4, uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)), 0, 0) + r1, _, e1 := syscall.SyscallN(procEnumProcessModules.Addr(), uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded))) if r1 == 0 { err = errnoErr(e1) } @@ -3700,7 +3865,7 @@ func EnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uin } func EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *uint32, filterFlag uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procEnumProcessModulesEx.Addr(), 5, uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)), uintptr(filterFlag), 0) + r1, _, e1 := syscall.SyscallN(procEnumProcessModulesEx.Addr(), uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)), uintptr(filterFlag)) if r1 == 0 { err = errnoErr(e1) } @@ -3708,7 +3873,7 @@ func EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *u } func enumProcesses(processIds *uint32, nSize uint32, bytesReturned *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procEnumProcesses.Addr(), 3, uintptr(unsafe.Pointer(processIds)), uintptr(nSize), uintptr(unsafe.Pointer(bytesReturned))) + r1, _, e1 := syscall.SyscallN(procEnumProcesses.Addr(), uintptr(unsafe.Pointer(processIds)), uintptr(nSize), uintptr(unsafe.Pointer(bytesReturned))) if r1 == 0 { err = errnoErr(e1) } @@ -3716,7 +3881,7 @@ func enumProcesses(processIds *uint32, nSize uint32, bytesReturned *uint32) (err } func GetModuleBaseName(process Handle, module Handle, baseName *uint16, size uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetModuleBaseNameW.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(baseName)), uintptr(size), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetModuleBaseNameW.Addr(), uintptr(process), uintptr(module), uintptr(unsafe.Pointer(baseName)), uintptr(size)) if r1 == 0 { err = errnoErr(e1) } @@ -3724,7 +3889,7 @@ func GetModuleBaseName(process Handle, module Handle, baseName *uint16, size uin } func GetModuleFileNameEx(process Handle, module Handle, filename *uint16, size uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetModuleFileNameExW.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetModuleFileNameExW.Addr(), uintptr(process), uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size)) if r1 == 0 { err = errnoErr(e1) } @@ -3732,7 +3897,7 @@ func GetModuleFileNameEx(process Handle, module Handle, filename *uint16, size u } func GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetModuleInformation.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(modinfo)), uintptr(cb), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetModuleInformation.Addr(), uintptr(process), uintptr(module), uintptr(unsafe.Pointer(modinfo)), uintptr(cb)) if r1 == 0 { err = errnoErr(e1) } @@ -3740,7 +3905,7 @@ func GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb } func QueryWorkingSetEx(process Handle, pv uintptr, cb uint32) (err error) { - r1, _, e1 := syscall.Syscall(procQueryWorkingSetEx.Addr(), 3, uintptr(process), uintptr(pv), uintptr(cb)) + r1, _, e1 := syscall.SyscallN(procQueryWorkingSetEx.Addr(), uintptr(process), uintptr(pv), uintptr(cb)) if r1 == 0 { err = errnoErr(e1) } @@ -3752,7 +3917,7 @@ func SubscribeServiceChangeNotifications(service Handle, eventType uint32, callb if ret != nil { return } - r0, _, _ := syscall.Syscall6(procSubscribeServiceChangeNotifications.Addr(), 5, uintptr(service), uintptr(eventType), uintptr(callback), uintptr(callbackCtx), uintptr(unsafe.Pointer(subscription)), 0) + r0, _, _ := syscall.SyscallN(procSubscribeServiceChangeNotifications.Addr(), uintptr(service), uintptr(eventType), uintptr(callback), uintptr(callbackCtx), uintptr(unsafe.Pointer(subscription))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -3764,12 +3929,12 @@ func UnsubscribeServiceChangeNotifications(subscription uintptr) (err error) { if err != nil { return } - syscall.Syscall(procUnsubscribeServiceChangeNotifications.Addr(), 1, uintptr(subscription), 0, 0) + syscall.SyscallN(procUnsubscribeServiceChangeNotifications.Addr(), uintptr(subscription)) return } func GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetUserNameExW.Addr(), 3, uintptr(nameFormat), uintptr(unsafe.Pointer(nameBuffre)), uintptr(unsafe.Pointer(nSize))) + r1, _, e1 := syscall.SyscallN(procGetUserNameExW.Addr(), uintptr(nameFormat), uintptr(unsafe.Pointer(nameBuffre)), uintptr(unsafe.Pointer(nSize))) if r1&0xff == 0 { err = errnoErr(e1) } @@ -3777,7 +3942,7 @@ func GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err er } func TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint32, translatedName *uint16, nSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procTranslateNameW.Addr(), 5, uintptr(unsafe.Pointer(accName)), uintptr(accNameFormat), uintptr(desiredNameFormat), uintptr(unsafe.Pointer(translatedName)), uintptr(unsafe.Pointer(nSize)), 0) + r1, _, e1 := syscall.SyscallN(procTranslateNameW.Addr(), uintptr(unsafe.Pointer(accName)), uintptr(accNameFormat), uintptr(desiredNameFormat), uintptr(unsafe.Pointer(translatedName)), uintptr(unsafe.Pointer(nSize))) if r1&0xff == 0 { err = errnoErr(e1) } @@ -3785,7 +3950,7 @@ func TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint } func SetupDiBuildDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiBuildDriverInfoList.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType)) + r1, _, e1 := syscall.SyscallN(procSetupDiBuildDriverInfoList.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType)) if r1 == 0 { err = errnoErr(e1) } @@ -3793,7 +3958,7 @@ func SetupDiBuildDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoDa } func SetupDiCallClassInstaller(installFunction DI_FUNCTION, deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiCallClassInstaller.Addr(), 3, uintptr(installFunction), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData))) + r1, _, e1 := syscall.SyscallN(procSetupDiCallClassInstaller.Addr(), uintptr(installFunction), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData))) if r1 == 0 { err = errnoErr(e1) } @@ -3801,7 +3966,7 @@ func SetupDiCallClassInstaller(installFunction DI_FUNCTION, deviceInfoSet DevInf } func SetupDiCancelDriverInfoSearch(deviceInfoSet DevInfo) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiCancelDriverInfoSearch.Addr(), 1, uintptr(deviceInfoSet), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetupDiCancelDriverInfoSearch.Addr(), uintptr(deviceInfoSet)) if r1 == 0 { err = errnoErr(e1) } @@ -3809,7 +3974,7 @@ func SetupDiCancelDriverInfoSearch(deviceInfoSet DevInfo) (err error) { } func setupDiClassGuidsFromNameEx(className *uint16, classGuidList *GUID, classGuidListSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) { - r1, _, e1 := syscall.Syscall6(procSetupDiClassGuidsFromNameExW.Addr(), 6, uintptr(unsafe.Pointer(className)), uintptr(unsafe.Pointer(classGuidList)), uintptr(classGuidListSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) + r1, _, e1 := syscall.SyscallN(procSetupDiClassGuidsFromNameExW.Addr(), uintptr(unsafe.Pointer(className)), uintptr(unsafe.Pointer(classGuidList)), uintptr(classGuidListSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) if r1 == 0 { err = errnoErr(e1) } @@ -3817,7 +3982,7 @@ func setupDiClassGuidsFromNameEx(className *uint16, classGuidList *GUID, classGu } func setupDiClassNameFromGuidEx(classGUID *GUID, className *uint16, classNameSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) { - r1, _, e1 := syscall.Syscall6(procSetupDiClassNameFromGuidExW.Addr(), 6, uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(className)), uintptr(classNameSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) + r1, _, e1 := syscall.SyscallN(procSetupDiClassNameFromGuidExW.Addr(), uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(className)), uintptr(classNameSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) if r1 == 0 { err = errnoErr(e1) } @@ -3825,7 +3990,7 @@ func setupDiClassNameFromGuidEx(classGUID *GUID, className *uint16, classNameSiz } func setupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName *uint16, reserved uintptr) (handle DevInfo, err error) { - r0, _, e1 := syscall.Syscall6(procSetupDiCreateDeviceInfoListExW.Addr(), 4, uintptr(unsafe.Pointer(classGUID)), uintptr(hwndParent), uintptr(unsafe.Pointer(machineName)), uintptr(reserved), 0, 0) + r0, _, e1 := syscall.SyscallN(procSetupDiCreateDeviceInfoListExW.Addr(), uintptr(unsafe.Pointer(classGUID)), uintptr(hwndParent), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) handle = DevInfo(r0) if handle == DevInfo(InvalidHandle) { err = errnoErr(e1) @@ -3834,7 +3999,7 @@ func setupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineN } func setupDiCreateDeviceInfo(deviceInfoSet DevInfo, DeviceName *uint16, classGUID *GUID, DeviceDescription *uint16, hwndParent uintptr, CreationFlags DICD, deviceInfoData *DevInfoData) (err error) { - r1, _, e1 := syscall.Syscall9(procSetupDiCreateDeviceInfoW.Addr(), 7, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(DeviceName)), uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(DeviceDescription)), uintptr(hwndParent), uintptr(CreationFlags), uintptr(unsafe.Pointer(deviceInfoData)), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetupDiCreateDeviceInfoW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(DeviceName)), uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(DeviceDescription)), uintptr(hwndParent), uintptr(CreationFlags), uintptr(unsafe.Pointer(deviceInfoData))) if r1 == 0 { err = errnoErr(e1) } @@ -3842,7 +4007,7 @@ func setupDiCreateDeviceInfo(deviceInfoSet DevInfo, DeviceName *uint16, classGUI } func SetupDiDestroyDeviceInfoList(deviceInfoSet DevInfo) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiDestroyDeviceInfoList.Addr(), 1, uintptr(deviceInfoSet), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetupDiDestroyDeviceInfoList.Addr(), uintptr(deviceInfoSet)) if r1 == 0 { err = errnoErr(e1) } @@ -3850,7 +4015,7 @@ func SetupDiDestroyDeviceInfoList(deviceInfoSet DevInfo) (err error) { } func SetupDiDestroyDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiDestroyDriverInfoList.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType)) + r1, _, e1 := syscall.SyscallN(procSetupDiDestroyDriverInfoList.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType)) if r1 == 0 { err = errnoErr(e1) } @@ -3858,7 +4023,7 @@ func SetupDiDestroyDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfo } func setupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex uint32, deviceInfoData *DevInfoData) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiEnumDeviceInfo.Addr(), 3, uintptr(deviceInfoSet), uintptr(memberIndex), uintptr(unsafe.Pointer(deviceInfoData))) + r1, _, e1 := syscall.SyscallN(procSetupDiEnumDeviceInfo.Addr(), uintptr(deviceInfoSet), uintptr(memberIndex), uintptr(unsafe.Pointer(deviceInfoData))) if r1 == 0 { err = errnoErr(e1) } @@ -3866,7 +4031,7 @@ func setupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex uint32, deviceInfo } func setupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex uint32, driverInfoData *DrvInfoData) (err error) { - r1, _, e1 := syscall.Syscall6(procSetupDiEnumDriverInfoW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType), uintptr(memberIndex), uintptr(unsafe.Pointer(driverInfoData)), 0) + r1, _, e1 := syscall.SyscallN(procSetupDiEnumDriverInfoW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType), uintptr(memberIndex), uintptr(unsafe.Pointer(driverInfoData))) if r1 == 0 { err = errnoErr(e1) } @@ -3874,7 +4039,7 @@ func setupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, d } func setupDiGetClassDevsEx(classGUID *GUID, Enumerator *uint16, hwndParent uintptr, Flags DIGCF, deviceInfoSet DevInfo, machineName *uint16, reserved uintptr) (handle DevInfo, err error) { - r0, _, e1 := syscall.Syscall9(procSetupDiGetClassDevsExW.Addr(), 7, uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(Enumerator)), uintptr(hwndParent), uintptr(Flags), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(machineName)), uintptr(reserved), 0, 0) + r0, _, e1 := syscall.SyscallN(procSetupDiGetClassDevsExW.Addr(), uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(Enumerator)), uintptr(hwndParent), uintptr(Flags), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) handle = DevInfo(r0) if handle == DevInfo(InvalidHandle) { err = errnoErr(e1) @@ -3883,7 +4048,7 @@ func setupDiGetClassDevsEx(classGUID *GUID, Enumerator *uint16, hwndParent uintp } func SetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetupDiGetClassInstallParamsW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize), uintptr(unsafe.Pointer(requiredSize)), 0) + r1, _, e1 := syscall.SyscallN(procSetupDiGetClassInstallParamsW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize), uintptr(unsafe.Pointer(requiredSize))) if r1 == 0 { err = errnoErr(e1) } @@ -3891,7 +4056,7 @@ func SetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfo } func setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *DevInfoListDetailData) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiGetDeviceInfoListDetailW.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoSetDetailData)), 0) + r1, _, e1 := syscall.SyscallN(procSetupDiGetDeviceInfoListDetailW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoSetDetailData))) if r1 == 0 { err = errnoErr(e1) } @@ -3899,7 +4064,7 @@ func setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailDa } func setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiGetDeviceInstallParamsW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams))) + r1, _, e1 := syscall.SyscallN(procSetupDiGetDeviceInstallParamsW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams))) if r1 == 0 { err = errnoErr(e1) } @@ -3907,7 +4072,7 @@ func setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInf } func setupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, instanceId *uint16, instanceIdSize uint32, instanceIdRequiredSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetupDiGetDeviceInstanceIdW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(instanceId)), uintptr(instanceIdSize), uintptr(unsafe.Pointer(instanceIdRequiredSize)), 0) + r1, _, e1 := syscall.SyscallN(procSetupDiGetDeviceInstanceIdW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(instanceId)), uintptr(instanceIdSize), uintptr(unsafe.Pointer(instanceIdRequiredSize))) if r1 == 0 { err = errnoErr(e1) } @@ -3915,7 +4080,7 @@ func setupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoDa } func setupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY, propertyType *DEVPROPTYPE, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procSetupDiGetDevicePropertyW.Addr(), 8, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(propertyKey)), uintptr(unsafe.Pointer(propertyType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(flags), 0) + r1, _, e1 := syscall.SyscallN(procSetupDiGetDevicePropertyW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(propertyKey)), uintptr(unsafe.Pointer(propertyType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -3923,7 +4088,7 @@ func setupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData } func setupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyRegDataType *uint32, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procSetupDiGetDeviceRegistryPropertyW.Addr(), 7, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyRegDataType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetupDiGetDeviceRegistryPropertyW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyRegDataType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize))) if r1 == 0 { err = errnoErr(e1) } @@ -3931,7 +4096,7 @@ func setupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *Dev } func setupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData, driverInfoDetailData *DrvInfoDetailData, driverInfoDetailDataSize uint32, requiredSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetupDiGetDriverInfoDetailW.Addr(), 6, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData)), uintptr(unsafe.Pointer(driverInfoDetailData)), uintptr(driverInfoDetailDataSize), uintptr(unsafe.Pointer(requiredSize))) + r1, _, e1 := syscall.SyscallN(procSetupDiGetDriverInfoDetailW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData)), uintptr(unsafe.Pointer(driverInfoDetailData)), uintptr(driverInfoDetailDataSize), uintptr(unsafe.Pointer(requiredSize))) if r1 == 0 { err = errnoErr(e1) } @@ -3939,7 +4104,7 @@ func setupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoDa } func setupDiGetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiGetSelectedDevice.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), 0) + r1, _, e1 := syscall.SyscallN(procSetupDiGetSelectedDevice.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData))) if r1 == 0 { err = errnoErr(e1) } @@ -3947,7 +4112,7 @@ func setupDiGetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData } func setupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiGetSelectedDriverW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData))) + r1, _, e1 := syscall.SyscallN(procSetupDiGetSelectedDriverW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData))) if r1 == 0 { err = errnoErr(e1) } @@ -3955,7 +4120,7 @@ func setupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData } func SetupDiOpenDevRegKey(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (key Handle, err error) { - r0, _, e1 := syscall.Syscall6(procSetupDiOpenDevRegKey.Addr(), 6, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(Scope), uintptr(HwProfile), uintptr(KeyType), uintptr(samDesired)) + r0, _, e1 := syscall.SyscallN(procSetupDiOpenDevRegKey.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(Scope), uintptr(HwProfile), uintptr(KeyType), uintptr(samDesired)) key = Handle(r0) if key == InvalidHandle { err = errnoErr(e1) @@ -3964,7 +4129,7 @@ func SetupDiOpenDevRegKey(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, Sc } func SetupDiSetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetupDiSetClassInstallParamsW.Addr(), 4, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetupDiSetClassInstallParamsW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize)) if r1 == 0 { err = errnoErr(e1) } @@ -3972,7 +4137,7 @@ func SetupDiSetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfo } func SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiSetDeviceInstallParamsW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams))) + r1, _, e1 := syscall.SyscallN(procSetupDiSetDeviceInstallParamsW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams))) if r1 == 0 { err = errnoErr(e1) } @@ -3980,7 +4145,7 @@ func SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInf } func setupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffer *byte, propertyBufferSize uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetupDiSetDeviceRegistryPropertyW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), 0) + r1, _, e1 := syscall.SyscallN(procSetupDiSetDeviceRegistryPropertyW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize)) if r1 == 0 { err = errnoErr(e1) } @@ -3988,7 +4153,7 @@ func setupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *Dev } func SetupDiSetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiSetSelectedDevice.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), 0) + r1, _, e1 := syscall.SyscallN(procSetupDiSetSelectedDevice.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData))) if r1 == 0 { err = errnoErr(e1) } @@ -3996,7 +4161,7 @@ func SetupDiSetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData } func SetupDiSetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiSetSelectedDriverW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData))) + r1, _, e1 := syscall.SyscallN(procSetupDiSetSelectedDriverW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData))) if r1 == 0 { err = errnoErr(e1) } @@ -4004,7 +4169,7 @@ func SetupDiSetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData } func setupUninstallOEMInf(infFileName *uint16, flags SUOI, reserved uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procSetupUninstallOEMInfW.Addr(), 3, uintptr(unsafe.Pointer(infFileName)), uintptr(flags), uintptr(reserved)) + r1, _, e1 := syscall.SyscallN(procSetupUninstallOEMInfW.Addr(), uintptr(unsafe.Pointer(infFileName)), uintptr(flags), uintptr(reserved)) if r1 == 0 { err = errnoErr(e1) } @@ -4012,7 +4177,7 @@ func setupUninstallOEMInf(infFileName *uint16, flags SUOI, reserved uintptr) (er } func commandLineToArgv(cmd *uint16, argc *int32) (argv **uint16, err error) { - r0, _, e1 := syscall.Syscall(procCommandLineToArgvW.Addr(), 2, uintptr(unsafe.Pointer(cmd)), uintptr(unsafe.Pointer(argc)), 0) + r0, _, e1 := syscall.SyscallN(procCommandLineToArgvW.Addr(), uintptr(unsafe.Pointer(cmd)), uintptr(unsafe.Pointer(argc))) argv = (**uint16)(unsafe.Pointer(r0)) if argv == nil { err = errnoErr(e1) @@ -4021,7 +4186,7 @@ func commandLineToArgv(cmd *uint16, argc *int32) (argv **uint16, err error) { } func shGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **uint16) (ret error) { - r0, _, _ := syscall.Syscall6(procSHGetKnownFolderPath.Addr(), 4, uintptr(unsafe.Pointer(id)), uintptr(flags), uintptr(token), uintptr(unsafe.Pointer(path)), 0, 0) + r0, _, _ := syscall.SyscallN(procSHGetKnownFolderPath.Addr(), uintptr(unsafe.Pointer(id)), uintptr(flags), uintptr(token), uintptr(unsafe.Pointer(path))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -4029,7 +4194,7 @@ func shGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **u } func ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) { - r1, _, e1 := syscall.Syscall6(procShellExecuteW.Addr(), 6, uintptr(hwnd), uintptr(unsafe.Pointer(verb)), uintptr(unsafe.Pointer(file)), uintptr(unsafe.Pointer(args)), uintptr(unsafe.Pointer(cwd)), uintptr(showCmd)) + r1, _, e1 := syscall.SyscallN(procShellExecuteW.Addr(), uintptr(hwnd), uintptr(unsafe.Pointer(verb)), uintptr(unsafe.Pointer(file)), uintptr(unsafe.Pointer(args)), uintptr(unsafe.Pointer(cwd)), uintptr(showCmd)) if r1 <= 32 { err = errnoErr(e1) } @@ -4037,12 +4202,12 @@ func ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *ui } func EnumChildWindows(hwnd HWND, enumFunc uintptr, param unsafe.Pointer) { - syscall.Syscall(procEnumChildWindows.Addr(), 3, uintptr(hwnd), uintptr(enumFunc), uintptr(param)) + syscall.SyscallN(procEnumChildWindows.Addr(), uintptr(hwnd), uintptr(enumFunc), uintptr(param)) return } func EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) { - r1, _, e1 := syscall.Syscall(procEnumWindows.Addr(), 2, uintptr(enumFunc), uintptr(param), 0) + r1, _, e1 := syscall.SyscallN(procEnumWindows.Addr(), uintptr(enumFunc), uintptr(param)) if r1 == 0 { err = errnoErr(e1) } @@ -4050,7 +4215,7 @@ func EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) { } func ExitWindowsEx(flags uint32, reason uint32) (err error) { - r1, _, e1 := syscall.Syscall(procExitWindowsEx.Addr(), 2, uintptr(flags), uintptr(reason), 0) + r1, _, e1 := syscall.SyscallN(procExitWindowsEx.Addr(), uintptr(flags), uintptr(reason)) if r1 == 0 { err = errnoErr(e1) } @@ -4058,7 +4223,7 @@ func ExitWindowsEx(flags uint32, reason uint32) (err error) { } func GetClassName(hwnd HWND, className *uint16, maxCount int32) (copied int32, err error) { - r0, _, e1 := syscall.Syscall(procGetClassNameW.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(className)), uintptr(maxCount)) + r0, _, e1 := syscall.SyscallN(procGetClassNameW.Addr(), uintptr(hwnd), uintptr(unsafe.Pointer(className)), uintptr(maxCount)) copied = int32(r0) if copied == 0 { err = errnoErr(e1) @@ -4067,19 +4232,19 @@ func GetClassName(hwnd HWND, className *uint16, maxCount int32) (copied int32, e } func GetDesktopWindow() (hwnd HWND) { - r0, _, _ := syscall.Syscall(procGetDesktopWindow.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetDesktopWindow.Addr()) hwnd = HWND(r0) return } func GetForegroundWindow() (hwnd HWND) { - r0, _, _ := syscall.Syscall(procGetForegroundWindow.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetForegroundWindow.Addr()) hwnd = HWND(r0) return } func GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) { - r1, _, e1 := syscall.Syscall(procGetGUIThreadInfo.Addr(), 2, uintptr(thread), uintptr(unsafe.Pointer(info)), 0) + r1, _, e1 := syscall.SyscallN(procGetGUIThreadInfo.Addr(), uintptr(thread), uintptr(unsafe.Pointer(info))) if r1 == 0 { err = errnoErr(e1) } @@ -4087,19 +4252,19 @@ func GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) { } func GetKeyboardLayout(tid uint32) (hkl Handle) { - r0, _, _ := syscall.Syscall(procGetKeyboardLayout.Addr(), 1, uintptr(tid), 0, 0) + r0, _, _ := syscall.SyscallN(procGetKeyboardLayout.Addr(), uintptr(tid)) hkl = Handle(r0) return } func GetShellWindow() (shellWindow HWND) { - r0, _, _ := syscall.Syscall(procGetShellWindow.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetShellWindow.Addr()) shellWindow = HWND(r0) return } func GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetWindowThreadProcessId.Addr(), 2, uintptr(hwnd), uintptr(unsafe.Pointer(pid)), 0) + r0, _, e1 := syscall.SyscallN(procGetWindowThreadProcessId.Addr(), uintptr(hwnd), uintptr(unsafe.Pointer(pid))) tid = uint32(r0) if tid == 0 { err = errnoErr(e1) @@ -4108,25 +4273,25 @@ func GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) { } func IsWindow(hwnd HWND) (isWindow bool) { - r0, _, _ := syscall.Syscall(procIsWindow.Addr(), 1, uintptr(hwnd), 0, 0) + r0, _, _ := syscall.SyscallN(procIsWindow.Addr(), uintptr(hwnd)) isWindow = r0 != 0 return } func IsWindowUnicode(hwnd HWND) (isUnicode bool) { - r0, _, _ := syscall.Syscall(procIsWindowUnicode.Addr(), 1, uintptr(hwnd), 0, 0) + r0, _, _ := syscall.SyscallN(procIsWindowUnicode.Addr(), uintptr(hwnd)) isUnicode = r0 != 0 return } func IsWindowVisible(hwnd HWND) (isVisible bool) { - r0, _, _ := syscall.Syscall(procIsWindowVisible.Addr(), 1, uintptr(hwnd), 0, 0) + r0, _, _ := syscall.SyscallN(procIsWindowVisible.Addr(), uintptr(hwnd)) isVisible = r0 != 0 return } func LoadKeyboardLayout(name *uint16, flags uint32) (hkl Handle, err error) { - r0, _, e1 := syscall.Syscall(procLoadKeyboardLayoutW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(flags), 0) + r0, _, e1 := syscall.SyscallN(procLoadKeyboardLayoutW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(flags)) hkl = Handle(r0) if hkl == 0 { err = errnoErr(e1) @@ -4135,7 +4300,7 @@ func LoadKeyboardLayout(name *uint16, flags uint32) (hkl Handle, err error) { } func MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) { - r0, _, e1 := syscall.Syscall6(procMessageBoxW.Addr(), 4, uintptr(hwnd), uintptr(unsafe.Pointer(text)), uintptr(unsafe.Pointer(caption)), uintptr(boxtype), 0, 0) + r0, _, e1 := syscall.SyscallN(procMessageBoxW.Addr(), uintptr(hwnd), uintptr(unsafe.Pointer(text)), uintptr(unsafe.Pointer(caption)), uintptr(boxtype)) ret = int32(r0) if ret == 0 { err = errnoErr(e1) @@ -4144,13 +4309,13 @@ func MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret i } func ToUnicodeEx(vkey uint32, scancode uint32, keystate *byte, pwszBuff *uint16, cchBuff int32, flags uint32, hkl Handle) (ret int32) { - r0, _, _ := syscall.Syscall9(procToUnicodeEx.Addr(), 7, uintptr(vkey), uintptr(scancode), uintptr(unsafe.Pointer(keystate)), uintptr(unsafe.Pointer(pwszBuff)), uintptr(cchBuff), uintptr(flags), uintptr(hkl), 0, 0) + r0, _, _ := syscall.SyscallN(procToUnicodeEx.Addr(), uintptr(vkey), uintptr(scancode), uintptr(unsafe.Pointer(keystate)), uintptr(unsafe.Pointer(pwszBuff)), uintptr(cchBuff), uintptr(flags), uintptr(hkl)) ret = int32(r0) return } func UnloadKeyboardLayout(hkl Handle) (err error) { - r1, _, e1 := syscall.Syscall(procUnloadKeyboardLayout.Addr(), 1, uintptr(hkl), 0, 0) + r1, _, e1 := syscall.SyscallN(procUnloadKeyboardLayout.Addr(), uintptr(hkl)) if r1 == 0 { err = errnoErr(e1) } @@ -4162,7 +4327,7 @@ func CreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) ( if inheritExisting { _p0 = 1 } - r1, _, e1 := syscall.Syscall(procCreateEnvironmentBlock.Addr(), 3, uintptr(unsafe.Pointer(block)), uintptr(token), uintptr(_p0)) + r1, _, e1 := syscall.SyscallN(procCreateEnvironmentBlock.Addr(), uintptr(unsafe.Pointer(block)), uintptr(token), uintptr(_p0)) if r1 == 0 { err = errnoErr(e1) } @@ -4170,7 +4335,7 @@ func CreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) ( } func DestroyEnvironmentBlock(block *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procDestroyEnvironmentBlock.Addr(), 1, uintptr(unsafe.Pointer(block)), 0, 0) + r1, _, e1 := syscall.SyscallN(procDestroyEnvironmentBlock.Addr(), uintptr(unsafe.Pointer(block))) if r1 == 0 { err = errnoErr(e1) } @@ -4178,7 +4343,7 @@ func DestroyEnvironmentBlock(block *uint16) (err error) { } func GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetUserProfileDirectoryW.Addr(), 3, uintptr(t), uintptr(unsafe.Pointer(dir)), uintptr(unsafe.Pointer(dirLen))) + r1, _, e1 := syscall.SyscallN(procGetUserProfileDirectoryW.Addr(), uintptr(t), uintptr(unsafe.Pointer(dir)), uintptr(unsafe.Pointer(dirLen))) if r1 == 0 { err = errnoErr(e1) } @@ -4195,7 +4360,7 @@ func GetFileVersionInfoSize(filename string, zeroHandle *Handle) (bufSize uint32 } func _GetFileVersionInfoSize(filename *uint16, zeroHandle *Handle) (bufSize uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetFileVersionInfoSizeW.Addr(), 2, uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(zeroHandle)), 0) + r0, _, e1 := syscall.SyscallN(procGetFileVersionInfoSizeW.Addr(), uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(zeroHandle))) bufSize = uint32(r0) if bufSize == 0 { err = errnoErr(e1) @@ -4213,7 +4378,7 @@ func GetFileVersionInfo(filename string, handle uint32, bufSize uint32, buffer u } func _GetFileVersionInfo(filename *uint16, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) { - r1, _, e1 := syscall.Syscall6(procGetFileVersionInfoW.Addr(), 4, uintptr(unsafe.Pointer(filename)), uintptr(handle), uintptr(bufSize), uintptr(buffer), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetFileVersionInfoW.Addr(), uintptr(unsafe.Pointer(filename)), uintptr(handle), uintptr(bufSize), uintptr(buffer)) if r1 == 0 { err = errnoErr(e1) } @@ -4230,7 +4395,7 @@ func VerQueryValue(block unsafe.Pointer, subBlock string, pointerToBufferPointer } func _VerQueryValue(block unsafe.Pointer, subBlock *uint16, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procVerQueryValueW.Addr(), 4, uintptr(block), uintptr(unsafe.Pointer(subBlock)), uintptr(pointerToBufferPointer), uintptr(unsafe.Pointer(bufSize)), 0, 0) + r1, _, e1 := syscall.SyscallN(procVerQueryValueW.Addr(), uintptr(block), uintptr(unsafe.Pointer(subBlock)), uintptr(pointerToBufferPointer), uintptr(unsafe.Pointer(bufSize))) if r1 == 0 { err = errnoErr(e1) } @@ -4238,7 +4403,7 @@ func _VerQueryValue(block unsafe.Pointer, subBlock *uint16, pointerToBufferPoint } func TimeBeginPeriod(period uint32) (err error) { - r1, _, e1 := syscall.Syscall(proctimeBeginPeriod.Addr(), 1, uintptr(period), 0, 0) + r1, _, e1 := syscall.SyscallN(proctimeBeginPeriod.Addr(), uintptr(period)) if r1 != 0 { err = errnoErr(e1) } @@ -4246,7 +4411,7 @@ func TimeBeginPeriod(period uint32) (err error) { } func TimeEndPeriod(period uint32) (err error) { - r1, _, e1 := syscall.Syscall(proctimeEndPeriod.Addr(), 1, uintptr(period), 0, 0) + r1, _, e1 := syscall.SyscallN(proctimeEndPeriod.Addr(), uintptr(period)) if r1 != 0 { err = errnoErr(e1) } @@ -4254,7 +4419,7 @@ func TimeEndPeriod(period uint32) (err error) { } func WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) { - r0, _, _ := syscall.Syscall(procWinVerifyTrustEx.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(actionId)), uintptr(unsafe.Pointer(data))) + r0, _, _ := syscall.SyscallN(procWinVerifyTrustEx.Addr(), uintptr(hwnd), uintptr(unsafe.Pointer(actionId)), uintptr(unsafe.Pointer(data))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -4262,12 +4427,12 @@ func WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) } func FreeAddrInfoW(addrinfo *AddrinfoW) { - syscall.Syscall(procFreeAddrInfoW.Addr(), 1, uintptr(unsafe.Pointer(addrinfo)), 0, 0) + syscall.SyscallN(procFreeAddrInfoW.Addr(), uintptr(unsafe.Pointer(addrinfo))) return } func GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, result **AddrinfoW) (sockerr error) { - r0, _, _ := syscall.Syscall6(procGetAddrInfoW.Addr(), 4, uintptr(unsafe.Pointer(nodename)), uintptr(unsafe.Pointer(servicename)), uintptr(unsafe.Pointer(hints)), uintptr(unsafe.Pointer(result)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetAddrInfoW.Addr(), uintptr(unsafe.Pointer(nodename)), uintptr(unsafe.Pointer(servicename)), uintptr(unsafe.Pointer(hints)), uintptr(unsafe.Pointer(result))) if r0 != 0 { sockerr = syscall.Errno(r0) } @@ -4275,15 +4440,23 @@ func GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, resul } func WSACleanup() (err error) { - r1, _, e1 := syscall.Syscall(procWSACleanup.Addr(), 0, 0, 0, 0) + r1, _, e1 := syscall.SyscallN(procWSACleanup.Addr()) if r1 == socket_error { err = errnoErr(e1) } return } +func WSADuplicateSocket(s Handle, processID uint32, info *WSAProtocolInfo) (err error) { + r1, _, e1 := syscall.SyscallN(procWSADuplicateSocketW.Addr(), uintptr(s), uintptr(processID), uintptr(unsafe.Pointer(info))) + if r1 != 0 { + err = errnoErr(e1) + } + return +} + func WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) { - r0, _, e1 := syscall.Syscall(procWSAEnumProtocolsW.Addr(), 3, uintptr(unsafe.Pointer(protocols)), uintptr(unsafe.Pointer(protocolBuffer)), uintptr(unsafe.Pointer(bufferLength))) + r0, _, e1 := syscall.SyscallN(procWSAEnumProtocolsW.Addr(), uintptr(unsafe.Pointer(protocols)), uintptr(unsafe.Pointer(protocolBuffer)), uintptr(unsafe.Pointer(bufferLength))) n = int32(r0) if n == -1 { err = errnoErr(e1) @@ -4296,7 +4469,7 @@ func WSAGetOverlappedResult(h Handle, o *Overlapped, bytes *uint32, wait bool, f if wait { _p0 = 1 } - r1, _, e1 := syscall.Syscall6(procWSAGetOverlappedResult.Addr(), 5, uintptr(h), uintptr(unsafe.Pointer(o)), uintptr(unsafe.Pointer(bytes)), uintptr(_p0), uintptr(unsafe.Pointer(flags)), 0) + r1, _, e1 := syscall.SyscallN(procWSAGetOverlappedResult.Addr(), uintptr(h), uintptr(unsafe.Pointer(o)), uintptr(unsafe.Pointer(bytes)), uintptr(_p0), uintptr(unsafe.Pointer(flags))) if r1 == 0 { err = errnoErr(e1) } @@ -4304,7 +4477,7 @@ func WSAGetOverlappedResult(h Handle, o *Overlapped, bytes *uint32, wait bool, f } func WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) { - r1, _, e1 := syscall.Syscall9(procWSAIoctl.Addr(), 9, uintptr(s), uintptr(iocc), uintptr(unsafe.Pointer(inbuf)), uintptr(cbif), uintptr(unsafe.Pointer(outbuf)), uintptr(cbob), uintptr(unsafe.Pointer(cbbr)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine)) + r1, _, e1 := syscall.SyscallN(procWSAIoctl.Addr(), uintptr(s), uintptr(iocc), uintptr(unsafe.Pointer(inbuf)), uintptr(cbif), uintptr(unsafe.Pointer(outbuf)), uintptr(cbob), uintptr(unsafe.Pointer(cbbr)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine)) if r1 == socket_error { err = errnoErr(e1) } @@ -4312,7 +4485,7 @@ func WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbo } func WSALookupServiceBegin(querySet *WSAQUERYSET, flags uint32, handle *Handle) (err error) { - r1, _, e1 := syscall.Syscall(procWSALookupServiceBeginW.Addr(), 3, uintptr(unsafe.Pointer(querySet)), uintptr(flags), uintptr(unsafe.Pointer(handle))) + r1, _, e1 := syscall.SyscallN(procWSALookupServiceBeginW.Addr(), uintptr(unsafe.Pointer(querySet)), uintptr(flags), uintptr(unsafe.Pointer(handle))) if r1 == socket_error { err = errnoErr(e1) } @@ -4320,7 +4493,7 @@ func WSALookupServiceBegin(querySet *WSAQUERYSET, flags uint32, handle *Handle) } func WSALookupServiceEnd(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procWSALookupServiceEnd.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procWSALookupServiceEnd.Addr(), uintptr(handle)) if r1 == socket_error { err = errnoErr(e1) } @@ -4328,7 +4501,7 @@ func WSALookupServiceEnd(handle Handle) (err error) { } func WSALookupServiceNext(handle Handle, flags uint32, size *int32, querySet *WSAQUERYSET) (err error) { - r1, _, e1 := syscall.Syscall6(procWSALookupServiceNextW.Addr(), 4, uintptr(handle), uintptr(flags), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(querySet)), 0, 0) + r1, _, e1 := syscall.SyscallN(procWSALookupServiceNextW.Addr(), uintptr(handle), uintptr(flags), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(querySet))) if r1 == socket_error { err = errnoErr(e1) } @@ -4336,7 +4509,7 @@ func WSALookupServiceNext(handle Handle, flags uint32, size *int32, querySet *WS } func WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (err error) { - r1, _, e1 := syscall.Syscall9(procWSARecv.Addr(), 7, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0, 0) + r1, _, e1 := syscall.SyscallN(procWSARecv.Addr(), uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) if r1 == socket_error { err = errnoErr(e1) } @@ -4344,7 +4517,7 @@ func WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32 } func WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) { - r1, _, e1 := syscall.Syscall9(procWSARecvFrom.Addr(), 9, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) + r1, _, e1 := syscall.SyscallN(procWSARecvFrom.Addr(), uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) if r1 == socket_error { err = errnoErr(e1) } @@ -4352,7 +4525,7 @@ func WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *ui } func WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (err error) { - r1, _, e1 := syscall.Syscall9(procWSASend.Addr(), 7, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0, 0) + r1, _, e1 := syscall.SyscallN(procWSASend.Addr(), uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) if r1 == socket_error { err = errnoErr(e1) } @@ -4360,7 +4533,7 @@ func WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, } func WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (err error) { - r1, _, e1 := syscall.Syscall9(procWSASendTo.Addr(), 9, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(to)), uintptr(tolen), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) + r1, _, e1 := syscall.SyscallN(procWSASendTo.Addr(), uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(to)), uintptr(tolen), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) if r1 == socket_error { err = errnoErr(e1) } @@ -4368,7 +4541,7 @@ func WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32 } func WSASocket(af int32, typ int32, protocol int32, protoInfo *WSAProtocolInfo, group uint32, flags uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procWSASocketW.Addr(), 6, uintptr(af), uintptr(typ), uintptr(protocol), uintptr(unsafe.Pointer(protoInfo)), uintptr(group), uintptr(flags)) + r0, _, e1 := syscall.SyscallN(procWSASocketW.Addr(), uintptr(af), uintptr(typ), uintptr(protocol), uintptr(unsafe.Pointer(protoInfo)), uintptr(group), uintptr(flags)) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -4377,7 +4550,7 @@ func WSASocket(af int32, typ int32, protocol int32, protoInfo *WSAProtocolInfo, } func WSAStartup(verreq uint32, data *WSAData) (sockerr error) { - r0, _, _ := syscall.Syscall(procWSAStartup.Addr(), 2, uintptr(verreq), uintptr(unsafe.Pointer(data)), 0) + r0, _, _ := syscall.SyscallN(procWSAStartup.Addr(), uintptr(verreq), uintptr(unsafe.Pointer(data))) if r0 != 0 { sockerr = syscall.Errno(r0) } @@ -4385,7 +4558,7 @@ func WSAStartup(verreq uint32, data *WSAData) (sockerr error) { } func bind(s Handle, name unsafe.Pointer, namelen int32) (err error) { - r1, _, e1 := syscall.Syscall(procbind.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen)) + r1, _, e1 := syscall.SyscallN(procbind.Addr(), uintptr(s), uintptr(name), uintptr(namelen)) if r1 == socket_error { err = errnoErr(e1) } @@ -4393,7 +4566,7 @@ func bind(s Handle, name unsafe.Pointer, namelen int32) (err error) { } func Closesocket(s Handle) (err error) { - r1, _, e1 := syscall.Syscall(procclosesocket.Addr(), 1, uintptr(s), 0, 0) + r1, _, e1 := syscall.SyscallN(procclosesocket.Addr(), uintptr(s)) if r1 == socket_error { err = errnoErr(e1) } @@ -4401,7 +4574,7 @@ func Closesocket(s Handle) (err error) { } func connect(s Handle, name unsafe.Pointer, namelen int32) (err error) { - r1, _, e1 := syscall.Syscall(procconnect.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen)) + r1, _, e1 := syscall.SyscallN(procconnect.Addr(), uintptr(s), uintptr(name), uintptr(namelen)) if r1 == socket_error { err = errnoErr(e1) } @@ -4418,7 +4591,7 @@ func GetHostByName(name string) (h *Hostent, err error) { } func _GetHostByName(name *byte) (h *Hostent, err error) { - r0, _, e1 := syscall.Syscall(procgethostbyname.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + r0, _, e1 := syscall.SyscallN(procgethostbyname.Addr(), uintptr(unsafe.Pointer(name))) h = (*Hostent)(unsafe.Pointer(r0)) if h == nil { err = errnoErr(e1) @@ -4427,7 +4600,7 @@ func _GetHostByName(name *byte) (h *Hostent, err error) { } func getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) { - r1, _, e1 := syscall.Syscall(procgetpeername.Addr(), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + r1, _, e1 := syscall.SyscallN(procgetpeername.Addr(), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) if r1 == socket_error { err = errnoErr(e1) } @@ -4444,7 +4617,7 @@ func GetProtoByName(name string) (p *Protoent, err error) { } func _GetProtoByName(name *byte) (p *Protoent, err error) { - r0, _, e1 := syscall.Syscall(procgetprotobyname.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + r0, _, e1 := syscall.SyscallN(procgetprotobyname.Addr(), uintptr(unsafe.Pointer(name))) p = (*Protoent)(unsafe.Pointer(r0)) if p == nil { err = errnoErr(e1) @@ -4467,7 +4640,7 @@ func GetServByName(name string, proto string) (s *Servent, err error) { } func _GetServByName(name *byte, proto *byte) (s *Servent, err error) { - r0, _, e1 := syscall.Syscall(procgetservbyname.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(proto)), 0) + r0, _, e1 := syscall.SyscallN(procgetservbyname.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(proto))) s = (*Servent)(unsafe.Pointer(r0)) if s == nil { err = errnoErr(e1) @@ -4476,7 +4649,7 @@ func _GetServByName(name *byte, proto *byte) (s *Servent, err error) { } func getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) { - r1, _, e1 := syscall.Syscall(procgetsockname.Addr(), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + r1, _, e1 := syscall.SyscallN(procgetsockname.Addr(), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) if r1 == socket_error { err = errnoErr(e1) } @@ -4484,7 +4657,7 @@ func getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) { } func Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int32) (err error) { - r1, _, e1 := syscall.Syscall6(procgetsockopt.Addr(), 5, uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(unsafe.Pointer(optlen)), 0) + r1, _, e1 := syscall.SyscallN(procgetsockopt.Addr(), uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(unsafe.Pointer(optlen))) if r1 == socket_error { err = errnoErr(e1) } @@ -4492,7 +4665,7 @@ func Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int3 } func listen(s Handle, backlog int32) (err error) { - r1, _, e1 := syscall.Syscall(proclisten.Addr(), 2, uintptr(s), uintptr(backlog), 0) + r1, _, e1 := syscall.SyscallN(proclisten.Addr(), uintptr(s), uintptr(backlog)) if r1 == socket_error { err = errnoErr(e1) } @@ -4500,7 +4673,7 @@ func listen(s Handle, backlog int32) (err error) { } func Ntohs(netshort uint16) (u uint16) { - r0, _, _ := syscall.Syscall(procntohs.Addr(), 1, uintptr(netshort), 0, 0) + r0, _, _ := syscall.SyscallN(procntohs.Addr(), uintptr(netshort)) u = uint16(r0) return } @@ -4510,7 +4683,7 @@ func recvfrom(s Handle, buf []byte, flags int32, from *RawSockaddrAny, fromlen * if len(buf) > 0 { _p0 = &buf[0] } - r0, _, e1 := syscall.Syscall6(procrecvfrom.Addr(), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + r0, _, e1 := syscall.SyscallN(procrecvfrom.Addr(), uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) n = int32(r0) if n == -1 { err = errnoErr(e1) @@ -4523,7 +4696,7 @@ func sendto(s Handle, buf []byte, flags int32, to unsafe.Pointer, tolen int32) ( if len(buf) > 0 { _p0 = &buf[0] } - r1, _, e1 := syscall.Syscall6(procsendto.Addr(), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(tolen)) + r1, _, e1 := syscall.SyscallN(procsendto.Addr(), uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(tolen)) if r1 == socket_error { err = errnoErr(e1) } @@ -4531,7 +4704,7 @@ func sendto(s Handle, buf []byte, flags int32, to unsafe.Pointer, tolen int32) ( } func Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (err error) { - r1, _, e1 := syscall.Syscall6(procsetsockopt.Addr(), 5, uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(optlen), 0) + r1, _, e1 := syscall.SyscallN(procsetsockopt.Addr(), uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(optlen)) if r1 == socket_error { err = errnoErr(e1) } @@ -4539,7 +4712,7 @@ func Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32 } func shutdown(s Handle, how int32) (err error) { - r1, _, e1 := syscall.Syscall(procshutdown.Addr(), 2, uintptr(s), uintptr(how), 0) + r1, _, e1 := syscall.SyscallN(procshutdown.Addr(), uintptr(s), uintptr(how)) if r1 == socket_error { err = errnoErr(e1) } @@ -4547,7 +4720,7 @@ func shutdown(s Handle, how int32) (err error) { } func socket(af int32, typ int32, protocol int32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procsocket.Addr(), 3, uintptr(af), uintptr(typ), uintptr(protocol)) + r0, _, e1 := syscall.SyscallN(procsocket.Addr(), uintptr(af), uintptr(typ), uintptr(protocol)) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -4556,7 +4729,7 @@ func socket(af int32, typ int32, protocol int32) (handle Handle, err error) { } func WTSEnumerateSessions(handle Handle, reserved uint32, version uint32, sessions **WTS_SESSION_INFO, count *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procWTSEnumerateSessionsW.Addr(), 5, uintptr(handle), uintptr(reserved), uintptr(version), uintptr(unsafe.Pointer(sessions)), uintptr(unsafe.Pointer(count)), 0) + r1, _, e1 := syscall.SyscallN(procWTSEnumerateSessionsW.Addr(), uintptr(handle), uintptr(reserved), uintptr(version), uintptr(unsafe.Pointer(sessions)), uintptr(unsafe.Pointer(count))) if r1 == 0 { err = errnoErr(e1) } @@ -4564,12 +4737,12 @@ func WTSEnumerateSessions(handle Handle, reserved uint32, version uint32, sessio } func WTSFreeMemory(ptr uintptr) { - syscall.Syscall(procWTSFreeMemory.Addr(), 1, uintptr(ptr), 0, 0) + syscall.SyscallN(procWTSFreeMemory.Addr(), uintptr(ptr)) return } func WTSQueryUserToken(session uint32, token *Token) (err error) { - r1, _, e1 := syscall.Syscall(procWTSQueryUserToken.Addr(), 2, uintptr(session), uintptr(unsafe.Pointer(token)), 0) + r1, _, e1 := syscall.SyscallN(procWTSQueryUserToken.Addr(), uintptr(session), uintptr(unsafe.Pointer(token))) if r1 == 0 { err = errnoErr(e1) } diff --git a/vendor/golang.org/x/text/LICENSE b/vendor/golang.org/x/text/LICENSE index 6a66aea5..2a7cf70d 100644 --- a/vendor/golang.org/x/text/LICENSE +++ b/vendor/golang.org/x/text/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. 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 + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/modules.txt b/vendor/modules.txt index 69c6fa4f..e9a571b5 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,10 +1,6 @@ -# github.com/Microsoft/go-winio v0.6.2 -## explicit; go 1.21 -github.com/Microsoft/go-winio -github.com/Microsoft/go-winio/internal/fs -github.com/Microsoft/go-winio/internal/socket -github.com/Microsoft/go-winio/internal/stringbuffer -github.com/Microsoft/go-winio/pkg/guid +# dario.cat/mergo v1.0.2 +## explicit; go 1.13 +dario.cat/mergo # github.com/OpenPeeDeeP/xdg v0.2.1-0.20190312153938-4ba9e1eb294c ## explicit github.com/OpenPeeDeeP/xdg @@ -14,82 +10,12 @@ github.com/boz/go-throttle # github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 ## explicit github.com/cloudfoundry/jibber_jabber -# github.com/containerd/errdefs v1.0.0 -## explicit; go 1.20 -github.com/containerd/errdefs -# github.com/containerd/errdefs/pkg v0.3.0 -## explicit; go 1.22 -github.com/containerd/errdefs/pkg/errhttp -github.com/containerd/errdefs/pkg/internal/cause -# github.com/containerd/log v0.1.0 -## explicit; go 1.20 -github.com/containerd/log # github.com/davecgh/go-spew v1.1.1 ## explicit github.com/davecgh/go-spew/spew -# github.com/distribution/reference v0.6.0 -## explicit; go 1.20 -github.com/distribution/reference -# github.com/docker/cli v27.1.1+incompatible -## explicit -github.com/docker/cli/cli/config -github.com/docker/cli/cli/config/configfile -github.com/docker/cli/cli/config/credentials -github.com/docker/cli/cli/config/types -github.com/docker/cli/cli/connhelper -github.com/docker/cli/cli/connhelper/commandconn -github.com/docker/cli/cli/connhelper/ssh -github.com/docker/cli/cli/context -github.com/docker/cli/cli/context/docker -github.com/docker/cli/cli/context/store -# github.com/docker/docker v28.5.2+incompatible -## explicit -github.com/docker/docker/api -github.com/docker/docker/api/types -github.com/docker/docker/api/types/blkiodev -github.com/docker/docker/api/types/build -github.com/docker/docker/api/types/checkpoint -github.com/docker/docker/api/types/common -github.com/docker/docker/api/types/container -github.com/docker/docker/api/types/events -github.com/docker/docker/api/types/filters -github.com/docker/docker/api/types/image -github.com/docker/docker/api/types/mount -github.com/docker/docker/api/types/network -github.com/docker/docker/api/types/registry -github.com/docker/docker/api/types/storage -github.com/docker/docker/api/types/strslice -github.com/docker/docker/api/types/swarm -github.com/docker/docker/api/types/swarm/runtime -github.com/docker/docker/api/types/system -github.com/docker/docker/api/types/time -github.com/docker/docker/api/types/versions -github.com/docker/docker/api/types/volume -github.com/docker/docker/client -github.com/docker/docker/errdefs -github.com/docker/docker/pkg/ioutils -github.com/docker/docker/pkg/stdcopy -# github.com/docker/docker-credential-helpers v0.8.2 -## explicit; go 1.19 -github.com/docker/docker-credential-helpers/client -github.com/docker/docker-credential-helpers/credentials -# github.com/docker/go-connections v0.5.0 -## explicit; go 1.18 -github.com/docker/go-connections/nat -github.com/docker/go-connections/sockets -github.com/docker/go-connections/tlsconfig -# github.com/docker/go-units v0.5.0 -## explicit -github.com/docker/go-units # github.com/fatih/color v1.10.0 ## explicit; go 1.13 github.com/fatih/color -# github.com/felixge/httpsnoop v1.0.4 -## explicit; go 1.13 -github.com/felixge/httpsnoop -# github.com/fvbommel/sortorder v1.1.0 -## explicit; go 1.13 -github.com/fvbommel/sortorder # github.com/gdamore/encoding v1.0.1 ## explicit; go 1.9 github.com/gdamore/encoding @@ -135,13 +61,6 @@ github.com/gdamore/tcell/v2/terminfo/x/xterm_kitty # github.com/go-errors/errors v1.5.1 ## explicit; go 1.14 github.com/go-errors/errors -# github.com/go-logr/logr v1.4.2 -## explicit; go 1.18 -github.com/go-logr/logr -github.com/go-logr/logr/funcr -# github.com/go-logr/stdr v1.2.2 -## explicit; go 1.16 -github.com/go-logr/stdr # github.com/goccy/go-yaml v1.11.0 ## explicit; go 1.18 github.com/goccy/go-yaml @@ -152,12 +71,11 @@ github.com/goccy/go-yaml/parser github.com/goccy/go-yaml/printer github.com/goccy/go-yaml/scanner github.com/goccy/go-yaml/token +# github.com/google/go-cmp v0.7.0 +## explicit; go 1.21 # github.com/gookit/color v1.5.0 ## explicit; go 1.13 github.com/gookit/color -# github.com/imdario/mergo v0.3.16 -## explicit; go 1.13 -github.com/imdario/mergo # github.com/integrii/flaggy v1.4.0 ## explicit; go 1.12 github.com/integrii/flaggy @@ -195,36 +113,13 @@ github.com/mcuadros/go-lookup # github.com/mgutz/str v1.2.0 ## explicit github.com/mgutz/str -# github.com/moby/docker-image-spec v1.3.1 -## explicit; go 1.18 -github.com/moby/docker-image-spec/specs-go/v1 -# github.com/moby/sys/atomicwriter v0.1.0 -## explicit; go 1.18 -github.com/moby/sys/atomicwriter -# github.com/moby/sys/sequential v0.6.0 -## explicit; go 1.17 -github.com/moby/sys/sequential -# github.com/moby/term v0.5.0 -## explicit; go 1.18 -# github.com/morikuni/aec v1.0.0 -## explicit -# github.com/onsi/ginkgo v1.8.0 -## explicit -# github.com/onsi/gomega v1.5.0 -## explicit -# github.com/opencontainers/go-digest v1.0.0 -## explicit; go 1.13 -github.com/opencontainers/go-digest -# github.com/opencontainers/image-spec v1.1.0 -## explicit; go 1.18 -github.com/opencontainers/image-spec/specs-go -github.com/opencontainers/image-spec/specs-go/v1 +# github.com/onsi/ginkgo v1.16.5 +## explicit; go 1.16 +# github.com/onsi/gomega v1.39.1 +## explicit; go 1.24.0 # github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 ## explicit github.com/petermattis/goid -# github.com/pkg/errors v0.9.1 -## explicit -github.com/pkg/errors # github.com/pmezard/go-difflib v1.0.0 ## explicit github.com/pmezard/go-difflib/difflib @@ -249,56 +144,22 @@ github.com/stretchr/testify/assert # github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 ## explicit; go 1.15 github.com/xo/terminfo -# go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 -## explicit; go 1.21 -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconv -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp/internal/semconvutil -# go.opentelemetry.io/otel v1.28.0 -## explicit; go 1.21 -go.opentelemetry.io/otel -go.opentelemetry.io/otel/attribute -go.opentelemetry.io/otel/baggage -go.opentelemetry.io/otel/codes -go.opentelemetry.io/otel/internal -go.opentelemetry.io/otel/internal/attribute -go.opentelemetry.io/otel/internal/baggage -go.opentelemetry.io/otel/internal/global -go.opentelemetry.io/otel/propagation -go.opentelemetry.io/otel/semconv/v1.20.0 -go.opentelemetry.io/otel/semconv/v1.24.0 -# go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.28.0 -## explicit; go 1.21 -# go.opentelemetry.io/otel/metric v1.28.0 -## explicit; go 1.21 -go.opentelemetry.io/otel/metric -go.opentelemetry.io/otel/metric/embedded -# go.opentelemetry.io/otel/sdk v1.28.0 -## explicit; go 1.21 -# go.opentelemetry.io/otel/trace v1.28.0 -## explicit; go 1.21 -go.opentelemetry.io/otel/trace -go.opentelemetry.io/otel/trace/embedded -# golang.org/x/crypto v0.24.0 -## explicit; go 1.18 # golang.org/x/exp v0.0.0-20231006140011-7918f672742d ## explicit; go 1.20 golang.org/x/exp/constraints -# golang.org/x/sys v0.24.0 -## explicit; go 1.18 +# golang.org/x/sys v0.40.0 +## explicit; go 1.24.0 golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows # golang.org/x/term v0.21.0 ## explicit; go 1.18 golang.org/x/term -# golang.org/x/text v0.16.0 -## explicit; go 1.18 +# golang.org/x/text v0.33.0 +## explicit; go 1.24.0 golang.org/x/text/encoding golang.org/x/text/encoding/internal/identifier golang.org/x/text/transform -# golang.org/x/time v0.5.0 -## explicit; go 1.18 # golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 ## explicit; go 1.11 golang.org/x/xerrors @@ -306,5 +167,3 @@ golang.org/x/xerrors/internal # gopkg.in/yaml.v3 v3.0.1 ## explicit gopkg.in/yaml.v3 -# gotest.tools/v3 v3.5.1 -## explicit; go 1.17

    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/%s", p.HostIP, p.HostPort, p.ContainerPort, p.Protocol)) + } + return ports +} + +func (c *Container) GetEnv() []string { + return c.AppleContainer.Configuration.InitProcess.Environment +} + +func (c *Container) GetLabels() map[string]string { + return c.AppleContainer.Configuration.Labels +} + +func (c *Container) GetCPUs() int { + return c.AppleContainer.Configuration.Resources.CPUS +} + +func (c *Container) GetMemory() int64 { + return c.AppleContainer.Configuration.Resources.MemoryInBytes } diff --git a/pkg/commands/container_client.go b/pkg/commands/container_client.go new file mode 100644 index 00000000..c4751e50 --- /dev/null +++ b/pkg/commands/container_client.go @@ -0,0 +1,632 @@ +package commands + +import ( + "encoding/json" + "fmt" + "io" + "os/exec" + "strings" + "time" + + "github.com/jesseduffield/lazycontainer/pkg/config" + "github.com/jesseduffield/lazycontainer/pkg/i18n" + "github.com/sasha-s/go-deadlock" + "github.com/sirupsen/logrus" +) + +type ContainerClient struct { + Log *logrus.Entry + OSCommand *OSCommand + Tr *i18n.TranslationSet + Config *config.AppConfig + ErrorChan chan error + + ContainerMutex deadlock.Mutex + ImageMutex deadlock.Mutex + VolumeMutex deadlock.Mutex + NetworkMutex deadlock.Mutex +} + +func NewContainerClient(log *logrus.Entry, osCommand *OSCommand, tr *i18n.TranslationSet, config *config.AppConfig, errorChan chan error) (*ContainerClient, error) { + return &ContainerClient{ + Log: log, + OSCommand: osCommand, + Tr: tr, + Config: config, + ErrorChan: errorChan, + }, nil +} + +func (c *ContainerClient) runContainerCommand(args ...string) ([]byte, error) { + cmd := exec.Command("container", args...) + output, err := cmd.Output() + if err != nil { + if exitErr, ok := err.(*exec.ExitError); ok { + return nil, fmt.Errorf("%s: %s", err.Error(), string(exitErr.Stderr)) + } + return nil, err + } + return output, nil +} + +func (c *ContainerClient) runContainerCommandWithOutput(args ...string) (string, error) { + output, err := c.runContainerCommand(args...) + return string(output), err +} + +// Containers + +func (c *ContainerClient) ListContainers(all bool) ([]AppleContainer, error) { + args := []string{"list", "--format", "json"} + if all { + args = []string{"list", "--all", "--format", "json"} + } + + output, err := c.runContainerCommand(args...) + if err != nil { + return nil, err + } + + if len(output) == 0 { + return []AppleContainer{}, nil + } + + var containers []AppleContainer + if err := json.Unmarshal(output, &containers); err != nil { + return nil, fmt.Errorf("failed to parse container list: %w", err) + } + + return containers, nil +} + +func (c *ContainerClient) InspectContainer(id string) (*AppleContainer, error) { + output, err := c.runContainerCommand("inspect", id) + if err != nil { + return nil, err + } + + var containers []AppleContainer + if err := json.Unmarshal(output, &containers); err != nil { + return nil, fmt.Errorf("failed to parse container inspect: %w", err) + } + + if len(containers) == 0 { + return nil, fmt.Errorf("container %s not found", id) + } + + return &containers[0], nil +} + +func (c *ContainerClient) CreateContainer(opts CreateContainerOptions) error { + args := []string{"create"} + + if opts.Name != "" { + args = append(args, "--name", opts.Name) + } + + for _, env := range opts.Env { + args = append(args, "-e", env) + } + + if opts.WorkingDir != "" { + args = append(args, "-w", opts.WorkingDir) + } + + if opts.CPUS > 0 { + args = append(args, "-c", fmt.Sprintf("%d", opts.CPUS)) + } + + if opts.Memory != "" { + args = append(args, "-m", opts.Memory) + } + + for _, vol := range opts.Volumes { + args = append(args, "-v", vol) + } + + for _, net := range opts.Networks { + args = append(args, "--network", net) + } + + for _, port := range opts.Ports { + args = append(args, "-p", port) + } + + for k, v := range opts.Labels { + args = append(args, "-l", fmt.Sprintf("%s=%s", k, v)) + } + + if opts.Interactive { + args = append(args, "-i") + } + + if opts.TTY { + args = append(args, "-t") + } + + args = append(args, opts.Image) + + if len(opts.Command) > 0 { + args = append(args, opts.Command...) + } + + _, err := c.runContainerCommand(args...) + return err +} + +func (c *ContainerClient) RunContainer(opts CreateContainerOptions) (string, error) { + args := []string{"run"} + + if opts.Name != "" { + args = append(args, "--name", opts.Name) + } + + if opts.Detach { + args = append(args, "-d") + } + + for _, env := range opts.Env { + args = append(args, "-e", env) + } + + if opts.WorkingDir != "" { + args = append(args, "-w", opts.WorkingDir) + } + + if opts.CPUS > 0 { + args = append(args, "-c", fmt.Sprintf("%d", opts.CPUS)) + } + + if opts.Memory != "" { + args = append(args, "-m", opts.Memory) + } + + for _, vol := range opts.Volumes { + args = append(args, "-v", vol) + } + + for _, net := range opts.Networks { + args = append(args, "--network", net) + } + + for _, port := range opts.Ports { + args = append(args, "-p", port) + } + + for k, v := range opts.Labels { + args = append(args, "-l", fmt.Sprintf("%s=%s", k, v)) + } + + if opts.Interactive { + args = append(args, "-i") + } + + if opts.TTY { + args = append(args, "-t") + } + + args = append(args, opts.Image) + + if len(opts.Command) > 0 { + args = append(args, opts.Command...) + } + + output, err := c.runContainerCommand(args...) + return string(output), err +} + +func (c *ContainerClient) StartContainer(id string) error { + _, err := c.runContainerCommand("start", id) + return err +} + +func (c *ContainerClient) StopContainer(id string) error { + _, err := c.runContainerCommand("stop", id) + return err +} + +func (c *ContainerClient) RestartContainer(id string) error { + _, err := c.runContainerCommand("stop", id) + if err != nil { + return err + } + return c.StartContainer(id) +} + +func (c *ContainerClient) KillContainer(id string, signal string) error { + args := []string{"kill", id} + if signal != "" { + args = []string{"kill", "--signal", signal, id} + } + _, err := c.runContainerCommand(args...) + return err +} + +func (c *ContainerClient) RemoveContainer(id string, force bool) error { + args := []string{"rm", id} + if force { + args = []string{"rm", "--force", id} + } + _, err := c.runContainerCommand(args...) + return err +} + +func (c *ContainerClient) PruneContainers() error { + _, err := c.runContainerCommand("prune") + return err +} + +func (c *ContainerClient) ExecContainer(id string, opts ExecOptions) *exec.Cmd { + args := []string{"exec"} + + for _, env := range opts.Env { + args = append(args, "-e", env) + } + + if opts.WorkingDir != "" { + args = append(args, "-w", opts.WorkingDir) + } + + if opts.Interactive { + args = append(args, "-i") + } + + if opts.TTY { + args = append(args, "-t") + } + + if opts.User != "" { + args = append(args, "-u", opts.User) + } + + args = append(args, id) + args = append(args, opts.Command...) + + return exec.Command("container", args...) +} + +func (c *ContainerClient) LogsContainer(id string, follow bool, tail int) *exec.Cmd { + args := []string{"logs"} + + if follow { + args = append(args, "--follow") + } + + if tail > 0 { + args = append(args, "-n", fmt.Sprintf("%d", tail)) + } + + args = append(args, id) + + return exec.Command("container", args...) +} + +func (c *ContainerClient) StatsContainer(id string, noStream bool) ([]AppleContainerStats, error) { + args := []string{"stats", "--format", "json"} + + if noStream { + args = append(args, "--no-stream") + } + + if id != "" { + args = append(args, id) + } + + output, err := c.runContainerCommand(args...) + if err != nil { + return nil, err + } + + if len(output) == 0 { + return []AppleContainerStats{}, nil + } + + var stats []AppleContainerStats + if err := json.Unmarshal(output, &stats); err != nil { + return nil, fmt.Errorf("failed to parse container stats: %w", err) + } + + return stats, nil +} + +// Images + +func (c *ContainerClient) ListImages() ([]AppleImage, error) { + c.ImageMutex.Lock() + defer c.ImageMutex.Unlock() + + output, err := c.runContainerCommand("image", "list", "--format", "json") + if err != nil { + return nil, err + } + + if len(output) == 0 { + return []AppleImage{}, nil + } + + var images []AppleImage + if err := json.Unmarshal(output, &images); err != nil { + return nil, fmt.Errorf("failed to parse image list: %w", err) + } + + return images, nil +} + +func (c *ContainerClient) PullImage(ref string) error { + _, err := c.runContainerCommand("image", "pull", ref) + return err +} + +func (c *ContainerClient) RemoveImage(id string, force bool) error { + args := []string{"image", "rm", id} + if force { + args = []string{"image", "rm", "--force", id} + } + _, err := c.runContainerCommand(args...) + return err +} + +func (c *ContainerClient) PruneImages(all bool) error { + args := []string{"image", "prune"} + if all { + args = []string{"image", "prune", "-a"} + } + _, err := c.runContainerCommand(args...) + return err +} + +func (c *ContainerClient) BuildImage(contextDir string, dockerfile string, tag string) error { + args := []string{"build"} + + if dockerfile != "" { + args = append(args, "-f", dockerfile) + } + + if tag != "" { + args = append(args, "-t", tag) + } + + if contextDir != "" { + args = append(args, contextDir) + } + + _, err := c.runContainerCommand(args...) + return err +} + +func (c *ContainerClient) SaveImage(ids []string, output string) error { + args := []string{"image", "save"} + args = append(args, ids...) + if output != "" { + args = append(args, "--output", output) + } + _, err := c.runContainerCommand(args...) + return err +} + +func (c *ContainerClient) LoadImage(input string) error { + args := []string{"image", "load"} + if input != "" { + args = append(args, "--input", input) + } + _, err := c.runContainerCommand(args...) + return err +} + +// Volumes + +func (c *ContainerClient) ListVolumes() ([]AppleVolume, error) { + c.VolumeMutex.Lock() + defer c.VolumeMutex.Unlock() + + output, err := c.runContainerCommand("volume", "list", "--format", "json") + if err != nil { + return nil, err + } + + if len(output) == 0 { + return []AppleVolume{}, nil + } + + var volumes []AppleVolume + if err := json.Unmarshal(output, &volumes); err != nil { + return nil, fmt.Errorf("failed to parse volume list: %w", err) + } + + return volumes, nil +} + +func (c *ContainerClient) CreateVolume(name string) error { + args := []string{"volume", "create"} + if name != "" { + args = append(args, name) + } + _, err := c.runContainerCommand(args...) + return err +} + +func (c *ContainerClient) RemoveVolume(name string) error { + _, err := c.runContainerCommand("volume", "rm", name) + return err +} + +func (c *ContainerClient) PruneVolumes() error { + _, err := c.runContainerCommand("volume", "prune") + return err +} + +// Networks + +func (c *ContainerClient) ListNetworks() ([]AppleNetwork, error) { + c.NetworkMutex.Lock() + defer c.NetworkMutex.Unlock() + + output, err := c.runContainerCommand("network", "list", "--format", "json") + if err != nil { + return nil, err + } + + if len(output) == 0 { + return []AppleNetwork{}, nil + } + + var networks []AppleNetwork + if err := json.Unmarshal(output, &networks); err != nil { + return nil, fmt.Errorf("failed to parse network list: %w", err) + } + + return networks, nil +} + +func (c *ContainerClient) CreateNetwork(name string) error { + _, err := c.runContainerCommand("network", "create", name) + return err +} + +func (c *ContainerClient) RemoveNetwork(name string) error { + _, err := c.runContainerCommand("network", "rm", name) + return err +} + +func (c *ContainerClient) PruneNetworks() error { + _, err := c.runContainerCommand("network", "prune") + return err +} + +// System + +func (c *ContainerClient) SystemDF() (*SystemDF, error) { + output, err := c.runContainerCommand("system", "df", "--format", "json") + if err != nil { + return nil, err + } + + var df SystemDF + if err := json.Unmarshal(output, &df); err != nil { + return nil, fmt.Errorf("failed to parse system df: %w", err) + } + + return &df, nil +} + +func (c *ContainerClient) SystemStatus() (*SystemStatus, error) { + output, err := c.runContainerCommand("system", "status") + if err != nil { + return &SystemStatus{Running: false}, nil + } + + status := &SystemStatus{ + Running: strings.Contains(string(output), "running"), + } + + return status, nil +} + +func (c *ContainerClient) SystemStart() error { + _, err := c.runContainerCommand("system", "start") + return err +} + +func (c *ContainerClient) SystemStop() error { + _, err := c.runContainerCommand("system", "stop") + return err +} + +func (c *ContainerClient) SystemVersion() (string, error) { + return c.runContainerCommandWithOutput("--version") +} + +// Monitor stats for a container +func (c *ContainerClient) CreateStatsMonitor(container *Container, callback func(stats AppleContainerStats)) { + container.MonitoringStats = true + + ticker := time.NewTicker(time.Second) + defer ticker.Stop() + + for range ticker.C { + if !container.MonitoringStats { + return + } + + stats, err := c.StatsContainer(container.ID, true) + if err != nil { + c.Log.Error(err) + continue + } + + if len(stats) > 0 { + callback(stats[0]) + } + } +} + +var _ io.Closer = &ContainerClient{} + +func (c *ContainerClient) Close() error { + return nil +} + +// CommandObject is what we pass to our template resolvers +type CommandObject struct { + Container *Container + Image *Image + Volume *Volume + Network *Network +} + +func (c *ContainerClient) NewCommandObject(obj CommandObject) CommandObject { + return obj +} + +func (c *ContainerClient) RefreshContainersAndServices(currentContainers []*Container) ([]*Container, error) { + return c.RefreshContainers(currentContainers), nil +} + +func (c *ContainerClient) RefreshContainers(currentContainers []*Container) []*Container { + c.ContainerMutex.Lock() + defer c.ContainerMutex.Unlock() + + appleContainers, err := c.ListContainers(true) + if err != nil { + c.Log.Error(err) + return currentContainers + } + + containers := make([]*Container, len(appleContainers)) + + for i, ac := range appleContainers { + var existingContainer *Container + for _, cc := range currentContainers { + if cc.ID == ac.Configuration.ID { + existingContainer = cc + break + } + } + + if existingContainer != nil { + existingContainer.AppleContainer = ac + existingContainer.Name = ac.Configuration.ID + if ac.Configuration.ID != "" { + existingContainer.Name = ac.Configuration.ID + } + containers[i] = existingContainer + } else { + container := &Container{ + ID: ac.Configuration.ID, + Name: ac.Configuration.ID, + AppleContainer: ac, + Client: c, + OSCommand: c.OSCommand, + Log: c.Log, + Tr: c.Tr, + } + containers[i] = container + } + } + + return containers +} + +func (c *ContainerClient) GetProjectNames(containers []*Container) []string { + return []string{} +} diff --git a/pkg/commands/container_cmd.go b/pkg/commands/container_cmd.go new file mode 100644 index 00000000..b7ad9500 --- /dev/null +++ b/pkg/commands/container_cmd.go @@ -0,0 +1,167 @@ +package commands + +import ( + "io" + ogLog "log" + "time" + + "github.com/jesseduffield/lazycontainer/pkg/config" + "github.com/jesseduffield/lazycontainer/pkg/i18n" + "github.com/jesseduffield/lazycontainer/pkg/utils" + "github.com/sasha-s/go-deadlock" + "github.com/sirupsen/logrus" +) + +type ContainerCommand struct { + Log *logrus.Entry + OSCommand *OSCommand + Tr *i18n.TranslationSet + Config *config.AppConfig + Client *ContainerClient + ErrorChan chan error + ContainerMutex deadlock.Mutex + ImageMutex deadlock.Mutex + VolumeMutex deadlock.Mutex + NetworkMutex deadlock.Mutex + + Closers []io.Closer +} + +var _ io.Closer = &ContainerCommand{} + +type LimitedContainerCommand interface { + NewCommandObject(CommandObject) CommandObject +} + +func NewContainerCommand(log *logrus.Entry, osCommand *OSCommand, tr *i18n.TranslationSet, config *config.AppConfig, errorChan chan error) (*ContainerCommand, error) { + client, err := NewContainerClient(log, osCommand, tr, config, errorChan) + if err != nil { + ogLog.Fatal(err) + } + + containerCommand := &ContainerCommand{ + Log: log, + OSCommand: osCommand, + Tr: tr, + Config: config, + Client: client, + ErrorChan: errorChan, + Closers: []io.Closer{client}, + } + + return containerCommand, nil +} + +func (c *ContainerCommand) Close() error { + return utils.CloseMany(c.Closers) +} + +func (c *ContainerCommand) NewCommandObject(obj CommandObject) CommandObject { + return obj +} + +func (c *ContainerCommand) CreateClientStatMonitor(container *Container) { + container.MonitoringStats = true + + var prevStats *ContainerStats + lastTime := time.Now() + + ticker := time.NewTicker(time.Second) + defer ticker.Stop() + + for range ticker.C { + if !container.MonitoringStats { + return + } + + now := time.Now() + timeDelta := now.Sub(lastTime) + + stats, err := c.Client.StatsContainer(container.ID, true) + if err != nil { + c.Log.Error(err) + continue + } + + if len(stats) > 0 { + containerStats := ConvertAppleStatsToContainerStats(stats[0], prevStats, timeDelta) + + recordedStats := &RecordedStats{ + ClientStats: *containerStats, + DerivedStats: DerivedStats{ + CPUPercentage: containerStats.CalculateContainerCPUPercentage(), + MemoryPercentage: containerStats.CalculateContainerMemoryUsage(), + }, + RecordedAt: now, + } + + container.appendStats(recordedStats, c.Config.UserConfig.Stats.MaxDuration) + + prevStats = containerStats + lastTime = now + } + } + + container.MonitoringStats = false +} + +func (c *ContainerCommand) RefreshContainersAndServices(currentContainers []*Container) ([]*Container, error) { + containers := c.RefreshContainers(currentContainers) + return containers, nil +} + +func (c *ContainerCommand) RefreshContainers(currentContainers []*Container) []*Container { + return c.Client.RefreshContainers(currentContainers) +} + +func (c *ContainerCommand) RefreshImages() ([]*Image, error) { + return c.Client.RefreshImages() +} + +func (c *ContainerCommand) RefreshVolumes() ([]*Volume, error) { + return c.Client.RefreshVolumes() +} + +func (c *ContainerCommand) RefreshNetworks() ([]*Network, error) { + return c.Client.RefreshNetworks() +} + +func (c *ContainerCommand) PruneContainers() error { + return c.Client.PruneContainers() +} + +func (c *ContainerCommand) PruneImages() error { + return c.Client.PruneImages(false) +} + +func (c *ContainerCommand) PruneVolumes() error { + return c.Client.PruneVolumes() +} + +func (c *ContainerCommand) PruneNetworks() error { + return c.Client.PruneNetworks() +} + +func (c *ContainerCommand) SystemDF() (*SystemDF, error) { + return c.Client.SystemDF() +} + +func (c *ContainerCommand) SystemStatus() (*SystemStatus, error) { + return c.Client.SystemStatus() +} + +func (c *ContainerCommand) SystemStart() error { + return c.Client.SystemStart() +} + +func (c *ContainerCommand) SystemStop() error { + return c.Client.SystemStop() +} + +func (c *ContainerCommand) BuildImage(contextDir string, dockerfile string, tag string) error { + return c.Client.BuildImage(contextDir, dockerfile, tag) +} + +func (c *ContainerCommand) GetProjectNames(containers []*Container) []string { + return []string{} +} diff --git a/pkg/commands/container_stats.go b/pkg/commands/container_stats.go index 419782dd..ee72f62d 100644 --- a/pkg/commands/container_stats.go +++ b/pkg/commands/container_stats.go @@ -5,151 +5,53 @@ import ( "time" ) -// RecordedStats contains both the container stats we've received from docker, and our own derived stats from those container stats. When configuring a graph, you're basically specifying the path of a value in this struct type RecordedStats struct { ClientStats ContainerStats DerivedStats DerivedStats RecordedAt time.Time } -// DerivedStats contains some useful stats that we've calculated based on the raw container stats that we got back from docker type DerivedStats struct { CPUPercentage float64 MemoryPercentage float64 } -// ContainerStats autogenerated at https://mholt.github.io/json-to-go/ type ContainerStats struct { - Read time.Time `json:"read"` - Preread time.Time `json:"preread"` - PidsStats struct { - Current int `json:"current"` - } `json:"pids_stats"` - BlkioStats struct { - IoServiceBytesRecursive []struct { - Major int `json:"major"` - Minor int `json:"minor"` - Op string `json:"op"` - Value int `json:"value"` - } `json:"io_service_bytes_recursive"` - IoServicedRecursive []struct { - Major int `json:"major"` - Minor int `json:"minor"` - Op string `json:"op"` - Value int `json:"value"` - } `json:"io_serviced_recursive"` - IoQueueRecursive []interface{} `json:"io_queue_recursive"` - IoServiceTimeRecursive []interface{} `json:"io_service_time_recursive"` - IoWaitTimeRecursive []interface{} `json:"io_wait_time_recursive"` - IoMergedRecursive []interface{} `json:"io_merged_recursive"` - IoTimeRecursive []interface{} `json:"io_time_recursive"` - SectorsRecursive []interface{} `json:"sectors_recursive"` - } `json:"blkio_stats"` - NumProcs int `json:"num_procs"` - StorageStats struct{} `json:"storage_stats"` - CPUStats struct { - CPUUsage struct { - TotalUsage int64 `json:"total_usage"` - PercpuUsage []int64 `json:"percpu_usage"` - UsageInKernelmode int64 `json:"usage_in_kernelmode"` - UsageInUsermode int64 `json:"usage_in_usermode"` - } `json:"cpu_usage"` - SystemCPUUsage int64 `json:"system_cpu_usage"` - OnlineCpus int `json:"online_cpus"` - ThrottlingData struct { - Periods int `json:"periods"` - ThrottledPeriods int `json:"throttled_periods"` - ThrottledTime int `json:"throttled_time"` - } `json:"throttling_data"` - } `json:"cpu_stats"` - PrecpuStats struct { - CPUUsage struct { - TotalUsage int64 `json:"total_usage"` - PercpuUsage []int64 `json:"percpu_usage"` - UsageInKernelmode int64 `json:"usage_in_kernelmode"` - UsageInUsermode int64 `json:"usage_in_usermode"` - } `json:"cpu_usage"` - SystemCPUUsage int64 `json:"system_cpu_usage"` - OnlineCpus int `json:"online_cpus"` - ThrottlingData struct { - Periods int `json:"periods"` - ThrottledPeriods int `json:"throttled_periods"` - ThrottledTime int `json:"throttled_time"` - } `json:"throttling_data"` - } `json:"precpu_stats"` - MemoryStats struct { - Usage int `json:"usage"` - MaxUsage int `json:"max_usage"` - Stats struct { - ActiveAnon int `json:"active_anon"` - ActiveFile int `json:"active_file"` - Cache int `json:"cache"` - Dirty int `json:"dirty"` - HierarchicalMemoryLimit int64 `json:"hierarchical_memory_limit"` - HierarchicalMemswLimit int64 `json:"hierarchical_memsw_limit"` - InactiveAnon int `json:"inactive_anon"` - InactiveFile int `json:"inactive_file"` - MappedFile int `json:"mapped_file"` - Pgfault int `json:"pgfault"` - Pgmajfault int `json:"pgmajfault"` - Pgpgin int `json:"pgpgin"` - Pgpgout int `json:"pgpgout"` - Rss int `json:"rss"` - RssHuge int `json:"rss_huge"` - TotalActiveAnon int `json:"total_active_anon"` - TotalActiveFile int `json:"total_active_file"` - TotalCache int `json:"total_cache"` - TotalDirty int `json:"total_dirty"` - TotalInactiveAnon int `json:"total_inactive_anon"` - TotalInactiveFile int `json:"total_inactive_file"` - TotalMappedFile int `json:"total_mapped_file"` - TotalPgfault int `json:"total_pgfault"` - TotalPgmajfault int `json:"total_pgmajfault"` - TotalPgpgin int `json:"total_pgpgin"` - TotalPgpgout int `json:"total_pgpgout"` - TotalRss int `json:"total_rss"` - TotalRssHuge int `json:"total_rss_huge"` - TotalUnevictable int `json:"total_unevictable"` - TotalWriteback int `json:"total_writeback"` - Unevictable int `json:"unevictable"` - Writeback int `json:"writeback"` - } `json:"stats"` - Limit int64 `json:"limit"` - } `json:"memory_stats"` - Name string `json:"name"` - ID string `json:"id"` - Networks struct { - Eth0 struct { - RxBytes int `json:"rx_bytes"` - RxPackets int `json:"rx_packets"` - RxErrors int `json:"rx_errors"` - RxDropped int `json:"rx_dropped"` - TxBytes int `json:"tx_bytes"` - TxPackets int `json:"tx_packets"` - TxErrors int `json:"tx_errors"` - TxDropped int `json:"tx_dropped"` - } `json:"eth0"` - } `json:"networks"` + ID string `json:"id"` + CPUUsageUsec int64 `json:"cpuUsageUsec"` + MemoryUsageBytes int64 `json:"memoryUsageBytes"` + MemoryLimitBytes int64 `json:"memoryLimitBytes"` + NetworkRxBytes int64 `json:"networkRxBytes"` + NetworkTxBytes int64 `json:"networkTxBytes"` + BlockReadBytes int64 `json:"blockReadBytes"` + BlockWriteBytes int64 `json:"blockWriteBytes"` + NumProcesses int `json:"numProcesses"` + + PrevCPUUsageUsec int64 `json:"-"` + TimeDeltaUsec int64 `json:"-"` } -// CalculateContainerCPUPercentage calculates the cpu usage of the container as a percent of total CPU usage -// to calculate CPU usage, we take the increase in CPU time from the container since the last poll, divide that by the total increase in CPU time since the last poll, times by the number of cores, and times by 100 to get a percentage -// I'm not entirely sure why we need to multiply by the number of cores, but the numbers work func (s *ContainerStats) CalculateContainerCPUPercentage() float64 { - cpuUsageDelta := s.CPUStats.CPUUsage.TotalUsage - s.PrecpuStats.CPUUsage.TotalUsage - cpuTotalUsageDelta := s.CPUStats.SystemCPUUsage - s.PrecpuStats.SystemCPUUsage - - value := float64(cpuUsageDelta*100) / float64(cpuTotalUsageDelta) - if math.IsNaN(value) { + if s.TimeDeltaUsec == 0 { + return 0 + } + cpuDelta := s.CPUUsageUsec - s.PrevCPUUsageUsec + if cpuDelta < 0 { + cpuDelta = s.CPUUsageUsec + } + value := float64(cpuDelta*1000000) / float64(s.TimeDeltaUsec) + if math.IsNaN(value) || math.IsInf(value, 0) { return 0 } return value } -// CalculateContainerMemoryUsage calculates the memory usage of the container as a percent of total available memory func (s *ContainerStats) CalculateContainerMemoryUsage() float64 { - value := float64(s.MemoryStats.Usage*100) / float64(s.MemoryStats.Limit) - if math.IsNaN(value) { + if s.MemoryLimitBytes == 0 { + return 0 + } + value := float64(s.MemoryUsageBytes*100) / float64(s.MemoryLimitBytes) + if math.IsNaN(value) || math.IsInf(value, 0) { return 0 } return value @@ -163,7 +65,6 @@ func (c *Container) appendStats(stats *RecordedStats, maxDuration time.Duration) c.eraseOldHistory(maxDuration) } -// eraseOldHistory removes any history before the user-specified max duration func (c *Container) eraseOldHistory(maxDuration time.Duration) { if maxDuration == 0 { return @@ -186,3 +87,24 @@ func (c *Container) GetLastStats() (*RecordedStats, bool) { } return history[len(history)-1], true } + +func ConvertAppleStatsToContainerStats(appleStats AppleContainerStats, prevStats *ContainerStats, timeDelta time.Duration) *ContainerStats { + stats := &ContainerStats{ + ID: appleStats.ID, + CPUUsageUsec: appleStats.CPUUsageUsec, + MemoryUsageBytes: appleStats.MemoryUsageBytes, + MemoryLimitBytes: appleStats.MemoryLimitBytes, + NetworkRxBytes: appleStats.NetworkRxBytes, + NetworkTxBytes: appleStats.NetworkTxBytes, + BlockReadBytes: appleStats.BlockReadBytes, + BlockWriteBytes: appleStats.BlockWriteBytes, + NumProcesses: appleStats.NumProcesses, + } + + if prevStats != nil { + stats.PrevCPUUsageUsec = prevStats.CPUUsageUsec + stats.TimeDeltaUsec = int64(timeDelta.Microseconds()) + } + + return stats +} diff --git a/pkg/commands/container_stats_test.go b/pkg/commands/container_stats_test.go deleted file mode 100644 index 5aaabd47..00000000 --- a/pkg/commands/container_stats_test.go +++ /dev/null @@ -1,17 +0,0 @@ -package commands - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestCalculateContainerCPUPercentage(t *testing.T) { - container := &ContainerStats{} - container.CPUStats.CPUUsage.TotalUsage = 10 - container.CPUStats.SystemCPUUsage = 10 - container.PrecpuStats.CPUUsage.TotalUsage = 5 - container.PrecpuStats.SystemCPUUsage = 2 - - assert.EqualValues(t, 62.5, container.CalculateContainerCPUPercentage()) -} diff --git a/pkg/commands/docker.go b/pkg/commands/docker.go deleted file mode 100644 index 0ce4fba1..00000000 --- a/pkg/commands/docker.go +++ /dev/null @@ -1,569 +0,0 @@ -package commands - -import ( - "bufio" - "context" - "encoding/json" - "fmt" - "io" - ogLog "log" - "os" - "os/exec" - "path/filepath" - "sort" - "strings" - "sync" - "time" - - cliconfig "github.com/docker/cli/cli/config" - ddocker "github.com/docker/cli/cli/context/docker" - ctxstore "github.com/docker/cli/cli/context/store" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/client" - "github.com/imdario/mergo" - "github.com/jesseduffield/lazydocker/pkg/commands/ssh" - "github.com/jesseduffield/lazydocker/pkg/config" - "github.com/jesseduffield/lazydocker/pkg/i18n" - "github.com/jesseduffield/lazydocker/pkg/utils" - "github.com/sasha-s/go-deadlock" - "github.com/sirupsen/logrus" -) - -const ( - dockerHostEnvKey = "DOCKER_HOST" -) - -// DockerCommand is our main docker interface -type DockerCommand struct { - Log *logrus.Entry - OSCommand *OSCommand - Tr *i18n.TranslationSet - Config *config.AppConfig - Client *client.Client - InDockerComposeProject bool - // LocalProjectName is the compose project name for the directory where lazydocker was launched. - LocalProjectName string - ErrorChan chan error - ContainerMutex deadlock.Mutex - ServiceMutex deadlock.Mutex - - Closers []io.Closer -} - -var _ io.Closer = &DockerCommand{} - -// LimitedDockerCommand is a stripped-down DockerCommand with just the methods the container/service/image might need -type LimitedDockerCommand interface { - NewCommandObject(CommandObject) CommandObject -} - -// CommandObject is what we pass to our template resolvers when we are running a custom command. We do not guarantee that all fields will be populated: just the ones that make sense for the current context -type CommandObject struct { - DockerCompose string - Service *Service - Container *Container - Image *Image - Volume *Volume - Network *Network - Project *Project -} - -// NewCommandObject takes a command object and returns a default command object with the passed command object merged in -func (c *DockerCommand) NewCommandObject(obj CommandObject) CommandObject { - defaultObj := CommandObject{DockerCompose: c.Config.UserConfig.CommandTemplates.DockerCompose} - _ = mergo.Merge(&defaultObj, obj) - - // When operating on a specific project, include -p flag so that - // docker compose targets the correct project. - if obj.Service != nil && obj.Service.ProjectName != "" { - defaultObj.DockerCompose = fmt.Sprintf("%s -p %s", defaultObj.DockerCompose, obj.Service.ProjectName) - } else if obj.Project != nil && obj.Project.Name != "" { - defaultObj.DockerCompose = fmt.Sprintf("%s -p %s", defaultObj.DockerCompose, obj.Project.Name) - } - - return defaultObj -} - -// newDockerClient creates a Docker client with the given host. -// We avoid using client.FromEnv because it includes WithVersionFromEnv() which -// sets manualOverride=true when DOCKER_API_VERSION is set, preventing API version -// negotiation even when WithAPIVersionNegotiation() is specified. -// Instead, we explicitly configure only what we need, and rely on proper -// API version negotiation to support older Docker daemons. -// See https://github.com/jesseduffield/lazydocker/issues/715 -func newDockerClient(dockerHost string) (*client.Client, error) { - return client.NewClientWithOpts( - client.WithTLSClientConfigFromEnv(), - client.WithAPIVersionNegotiation(), - client.WithHost(dockerHost), - ) -} - -// NewDockerCommand it runs docker commands -func NewDockerCommand(log *logrus.Entry, osCommand *OSCommand, tr *i18n.TranslationSet, config *config.AppConfig, errorChan chan error) (*DockerCommand, error) { - dockerHost, err := determineDockerHost() - if err != nil { - ogLog.Printf("> could not determine host %v", err) - } - - // NOTE: Inject the determined docker host to the environment. This allows the - // `SSHHandler.HandleSSHDockerHost()` to create a local unix socket tunneled - // over SSH to the specified ssh host. - if strings.HasPrefix(dockerHost, "ssh://") { - os.Setenv(dockerHostEnvKey, dockerHost) - } - - tunnelCloser, err := ssh.NewSSHHandler(osCommand).HandleSSHDockerHost() - if err != nil { - ogLog.Fatal(err) - } - - // Retrieve the docker host from the environment which could have been set by - // the `SSHHandler.HandleSSHDockerHost()` and override `dockerHost`. - dockerHostFromEnv := os.Getenv(dockerHostEnvKey) - if dockerHostFromEnv != "" { - dockerHost = dockerHostFromEnv - } - - cli, err := newDockerClient(dockerHost) - if err != nil { - ogLog.Fatal(err) - } - - dockerCommand := &DockerCommand{ - Log: log, - OSCommand: osCommand, - Tr: tr, - Config: config, - Client: cli, - ErrorChan: errorChan, - InDockerComposeProject: true, - Closers: []io.Closer{tunnelCloser}, - } - - dockerCommand.setDockerComposeCommand(config) - - err = osCommand.RunCommand( - utils.ApplyTemplate( - config.UserConfig.CommandTemplates.CheckDockerComposeConfig, - dockerCommand.NewCommandObject(CommandObject{}), - ), - ) - if err != nil { - dockerCommand.InDockerComposeProject = false - log.Warn(err.Error()) - } - - return dockerCommand, nil -} - -func (c *DockerCommand) setDockerComposeCommand(config *config.AppConfig) { - if config.UserConfig.CommandTemplates.DockerCompose != "docker compose" { - return - } - - // it's possible that a user is still using docker-compose, so we'll check if 'docker comopose' is available, and if not, we'll fall back to 'docker-compose' - err := c.OSCommand.RunCommand("docker compose version") - if err != nil { - config.UserConfig.CommandTemplates.DockerCompose = "docker-compose" - } -} - -func (c *DockerCommand) Close() error { - return utils.CloseMany(c.Closers) -} - -func (c *DockerCommand) CreateClientStatMonitor(container *Container) { - container.MonitoringStats = true - stream, err := c.Client.ContainerStats(context.Background(), container.ID, true) - if err != nil { - // not creating error panel because if we've disconnected from docker we'll - // have already created an error panel - c.Log.Error(err) - container.MonitoringStats = false - return - } - - defer stream.Body.Close() - - scanner := bufio.NewScanner(stream.Body) - for scanner.Scan() { - data := scanner.Bytes() - var stats ContainerStats - _ = json.Unmarshal(data, &stats) - - recordedStats := &RecordedStats{ - ClientStats: stats, - DerivedStats: DerivedStats{ - CPUPercentage: stats.CalculateContainerCPUPercentage(), - MemoryPercentage: stats.CalculateContainerMemoryUsage(), - }, - RecordedAt: time.Now(), - } - - container.appendStats(recordedStats, c.Config.UserConfig.Stats.MaxDuration) - } - - container.MonitoringStats = false -} - -func (c *DockerCommand) RefreshContainersAndServices(currentContainers []*Container) ([]*Container, []*Service, error) { - c.ServiceMutex.Lock() - defer c.ServiceMutex.Unlock() - - containers, err := c.GetContainers(currentContainers) - if err != nil { - return nil, nil, err - } - - // Derive services from container labels (covers all projects) - services := c.GetServicesFromContainers(containers) - - var composeServices []*Service - if c.InDockerComposeProject { - composeServices, err = c.GetServices() - if err != nil { - c.Log.Warn("Failed to get compose services: " + err.Error()) - } - } - - // Determine the local project name before merging services, since - // mergeServices needs it. We match compose service names against container - // labels to handle cases where the project name differs from the directory - // name (e.g. a `name:` directive in the compose file). - if c.LocalProjectName == "" && c.InDockerComposeProject && composeServices != nil { - for _, ctr := range containers { - if ctr.ProjectName == "" || ctr.ServiceName == "" { - continue - } - for _, svc := range composeServices { - if ctr.ServiceName == svc.Name { - c.LocalProjectName = ctr.ProjectName - break - } - } - if c.LocalProjectName != "" { - break - } - } - // Fall back to directory name - if c.LocalProjectName == "" && c.Config.ProjectDir != "" { - c.LocalProjectName = filepath.Base(c.Config.ProjectDir) - } - } - - // Merge compose services (which include stopped services) with - // container-derived services from all projects - if composeServices != nil { - services = c.mergeServices(services, composeServices) - } - - c.assignContainersToServices(containers, services) - - return containers, services, nil -} - -// GetServicesFromContainers derives services from container labels for all projects -func (c *DockerCommand) GetServicesFromContainers(containers []*Container) []*Service { - // Use project+service as key to avoid duplicates - type serviceKey struct { - project string - service string - } - seen := make(map[serviceKey]bool) - services := make([]*Service, 0, len(containers)) - - for _, ctr := range containers { - if ctr.ServiceName == "" || ctr.OneOff { - continue - } - key := serviceKey{project: ctr.ProjectName, service: ctr.ServiceName} - if seen[key] { - continue - } - seen[key] = true - services = append(services, &Service{ - Name: ctr.ServiceName, - ID: ctr.ProjectName + "-" + ctr.ServiceName, - ProjectName: ctr.ProjectName, - OSCommand: c.OSCommand, - Log: c.Log, - DockerCommand: c, - }) - } - - return services -} - -// mergeServices merges compose services (which may lack ProjectName) with -// container-derived services. Compose services take priority because they -// include services without running containers. -func (c *DockerCommand) mergeServices(containerServices []*Service, composeServices []*Service) []*Service { - // Set project name on compose services - for _, svc := range composeServices { - if svc.ProjectName == "" { - svc.ProjectName = c.LocalProjectName - } - } - - // Build a set of compose service names for the local project - composeServiceNames := make(map[string]bool) - for _, svc := range composeServices { - composeServiceNames[svc.Name] = true - } - - // Start with compose services, then add container-derived services - // that aren't already covered by compose (i.e. from other projects) - result := make([]*Service, 0, len(composeServices)+len(containerServices)) - result = append(result, composeServices...) - - for _, svc := range containerServices { - if svc.ProjectName == c.LocalProjectName && composeServiceNames[svc.Name] { - continue // already covered by compose service - } - result = append(result, svc) - } - - return result -} - -// GetProjectNames returns all unique project names from containers -func (c *DockerCommand) GetProjectNames(containers []*Container) []string { - seen := make(map[string]bool) - var names []string - for _, ctr := range containers { - if ctr.ProjectName != "" && !seen[ctr.ProjectName] { - seen[ctr.ProjectName] = true - names = append(names, ctr.ProjectName) - } - } - sort.Strings(names) - return names -} - -func (c *DockerCommand) assignContainersToServices(containers []*Container, services []*Service) { -L: - for _, service := range services { - for _, ctr := range containers { - if !ctr.OneOff && ctr.ServiceName == service.Name && ctr.ProjectName == service.ProjectName { - service.Container = ctr - continue L - } - } - service.Container = nil - } -} - -// GetContainers gets the docker containers -func (c *DockerCommand) GetContainers(existingContainers []*Container) ([]*Container, error) { - c.ContainerMutex.Lock() - defer c.ContainerMutex.Unlock() - - containers, err := c.Client.ContainerList(context.Background(), container.ListOptions{All: true}) - if err != nil { - return nil, err - } - - ownContainers := make([]*Container, len(containers)) - - for i, ctr := range containers { - var newContainer *Container - - // check if we already have data stored against the container - for _, existingContainer := range existingContainers { - if existingContainer.ID == ctr.ID { - newContainer = existingContainer - break - } - } - - // initialise the container if it's completely new - if newContainer == nil { - newContainer = &Container{ - ID: ctr.ID, - Client: c.Client, - OSCommand: c.OSCommand, - Log: c.Log, - DockerCommand: c, - Tr: c.Tr, - } - } - - newContainer.Container = ctr - // if the container is made with a name label we will use that - if name, ok := ctr.Labels["name"]; ok { - newContainer.Name = name - } else { - if len(ctr.Names) > 0 { - newContainer.Name = strings.TrimLeft(ctr.Names[0], "/") - } else { - newContainer.Name = ctr.ID - } - } - newContainer.ServiceName = ctr.Labels["com.docker.compose.service"] - newContainer.ProjectName = ctr.Labels["com.docker.compose.project"] - newContainer.ContainerNumber = ctr.Labels["com.docker.compose.container"] - newContainer.OneOff = ctr.Labels["com.docker.compose.oneoff"] == "True" - - ownContainers[i] = newContainer - } - - c.SetContainerDetails(ownContainers) - - return ownContainers, nil -} - -// GetServices gets services -func (c *DockerCommand) GetServices() ([]*Service, error) { - if !c.InDockerComposeProject { - return nil, nil - } - - composeCommand := c.Config.UserConfig.CommandTemplates.DockerCompose - output, err := c.OSCommand.RunCommandWithOutput(fmt.Sprintf("%s config --services", composeCommand)) - if err != nil { - return nil, err - } - - // output looks like: - // service1 - // service2 - - lines := utils.SplitLines(output) - services := make([]*Service, len(lines)) - for i, str := range lines { - services[i] = &Service{ - Name: str, - ID: c.LocalProjectName + "-" + str, - ProjectName: c.LocalProjectName, - OSCommand: c.OSCommand, - Log: c.Log, - DockerCommand: c, - } - } - - return services, nil -} - -func (c *DockerCommand) RefreshContainerDetails(containers []*Container) error { - c.ContainerMutex.Lock() - defer c.ContainerMutex.Unlock() - - c.SetContainerDetails(containers) - - return nil -} - -// Attaches the details returned from docker inspect to each of the containers -// this contains a bit more info than what you get from the go-docker client -func (c *DockerCommand) SetContainerDetails(containers []*Container) { - wg := sync.WaitGroup{} - for _, ctr := range containers { - ctr := ctr - wg.Add(1) - go func() { - details, err := c.Client.ContainerInspect(context.Background(), ctr.ID) - if err != nil { - c.Log.Error(err) - } else { - ctr.Details = details - } - wg.Done() - }() - } - wg.Wait() -} - -// ViewAllLogs attaches to a subprocess viewing all the logs from docker-compose -func (c *DockerCommand) ViewAllLogs(project *Project) (*exec.Cmd, error) { - cmd := c.OSCommand.ExecutableFromString( - utils.ApplyTemplate( - c.OSCommand.Config.UserConfig.CommandTemplates.ViewAllLogs, - c.NewCommandObject(CommandObject{Project: project}), - ), - ) - - c.OSCommand.PrepareForChildren(cmd) - - return cmd, nil -} - -// DockerComposeConfig returns the result of 'docker-compose config' -func (c *DockerCommand) DockerComposeConfig() string { - return c.DockerComposeConfigForProject(nil) -} - -// DockerComposeConfigForProject returns the result of 'docker-compose config' for a specific project -func (c *DockerCommand) DockerComposeConfigForProject(project *Project) string { - output, err := c.OSCommand.RunCommandWithOutput( - utils.ApplyTemplate( - c.OSCommand.Config.UserConfig.CommandTemplates.DockerComposeConfig, - c.NewCommandObject(CommandObject{Project: project}), - ), - ) - if err != nil { - output = err.Error() - } - return output -} - -// determineDockerHost tries to the determine the docker host that we should connect to -// in the following order of decreasing precedence: -// - value of "DOCKER_HOST" environment variable -// - host retrieved from the current context (specified via DOCKER_CONTEXT) -// - "default docker host" for the host operating system, otherwise -func determineDockerHost() (string, error) { - // If the docker host is explicitly set via the "DOCKER_HOST" environment variable, - // then its a no-brainer :shrug: - if os.Getenv("DOCKER_HOST") != "" { - return os.Getenv("DOCKER_HOST"), nil - } - - currentContext := os.Getenv("DOCKER_CONTEXT") - if currentContext == "" { - cf, err := cliconfig.Load(cliconfig.Dir()) - if err != nil { - return "", err - } - currentContext = cf.CurrentContext - } - - // On some systems (windows) `default` is stored in the docker config as the currentContext. - if currentContext == "" || currentContext == "default" { - // If a docker context is neither specified via the "DOCKER_CONTEXT" environment variable nor via the - // $HOME/.docker/config file, then we fall back to connecting to the "default docker host" meant for - // the host operating system. - return defaultDockerHost, nil - } - - storeConfig := ctxstore.NewConfig( - func() interface{} { return &ddocker.EndpointMeta{} }, - ctxstore.EndpointTypeGetter(ddocker.DockerEndpoint, func() interface{} { return &ddocker.EndpointMeta{} }), - ) - - st := ctxstore.New(cliconfig.ContextStoreDir(), storeConfig) - md, err := st.GetMetadata(currentContext) - if err != nil { - return "", err - } - dockerEP, ok := md.Endpoints[ddocker.DockerEndpoint] - if !ok { - return "", err - } - dockerEPMeta, ok := dockerEP.(ddocker.EndpointMeta) - if !ok { - return "", fmt.Errorf("expected docker.EndpointMeta, got %T", dockerEP) - } - - if dockerEPMeta.Host != "" { - return dockerEPMeta.Host, nil - } - - // We might end up here, if the context was created with the `host` set to an empty value (i.e. ''). - // For example: - // ```sh - // docker context create foo --docker "host=" - // ``` - // In such scenario, we mimic the `docker` cli and try to connect to the "default docker host". - return defaultDockerHost, nil -} diff --git a/pkg/commands/docker_host_unix.go b/pkg/commands/docker_host_unix.go deleted file mode 100644 index ee5fb7af..00000000 --- a/pkg/commands/docker_host_unix.go +++ /dev/null @@ -1,7 +0,0 @@ -//go:build !windows - -package commands - -const ( - defaultDockerHost = "unix:///var/run/docker.sock" -) diff --git a/pkg/commands/docker_host_windows.go b/pkg/commands/docker_host_windows.go deleted file mode 100644 index 471b55a2..00000000 --- a/pkg/commands/docker_host_windows.go +++ /dev/null @@ -1,5 +0,0 @@ -package commands - -const ( - defaultDockerHost = "npipe:////./pipe/docker_engine" -) diff --git a/pkg/commands/docker_test.go b/pkg/commands/docker_test.go deleted file mode 100644 index 0d459686..00000000 --- a/pkg/commands/docker_test.go +++ /dev/null @@ -1,63 +0,0 @@ -package commands - -import ( - "os" - "testing" - - "github.com/docker/docker/client" - "github.com/stretchr/testify/assert" -) - -// TestNewDockerClientVersionNegotiation verifies that newDockerClient allows -// API version negotiation even when DOCKER_API_VERSION is set. -// -// This is a regression test for https://github.com/jesseduffield/lazydocker/issues/715 -// where users got "client version 1.25 is too old" errors because FromEnv() -// includes WithVersionFromEnv() which sets manualOverride=true, preventing -// API version negotiation. -func TestNewDockerClientVersionNegotiation(t *testing.T) { - // Save original env var and restore after test - originalAPIVersion := os.Getenv("DOCKER_API_VERSION") - defer func() { - if originalAPIVersion == "" { - os.Unsetenv("DOCKER_API_VERSION") - } else { - os.Setenv("DOCKER_API_VERSION", originalAPIVersion) - } - }() - - // Set DOCKER_API_VERSION to an old version that would cause - // "client version 1.25 is too old" errors if negotiation is disabled - os.Setenv("DOCKER_API_VERSION", "1.25") - - t.Run("FromEnv locks version preventing negotiation", func(t *testing.T) { - // This demonstrates the problematic behavior we're avoiding. - // When using FromEnv with DOCKER_API_VERSION set, the client - // version gets locked to 1.25 and negotiation is disabled. - cli, err := client.NewClientWithOpts( - client.FromEnv, - client.WithAPIVersionNegotiation(), - ) - assert.NoError(t, err) - defer cli.Close() - - // Version is locked to the env var value - assert.Equal(t, "1.25", cli.ClientVersion()) - }) - - t.Run("newDockerClient allows version negotiation", func(t *testing.T) { - // Test the actual production function. - // Use DefaultDockerHost for cross-platform compatibility - // (unix socket on Linux/macOS, named pipe on Windows). - cli, err := newDockerClient(client.DefaultDockerHost) - assert.NoError(t, err) - defer cli.Close() - - // Version is NOT locked to the env var value (1.25). - // Instead, it uses the library's default version and will negotiate - // with the server on first request. This is the key difference that - // fixes the "version too old" error. - assert.NotEqual(t, "1.25", cli.ClientVersion(), - "client version should not be locked to DOCKER_API_VERSION env var") - }) -} diff --git a/pkg/commands/dummies.go b/pkg/commands/dummies.go deleted file mode 100644 index 552171ac..00000000 --- a/pkg/commands/dummies.go +++ /dev/null @@ -1,52 +0,0 @@ -package commands - -import ( - "io" - - "github.com/jesseduffield/lazydocker/pkg/config" - "github.com/jesseduffield/lazydocker/pkg/i18n" - "github.com/sirupsen/logrus" -) - -// This file exports dummy constructors for use by tests in other packages - -// NewDummyOSCommand creates a new dummy OSCommand for testing -func NewDummyOSCommand() *OSCommand { - return NewOSCommand(NewDummyLog(), NewDummyAppConfig()) -} - -// NewDummyAppConfig creates a new dummy AppConfig for testing -func NewDummyAppConfig() *config.AppConfig { - appConfig := &config.AppConfig{ - Name: "lazydocker", - Version: "unversioned", - Commit: "", - BuildDate: "", - Debug: false, - BuildSource: "", - } - return appConfig -} - -// NewDummyLog creates a new dummy Log for testing -func NewDummyLog() *logrus.Entry { - log := logrus.New() - log.Out = io.Discard - return log.WithField("test", "test") -} - -// NewDummyDockerCommand creates a new dummy DockerCommand for testing -func NewDummyDockerCommand() *DockerCommand { - return NewDummyDockerCommandWithOSCommand(NewDummyOSCommand()) -} - -// NewDummyDockerCommandWithOSCommand creates a new dummy DockerCommand for testing -func NewDummyDockerCommandWithOSCommand(osCommand *OSCommand) *DockerCommand { - newAppConfig := NewDummyAppConfig() - return &DockerCommand{ - Log: NewDummyLog(), - OSCommand: osCommand, - Tr: i18n.NewTranslationSet(NewDummyLog(), newAppConfig.UserConfig.Gui.Language), - Config: newAppConfig, - } -} diff --git a/pkg/commands/image.go b/pkg/commands/image.go index 789733d0..2d4504b0 100644 --- a/pkg/commands/image.go +++ b/pkg/commands/image.go @@ -1,46 +1,42 @@ package commands import ( - "context" "strings" - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/image" - "github.com/docker/docker/client" "github.com/fatih/color" - "github.com/jesseduffield/lazydocker/pkg/utils" - "github.com/samber/lo" + "github.com/jesseduffield/lazycontainer/pkg/utils" "github.com/sirupsen/logrus" ) -// Image : A docker Image type Image struct { - Name string - Tag string - ID string - Image image.Summary - Client *client.Client - OSCommand *OSCommand - Log *logrus.Entry - DockerCommand LimitedDockerCommand + Name string + Tag string + ID string + AppleImage AppleImage + Client *ContainerClient + OSCommand *OSCommand + Log *logrus.Entry + ContainerCmd LimitedContainerCommand } -// Remove removes the image -func (i *Image) Remove(options image.RemoveOptions) error { - if _, err := i.Client.ImageRemove(context.Background(), i.ID, options); err != nil { - return err - } - - return nil +func (i *Image) Remove(force bool) error { + return i.Client.RemoveImage(i.ID, force) } -func getHistoryResponseItemDisplayStrings(layer image.HistoryResponseItem) []string { - tag := "" - if len(layer.Tags) > 0 { - tag = layer.Tags[0] +func (i *Image) Pull() error { + return i.Client.PullImage(i.Name + ":" + i.Tag) +} + +func getImageDisplayStrings(img *Image, replacements map[string]string) []string { + name := img.Name + for prefix, replacement := range replacements { + if strings.HasPrefix(name, prefix) { + name = strings.Replace(name, prefix, replacement, 1) + break + } } - id := strings.TrimPrefix(layer.ID, "sha256:") + id := strings.TrimPrefix(img.AppleImage.Descriptor.Digest, "sha256:") if len(id) > 10 { id = id[0:10] } @@ -49,95 +45,56 @@ func getHistoryResponseItemDisplayStrings(layer image.HistoryResponseItem) []str idColor = color.FgBlue } - dockerFileCommandPrefix := "/bin/sh -c #(nop) " - createdBy := layer.CreatedBy - if strings.Contains(layer.CreatedBy, dockerFileCommandPrefix) { - createdBy = strings.Trim(strings.TrimPrefix(layer.CreatedBy, dockerFileCommandPrefix), " ") - split := strings.Split(createdBy, " ") - createdBy = utils.ColoredString(split[0], color.FgYellow) + " " + strings.Join(split[1:], " ") - } - - createdBy = strings.Replace(createdBy, "\t", " ", -1) - - size := utils.FormatBinaryBytes(int(layer.Size)) - sizeColor := color.FgWhite - if size == "0B" { - sizeColor = color.FgBlue + size := img.AppleImage.FullSize + if size == "" { + size = utils.FormatBinaryBytes(int(img.AppleImage.Descriptor.Size)) } return []string{ utils.ColoredString(id, idColor), - utils.ColoredString(tag, color.FgGreen), - utils.ColoredString(size, sizeColor), - createdBy, + utils.ColoredString(name, color.FgGreen), + utils.ColoredString(img.Tag, color.FgCyan), + utils.ColoredString(size, color.FgYellow), } } -// RenderHistory renders the history of the image -func (i *Image) RenderHistory() (string, error) { - history, err := i.Client.ImageHistory(context.Background(), i.ID) - if err != nil { - return "", err - } - - tableBody := lo.Map(history, func(layer image.HistoryResponseItem, _ int) []string { - return getHistoryResponseItemDisplayStrings(layer) - }) - - headers := [][]string{{"ID", "TAG", "SIZE", "COMMAND"}} - table := append(headers, tableBody...) - - return utils.RenderTable(table) -} - -// RefreshImages returns a slice of docker images -func (c *DockerCommand) RefreshImages() ([]*Image, error) { - images, err := c.Client.ImageList(context.Background(), image.ListOptions{}) +func (c *ContainerClient) RefreshImages() ([]*Image, error) { + appleImages, err := c.ListImages() if err != nil { return nil, err } - ownImages := make([]*Image, len(images)) + ownImages := make([]*Image, len(appleImages)) - for i, img := range images { - firstTag := "" - tags := img.RepoTags - if len(tags) > 0 { - firstTag = tags[0] - } - - nameParts := strings.Split(firstTag, ":") - tag := "" - name := "none" + for i, img := range appleImages { + nameParts := strings.Split(img.Reference, ":") + name := "" + tag := "latest" if len(nameParts) > 1 { tag = nameParts[len(nameParts)-1] name = strings.Join(nameParts[:len(nameParts)-1], ":") + } else if len(nameParts) == 1 { + name = nameParts[0] + } - for prefix, replacement := range c.Config.UserConfig.Replacements.ImageNamePrefixes { - if strings.HasPrefix(name, prefix) { - name = strings.Replace(name, prefix, replacement, 1) - break - } + for prefix, replacement := range c.Config.UserConfig.Replacements.ImageNamePrefixes { + if strings.HasPrefix(name, prefix) { + name = strings.Replace(name, prefix, replacement, 1) + break } } ownImages[i] = &Image{ - ID: img.ID, - Name: name, - Tag: tag, - Image: img, - Client: c.Client, - OSCommand: c.OSCommand, - Log: c.Log, - DockerCommand: c, + ID: img.Descriptor.Digest, + Name: name, + Tag: tag, + AppleImage: img, + Client: c, + OSCommand: c.OSCommand, + Log: c.Log, + ContainerCmd: c, } } return ownImages, nil } - -// PruneImages prunes images -func (c *DockerCommand) PruneImages() error { - _, err := c.Client.ImagesPrune(context.Background(), filters.Args{}) - return err -} diff --git a/pkg/commands/network.go b/pkg/commands/network.go index 74379ef0..803a8c3c 100644 --- a/pkg/commands/network.go +++ b/pkg/commands/network.go @@ -1,54 +1,39 @@ package commands import ( - "context" - - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/network" - "github.com/docker/docker/client" "github.com/sirupsen/logrus" ) -// Network : A docker Network type Network struct { Name string - Network network.Inspect - Client *client.Client + AppleNetwork AppleNetwork + Client *ContainerClient OSCommand *OSCommand Log *logrus.Entry - DockerCommand LimitedDockerCommand + ContainerCmd LimitedContainerCommand } -// RefreshNetworks gets the networks and stores them -func (c *DockerCommand) RefreshNetworks() ([]*Network, error) { - networks, err := c.Client.NetworkList(context.Background(), network.ListOptions{}) +func (n *Network) Remove() error { + return n.Client.RemoveNetwork(n.Name) +} + +func (c *ContainerClient) RefreshNetworks() ([]*Network, error) { + appleNetworks, err := c.ListNetworks() if err != nil { return nil, err } - ownNetworks := make([]*Network, len(networks)) + ownNetworks := make([]*Network, len(appleNetworks)) - for i, nw := range networks { + for i, net := range appleNetworks { ownNetworks[i] = &Network{ - Name: nw.Name, - Network: nw, - Client: c.Client, - OSCommand: c.OSCommand, - Log: c.Log, - DockerCommand: c, + Name: net.ID, + AppleNetwork: net, + Client: c, + OSCommand: c.OSCommand, + Log: c.Log, } } return ownNetworks, nil } - -// PruneNetworks prunes networks -func (c *DockerCommand) PruneNetworks() error { - _, err := c.Client.NetworksPrune(context.Background(), filters.Args{}) - return err -} - -// Remove removes the network -func (v *Network) Remove() error { - return v.Client.NetworkRemove(context.Background(), v.Name) -} diff --git a/pkg/commands/os.go b/pkg/commands/os.go index b8dec4a0..f0618c0c 100644 --- a/pkg/commands/os.go +++ b/pkg/commands/os.go @@ -14,8 +14,8 @@ import ( "github.com/go-errors/errors" "github.com/jesseduffield/kill" - "github.com/jesseduffield/lazydocker/pkg/config" - "github.com/jesseduffield/lazydocker/pkg/utils" + "github.com/jesseduffield/lazycontainer/pkg/config" + "github.com/jesseduffield/lazycontainer/pkg/utils" "github.com/mgutz/str" "github.com/sirupsen/logrus" ) diff --git a/pkg/commands/os_test.go b/pkg/commands/os_test.go deleted file mode 100644 index 3e036db4..00000000 --- a/pkg/commands/os_test.go +++ /dev/null @@ -1,355 +0,0 @@ -package commands - -import ( - "fmt" - "os" - "os/exec" - "testing" - - "github.com/stretchr/testify/assert" -) - -// TestOSCommandRunCommandWithOutput is a function. -func TestOSCommandRunCommandWithOutput(t *testing.T) { - type scenario struct { - command string - test func(string, error) - } - - scenarios := []scenario{ - { - "echo -n '123'", - func(output string, err error) { - assert.NoError(t, err) - assert.EqualValues(t, "123", output) - }, - }, - { - "rmdir unexisting-folder", - func(output string, err error) { - assert.Regexp(t, "rmdir.*unexisting-folder.*", err.Error()) - }, - }, - } - - for _, s := range scenarios { - s.test(NewDummyOSCommand().RunCommandWithOutput(s.command)) - } -} - -// TestOSCommandRunCommand is a function. -func TestOSCommandRunCommand(t *testing.T) { - type scenario struct { - command string - test func(error) - } - - scenarios := []scenario{ - { - "rmdir unexisting-folder", - func(err error) { - assert.Regexp(t, "rmdir.*unexisting-folder.*", err.Error()) - }, - }, - } - - for _, s := range scenarios { - s.test(NewDummyOSCommand().RunCommand(s.command)) - } -} - -// TestOSCommandEditFile is a function. -func TestOSCommandEditFile(t *testing.T) { - type scenario struct { - filename string - command func(string, ...string) *exec.Cmd - getenv func(string) string - test func(*exec.Cmd, error) - } - - scenarios := []scenario{ - { - "test", - func(name string, arg ...string) *exec.Cmd { - return exec.Command("exit", "1") - }, - func(env string) string { - return "" - }, - func(cmd *exec.Cmd, err error) { - assert.EqualError(t, err, "No editor defined in $VISUAL or $EDITOR") - }, - }, - { - "test", - func(name string, arg ...string) *exec.Cmd { - if name == "which" { - return exec.Command("exit", "1") - } - - assert.EqualValues(t, "nano", name) - - return exec.Command("exit", "0") - }, - func(env string) string { - if env == "VISUAL" { - return "nano" - } - - return "" - }, - func(cmd *exec.Cmd, err error) { - assert.NoError(t, err) - }, - }, - { - "test", - func(name string, arg ...string) *exec.Cmd { - if name == "which" { - return exec.Command("exit", "1") - } - - assert.EqualValues(t, "emacs", name) - - return exec.Command("exit", "0") - }, - func(env string) string { - if env == "EDITOR" { - return "emacs" - } - - return "" - }, - func(cmd *exec.Cmd, err error) { - assert.NoError(t, err) - }, - }, - { - "test", - func(name string, arg ...string) *exec.Cmd { - if name == "which" { - return exec.Command("echo") - } - - assert.EqualValues(t, "vi", name) - - return exec.Command("exit", "0") - }, - func(env string) string { - return "" - }, - func(cmd *exec.Cmd, err error) { - assert.NoError(t, err) - }, - }, - } - - for _, s := range scenarios { - OSCmd := NewDummyOSCommand() - OSCmd.command = s.command - OSCmd.getenv = s.getenv - - s.test(OSCmd.EditFile(s.filename)) - } -} - -func TestOSCommandQuote(t *testing.T) { - osCommand := NewDummyOSCommand() - - osCommand.Platform.os = "linux" - - actual := osCommand.Quote("hello `test`") - - expected := "\"hello \\`test\\`\"" - - assert.EqualValues(t, expected, actual) -} - -// TestOSCommandQuoteSingleQuote tests the quote function with ' quotes explicitly for Linux -func TestOSCommandQuoteSingleQuote(t *testing.T) { - osCommand := NewDummyOSCommand() - - osCommand.Platform.os = "linux" - - actual := osCommand.Quote("hello 'test'") - - expected := `"hello 'test'"` - - assert.EqualValues(t, expected, actual) -} - -// TestOSCommandQuoteDoubleQuote tests the quote function with " quotes explicitly for Linux -func TestOSCommandQuoteDoubleQuote(t *testing.T) { - osCommand := NewDummyOSCommand() - - osCommand.Platform.os = "linux" - - actual := osCommand.Quote(`hello "test"`) - - expected := `"hello \"test\""` - - assert.EqualValues(t, expected, actual) -} - -// TestOSCommandQuoteWindows tests the quote function for Windows -func TestOSCommandQuoteWindows(t *testing.T) { - osCommand := NewDummyOSCommand() - - osCommand.Platform.os = "windows" - - actual := osCommand.Quote(`hello "test" 'test2'`) - - expected := `\"hello "'"'"test"'"'" 'test2'\"` - - assert.EqualValues(t, expected, actual) -} - -// TestOSCommandUnquote is a function. -func TestOSCommandUnquote(t *testing.T) { - osCommand := NewDummyOSCommand() - - actual := osCommand.Unquote(`hello "test"`) - - expected := "hello test" - - assert.EqualValues(t, expected, actual) -} - -// TestOSCommandFileType is a function. -func TestOSCommandFileType(t *testing.T) { - type scenario struct { - path string - setup func() - test func(string) - } - - scenarios := []scenario{ - { - "testFile", - func() { - if _, err := os.Create("testFile"); err != nil { - panic(err) - } - }, - func(output string) { - assert.EqualValues(t, "file", output) - }, - }, - { - "file with spaces", - func() { - if _, err := os.Create("file with spaces"); err != nil { - panic(err) - } - }, - func(output string) { - assert.EqualValues(t, "file", output) - }, - }, - { - "testDirectory", - func() { - if err := os.Mkdir("testDirectory", 0o644); err != nil { - panic(err) - } - }, - func(output string) { - assert.EqualValues(t, "directory", output) - }, - }, - { - "nonExistant", - func() {}, - func(output string) { - assert.EqualValues(t, "other", output) - }, - }, - } - - for _, s := range scenarios { - s.setup() - s.test(NewDummyOSCommand().FileType(s.path)) - _ = os.RemoveAll(s.path) - } -} - -func TestOSCommandCreateTempFile(t *testing.T) { - type scenario struct { - testName string - filename string - content string - test func(string, error) - } - - scenarios := []scenario{ - { - "valid case", - "filename", - "content", - func(path string, err error) { - assert.NoError(t, err) - - content, err := os.ReadFile(path) - assert.NoError(t, err) - - assert.Equal(t, "content", string(content)) - }, - }, - } - - for _, s := range scenarios { - t.Run(s.testName, func(t *testing.T) { - s.test(NewDummyOSCommand().CreateTempFile(s.filename, s.content)) - }) - } -} - -func TestOSCommandExecutableFromStringWithShellLinux(t *testing.T) { - osCommand := NewDummyOSCommand() - - osCommand.Platform.os = "linux" - - tests := []struct { - name string - commandStr string - want string - }{ - { - "success", - "pwd", - fmt.Sprintf("%v %v %v", osCommand.Platform.shell, osCommand.Platform.shellArg, "\"pwd\""), - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got := osCommand.NewCommandStringWithShell(tt.commandStr) - assert.Equal(t, tt.want, got) - }) - } -} - -func TestOSCommandNewCommandStringWithShellWindows(t *testing.T) { - osCommand := NewDummyOSCommand() - - osCommand.Platform.os = "windows" - - tests := []struct { - name string - commandStr string - want string - }{ - { - "success", - "pwd", - fmt.Sprintf("%v %v %v", osCommand.Platform.shell, osCommand.Platform.shellArg, "pwd"), - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got := osCommand.NewCommandStringWithShell(tt.commandStr) - assert.Equal(t, tt.want, got) - }) - } -} diff --git a/pkg/commands/project.go b/pkg/commands/project.go deleted file mode 100644 index 529ccfa7..00000000 --- a/pkg/commands/project.go +++ /dev/null @@ -1,5 +0,0 @@ -package commands - -type Project struct { - Name string -} diff --git a/pkg/commands/service.go b/pkg/commands/service.go deleted file mode 100644 index 5006eefe..00000000 --- a/pkg/commands/service.go +++ /dev/null @@ -1,84 +0,0 @@ -package commands - -import ( - "context" - "os/exec" - - "github.com/docker/docker/api/types/container" - "github.com/jesseduffield/lazydocker/pkg/utils" - "github.com/sirupsen/logrus" -) - -// Service : A docker Service -type Service struct { - Name string - ID string - ProjectName string - OSCommand *OSCommand - Log *logrus.Entry - Container *Container - DockerCommand LimitedDockerCommand -} - -// Remove removes the service's containers -func (s *Service) Remove(options container.RemoveOptions) error { - return s.Container.Remove(options) -} - -// Stop stops the service's containers -func (s *Service) Stop() error { - return s.runCommand(s.OSCommand.Config.UserConfig.CommandTemplates.StopService) -} - -// Up up's the service -func (s *Service) Up() error { - return s.runCommand(s.OSCommand.Config.UserConfig.CommandTemplates.UpService) -} - -// Restart restarts the service -func (s *Service) Restart() error { - return s.runCommand(s.OSCommand.Config.UserConfig.CommandTemplates.RestartService) -} - -// Start starts the service -func (s *Service) Start() error { - return s.runCommand(s.OSCommand.Config.UserConfig.CommandTemplates.StartService) -} - -func (s *Service) runCommand(templateCmdStr string) error { - command := utils.ApplyTemplate( - templateCmdStr, - s.DockerCommand.NewCommandObject(CommandObject{Service: s}), - ) - return s.OSCommand.RunCommand(command) -} - -// Attach attaches to the service -func (s *Service) Attach() (*exec.Cmd, error) { - return s.Container.Attach() -} - -// ViewLogs attaches to a subprocess viewing the service's logs -func (s *Service) ViewLogs() (*exec.Cmd, error) { - templateString := s.OSCommand.Config.UserConfig.CommandTemplates.ViewServiceLogs - command := utils.ApplyTemplate( - templateString, - s.DockerCommand.NewCommandObject(CommandObject{Service: s}), - ) - - cmd := s.OSCommand.ExecutableFromString(command) - s.OSCommand.PrepareForChildren(cmd) - - return cmd, nil -} - -// RenderTop renders the process list of the service -func (s *Service) RenderTop(ctx context.Context) (string, error) { - templateString := s.OSCommand.Config.UserConfig.CommandTemplates.ServiceTop - command := utils.ApplyTemplate( - templateString, - s.DockerCommand.NewCommandObject(CommandObject{Service: s}), - ) - - return s.OSCommand.RunCommandWithOutputContext(ctx, command) -} diff --git a/pkg/commands/ssh/ssh.go b/pkg/commands/ssh/ssh.go deleted file mode 100644 index ecc84045..00000000 --- a/pkg/commands/ssh/ssh.go +++ /dev/null @@ -1,159 +0,0 @@ -package ssh - -import ( - "context" - "fmt" - "io" - "net" - "net/url" - "os" - "os/exec" - "path" - "time" -) - -// we only need these two methods from our OSCommand struct, for killing commands -type CmdKiller interface { - Kill(cmd *exec.Cmd) error - PrepareForChildren(cmd *exec.Cmd) -} - -type SSHHandler struct { - oSCommand CmdKiller - - dialContext func(ctx context.Context, network, addr string) (io.Closer, error) - startCmd func(*exec.Cmd) error - tempDir func(dir string, pattern string) (name string, err error) - getenv func(key string) string - setenv func(key, value string) error -} - -func NewSSHHandler(oSCommand CmdKiller) *SSHHandler { - return &SSHHandler{ - oSCommand: oSCommand, - - dialContext: func(ctx context.Context, network, addr string) (io.Closer, error) { - return (&net.Dialer{}).DialContext(ctx, network, addr) - }, - startCmd: func(cmd *exec.Cmd) error { return cmd.Start() }, - tempDir: os.MkdirTemp, - getenv: os.Getenv, - setenv: os.Setenv, - } -} - -// HandleSSHDockerHost overrides the DOCKER_HOST environment variable -// to point towards a local unix socket tunneled over SSH to the specified ssh host. -func (self *SSHHandler) HandleSSHDockerHost() (io.Closer, error) { - const key = "DOCKER_HOST" - ctx := context.Background() - u, err := url.Parse(self.getenv(key)) - if err != nil { - // if no or an invalid docker host is specified, continue nominally - return noopCloser{}, nil - } - - // if the docker host scheme is "ssh", forward the docker socket before creating the client - if u.Scheme == "ssh" { - tunnel, err := self.createDockerHostTunnel(ctx, u.Host) - if err != nil { - return noopCloser{}, fmt.Errorf("tunnel ssh docker host: %w", err) - } - err = self.setenv(key, tunnel.socketPath) - if err != nil { - return noopCloser{}, fmt.Errorf("override DOCKER_HOST to tunneled socket: %w", err) - } - - return tunnel, nil - } - return noopCloser{}, nil -} - -type noopCloser struct{} - -func (noopCloser) Close() error { return nil } - -type tunneledDockerHost struct { - socketPath string - cmd *exec.Cmd - oSCommand CmdKiller -} - -var _ io.Closer = (*tunneledDockerHost)(nil) - -func (t *tunneledDockerHost) Close() error { - return t.oSCommand.Kill(t.cmd) -} - -func (self *SSHHandler) createDockerHostTunnel(ctx context.Context, remoteHost string) (*tunneledDockerHost, error) { - socketDir, err := self.tempDir("/tmp", "lazydocker-sshtunnel-") - if err != nil { - return nil, fmt.Errorf("create ssh tunnel tmp file: %w", err) - } - localSocket := path.Join(socketDir, "dockerhost.sock") - - cmd, err := self.tunnelSSH(ctx, remoteHost, localSocket) - if err != nil { - return nil, fmt.Errorf("tunnel docker host over ssh: %w", err) - } - - // set a reasonable timeout, then wait for the socket to dial successfully - // before attempting to create a new docker client - const socketTunnelTimeout = 8 * time.Second - ctx, cancel := context.WithTimeout(ctx, socketTunnelTimeout) - defer cancel() - - err = self.retrySocketDial(ctx, localSocket) - if err != nil { - return nil, fmt.Errorf("ssh tunneled socket never became available: %w", err) - } - - // construct the new DOCKER_HOST url with the proper scheme - newDockerHostURL := url.URL{Scheme: "unix", Path: localSocket} - return &tunneledDockerHost{ - socketPath: newDockerHostURL.String(), - cmd: cmd, - oSCommand: self.oSCommand, - }, nil -} - -// Attempt to dial the socket until it becomes available. -// The retry loop will continue until the parent context is canceled. -func (self *SSHHandler) retrySocketDial(ctx context.Context, socketPath string) error { - t := time.NewTicker(1 * time.Second) - defer t.Stop() - - for { - select { - case <-ctx.Done(): - return ctx.Err() - case <-t.C: - } - // attempt to dial the socket, exit on success - err := self.tryDial(ctx, socketPath) - if err != nil { - continue - } - return nil - } -} - -// Try to dial the specified unix socket, immediately close the connection if successfully created. -func (self *SSHHandler) tryDial(ctx context.Context, socketPath string) error { - conn, err := self.dialContext(ctx, "unix", socketPath) - if err != nil { - return err - } - defer conn.Close() - return nil -} - -func (self *SSHHandler) tunnelSSH(ctx context.Context, host, localSocket string) (*exec.Cmd, error) { - cmd := exec.CommandContext(ctx, "ssh", "-L", localSocket+":/var/run/docker.sock", host, "-N") - self.oSCommand.PrepareForChildren(cmd) - err := self.startCmd(cmd) - if err != nil { - return nil, err - } - return cmd, nil -} diff --git a/pkg/commands/ssh/ssh_test.go b/pkg/commands/ssh/ssh_test.go deleted file mode 100644 index f1ea1b90..00000000 --- a/pkg/commands/ssh/ssh_test.go +++ /dev/null @@ -1,109 +0,0 @@ -package ssh - -import ( - "context" - "io" - "os/exec" - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestSSHHandlerHandleSSHDockerHost(t *testing.T) { - type scenario struct { - testName string - envVarValue string - expectedDialContextCount int - expectedStartCmdCount int - } - - scenarios := []scenario{ - { - testName: "No env var set", - envVarValue: "", - expectedDialContextCount: 0, - expectedStartCmdCount: 0, - }, - { - testName: "Env var set with https scheme", - envVarValue: "https://myhost.com", - expectedStartCmdCount: 0, - expectedDialContextCount: 0, - }, - { - testName: "Env var set with ssh scheme", - envVarValue: "ssh://myhost@192.168.5.178", - expectedStartCmdCount: 1, - expectedDialContextCount: 1, - }, - } - - for _, s := range scenarios { - s := s - t.Run(s.testName, func(t *testing.T) { - getenv := func(key string) string { - if key != "DOCKER_HOST" { - t.Errorf("Expected key to be DOCKER_HOST, got %s", key) - } - - return s.envVarValue - } - - tempDir := func(dir string, pattern string) (string, error) { - assert.Equal(t, "/tmp", dir) - assert.Equal(t, "lazydocker-sshtunnel-", pattern) - - return "/tmp/lazydocker-ssh-tunnel-12345", nil - } - - setenv := func(key, value string) error { - assert.Equal(t, "DOCKER_HOST", key) - assert.Equal(t, "unix:///tmp/lazydocker-ssh-tunnel-12345/dockerhost.sock", value) - return nil - } - - startCmdCount := 0 - startCmd := func(cmd *exec.Cmd) error { - assert.EqualValues(t, []string{"ssh", "-L", "/tmp/lazydocker-ssh-tunnel-12345/dockerhost.sock:/var/run/docker.sock", "192.168.5.178", "-N"}, cmd.Args) - - startCmdCount++ - - return nil - } - - dialContextCount := 0 - dialContext := func(ctx context.Context, network string, address string) (io.Closer, error) { - assert.Equal(t, "unix", network) - assert.Equal(t, "/tmp/lazydocker-ssh-tunnel-12345/dockerhost.sock", address) - - dialContextCount++ - - return noopCloser{}, nil - } - - handler := &SSHHandler{ - oSCommand: &fakeCmdKiller{}, - - dialContext: dialContext, - startCmd: startCmd, - tempDir: tempDir, - getenv: getenv, - setenv: setenv, - } - - _, err := handler.HandleSSHDockerHost() - assert.NoError(t, err) - - assert.Equal(t, s.expectedDialContextCount, dialContextCount) - assert.Equal(t, s.expectedStartCmdCount, startCmdCount) - }) - } -} - -type fakeCmdKiller struct{} - -func (self *fakeCmdKiller) Kill(cmd *exec.Cmd) error { - return nil -} - -func (self *fakeCmdKiller) PrepareForChildren(cmd *exec.Cmd) {} diff --git a/pkg/commands/volume.go b/pkg/commands/volume.go index 169ba8d5..3578f8a3 100644 --- a/pkg/commands/volume.go +++ b/pkg/commands/volume.go @@ -1,56 +1,39 @@ package commands import ( - "context" - - "github.com/docker/docker/api/types/filters" - "github.com/docker/docker/api/types/volume" - "github.com/docker/docker/client" "github.com/sirupsen/logrus" ) -// Volume : A docker Volume type Volume struct { - Name string - Volume *volume.Volume - Client *client.Client - OSCommand *OSCommand - Log *logrus.Entry - DockerCommand LimitedDockerCommand + Name string + AppleVolume AppleVolume + Client *ContainerClient + OSCommand *OSCommand + Log *logrus.Entry + ContainerCmd LimitedContainerCommand } -// RefreshVolumes gets the volumes and stores them -func (c *DockerCommand) RefreshVolumes() ([]*Volume, error) { - result, err := c.Client.VolumeList(context.Background(), volume.ListOptions{}) +func (v *Volume) Remove() error { + return v.Client.RemoveVolume(v.Name) +} + +func (c *ContainerClient) RefreshVolumes() ([]*Volume, error) { + appleVolumes, err := c.ListVolumes() if err != nil { return nil, err } - volumes := result.Volumes + ownVolumes := make([]*Volume, len(appleVolumes)) - ownVolumes := make([]*Volume, len(volumes)) - - for i, vol := range volumes { + for i, vol := range appleVolumes { ownVolumes[i] = &Volume{ - Name: vol.Name, - Volume: vol, - Client: c.Client, - OSCommand: c.OSCommand, - Log: c.Log, - DockerCommand: c, + Name: vol.Name, + AppleVolume: vol, + Client: c, + OSCommand: c.OSCommand, + Log: c.Log, } } return ownVolumes, nil } - -// PruneVolumes prunes volumes -func (c *DockerCommand) PruneVolumes() error { - _, err := c.Client.VolumesPrune(context.Background(), filters.Args{}) - return err -} - -// Remove removes the volume -func (v *Volume) Remove(force bool) error { - return v.Client.VolumeRemove(context.Background(), v.Name, force) -} diff --git a/pkg/config/app_config.go b/pkg/config/app_config.go index 0ebc1796..ce423d91 100644 --- a/pkg/config/app_config.go +++ b/pkg/config/app_config.go @@ -1,72 +1,26 @@ -// Package config handles all the user-configuration. The fields here are -// all in PascalCase but in your actual config.yml they'll be in camelCase. -// You can view the default config with `lazydocker --config`. -// You can open your config file by going to the status panel (using left-arrow) -// and pressing 'o'. -// You can directly edit the file (e.g. in vim) by pressing 'e' instead. -// To see the final config after your user-specific options have been merged -// with the defaults, go to the 'about' tab in the status panel. -// Because of the way we merge your user config with the defaults you may need -// to be careful: if for example you set a `commandTemplates:` yaml key but then -// give it no child values, it will scrap all of the defaults and the app will -// probably crash. package config import ( "os" "path/filepath" - "strings" "time" "github.com/OpenPeeDeeP/xdg" "github.com/jesseduffield/yaml" ) -// UserConfig holds all of the user-configurable options type UserConfig struct { - // Gui is for configuring visual things like colors and whether we show or - // hide things - Gui GuiConfig `yaml:"gui,omitempty"` - - // ConfirmOnQuit when enabled prompts you to confirm you want to quit when you - // hit esc or q when no confirmation panels are open - ConfirmOnQuit bool `yaml:"confirmOnQuit,omitempty"` - - // Logs determines how we render/filter a container's logs - Logs LogsConfig `yaml:"logs,omitempty"` - - // CommandTemplates determines what commands actually get called when we run - // certain commands - CommandTemplates CommandTemplatesConfig `yaml:"commandTemplates,omitempty"` - - // CustomCommands determines what shows up in your custom commands menu when - // you press 'c'. You can use go templates to access three items on the - // struct: the DockerCompose command (defaulted to 'docker-compose'), the - // Service if present, and the Container if present. The struct types for - // those are found in the commands package + Gui GuiConfig `yaml:"gui,omitempty"` + ConfirmOnQuit bool `yaml:"confirmOnQuit,omitempty"` + Logs LogsConfig `yaml:"logs,omitempty"` CustomCommands CustomCommands `yaml:"customCommands,omitempty"` - - // BulkCommands are commands that apply to all items in a panel e.g. - // killing all containers, stopping all services, or pruning all images - BulkCommands CustomCommands `yaml:"bulkCommands,omitempty"` - - // OS determines what defaults are set for opening files and links - OS OSConfig `yaml:"oS,omitempty"` - - // Stats determines how long lazydocker will gather container stats for, and - // what stat info to graph - Stats StatsConfig `yaml:"stats,omitempty"` - - // Replacements determines how we render an item's info - Replacements Replacements `yaml:"replacements,omitempty"` - - // For demo purposes: any list item with one of these strings as a substring - // will be filtered out and not displayed. - // Not documented because it's subject to change - Ignore []string `yaml:"ignore,omitempty"` + BulkCommands CustomCommands `yaml:"bulkCommands,omitempty"` + OS OSConfig `yaml:"oS,omitempty"` + Stats StatsConfig `yaml:"stats,omitempty"` + Replacements Replacements `yaml:"replacements,omitempty"` + Ignore []string `yaml:"ignore,omitempty"` } -// ThemeConfig is for setting the colors of panels and some text. type ThemeConfig struct { ActiveBorderColor []string `yaml:"activeBorderColor,omitempty"` InactiveBorderColor []string `yaml:"inactiveBorderColor,omitempty"` @@ -74,269 +28,56 @@ type ThemeConfig struct { OptionsTextColor []string `yaml:"optionsTextColor,omitempty"` } -// GuiConfig is for configuring visual things like colors and whether we show or -// hide things type GuiConfig struct { - // ScrollHeight determines how many characters you scroll at a time when - // scrolling the main panel - ScrollHeight int `yaml:"scrollHeight,omitempty"` - - // Language determines which language the GUI displayed. - Language string `yaml:"language,omitempty"` - - // ScrollPastBottom determines whether you can scroll past the bottom of the - // main view - ScrollPastBottom bool `yaml:"scrollPastBottom,omitempty"` - - // IgnoreMouseEvents is for when you do not want to use your mouse to interact - // with anything - IgnoreMouseEvents bool `yaml:"mouseEvents,omitempty"` - - // Theme determines what colors and color attributes your panel borders have. - // I always set inactiveBorderColor to black because in my terminal it's more - // of a grey, but that doesn't work in your average terminal. I highly - // recommended finding a combination that works for you - Theme ThemeConfig `yaml:"theme,omitempty"` - - // ShowAllContainers determines whether the Containers panel contains all the - // containers returned by `docker ps -a`, or just those containers that aren't - // directly linked to a service. It is probably desirable to enable this if - // you have multiple containers per service, but otherwise it can cause a lot - // of clutter - ShowAllContainers bool `yaml:"showAllContainers,omitempty"` - - // ReturnImmediately determines whether you get the 'press enter to return to - // lazydocker' message after a subprocess has completed. You would set this to - // true if you often want to see the output of subprocesses before returning - // to lazydocker. I would default this to false but then people who want it - // set to true won't even know the config option exists. - ReturnImmediately bool `yaml:"returnImmediately,omitempty"` - - // WrapMainPanel determines whether we use word wrap on the main panel - WrapMainPanel bool `yaml:"wrapMainPanel,omitempty"` - - // LegacySortContainers determines if containers should be sorted using legacy approach. - // By default, containers are now sorted by status. This setting allows users to - // use legacy behaviour instead. - LegacySortContainers bool `yaml:"legacySortContainers,omitempty"` - - // If 0.333, then the side panels will be 1/3 of the screen's width - SidePanelWidth float64 `yaml:"sidePanelWidth"` - - // Determines whether we show the bottom line (the one containing keybinding - // info and the status of the app). - ShowBottomLine bool `yaml:"showBottomLine"` - - // When true, increases vertical space used by focused side panel, - // creating an accordion effect - ExpandFocusedSidePanel bool `yaml:"expandFocusedSidePanel"` - - // ScreenMode allow user to specify which screen mode will be used on startup - ScreenMode string `yaml:"screenMode,omitempty"` - - // Determines the style of the container status and container health display in the - // containers panel. "long": full words (default), "short": one or two characters, - // "icon": unicode emoji. - ContainerStatusHealthStyle string `yaml:"containerStatusHealthStyle"` - - // Window border style. - // One of 'rounded' (default) | 'single' | 'double' | 'hidden' - Border string `yaml:"border"` + ScrollHeight int `yaml:"scrollHeight,omitempty"` + Language string `yaml:"language,omitempty"` + ScrollPastBottom bool `yaml:"scrollPastBottom,omitempty"` + IgnoreMouseEvents bool `yaml:"mouseEvents,omitempty"` + Theme ThemeConfig `yaml:"theme,omitempty"` + ShowAllContainers bool `yaml:"showAllContainers,omitempty"` + ReturnImmediately bool `yaml:"returnImmediately,omitempty"` + WrapMainPanel bool `yaml:"wrapMainPanel,omitempty"` + LegacySortContainers bool `yaml:"legacySortContainers,omitempty"` + SidePanelWidth float64 `yaml:"sidePanelWidth"` + ShowBottomLine bool `yaml:"showBottomLine"` + ExpandFocusedSidePanel bool `yaml:"expandFocusedSidePanel"` + ScreenMode string `yaml:"screenMode,omitempty"` + ContainerStatusHealthStyle string `yaml:"containerStatusHealthStyle"` + Border string `yaml:"border"` } -// CommandTemplatesConfig determines what commands actually get called when we -// run certain commands -type CommandTemplatesConfig struct { - // RestartService is for restarting a service. docker-compose restart {{ - // .Service.Name }} works but I prefer docker-compose up --force-recreate {{ - // .Service.Name }} - RestartService string `yaml:"restartService,omitempty"` - - // StartService is just like the above but for starting - StartService string `yaml:"startService,omitempty"` - - // UpService ups the service (creates and starts) - UpService string `yaml:"upService,omitempty"` - - // Runs "docker-compose up -d" - Up string `yaml:"up,omitempty"` - - // downs everything - Down string `yaml:"down,omitempty"` - // downs and removes volumes - DownWithVolumes string `yaml:"downWithVolumes,omitempty"` - - // DockerCompose is for your docker-compose command. You may want to combine a - // few different docker-compose.yml files together, in which case you can set - // this to "docker compose -f foo/docker-compose.yml -f - // bah/docker-compose.yml". The reason that the other docker-compose command - // templates all start with {{ .DockerCompose }} is so that they can make use - // of whatever you've set in this value rather than you having to copy and - // paste it to all the other commands - DockerCompose string `yaml:"dockerCompose,omitempty"` - - // StopService is the command for stopping a service - StopService string `yaml:"stopService,omitempty"` - - // ServiceLogs get the logs for a service. This is actually not currently - // used; we just get the logs of the corresponding container. But we should - // probably support explicitly returning the logs of the service when you've - // selected the service, given that a service may have multiple containers. - ServiceLogs string `yaml:"serviceLogs,omitempty"` - - // ViewServiceLogs is for when you want to view the logs of a service as a - // subprocess. This defaults to having no filter, unlike the in-app logs - // commands which will usually filter down to the last hour for the sake of - // performance. - ViewServiceLogs string `yaml:"viewServiceLogs,omitempty"` - - // RebuildService is the command for rebuilding a service. Defaults to - // something along the lines of `{{ .DockerCompose }} up --build {{ - // .Service.Name }}` - RebuildService string `yaml:"rebuildService,omitempty"` - - // RecreateService is for force-recreating a service. I prefer this to - // restarting a service because it will also restart any dependent services - // and ensure they're running before trying to run the service at hand - RecreateService string `yaml:"recreateService,omitempty"` - - // AllLogs is for showing what you get from doing `docker compose logs`. It - // combines all the logs together - AllLogs string `yaml:"allLogs,omitempty"` - - // ViewAllLogs is the command we use when you want to see all logs in a subprocess with no filtering - ViewAllLogs string `yaml:"viewAlLogs,omitempty"` - - // DockerComposeConfig is the command for viewing the config of your docker - // compose. It basically prints out the yaml from your docker-compose.yml - // file(s) - DockerComposeConfig string `yaml:"dockerComposeConfig,omitempty"` - - // CheckDockerComposeConfig is what we use to check whether we are in a - // docker-compose context. If the command returns an error then we clearly - // aren't in a docker-compose config and we then just hide the services panel - // and only show containers - CheckDockerComposeConfig string `yaml:"checkDockerComposeConfig,omitempty"` - - // ServiceTop is the command for viewing the processes under a given service - ServiceTop string `yaml:"serviceTop,omitempty"` -} - -// OSConfig contains config on the level of the os -type OSConfig struct { - // OpenCommand is the command for opening a file - OpenCommand string `yaml:"openCommand,omitempty"` - - // OpenCommand is the command for opening a link - OpenLinkCommand string `yaml:"openLinkCommand,omitempty"` -} - -// GraphConfig specifies how to make a graph of recorded container stats type GraphConfig struct { - // Min sets the minimum value that you want to display. If you want to set - // this, you should also set MinType to "static". The reason for this is that - // if Min == 0, it's not clear if it has not been set (given that the - // zero-value of an int is 0) or if it's intentionally been set to 0. - Min float64 `yaml:"min,omitempty"` - - // Max sets the maximum value that you want to display. If you want to set - // this, you should also set MaxType to "static". The reason for this is that - // if Max == 0, it's not clear if it has not been set (given that the - // zero-value of an int is 0) or if it's intentionally been set to 0. - Max float64 `yaml:"max,omitempty"` - - // Height sets the height of the graph in ascii characters - Height int `yaml:"height,omitempty"` - - // Caption sets the caption of the graph. If you want to show CPU Percentage - // you could set this to "CPU (%)" - Caption string `yaml:"caption,omitempty"` - - // This is the path to the stat that you want to display. It is based on the - // RecordedStats struct in container_stats.go, so feel free to look there to - // see all the options available. Alternatively if you go into lazydocker and - // go to the stats tab, you'll see that same struct in JSON format, so you can - // just PascalCase the path and you'll have a valid path. E.g. - // ClientStats.blkio_stats -> "ClientStats.BlkioStats" - StatPath string `yaml:"statPath,omitempty"` - - // This determines the color of the graph. This can be any color attribute, - // e.g. 'blue', 'green' - Color string `yaml:"color,omitempty"` - - // MinType and MaxType are each one of "", "static". blank means the min/max - // of the data set will be used. "static" means the min/max specified will be - // used - MinType string `yaml:"minType,omitempty"` - - // MaxType is just like MinType but for the max value - MaxType string `yaml:"maxType,omitempty"` + Min float64 `yaml:"min,omitempty"` + Max float64 `yaml:"max,omitempty"` + Height int `yaml:"height,omitempty"` + Caption string `yaml:"caption,omitempty"` + StatPath string `yaml:"statPath,omitempty"` + Color string `yaml:"color,omitempty"` + MinType string `yaml:"minType,omitempty"` + MaxType string `yaml:"maxType,omitempty"` } -// StatsConfig contains the stuff relating to stats and graphs type StatsConfig struct { - // Graphs contains the configuration for the stats graphs we want to show in - // the app - Graphs []GraphConfig - - // MaxDuration tells us how long to collect stats for. Currently this defaults - // to "5m" i.e. 5 minutes. + Graphs []GraphConfig `yaml:"graphs"` MaxDuration time.Duration `yaml:"maxDuration,omitempty"` } -// CustomCommands contains the custom commands that you might want to use on any -// given service or container type CustomCommands struct { - // Containers contains the custom commands for containers Containers []CustomCommand `yaml:"containers,omitempty"` - - // Services contains the custom commands for services - Services []CustomCommand `yaml:"services,omitempty"` - - // Images contains the custom commands for images - Images []CustomCommand `yaml:"images,omitempty"` - - // Volumes contains the custom commands for volumes - Volumes []CustomCommand `yaml:"volumes,omitempty"` - - // Networks contains the custom commands for networks - Networks []CustomCommand `yaml:"networks,omitempty"` + Images []CustomCommand `yaml:"images,omitempty"` + Volumes []CustomCommand `yaml:"volumes,omitempty"` + Networks []CustomCommand `yaml:"networks,omitempty"` } -// Replacements contains the stuff relating to rendering a container's info type Replacements struct { - // ImageNamePrefixes tells us how to replace a prefix in the Docker image name ImageNamePrefixes map[string]string `yaml:"imageNamePrefixes,omitempty"` } -// CustomCommand is a template for a command we want to run against a service or -// container type CustomCommand struct { - // Name is the name of the command, purely for visual display - Name string `yaml:"name"` - - // Attach tells us whether to switch to a subprocess to interact with the - // called program, or just read its output. If Attach is set to false, the - // command will run in the background. I'm open to the idea of having a third - // option where the output plays in the main panel. - Attach bool `yaml:"attach"` - - // Shell indicates whether to invoke the Command on a shell or not. - // Example of a bash invoked command: `/bin/bash -c "{Command}". - Shell bool `yaml:"shell"` - - // Command is the command we want to run. We can use the go templates here as - // well. One example might be `{{ .DockerCompose }} exec {{ .Service.Name }} - // /bin/sh` - Command string `yaml:"command"` - - // ServiceNames is used to restrict this command to just one or more services. - // An example might be 'rails migrate' for your rails api service(s). This - // field has no effect on customcommands under the 'communications' part of - // the customCommand config. - ServiceNames []string `yaml:"serviceNames"` - - // InternalFunction is the name of a function inside lazydocker that we want to run, as opposed to a command-line command. This is only used internally and can't be configured by the user + Name string `yaml:"name"` + Attach bool `yaml:"attach"` + Shell bool `yaml:"shell"` + Command string `yaml:"command"` InternalFunction func() error `yaml:"-"` } @@ -346,10 +87,11 @@ type LogsConfig struct { Tail string `yaml:"tail,omitempty"` } -// GetDefaultConfig returns the application default configuration NOTE (to -// contributors, not users): do not default a boolean to true, because false is -// the boolean zero value and this will be ignored when parsing the user's -// config +type OSConfig struct { + OpenCommand string `yaml:"openCommand,omitempty"` + OpenLinkCommand string `yaml:"openLinkCommand,omitempty"` +} + func GetDefaultConfig() UserConfig { duration, err := time.ParseDuration("3m") if err != nil { @@ -368,11 +110,11 @@ func GetDefaultConfig() UserConfig { SelectedLineBgColor: []string{"blue"}, OptionsTextColor: []string{"blue"}, }, - ShowAllContainers: false, + ShowAllContainers: true, ReturnImmediately: false, WrapMainPanel: true, LegacySortContainers: false, - SidePanelWidth: 0.3333, + SidePanelWidth: 0.25, ShowBottomLine: true, ExpandFocusedSidePanel: false, ScreenMode: "normal", @@ -384,76 +126,41 @@ func GetDefaultConfig() UserConfig { Since: "60m", Tail: "", }, - CommandTemplates: CommandTemplatesConfig{ - DockerCompose: "docker compose", - RestartService: "{{ .DockerCompose }} restart {{ .Service.Name }}", - StartService: "{{ .DockerCompose }} start {{ .Service.Name }}", - Up: "{{ .DockerCompose }} up -d", - Down: "{{ .DockerCompose }} down", - DownWithVolumes: "{{ .DockerCompose }} down --volumes", - UpService: "{{ .DockerCompose }} up -d {{ .Service.Name }}", - RebuildService: "{{ .DockerCompose }} up -d --build {{ .Service.Name }}", - RecreateService: "{{ .DockerCompose }} up -d --force-recreate {{ .Service.Name }}", - StopService: "{{ .DockerCompose }} stop {{ .Service.Name }}", - ServiceLogs: "{{ .DockerCompose }} logs --since=60m --follow {{ .Service.Name }}", - ViewServiceLogs: "{{ .DockerCompose }} logs --follow {{ .Service.Name }}", - AllLogs: "{{ .DockerCompose }} logs --tail=300 --follow", - ViewAllLogs: "{{ .DockerCompose }} logs", - DockerComposeConfig: "{{ .DockerCompose }} config", - CheckDockerComposeConfig: "{{ .DockerCompose }} config --quiet", - ServiceTop: "{{ .DockerCompose }} top {{ .Service.Name }}", - }, CustomCommands: CustomCommands{ Containers: []CustomCommand{}, - Services: []CustomCommand{}, Images: []CustomCommand{}, Volumes: []CustomCommand{}, + Networks: []CustomCommand{}, }, BulkCommands: CustomCommands{ - Services: []CustomCommand{ + Containers: []CustomCommand{ { - Name: "up", - Command: "{{ .DockerCompose }} up -d", - }, - { - Name: "up (attached)", - Command: "{{ .DockerCompose }} up", - Attach: true, - }, - { - Name: "stop", - Command: "{{ .DockerCompose }} stop", - }, - { - Name: "pull", - Command: "{{ .DockerCompose }} pull", - Attach: true, - }, - { - Name: "build", - Command: "{{ .DockerCompose }} build --parallel --force-rm", - Attach: true, - }, - { - Name: "down", - Command: "{{ .DockerCompose }} down", - }, - { - Name: "down with volumes", - Command: "{{ .DockerCompose }} down --volumes", - }, - { - Name: "down with images", - Command: "{{ .DockerCompose }} down --rmi all", - }, - { - Name: "down with volumes and images", - Command: "{{ .DockerCompose }} down --volumes --rmi all", + Name: "prune stopped", + Command: "container prune", + }, + }, + Images: []CustomCommand{ + { + Name: "prune dangling", + Command: "container image prune", + }, + { + Name: "prune all", + Command: "container image prune -a", + }, + }, + Volumes: []CustomCommand{ + { + Name: "prune", + Command: "container volume prune", + }, + }, + Networks: []CustomCommand{ + { + Name: "prune", + Command: "container network prune", }, }, - Containers: []CustomCommand{}, - Images: []CustomCommand{}, - Volumes: []CustomCommand{}, }, OS: GetPlatformDefaultConfig(), Stats: StatsConfig{ @@ -477,13 +184,12 @@ func GetDefaultConfig() UserConfig { } } -// AppConfig contains the base configuration fields required for lazydocker. type AppConfig struct { Debug bool `long:"debug" env:"DEBUG" default:"false"` Version string `long:"version" env:"VERSION" default:"unversioned"` Commit string `long:"commit" env:"COMMIT"` BuildDate string `long:"build-date" env:"BUILD_DATE"` - Name string `long:"name" env:"NAME" default:"lazydocker"` + Name string `long:"name" env:"NAME" default:"lazyapple"` BuildSource string `long:"build-source" env:"BUILD_SOURCE" default:""` UserConfig *UserConfig ConfigDir string @@ -491,7 +197,6 @@ type AppConfig struct { ProjectName string } -// NewAppConfig makes a new app config func NewAppConfig(name, version, commit, date string, buildSource string, debuggingFlag bool, composeFiles []string, projectDir string, projectName string) (*AppConfig, error) { configDir, err := findOrCreateConfigDir(name) if err != nil { @@ -503,11 +208,6 @@ func NewAppConfig(name, version, commit, date string, buildSource string, debugg return nil, err } - // Pass compose files as individual -f flags to docker compose - if len(composeFiles) > 0 { - userConfig.CommandTemplates.DockerCompose += " -f " + strings.Join(composeFiles, " -f ") - } - appConfig := &AppConfig{ Name: name, Version: version, @@ -586,10 +286,6 @@ func loadUserConfig(configDir string, base *UserConfig) (*UserConfig, error) { return base, nil } -// WriteToUserConfig allows you to set a value on the user config to be saved -// note that if you set a zero-value, it may be ignored e.g. a false or 0 or -// empty string this is because we are using the omitempty yaml directive so -// that we don't write a heap of zero values to the user's config.yml func (c *AppConfig) WriteToUserConfig(updateConfig func(*UserConfig) error) error { userConfig, err := loadUserConfig(c.ConfigDir, &UserConfig{}) if err != nil { @@ -608,7 +304,6 @@ func (c *AppConfig) WriteToUserConfig(updateConfig func(*UserConfig) error) erro return yaml.NewEncoder(file).Encode(userConfig) } -// ConfigFilename returns the filename of the current config file func (c *AppConfig) ConfigFilename() string { return filepath.Join(c.ConfigDir, "config.yml") } diff --git a/pkg/config/app_config_test.go b/pkg/config/app_config_test.go index cd8167e4..fc63cc25 100644 --- a/pkg/config/app_config_test.go +++ b/pkg/config/app_config_test.go @@ -7,50 +7,7 @@ import ( "github.com/jesseduffield/yaml" ) -func TestDockerComposeCommandNoFiles(t *testing.T) { - composeFiles := []string{} - conf, err := NewAppConfig("name", "version", "commit", "date", "buildSource", false, composeFiles, "projectDir", "") - if err != nil { - t.Fatalf("Unexpected error: %s", err) - } - - actual := conf.UserConfig.CommandTemplates.DockerCompose - expected := "docker compose" - if actual != expected { - t.Fatalf("Expected %s but got %s", expected, actual) - } -} - -func TestDockerComposeCommandSingleFile(t *testing.T) { - composeFiles := []string{"one.yml"} - conf, err := NewAppConfig("name", "version", "commit", "date", "buildSource", false, composeFiles, "projectDir", "") - if err != nil { - t.Fatalf("Unexpected error: %s", err) - } - - actual := conf.UserConfig.CommandTemplates.DockerCompose - expected := "docker compose -f one.yml" - if actual != expected { - t.Fatalf("Expected %s but got %s", expected, actual) - } -} - -func TestDockerComposeCommandMultipleFiles(t *testing.T) { - composeFiles := []string{"one.yml", "two.yml", "three.yml"} - conf, err := NewAppConfig("name", "version", "commit", "date", "buildSource", false, composeFiles, "projectDir", "") - if err != nil { - t.Fatalf("Unexpected error: %s", err) - } - - actual := conf.UserConfig.CommandTemplates.DockerCompose - expected := "docker compose -f one.yml -f two.yml -f three.yml" - if actual != expected { - t.Fatalf("Expected %s but got %s", expected, actual) - } -} - func TestWritingToConfigFile(t *testing.T) { - // init the AppConfig emptyComposeFiles := []string{} conf, err := NewAppConfig("name", "version", "commit", "date", "buildSource", false, emptyComposeFiles, "projectDir", "") if err != nil { @@ -90,9 +47,6 @@ func TestWritingToConfigFile(t *testing.T) { } } - // insert value into an empty file testFn(t, conf, true) - - // modifying an existing file that already has 'ConfirmOnQuit' testFn(t, conf, false) } diff --git a/pkg/gui/app_status_manager.go b/pkg/gui/app_status_manager.go index f806f72c..08d4c194 100644 --- a/pkg/gui/app_status_manager.go +++ b/pkg/gui/app_status_manager.go @@ -4,7 +4,7 @@ import ( "time" "github.com/jesseduffield/gocui" - "github.com/jesseduffield/lazydocker/pkg/utils" + "github.com/jesseduffield/lazycontainer/pkg/utils" ) type appStatus struct { diff --git a/pkg/gui/arrangement.go b/pkg/gui/arrangement.go index 744f4467..12fc52fa 100644 --- a/pkg/gui/arrangement.go +++ b/pkg/gui/arrangement.go @@ -2,15 +2,12 @@ package gui import ( "github.com/jesseduffield/lazycore/pkg/boxlayout" - "github.com/jesseduffield/lazydocker/pkg/gui/panels" - "github.com/jesseduffield/lazydocker/pkg/utils" + "github.com/jesseduffield/lazycontainer/pkg/gui/panels" + "github.com/jesseduffield/lazycontainer/pkg/utils" "github.com/mattn/go-runewidth" "github.com/samber/lo" ) -// In this file we use the boxlayout package, along with knowledge about the app's state, -// to arrange the windows (i.e. panels) on the screen. - const INFO_SECTION_PADDING = " " func (gui *Gui) getWindowDimensions(informationStr string, appStatus string) map[string]boxlayout.Dimensions { @@ -67,9 +64,7 @@ func (gui *Gui) getWindowDimensions(informationStr string, appStatus string) map func (gui *Gui) getMidSectionWeights() (int, int) { currentWindow := gui.currentStaticWindowName() - // we originally specified this as a ratio i.e. .20 would correspond to a weight of 1 against 4 sidePanelWidthRatio := gui.Config.UserConfig.Gui.SidePanelWidth - // we could make this better by creating ratios like 2:3 rather than always 1:something mainSectionWeight := int(1/sidePanelWidthRatio) - 1 sideSectionWeight := 1 @@ -120,7 +115,6 @@ func (gui *Gui) infoSectionChildren(informationStr string, appStatus string) []* }, { Window: "information", - // unlike appStatus, informationStr has various colors so we need to decolorise before taking the length Size: runewidth.StringWidth(INFO_SECTION_PADDING) + runewidth.StringWidth(utils.Decolorise(informationStr)), }, }..., @@ -143,6 +137,10 @@ func (gui *Gui) sidePanelChildren(width int, height int) []*boxlayout.Box { currentWindow := gui.currentSideWindowName() sideWindowNames := gui.sideViewNames() + if len(sideWindowNames) == 0 { + return []*boxlayout.Box{} + } + if gui.State.ScreenMode == SCREEN_FULL || gui.State.ScreenMode == SCREEN_HALF { fullHeightBox := func(window string) *boxlayout.Box { if window == currentWindow { @@ -162,7 +160,7 @@ func (gui *Gui) sidePanelChildren(width int, height int) []*boxlayout.Box { return fullHeightBox(window) }) - } else if height >= 28 { + } else if height >= 20 { accordionMode := gui.Config.UserConfig.Gui.ExpandFocusedSidePanel accordionBox := func(defaultBox *boxlayout.Box) *boxlayout.Box { if accordionMode && defaultBox.Window == currentWindow { @@ -175,27 +173,12 @@ func (gui *Gui) sidePanelChildren(width int, height int) []*boxlayout.Box { return defaultBox } - // The project panel is compact (Size: 3) when not focused, but expands - // when focused to show the list of projects. - projectBox := &boxlayout.Box{ - Window: sideWindowNames[0], - Size: 3, - } - if currentWindow == sideWindowNames[0] { - projectBox = &boxlayout.Box{ - Window: sideWindowNames[0], - Weight: 2, - } - } - - return append([]*boxlayout.Box{ - projectBox, - }, lo.Map(sideWindowNames[1:], func(window string, _ int) *boxlayout.Box { + return lo.Map(sideWindowNames, func(window string, _ int) *boxlayout.Box { return accordionBox(&boxlayout.Box{Window: window, Weight: 1}) - })...) + }) } else { squashedHeight := 1 - if height >= 21 { + if height >= 12 { squashedHeight = 3 } diff --git a/pkg/gui/container_logs.go b/pkg/gui/container_logs.go index bdb81608..bc720cb1 100644 --- a/pkg/gui/container_logs.go +++ b/pkg/gui/container_logs.go @@ -1,19 +1,19 @@ package gui import ( + "bufio" "context" "fmt" "io" "os" + "os/exec" "os/signal" "time" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/pkg/stdcopy" "github.com/fatih/color" - "github.com/jesseduffield/lazydocker/pkg/commands" - "github.com/jesseduffield/lazydocker/pkg/tasks" - "github.com/jesseduffield/lazydocker/pkg/utils" + "github.com/jesseduffield/lazycontainer/pkg/commands" + "github.com/jesseduffield/lazycontainer/pkg/tasks" + "github.com/jesseduffield/lazycontainer/pkg/utils" ) func (gui *Gui) renderContainerLogsToMain(container *commands.Container) tasks.TaskFunc { @@ -22,7 +22,6 @@ func (gui *Gui) renderContainerLogsToMain(container *commands.Container) tasks.T gui.renderContainerLogsToMainAux(container, ctx, notifyStopped) }, Duration: time.Millisecond * 200, - // TODO: see why this isn't working (when switching from Top tab to Logs tab in the services panel, the tops tab's content isn't removed) Before: func(ctx context.Context) { gui.clearMainView() }, Wrap: gui.Config.UserConfig.Gui.WrapMainPanel, Autoscroll: true, @@ -41,8 +40,6 @@ func (gui *Gui) renderContainerLogsToMainAux(container *commands.Container, ctx gui.Log.Error(err) } - // if we are here because the task has been stopped, we should return - // if we are here then the container must have exited, meaning we should wait until it's back again before ticker := time.NewTicker(time.Millisecond * 100) defer ticker.Stop() for { @@ -52,11 +49,10 @@ func (gui *Gui) renderContainerLogsToMainAux(container *commands.Container, ctx case <-ticker.C: result, err := container.Inspect() if err != nil { - // if we get an error, then the container has probably been removed so we'll get out of here gui.Log.Error(err) return } - if result.State.Running { + if result.Status == "running" { return } } @@ -97,7 +93,6 @@ func (gui *Gui) promptToReturn() { if !gui.Config.UserConfig.Gui.ReturnImmediately { fmt.Fprintf(os.Stdout, "\n\n%s", utils.ColoredString(gui.Tr.PressEnterToReturn, color.FgGreen)) - // wait for enter press if _, err := fmt.Scanln(); err != nil { gui.Log.Error(err) } @@ -105,48 +100,71 @@ func (gui *Gui) promptToReturn() { } func (gui *Gui) writeContainerLogs(ctr *commands.Container, ctx context.Context, writer io.Writer) error { - readCloser, err := gui.DockerCommand.Client.ContainerLogs(ctx, ctr.ID, container.LogsOptions{ - ShowStdout: true, - ShowStderr: true, - Timestamps: gui.Config.UserConfig.Logs.Timestamps, - Since: gui.Config.UserConfig.Logs.Since, - Tail: gui.Config.UserConfig.Logs.Tail, - Follow: true, - }) + tail := 100 + if gui.Config.UserConfig.Logs.Tail != "" { + fmt.Sscanf(gui.Config.UserConfig.Logs.Tail, "%d", &tail) + } + + cmd := gui.ContainerCmd.Client.LogsContainer(ctr.ID, true, tail) + + stdoutPipe, err := cmd.StdoutPipe() + if err != nil { + gui.Log.Error(err) + return err + } + stderrPipe, err := cmd.StderrPipe() if err != nil { gui.Log.Error(err) return err } - defer readCloser.Close() - if !ctr.DetailsLoaded() { - // loop until the details load or context is cancelled, using timer - ticker := time.NewTicker(time.Millisecond * 100) - defer ticker.Stop() - outer: - for { + if err := cmd.Start(); err != nil { + gui.Log.Error(err) + return err + } + + done := make(chan struct{}) + + go func() { + scanner := bufio.NewScanner(stdoutPipe) + for scanner.Scan() { select { case <-ctx.Done(): - return nil - case <-ticker.C: - if ctr.DetailsLoaded() { - break outer - } + return + default: + fmt.Fprintln(writer, scanner.Text()) } } - } + }() - if ctr.Details.Config.Tty { - _, err = io.Copy(writer, readCloser) - if err != nil { - return err + go func() { + scanner := bufio.NewScanner(stderrPipe) + for scanner.Scan() { + select { + case <-ctx.Done(): + return + default: + fmt.Fprintln(writer, scanner.Text()) + } } - } else { - _, err = stdcopy.StdCopy(writer, writer, readCloser) - if err != nil { - return err - } - } + }() - return nil + go func() { + cmd.Wait() + close(done) + }() + + select { + case <-ctx.Done(): + killCmd(cmd) + return nil + case <-done: + return nil + } +} + +func killCmd(cmd *exec.Cmd) { + if cmd.Process != nil { + cmd.Process.Kill() + } } diff --git a/pkg/gui/containers_panel.go b/pkg/gui/containers_panel.go index 4bde93ec..cc41b45e 100644 --- a/pkg/gui/containers_panel.go +++ b/pkg/gui/containers_panel.go @@ -6,31 +6,16 @@ import ( "strings" "time" - "github.com/docker/docker/api/types/container" "github.com/fatih/color" "github.com/jesseduffield/gocui" - "github.com/jesseduffield/lazydocker/pkg/commands" - "github.com/jesseduffield/lazydocker/pkg/config" - "github.com/jesseduffield/lazydocker/pkg/gui/panels" - "github.com/jesseduffield/lazydocker/pkg/gui/presentation" - "github.com/jesseduffield/lazydocker/pkg/gui/types" - "github.com/jesseduffield/lazydocker/pkg/tasks" - "github.com/jesseduffield/lazydocker/pkg/utils" - "github.com/samber/lo" + "github.com/jesseduffield/lazycontainer/pkg/commands" + "github.com/jesseduffield/lazycontainer/pkg/gui/panels" + "github.com/jesseduffield/lazycontainer/pkg/gui/presentation" + "github.com/jesseduffield/lazycontainer/pkg/tasks" + "github.com/jesseduffield/lazycontainer/pkg/utils" ) func (gui *Gui) getContainersPanel() *panels.SideListPanel[*commands.Container] { - // Standalone containers are containers which are either one-off containers, or whose service is not part of this docker-compose context. - isStandaloneContainer := func(container *commands.Container) bool { - if container.OneOff || container.ServiceName == "" { - return true - } - - return !lo.SomeBy(gui.Panels.Services.List.GetAllItems(), func(service *commands.Service) bool { - return service.Name == container.ServiceName && service.ProjectName == container.ProjectName - }) - } - return &panels.SideListPanel[*commands.Container]{ ContextState: &panels.ContextState[*commands.Container]{ GetMainTabs: func() []panels.MainTab[*commands.Container] { @@ -63,12 +48,7 @@ func (gui *Gui) getContainersPanel() *panels.SideListPanel[*commands.Container] } }, GetItemContextCacheKey: func(container *commands.Container) string { - // Including the container state in the cache key so that if the container - // restarts we re-read the logs. In the past we've had some glitchiness - // where a container restarts but the new logs don't get read. - // Note that this might be jarring if we have a lot of logs and the container - // restarts a lot, so let's keep an eye on it. - return "containers-" + container.ID + "-" + container.Container.State + return "containers-" + container.ID + "-" + container.GetStatus() }, }, ListPanel: panels.ListPanel[*commands.Container]{ @@ -77,33 +57,13 @@ func (gui *Gui) getContainersPanel() *panels.SideListPanel[*commands.Container] }, NoItemsMessage: gui.Tr.NoContainers, Gui: gui.intoInterface(), - // sortedContainers returns containers sorted by state if c.SortContainersByState is true (follows 1- running, 2- exited, 3- created) - // and sorted by name if c.SortContainersByState is false Sort: func(a *commands.Container, b *commands.Container) bool { return sortContainers(a, b, gui.Config.UserConfig.Gui.LegacySortContainers) }, Filter: func(container *commands.Container) bool { - // Note that this is O(N*M) time complexity where N is the number of services - // and M is the number of containers. We expect N to be small but M may be large, - // so we will need to keep an eye on this. - if !gui.Config.UserConfig.Gui.ShowAllContainers && !isStandaloneContainer(container) { + if !gui.State.ShowExitedContainers && container.GetStatus() != "running" { return false } - - if !gui.State.ShowExitedContainers && container.Container.State == "exited" { - return false - } - - // Filter by selected project. Containers with no project (truly - // standalone, not from any compose project) are always shown. - selectedProject := gui.getSelectedProjectName() - if selectedProject == "" { - selectedProject = gui.DockerCommand.LocalProjectName - } - if selectedProject != "" && container.ProjectName != "" && container.ProjectName != selectedProject { - return false - } - return true }, GetTableCells: func(container *commands.Container) []string { @@ -114,6 +74,7 @@ func (gui *Gui) getContainersPanel() *panels.SideListPanel[*commands.Container] var containerStates = map[string]int{ "running": 1, + "stopped": 2, "exited": 2, "created": 3, } @@ -123,13 +84,13 @@ func sortContainers(a *commands.Container, b *commands.Container, legacySort boo return a.Name < b.Name } - stateLeft := containerStates[a.Container.State] - stateRight := containerStates[b.Container.State] + stateLeft := containerStates[a.GetStatus()] + stateRight := containerStates[b.GetStatus()] if stateLeft == stateRight { return a.Name < b.Name } - return containerStates[a.Container.State] < containerStates[b.Container.State] + return stateLeft < stateRight } func (gui *Gui) renderContainerEnv(container *commands.Container) tasks.TaskFunc { @@ -137,105 +98,113 @@ func (gui *Gui) renderContainerEnv(container *commands.Container) tasks.TaskFunc } func (gui *Gui) containerEnv(container *commands.Container) string { - if !container.DetailsLoaded() { - return gui.Tr.WaitingForContainerInfo - } - - if len(container.Details.Config.Env) == 0 { + env := container.GetEnv() + if len(env) == 0 { return gui.Tr.NothingToDisplay } - envVarsList := lo.Map(container.Details.Config.Env, func(envVar string, _ int) []string { + var lines []string + for _, envVar := range env { splitEnv := strings.SplitN(envVar, "=", 2) key := splitEnv[0] value := "" if len(splitEnv) > 1 { value = splitEnv[1] } - return []string{ - utils.ColoredString(key+":", color.FgGreen), + lines = append(lines, fmt.Sprintf("%s=%s", + utils.ColoredString(key, color.FgGreen), utils.ColoredString(value, color.FgYellow), - } - }) - - output, err := utils.RenderTable(envVarsList) - if err != nil { - gui.Log.Error(err) - return gui.Tr.CannotDisplayEnvVariables + )) } - return output + return strings.Join(lines, "\n") } func (gui *Gui) renderContainerConfig(container *commands.Container) tasks.TaskFunc { - return gui.NewSimpleRenderStringTask(func() string { return gui.containerConfigStr(container) }) + return gui.NewSimpleRenderStringTask(func() string { return gui.containerConfig(container) }) } -func (gui *Gui) containerConfigStr(container *commands.Container) string { - if !container.DetailsLoaded() { - return gui.Tr.WaitingForContainerInfo +func (gui *Gui) containerConfig(container *commands.Container) string { + var lines []string + + lines = append(lines, fmt.Sprintf("%s: %s", + utils.ColoredString("ID", color.FgCyan), + container.ID, + )) + lines = append(lines, fmt.Sprintf("%s: %s", + utils.ColoredString("Name", color.FgCyan), + container.Name, + )) + lines = append(lines, fmt.Sprintf("%s: %s", + utils.ColoredString("Image", color.FgCyan), + container.GetImage(), + )) + lines = append(lines, fmt.Sprintf("%s: %s", + utils.ColoredString("Status", color.FgCyan), + container.GetStatus(), + )) + lines = append(lines, fmt.Sprintf("%s: %s", + utils.ColoredString("IP", color.FgCyan), + container.GetIP(), + )) + lines = append(lines, fmt.Sprintf("%s: %d", + utils.ColoredString("CPUs", color.FgCyan), + container.GetCPUs(), + )) + lines = append(lines, fmt.Sprintf("%s: %s", + utils.ColoredString("Memory", color.FgCyan), + utils.FormatBinaryBytes(int(container.GetMemory())), + )) + + ports := container.GetPorts() + if len(ports) > 0 { + lines = append(lines, fmt.Sprintf("%s: %s", + utils.ColoredString("Ports", color.FgCyan), + strings.Join(ports, ", "), + )) } - padding := 10 - output := "" - output += utils.WithPadding("ID: ", padding) + container.ID + "\n" - output += utils.WithPadding("Name: ", padding) + container.Name + "\n" - output += utils.WithPadding("Image: ", padding) + container.Details.Config.Image + "\n" - output += utils.WithPadding("Command: ", padding) + strings.Join(append([]string{container.Details.Path}, container.Details.Args...), " ") + "\n" - output += utils.WithPadding("Labels: ", padding) + utils.FormatMap(padding, container.Details.Config.Labels) - output += "\n" - - output += utils.WithPadding("Mounts: ", padding) - if len(container.Details.Mounts) > 0 { - output += "\n" - for _, mount := range container.Details.Mounts { - if mount.Type == "volume" { - output += fmt.Sprintf("%s%s %s\n", strings.Repeat(" ", padding), utils.ColoredString(string(mount.Type)+":", color.FgYellow), mount.Name) - } else { - output += fmt.Sprintf("%s%s %s:%s\n", strings.Repeat(" ", padding), utils.ColoredString(string(mount.Type)+":", color.FgYellow), mount.Source, mount.Destination) - } - } - } else { - output += "none\n" - } - - output += utils.WithPadding("Ports: ", padding) - if len(container.Details.NetworkSettings.Ports) > 0 { - output += "\n" - for k, v := range container.Details.NetworkSettings.Ports { - for _, host := range v { - output += fmt.Sprintf("%s%s %s\n", strings.Repeat(" ", padding), utils.ColoredString(host.HostPort+":", color.FgYellow), k) - } - } - } else { - output += "none\n" - } - - data, err := utils.MarshalIntoYaml(&container.Details) - if err != nil { - return fmt.Sprintf("Error marshalling container details: %v", err) - } - - output += fmt.Sprintf("\nFull details:\n\n%s", utils.ColoredYamlString(string(data))) - - return output + return strings.Join(lines, "\n") } func (gui *Gui) renderContainerStats(container *commands.Container) tasks.TaskFunc { - return gui.NewTickerTask(TickerTaskOpts{ - Func: func(ctx context.Context, notifyStopped chan struct{}) { - contents, err := presentation.RenderStats(gui.Config.UserConfig, container, gui.Views.Main.Width()) - if err != nil { - _ = gui.createErrorPanel(err.Error()) - } + return gui.NewSimpleRenderStringTask(func() string { return gui.containerStats(container) }) +} - gui.reRenderStringMain(contents) - }, - Duration: time.Second, - Before: func(ctx context.Context) { gui.clearMainView() }, - Wrap: false, // wrapping looks bad here so we're overriding the config value - Autoscroll: false, - }) +func (gui *Gui) containerStats(container *commands.Container) string { + stats, ok := container.GetLastStats() + if !ok { + return gui.Tr.NoStats + } + + var lines []string + lines = append(lines, fmt.Sprintf("%s: %.1f%%", + utils.ColoredString("CPU", color.FgCyan), + stats.DerivedStats.CPUPercentage, + )) + lines = append(lines, fmt.Sprintf("%s: %.1f%% (%s / %s)", + utils.ColoredString("Memory", + color.FgCyan), + stats.DerivedStats.MemoryPercentage, + utils.FormatBinaryBytes(int(stats.ClientStats.MemoryUsageBytes)), + utils.FormatBinaryBytes(int(stats.ClientStats.MemoryLimitBytes)), + )) + lines = append(lines, fmt.Sprintf("%s: %s / %s", + utils.ColoredString("Network I/O", color.FgCyan), + utils.FormatBinaryBytes(int(stats.ClientStats.NetworkRxBytes)), + utils.FormatBinaryBytes(int(stats.ClientStats.NetworkTxBytes)), + )) + lines = append(lines, fmt.Sprintf("%s: %s / %s", + utils.ColoredString("Block I/O", color.FgCyan), + utils.FormatBinaryBytes(int(stats.ClientStats.BlockReadBytes)), + utils.FormatBinaryBytes(int(stats.ClientStats.BlockWriteBytes)), + )) + lines = append(lines, fmt.Sprintf("%s: %d", + utils.ColoredString("Processes", color.FgCyan), + stats.ClientStats.NumProcesses, + )) + + return strings.Join(lines, "\n") } func (gui *Gui) renderContainerTop(container *commands.Container) tasks.TaskFunc { @@ -255,176 +224,94 @@ func (gui *Gui) renderContainerTop(container *commands.Container) tasks.TaskFunc }) } -func (gui *Gui) refreshContainersAndServices() error { - if gui.Views.Containers == nil { - // if the containersView hasn't been instantiated yet we just return - return nil - } - - // keep track of current service selected so that we can reposition our cursor if it moves position in the list - originalSelectedLineIdx := gui.Panels.Services.SelectedIdx - selectedService, isServiceSelected := gui.Panels.Services.List.TryGet(originalSelectedLineIdx) - - containers, services, err := gui.DockerCommand.RefreshContainersAndServices( - gui.Panels.Containers.List.GetAllItems(), - ) - if err != nil { - return err - } - - gui.Panels.Services.SetItems(services) +func (gui *Gui) refreshContainers() error { + containers := gui.ContainerCmd.RefreshContainers(gui.Panels.Containers.List.GetAllItems()) gui.Panels.Containers.SetItems(containers) - - // see if our selected service has moved - if isServiceSelected { - for i, service := range gui.Panels.Services.List.GetItems() { - if service.ID == selectedService.ID { - if i == originalSelectedLineIdx { - break - } - gui.Panels.Services.SetSelectedLineIdx(i) - gui.Panels.Services.Refocus() - } - } - } - - return gui.renderContainersAndServices() -} - -func (gui *Gui) renderContainersAndServices() error { - if err := gui.Panels.Services.RerenderList(); err != nil { - return err - } - - if err := gui.Panels.Containers.RerenderList(); err != nil { - return err - } - - return nil + return gui.Panels.Containers.RerenderList() } func (gui *Gui) handleHideStoppedContainers(g *gocui.Gui, v *gocui.View) error { gui.State.ShowExitedContainers = !gui.State.ShowExitedContainers - - return gui.Panels.Containers.RerenderList() -} - -func (gui *Gui) handleContainersRemoveMenu(g *gocui.Gui, v *gocui.View) error { - ctr, err := gui.Panels.Containers.GetSelectedItem() - if err != nil { - return nil - } - - handleMenuPress := func(configOptions container.RemoveOptions) error { - return gui.WithWaitingStatus(gui.Tr.RemovingStatus, func() error { - if err := ctr.Remove(configOptions); err != nil { - if commands.HasErrorCode(err, commands.MustStopContainer) { - return gui.createConfirmationPanel(gui.Tr.Confirm, gui.Tr.MustForceToRemoveContainer, func(g *gocui.Gui, v *gocui.View) error { - return gui.WithWaitingStatus(gui.Tr.RemovingStatus, func() error { - configOptions.Force = true - return ctr.Remove(configOptions) - }) - }, nil) - } - return gui.createErrorPanel(err.Error()) - } - return nil - }) - } - - menuItems := []*types.MenuItem{ - { - LabelColumns: []string{gui.Tr.Remove, "docker rm " + ctr.ID[1:10]}, - OnPress: func() error { return handleMenuPress(container.RemoveOptions{}) }, - }, - { - LabelColumns: []string{gui.Tr.RemoveWithVolumes, "docker rm --volumes " + ctr.ID[1:10]}, - OnPress: func() error { return handleMenuPress(container.RemoveOptions{RemoveVolumes: true}) }, - }, - } - - return gui.Menu(CreateMenuOptions{ - Title: "", - Items: menuItems, - }) -} - -func (gui *Gui) PauseContainer(container *commands.Container) error { - return gui.WithWaitingStatus(gui.Tr.PausingStatus, func() (err error) { - if container.Details.State.Paused { - err = container.Unpause() - } else { - err = container.Pause() - } - - if err != nil { - return gui.createErrorPanel(err.Error()) - } - - return gui.refreshContainersAndServices() - }) -} - -func (gui *Gui) handleContainerPause(g *gocui.Gui, v *gocui.View) error { - ctr, err := gui.Panels.Containers.GetSelectedItem() - if err != nil { - return nil - } - - return gui.PauseContainer(ctr) + return gui.refreshContainers() } func (gui *Gui) handleContainerStop(g *gocui.Gui, v *gocui.View) error { - ctr, err := gui.Panels.Containers.GetSelectedItem() + container, err := gui.Panels.Containers.GetSelectedItem() if err != nil { return nil } return gui.createConfirmationPanel(gui.Tr.Confirm, gui.Tr.StopContainer, func(g *gocui.Gui, v *gocui.View) error { return gui.WithWaitingStatus(gui.Tr.StoppingStatus, func() error { - if err := ctr.Stop(); err != nil { + if err := container.Stop(); err != nil { return gui.createErrorPanel(err.Error()) } - return nil }) }, nil) } func (gui *Gui) handleContainerRestart(g *gocui.Gui, v *gocui.View) error { - ctr, err := gui.Panels.Containers.GetSelectedItem() + container, err := gui.Panels.Containers.GetSelectedItem() if err != nil { return nil } return gui.WithWaitingStatus(gui.Tr.RestartingStatus, func() error { - if err := ctr.Restart(); err != nil { + if err := container.Restart(); err != nil { return gui.createErrorPanel(err.Error()) } - return nil }) } func (gui *Gui) handleContainerAttach(g *gocui.Gui, v *gocui.View) error { - ctr, err := gui.Panels.Containers.GetSelectedItem() + container, err := gui.Panels.Containers.GetSelectedItem() if err != nil { return nil } - c, err := ctr.Attach() + c, err := container.Attach() if err != nil { return gui.createErrorPanel(err.Error()) } - return gui.runSubprocessWithMessage(c, gui.Tr.DetachFromContainerShortCut) + return gui.runSubprocess(c) } -func (gui *Gui) handlePruneContainers() error { - return gui.createConfirmationPanel(gui.Tr.Confirm, gui.Tr.ConfirmPruneContainers, func(g *gocui.Gui, v *gocui.View) error { - return gui.WithWaitingStatus(gui.Tr.PruningStatus, func() error { - err := gui.DockerCommand.PruneContainers() - if err != nil { +func (gui *Gui) handleContainerViewLogs(g *gocui.Gui, v *gocui.View) error { + container, err := gui.Panels.Containers.GetSelectedItem() + if err != nil { + return nil + } + + cmd := gui.ContainerCmd.Client.LogsContainer(container.ID, true, 0) + return gui.runSubprocess(cmd) +} + +func (gui *Gui) handleContainerKill(g *gocui.Gui, v *gocui.View) error { + container, err := gui.Panels.Containers.GetSelectedItem() + if err != nil { + return nil + } + + return gui.WithWaitingStatus(gui.Tr.KillingStatus, func() error { + if err := container.Kill(""); err != nil { + return gui.createErrorPanel(err.Error()) + } + return nil + }) +} + +func (gui *Gui) handleContainersRemoveMenu(g *gocui.Gui, v *gocui.View) error { + container, err := gui.Panels.Containers.GetSelectedItem() + if err != nil { + return nil + } + + return gui.createConfirmationPanel(gui.Tr.Confirm, gui.Tr.RemoveContainer, func(g *gocui.Gui, v *gocui.View) error { + return gui.WithWaitingStatus(gui.Tr.RemovingStatus, func() error { + if err := container.Remove(true); err != nil { return gui.createErrorPanel(err.Error()) } return nil @@ -432,46 +319,33 @@ func (gui *Gui) handlePruneContainers() error { }, nil) } -func (gui *Gui) handleContainerViewLogs(g *gocui.Gui, v *gocui.View) error { - ctr, err := gui.Panels.Containers.GetSelectedItem() - if err != nil { - return nil - } - - gui.renderLogsToStdout(ctr) - - return nil -} - func (gui *Gui) handleContainersExecShell(g *gocui.Gui, v *gocui.View) error { - ctr, err := gui.Panels.Containers.GetSelectedItem() + container, err := gui.Panels.Containers.GetSelectedItem() if err != nil { return nil } - return gui.containerExecShell(ctr) -} + if container.GetStatus() != "running" { + return gui.createErrorPanel(gui.Tr.ContainerNotRunning) + } -func (gui *Gui) containerExecShell(container *commands.Container) error { - commandObject := gui.DockerCommand.NewCommandObject(commands.CommandObject{ - Container: container, + cmd := gui.ContainerCmd.Client.ExecContainer(container.ID, commands.ExecOptions{ + Command: []string{"/bin/sh"}, + Interactive: true, + TTY: true, }) - // TODO: use SDK - resolvedCommand := utils.ApplyTemplate("docker exec -it {{ .Container.ID }} /bin/sh -c 'eval $(grep ^$(id -un): /etc/passwd | cut -d : -f 7-)'", commandObject) - // attach and return the subprocess error - cmd := gui.OSCommand.ExecutableFromString(resolvedCommand) return gui.runSubprocess(cmd) } func (gui *Gui) handleContainersCustomCommand(g *gocui.Gui, v *gocui.View) error { - ctr, err := gui.Panels.Containers.GetSelectedItem() + container, err := gui.Panels.Containers.GetSelectedItem() if err != nil { return nil } - commandObject := gui.DockerCommand.NewCommandObject(commands.CommandObject{ - Container: ctr, + commandObject := gui.ContainerCmd.NewCommandObject(commands.CommandObject{ + Container: container, }) customCommands := gui.Config.UserConfig.CustomCommands.Containers @@ -479,80 +353,41 @@ func (gui *Gui) handleContainersCustomCommand(g *gocui.Gui, v *gocui.View) error return gui.createCustomCommandMenu(customCommands, commandObject) } -func (gui *Gui) handleStopContainers() error { - return gui.createConfirmationPanel(gui.Tr.Confirm, gui.Tr.ConfirmStopContainers, func(g *gocui.Gui, v *gocui.View) error { - return gui.WithWaitingStatus(gui.Tr.StoppingStatus, func() error { - for _, ctr := range gui.Panels.Containers.List.GetAllItems() { - if err := ctr.Stop(); err != nil { - gui.Log.Error(err) - } - } - - return nil - }) - }, nil) -} - -func (gui *Gui) handleRemoveContainers() error { - return gui.createConfirmationPanel(gui.Tr.Confirm, gui.Tr.ConfirmRemoveContainers, func(g *gocui.Gui, v *gocui.View) error { - return gui.WithWaitingStatus(gui.Tr.RemovingStatus, func() error { - for _, ctr := range gui.Panels.Containers.List.GetAllItems() { - if err := ctr.Remove(container.RemoveOptions{Force: true}); err != nil { - gui.Log.Error(err) - } - } - - return nil - }) - }, nil) -} - func (gui *Gui) handleContainersBulkCommand(g *gocui.Gui, v *gocui.View) error { - baseBulkCommands := []config.CustomCommand{ - { - Name: gui.Tr.StopAllContainers, - InternalFunction: gui.handleStopContainers, - }, - { - Name: gui.Tr.RemoveAllContainers, - InternalFunction: gui.handleRemoveContainers, - }, - { - Name: gui.Tr.PruneContainers, - InternalFunction: gui.handlePruneContainers, - }, - } - - bulkCommands := append(baseBulkCommands, gui.Config.UserConfig.BulkCommands.Containers...) - commandObject := gui.DockerCommand.NewCommandObject(commands.CommandObject{}) + bulkCommands := gui.Config.UserConfig.BulkCommands.Containers + commandObject := gui.ContainerCmd.NewCommandObject(commands.CommandObject{}) return gui.createBulkCommandMenu(bulkCommands, commandObject) } -// Open first port in browser func (gui *Gui) handleContainersOpenInBrowserCommand(g *gocui.Gui, v *gocui.View) error { - ctr, err := gui.Panels.Containers.GetSelectedItem() + container, err := gui.Panels.Containers.GetSelectedItem() if err != nil { return nil } - return gui.openContainerInBrowser(ctr) + ip := container.GetIP() + if ip == "" { + return gui.createErrorPanel(gui.Tr.NoIp) + } + + ports := container.GetPorts() + if len(ports) == 0 { + return gui.createErrorPanel(gui.Tr.NoPorts) + } + + for _, port := range ports { + parts := strings.Split(port, ":") + if len(parts) >= 2 { + hostPort := strings.Split(parts[0], "->")[0] + url := fmt.Sprintf("http://%s:%s", ip, hostPort) + return gui.OSCommand.OpenLink(url) + } + } + + return nil } -func (gui *Gui) openContainerInBrowser(ctr *commands.Container) error { - // skip if no any ports - if len(ctr.Container.Ports) == 0 { - return nil - } - // skip if the first port is not published - port := ctr.Container.Ports[0] - if port.IP == "" { - return nil - } - ip := port.IP - if ip == "0.0.0.0" { - ip = "localhost" - } - link := fmt.Sprintf("http://%s:%d/", ip, port.PublicPort) - return gui.OSCommand.OpenLink(link) +func (gui *Gui) PauseContainer(container *commands.Container) error { + return gui.createErrorPanel("Pause is not supported by Apple Container") } diff --git a/pkg/gui/custom_commands.go b/pkg/gui/custom_commands.go index f9981607..82de9185 100644 --- a/pkg/gui/custom_commands.go +++ b/pkg/gui/custom_commands.go @@ -2,10 +2,10 @@ package gui import ( "github.com/fatih/color" - "github.com/jesseduffield/lazydocker/pkg/commands" - "github.com/jesseduffield/lazydocker/pkg/config" - "github.com/jesseduffield/lazydocker/pkg/gui/types" - "github.com/jesseduffield/lazydocker/pkg/utils" + "github.com/jesseduffield/lazycontainer/pkg/commands" + "github.com/jesseduffield/lazycontainer/pkg/config" + "github.com/jesseduffield/lazycontainer/pkg/gui/types" + "github.com/jesseduffield/lazycontainer/pkg/utils" "github.com/samber/lo" ) diff --git a/pkg/gui/gocui.go b/pkg/gui/gocui.go index e4c0b155..a58e865f 100644 --- a/pkg/gui/gocui.go +++ b/pkg/gui/gocui.go @@ -3,7 +3,7 @@ package gui import ( "github.com/gookit/color" "github.com/jesseduffield/gocui" - "github.com/jesseduffield/lazydocker/pkg/utils" + "github.com/jesseduffield/lazycontainer/pkg/utils" ) var gocuiColorMap = map[string]gocui.Attribute{ diff --git a/pkg/gui/gui.go b/pkg/gui/gui.go index e7b55463..55340d9e 100644 --- a/pkg/gui/gui.go +++ b/pkg/gui/gui.go @@ -6,40 +6,32 @@ import ( "strings" "time" - "github.com/docker/docker/api/types/events" - - "github.com/go-errors/errors" - throttle "github.com/boz/go-throttle" "github.com/jesseduffield/gocui" lcUtils "github.com/jesseduffield/lazycore/pkg/utils" - "github.com/jesseduffield/lazydocker/pkg/commands" - "github.com/jesseduffield/lazydocker/pkg/config" - "github.com/jesseduffield/lazydocker/pkg/gui/panels" - "github.com/jesseduffield/lazydocker/pkg/gui/types" - "github.com/jesseduffield/lazydocker/pkg/i18n" - "github.com/jesseduffield/lazydocker/pkg/tasks" + "github.com/jesseduffield/lazycontainer/pkg/commands" + "github.com/jesseduffield/lazycontainer/pkg/config" + "github.com/jesseduffield/lazycontainer/pkg/gui/panels" + "github.com/jesseduffield/lazycontainer/pkg/gui/types" + "github.com/jesseduffield/lazycontainer/pkg/i18n" + "github.com/jesseduffield/lazycontainer/pkg/tasks" "github.com/sasha-s/go-deadlock" "github.com/sirupsen/logrus" ) -// Gui wraps the gocui Gui object which handles rendering and events type Gui struct { - g *gocui.Gui - Log *logrus.Entry - DockerCommand *commands.DockerCommand - OSCommand *commands.OSCommand - State guiState - Config *config.AppConfig - Tr *i18n.TranslationSet - statusManager *statusManager - taskManager *tasks.TaskManager - ErrorChan chan error - Views Views + g *gocui.Gui + Log *logrus.Entry + ContainerCmd *commands.ContainerCommand + OSCommand *commands.OSCommand + State guiState + Config *config.AppConfig + Tr *i18n.TranslationSet + statusManager *statusManager + taskManager *tasks.TaskManager + ErrorChan chan error + Views Views - // if we've suspended the gui (e.g. because we've switched to a subprocess) - // we typically want to pause some things that are running like background - // file refreshes PauseBackgroundThreads bool Mutexes @@ -48,8 +40,6 @@ type Gui struct { } type Panels struct { - Projects *panels.SideListPanel[*commands.Project] - Services *panels.SideListPanel[*commands.Service] Containers *panels.SideListPanel[*commands.Container] Images *panels.SideListPanel[*commands.Image] Volumes *panels.SideListPanel[*commands.Volume] @@ -63,7 +53,6 @@ type Mutexes struct { } type mainPanelState struct { - // ObjectKey tells us what context we are in. For example, if we are looking at the logs of a particular service in the services panel this key might be 'services--logs'. The key is made so that if something changes which might require us to re-run the logs command or run a different command, the key will be different, and we'll then know to do whatever is required. Object key probably isn't the best name for this but Context is already used to refer to tabs. Maybe I should just call them tabs. ObjectKey string } @@ -72,37 +61,25 @@ type panelStates struct { } type guiState struct { - // the names of views in the current focus stack (last item is the current view) ViewStack []string Platform commands.Platform Panels *panelStates SubProcessOutput string Stats map[string]commands.ContainerStats - // if true, we show containers with an 'exited' status in the containers panel ShowExitedContainers bool ScreenMode WindowMaximisation - // Maintains the state of manual filtering i.e. typing in a substring - // to filter on in the current panel. Filter filterState } type filterState struct { - // If true then we're either currently inside the filter view - // or we've committed the filter and we're back in the list view active bool - // The panel that we're filtering. - panel panels.ISideListPanel - // The string that we're filtering on + panel panels.ISideListPanel needle string } -// screen sizing determines how much space your selected window takes up (window -// as in panel, not your terminal's window). Sometimes you want a bit more space -// to see the contents of a panel, and this keeps track of how much maximisation -// you've set type WindowMaximisation int const ( @@ -124,8 +101,7 @@ func getScreenMode(config *config.AppConfig) WindowMaximisation { } } -// NewGui builds a new gui handler -func NewGui(log *logrus.Entry, dockerCommand *commands.DockerCommand, oSCommand *commands.OSCommand, tr *i18n.TranslationSet, config *config.AppConfig, errorChan chan error) (*Gui, error) { +func NewGui(log *logrus.Entry, containerCmd *commands.ContainerCommand, oSCommand *commands.OSCommand, tr *i18n.TranslationSet, config *config.AppConfig, errorChan chan error) (*Gui, error) { initialState := guiState{ Platform: *oSCommand.Platform, Panels: &panelStates{ @@ -141,7 +117,7 @@ func NewGui(log *logrus.Entry, dockerCommand *commands.DockerCommand, oSCommand gui := &Gui{ Log: log, - DockerCommand: dockerCommand, + ContainerCmd: containerCmd, OSCommand: oSCommand, State: initialState, Config: config, @@ -168,7 +144,7 @@ func (gui *Gui) renderGlobalOptions() error { } func (gui *Gui) goEvery(interval time.Duration, function func() error) { - _ = function() // time.Tick doesn't run immediately so we'll do that here // TODO: maybe change + _ = function() go func() { ticker := time.NewTicker(interval) defer ticker.Stop() @@ -180,9 +156,7 @@ func (gui *Gui) goEvery(interval time.Duration, function func() error) { }() } -// Run setup the gui with keybindings and start the mainloop func (gui *Gui) Run() error { - // closing our task manager which in turn closes the current task if there is any, so we aren't leaving processes lying around after closing lazydocker defer gui.taskManager.Close() g, err := gocui.NewGui(gocui.NewGuiOpts{ @@ -194,15 +168,12 @@ func (gui *Gui) Run() error { } defer g.Close() - // forgive the double-negative, this is because of my yaml `omitempty` woes if !gui.Config.UserConfig.Gui.IgnoreMouseEvents { g.Mouse = true } - gui.g = g // TODO: always use gui.g rather than passing g around everywhere + gui.g = g - // if the deadlock package wants to report a deadlock, we first need to - // close the gui so that we can actually read what it prints. deadlock.Opts.LogBuf = lcUtils.NewOnceWriter(os.Stderr, func() { gui.g.Close() }) @@ -220,7 +191,6 @@ func (gui *Gui) Run() error { continue } if strings.Contains(err.Error(), "No such container") { - // this happens all the time when e.g. restarting containers so we won't worry about it gui.Log.Warn(err) continue } @@ -237,7 +207,6 @@ func (gui *Gui) Run() error { return err } - // TODO: see if we can avoid the circular dependency gui.setPanels() if err = gui.keybindings(g); err != nil { @@ -259,17 +228,14 @@ func (gui *Gui) Run() error { ctx, finish := context.WithCancel(context.Background()) defer finish() - go gui.listenForEvents(ctx, throttledRefresh.Trigger) go gui.monitorContainerStats(ctx) go func() { throttledRefresh.Trigger() gui.goEvery(time.Millisecond*30, gui.reRenderMain) - gui.goEvery(time.Millisecond*1000, gui.updateContainerDetails) + gui.goEvery(time.Millisecond*1000, gui.renderContainers) gui.goEvery(time.Millisecond*1000, gui.checkForContextChange) - // we need to regularly re-render these because their stats will be changed in the background - gui.goEvery(time.Millisecond*1000, gui.renderContainersAndServices) }() err = g.MainLoop() @@ -281,8 +247,6 @@ func (gui *Gui) Run() error { func (gui *Gui) setPanels() { gui.Panels = Panels{ - Projects: gui.getProjectPanel(), - Services: gui.getServicesPanel(), Containers: gui.getContainersPanel(), Images: gui.getImagesPanel(), Volumes: gui.getVolumesPanel(), @@ -291,18 +255,13 @@ func (gui *Gui) setPanels() { } } -func (gui *Gui) updateContainerDetails() error { - return gui.DockerCommand.RefreshContainerDetails(gui.Panels.Containers.List.GetAllItems()) +func (gui *Gui) renderContainers() error { + return gui.Panels.Containers.RerenderList() } func (gui *Gui) refresh() { go func() { - // Refresh containers/services first, then projects (which depend on - // container labels to discover projects). - if err := gui.refreshContainersAndServices(); err != nil { - gui.Log.Error(err) - } - if err := gui.refreshProject(); err != nil { + if err := gui.refreshContainers(); err != nil { gui.Log.Error(err) } }() @@ -323,61 +282,6 @@ func (gui *Gui) refresh() { }() } -func (gui *Gui) listenForEvents(ctx context.Context, refresh func()) { - errorCount := 0 - - onError := func(err error) { - if err != nil { - gui.ErrorChan <- errors.Errorf("Docker event stream returned error: %s\nRetry count: %d", err.Error(), errorCount) - } - errorCount++ - time.Sleep(time.Second * 2) - } - -outer: - for { - messageChan, errChan := gui.DockerCommand.Client.Events(context.Background(), events.ListOptions{}) - - if errorCount > 0 { - select { - case <-ctx.Done(): - return - case err := <-errChan: - onError(err) - continue outer - default: - // If we're here then we lost connection to docker and we just got it back. - // The reason we do this refresh explicitly is because successfully - // reconnecting with docker does not mean it's going to send us a new - // event any time soon. - - // Assuming the confirmation prompt currently holds the given error - _ = gui.closeConfirmationPrompt() - refresh() - errorCount = 0 - } - } - - for { - select { - case <-ctx.Done(): - return - case message := <-messageChan: - // We could be more granular about what events should trigger which refreshes. - // At the moment it's pretty efficient though, and it might not be worth - // the maintenance burden of mapping specific events to specific refreshes - refresh() - - gui.Log.Infof("received event of type: %s", message.Type) - case err := <-errChan: - onError(err) - continue outer - } - } - } -} - -// checkForContextChange runs the currently focused panel's 'select' function, simulating the current item having just been selected. This will then trigger a check to see if anything's changed (e.g. a service has a new container) and if so, the appropriate code will run. For example, if you're reading logs from a service and all of a sudden its container changes, this will trigger the 'select' function, which will work out that the context is not different because of the new container, and then it will re-attempt to get the logs, this time for the correct container. This 'context' is stored in the main panel's ObjectKey. I'm using the term 'context' here more broadly than just the different tabs you can view in a panel. func (gui *Gui) checkForContextChange() error { return gui.newLineFocused(gui.g.CurrentView()) } @@ -404,8 +308,6 @@ func (gui *Gui) quit(g *gocui.Gui, v *gocui.View) error { return gocui.ErrQuit } -// this handler is executed when we press escape when there is only one view -// on the stack. func (gui *Gui) escape() error { if gui.State.Filter.active { return gui.clearFilter() @@ -459,9 +361,6 @@ func (gui *Gui) ShouldRefresh(key string) bool { } func (gui *Gui) initiallyFocusedViewName() string { - if gui.DockerCommand.InDockerComposeProject { - return "services" - } return "containers" } @@ -474,8 +373,6 @@ func (gui *Gui) Update(f func() error) { } func (gui *Gui) monitorContainerStats(ctx context.Context) { - // periodically loop through running containers and see if we need to create a monitor goroutine for any - // every second we check if we need to spawn a new goroutine ticker := time.NewTicker(time.Second) defer ticker.Stop() for { @@ -485,16 +382,13 @@ func (gui *Gui) monitorContainerStats(ctx context.Context) { case <-ticker.C: for _, container := range gui.Panels.Containers.List.GetAllItems() { if !container.MonitoringStats { - go gui.DockerCommand.CreateClientStatMonitor(container) + go gui.ContainerCmd.CreateClientStatMonitor(container) } } } } } -// this is used by our cheatsheet code to generate keybindings. We need some views -// and panels to exist for us to know what keybindings there are, so we invoke -// gocui in headless mode and create them. func (gui *Gui) SetupFakeGui() { g, err := gocui.NewGui(gocui.NewGuiOpts{ OutputMode: gocui.OutputTrue, diff --git a/pkg/gui/images_panel.go b/pkg/gui/images_panel.go index 7b0d5643..2f0cc48a 100644 --- a/pkg/gui/images_panel.go +++ b/pkg/gui/images_panel.go @@ -1,21 +1,14 @@ package gui import ( - "fmt" - "strings" - "time" - - "github.com/docker/docker/api/types/image" "github.com/fatih/color" "github.com/jesseduffield/gocui" - "github.com/jesseduffield/lazydocker/pkg/commands" - "github.com/jesseduffield/lazydocker/pkg/config" - "github.com/jesseduffield/lazydocker/pkg/gui/panels" - "github.com/jesseduffield/lazydocker/pkg/gui/presentation" - "github.com/jesseduffield/lazydocker/pkg/gui/types" - "github.com/jesseduffield/lazydocker/pkg/tasks" - "github.com/jesseduffield/lazydocker/pkg/utils" - "github.com/samber/lo" + "github.com/jesseduffield/lazycontainer/pkg/commands" + "github.com/jesseduffield/lazycontainer/pkg/gui/panels" + "github.com/jesseduffield/lazycontainer/pkg/gui/presentation" + "github.com/jesseduffield/lazycontainer/pkg/gui/types" + "github.com/jesseduffield/lazycontainer/pkg/tasks" + "github.com/jesseduffield/lazycontainer/pkg/utils" ) func (gui *Gui) getImagesPanel() *panels.SideListPanel[*commands.Image] { @@ -42,23 +35,19 @@ func (gui *Gui) getImagesPanel() *panels.SideListPanel[*commands.Image] { }, NoItemsMessage: gui.Tr.NoImages, Gui: gui.intoInterface(), - Sort: func(a *commands.Image, b *commands.Image) bool { + Sort: func(a, b *commands.Image) bool { if a.Name == noneLabel && b.Name != noneLabel { return false } - if a.Name != noneLabel && b.Name == noneLabel { return true } - if a.Name != b.Name { return a.Name < b.Name } - if a.Tag != b.Tag { return a.Tag < b.Tag } - return a.ID < b.ID }, GetTableCells: presentation.GetImageDisplayStrings, @@ -69,7 +58,7 @@ func (gui *Gui) renderImageConfigTask(image *commands.Image) tasks.TaskFunc { return gui.NewRenderStringTask(RenderStringTaskOpts{ GetStrContent: func() string { return gui.imageConfigStr(image) }, Autoscroll: false, - Wrap: false, // don't care what your config is this page is ugly without wrapping + Wrap: false, }) } @@ -77,18 +66,11 @@ func (gui *Gui) imageConfigStr(image *commands.Image) string { padding := 10 output := "" output += utils.WithPadding("Name: ", padding) + image.Name + "\n" - output += utils.WithPadding("ID: ", padding) + image.Image.ID + "\n" - output += utils.WithPadding("Tags: ", padding) + utils.ColoredString(strings.Join(image.Image.RepoTags, ", "), color.FgGreen) + "\n" - output += utils.WithPadding("Size: ", padding) + utils.FormatDecimalBytes(int(image.Image.Size)) + "\n" - output += utils.WithPadding("Created: ", padding) + fmt.Sprintf("%v", time.Unix(image.Image.Created, 0).Format(time.RFC1123)) + "\n" - - history, err := image.RenderHistory() - if err != nil { - gui.Log.Error(err) - } - - output += "\n\n" + history - + output += utils.WithPadding("Tag: ", padding) + image.Tag + "\n" + output += utils.WithPadding("ID: ", padding) + image.ID + "\n" + output += utils.WithPadding("Reference: ", padding) + image.AppleImage.Reference + "\n" + output += utils.WithPadding("Digest: ", padding) + image.AppleImage.Descriptor.Digest + "\n" + output += utils.WithPadding("Size: ", padding) + image.AppleImage.FullSize + "\n" return output } @@ -96,82 +78,51 @@ func (gui *Gui) reloadImages() error { if err := gui.refreshStateImages(); err != nil { return err } - return gui.Panels.Images.RerenderList() } func (gui *Gui) refreshStateImages() error { - images, err := gui.DockerCommand.RefreshImages() + images, err := gui.ContainerCmd.RefreshImages() if err != nil { return err } - gui.Panels.Images.SetItems(images) - return nil } -func (gui *Gui) FilterString(view *gocui.View) string { - if gui.State.Filter.panel != nil && gui.State.Filter.panel.GetView() != view { - return "" - } - - return gui.State.Filter.needle -} - func (gui *Gui) handleImagesRemoveMenu(g *gocui.Gui, v *gocui.View) error { - type removeImageOption struct { - description string - command string - configOptions image.RemoveOptions - } - img, err := gui.Panels.Images.GetSelectedItem() if err != nil { return nil } - shortSha := img.ID[7:17] - - // TODO: have a way of toggling in a menu instead of showing each permutation as a separate menu item - options := []*removeImageOption{ - { - description: gui.Tr.Remove, - command: "docker image rm " + shortSha, - configOptions: image.RemoveOptions{PruneChildren: true, Force: false}, - }, - { - description: gui.Tr.RemoveWithoutPrune, - command: "docker image rm --no-prune " + shortSha, - configOptions: image.RemoveOptions{PruneChildren: false, Force: false}, - }, - { - description: gui.Tr.RemoveWithForce, - command: "docker image rm --force " + shortSha, - configOptions: image.RemoveOptions{PruneChildren: true, Force: true}, - }, - { - description: gui.Tr.RemoveWithoutPruneWithForce, - command: "docker image rm --no-prune --force " + shortSha, - configOptions: image.RemoveOptions{PruneChildren: false, Force: true}, - }, + shortSha := img.ID + if len(img.ID) > 12 { + shortSha = img.ID[:12] } - menuItems := lo.Map(options, func(option *removeImageOption, _ int) *types.MenuItem { - return &types.MenuItem{ - LabelColumns: []string{ - option.description, - color.New(color.FgRed).Sprint(option.command), - }, + options := []struct { + description string + command string + force bool + }{ + {description: gui.Tr.Remove, command: "container image rm " + shortSha, force: false}, + {description: gui.Tr.RemoveWithForce, command: "container image rm --force " + shortSha, force: true}, + } + + menuItems := make([]*types.MenuItem, len(options)) + for i, opt := range options { + opt := opt + menuItems[i] = &types.MenuItem{ + LabelColumns: []string{opt.description, color.New(color.FgRed).Sprint(opt.command)}, OnPress: func() error { - if err := img.Remove(option.configOptions); err != nil { + if err := img.Remove(opt.force); err != nil { return gui.createErrorPanel(err.Error()) } - return nil }, } - }) + } return gui.Menu(CreateMenuOptions{ Title: "", @@ -179,10 +130,11 @@ func (gui *Gui) handleImagesRemoveMenu(g *gocui.Gui, v *gocui.View) error { }) } -func (gui *Gui) handlePruneImages() error { - return gui.createConfirmationPanel(gui.Tr.Confirm, gui.Tr.ConfirmPruneImages, func(g *gocui.Gui, v *gocui.View) error { +func (gui *Gui) handlePruneImages(all bool) error { + title := gui.Tr.ConfirmPruneImages + return gui.createConfirmationPanel(gui.Tr.Confirm, title, func(g *gocui.Gui, v *gocui.View) error { return gui.WithWaitingStatus(gui.Tr.PruningStatus, func() error { - err := gui.DockerCommand.PruneImages() + err := gui.ContainerCmd.Client.PruneImages(all) if err != nil { return gui.createErrorPanel(err.Error()) } @@ -197,25 +149,13 @@ func (gui *Gui) handleImagesCustomCommand(g *gocui.Gui, v *gocui.View) error { return nil } - commandObject := gui.DockerCommand.NewCommandObject(commands.CommandObject{ - Image: img, - }) - + commandObject := gui.ContainerCmd.NewCommandObject(commands.CommandObject{Image: img}) customCommands := gui.Config.UserConfig.CustomCommands.Images - return gui.createCustomCommandMenu(customCommands, commandObject) } func (gui *Gui) handleImagesBulkCommand(g *gocui.Gui, v *gocui.View) error { - baseBulkCommands := []config.CustomCommand{ - { - Name: gui.Tr.PruneImages, - InternalFunction: gui.handlePruneImages, - }, - } - - bulkCommands := append(baseBulkCommands, gui.Config.UserConfig.BulkCommands.Images...) - commandObject := gui.DockerCommand.NewCommandObject(commands.CommandObject{}) - + bulkCommands := gui.Config.UserConfig.BulkCommands.Images + commandObject := gui.ContainerCmd.NewCommandObject(commands.CommandObject{}) return gui.createBulkCommandMenu(bulkCommands, commandObject) } diff --git a/pkg/gui/keybindings.go b/pkg/gui/keybindings.go index df706024..794bc83c 100644 --- a/pkg/gui/keybindings.go +++ b/pkg/gui/keybindings.go @@ -6,18 +6,14 @@ import ( "github.com/jesseduffield/gocui" ) -// Binding - a keybinding mapping a key and modifier to a handler. The keypress -// is only handled if the given view has focus, or handled globally if the view -// is "" type Binding struct { ViewName string Handler func(*gocui.Gui, *gocui.View) error - Key interface{} // FIXME: find out how to get `gocui.Key | rune` + Key interface{} Modifier gocui.Modifier Description string } -// GetKey is a function. func (b *Binding) GetKey() string { key := 0 @@ -28,7 +24,6 @@ func (b *Binding) GetKey() string { key = int(b.Key.(gocui.Key)) } - // special keys switch key { case 27: return "esc" @@ -53,7 +48,6 @@ func (b *Binding) GetKey() string { return fmt.Sprintf("%c", key) } -// GetInitialKeybindings is a function. func (gui *Gui) GetInitialKeybindings() []*Binding { bindings := []*Binding{ { @@ -128,27 +122,6 @@ func (gui *Gui) GetInitialKeybindings() []*Binding { Modifier: gocui.ModNone, Handler: gui.handleCustomCommand, }, - { - ViewName: "project", - Key: 'e', - Modifier: gocui.ModNone, - Handler: gui.handleEditConfig, - Description: gui.Tr.EditConfig, - }, - { - ViewName: "project", - Key: 'o', - Modifier: gocui.ModNone, - Handler: gui.handleOpenConfig, - Description: gui.Tr.OpenConfig, - }, - { - ViewName: "project", - Key: 'm', - Modifier: gocui.ModNone, - Handler: gui.handleViewAllLogs, - Description: gui.Tr.ViewLogs, - }, { ViewName: "menu", Key: gocui.KeyEsc, @@ -199,13 +172,6 @@ func (gui *Gui) GetInitialKeybindings() []*Binding { Handler: gui.handleHideStoppedContainers, Description: gui.Tr.HideStopped, }, - { - ViewName: "containers", - Key: 'p', - Modifier: gocui.ModNone, - Handler: gui.handleContainerPause, - Description: gui.Tr.Pause, - }, { ViewName: "containers", Key: 's', @@ -263,109 +229,11 @@ func (gui *Gui) GetInitialKeybindings() []*Binding { Description: gui.Tr.OpenInBrowser, }, { - ViewName: "services", - Key: 'u', + ViewName: "containers", + Key: 'k', Modifier: gocui.ModNone, - Handler: gui.handleServiceUp, - Description: gui.Tr.UpService, - }, - { - ViewName: "services", - Key: 'd', - Modifier: gocui.ModNone, - Handler: gui.handleServiceRemoveMenu, - Description: gui.Tr.RemoveService, - }, - { - ViewName: "services", - Key: 's', - Modifier: gocui.ModNone, - Handler: gui.handleServiceStop, - Description: gui.Tr.Stop, - }, - { - ViewName: "services", - Key: 'p', - Modifier: gocui.ModNone, - Handler: gui.handleServicePause, - Description: gui.Tr.Pause, - }, - { - ViewName: "services", - Key: 'r', - Modifier: gocui.ModNone, - Handler: gui.handleServiceRestart, - Description: gui.Tr.Restart, - }, - { - ViewName: "services", - Key: 'S', - Modifier: gocui.ModNone, - Handler: gui.handleServiceStart, - Description: gui.Tr.Start, - }, - { - ViewName: "services", - Key: 'a', - Modifier: gocui.ModNone, - Handler: gui.handleServiceAttach, - Description: gui.Tr.Attach, - }, - { - ViewName: "services", - Key: 'm', - Modifier: gocui.ModNone, - Handler: gui.handleServiceRenderLogsToMain, - Description: gui.Tr.ViewLogs, - }, - { - ViewName: "services", - Key: 'U', - Modifier: gocui.ModNone, - Handler: gui.handleProjectUp, - Description: gui.Tr.UpProject, - }, - { - ViewName: "services", - Key: 'D', - Modifier: gocui.ModNone, - Handler: gui.handleProjectDown, - Description: gui.Tr.DownProject, - }, - { - ViewName: "services", - Key: 'R', - Modifier: gocui.ModNone, - Handler: gui.handleServiceRestartMenu, - Description: gui.Tr.ViewRestartOptions, - }, - { - ViewName: "services", - Key: 'c', - Modifier: gocui.ModNone, - Handler: gui.handleServicesCustomCommand, - Description: gui.Tr.RunCustomCommand, - }, - { - ViewName: "services", - Key: 'b', - Modifier: gocui.ModNone, - Handler: gui.handleServicesBulkCommand, - Description: gui.Tr.ViewBulkCommands, - }, - { - ViewName: "services", - Key: 'E', - Modifier: gocui.ModNone, - Handler: gui.handleServicesExecShell, - Description: gui.Tr.ExecShell, - }, - { - ViewName: "services", - Key: 'w', - Modifier: gocui.ModNone, - Handler: gui.handleServicesOpenInBrowserCommand, - Description: gui.Tr.OpenInBrowser, + Handler: gui.handleContainerKill, + Description: gui.Tr.Kill, }, { ViewName: "images", @@ -535,12 +403,10 @@ func (gui *Gui) GetInitialKeybindings() []*Binding { } bindings = append(bindings, []*Binding{ - {Handler: gui.handleGoTo(gui.Panels.Projects.View), Key: '1', Description: gui.Tr.FocusProjects}, - {Handler: gui.handleGoTo(gui.Panels.Services.View), Key: '2', Description: gui.Tr.FocusServices}, - {Handler: gui.handleGoTo(gui.Panels.Containers.View), Key: '3', Description: gui.Tr.FocusContainers}, - {Handler: gui.handleGoTo(gui.Panels.Images.View), Key: '4', Description: gui.Tr.FocusImages}, - {Handler: gui.handleGoTo(gui.Panels.Volumes.View), Key: '5', Description: gui.Tr.FocusVolumes}, - {Handler: gui.handleGoTo(gui.Panels.Networks.View), Key: '6', Description: gui.Tr.FocusNetworks}, + {Handler: gui.handleGoTo(gui.Panels.Containers.View), Key: '1', Description: gui.Tr.FocusContainers}, + {Handler: gui.handleGoTo(gui.Panels.Images.View), Key: '2', Description: gui.Tr.FocusImages}, + {Handler: gui.handleGoTo(gui.Panels.Volumes.View), Key: '3', Description: gui.Tr.FocusVolumes}, + {Handler: gui.handleGoTo(gui.Panels.Networks.View), Key: '4', Description: gui.Tr.FocusNetworks}, }...) for _, panel := range gui.allListPanels() { diff --git a/pkg/gui/menu_panel.go b/pkg/gui/menu_panel.go index 99c65807..132ff489 100644 --- a/pkg/gui/menu_panel.go +++ b/pkg/gui/menu_panel.go @@ -1,10 +1,10 @@ package gui import ( - "github.com/jesseduffield/lazydocker/pkg/gui/panels" - "github.com/jesseduffield/lazydocker/pkg/gui/presentation" - "github.com/jesseduffield/lazydocker/pkg/gui/types" - "github.com/jesseduffield/lazydocker/pkg/utils" + "github.com/jesseduffield/lazycontainer/pkg/gui/panels" + "github.com/jesseduffield/lazycontainer/pkg/gui/presentation" + "github.com/jesseduffield/lazycontainer/pkg/gui/types" + "github.com/jesseduffield/lazycontainer/pkg/utils" ) type CreateMenuOptions struct { diff --git a/pkg/gui/networks_panel.go b/pkg/gui/networks_panel.go index 4702d35d..ea3648b0 100644 --- a/pkg/gui/networks_panel.go +++ b/pkg/gui/networks_panel.go @@ -1,17 +1,15 @@ package gui import ( - "strconv" - "github.com/fatih/color" "github.com/jesseduffield/gocui" - "github.com/jesseduffield/lazydocker/pkg/commands" - "github.com/jesseduffield/lazydocker/pkg/config" - "github.com/jesseduffield/lazydocker/pkg/gui/panels" - "github.com/jesseduffield/lazydocker/pkg/gui/presentation" - "github.com/jesseduffield/lazydocker/pkg/gui/types" - "github.com/jesseduffield/lazydocker/pkg/tasks" - "github.com/jesseduffield/lazydocker/pkg/utils" + "github.com/jesseduffield/lazycontainer/pkg/commands" + "github.com/jesseduffield/lazycontainer/pkg/config" + "github.com/jesseduffield/lazycontainer/pkg/gui/panels" + "github.com/jesseduffield/lazycontainer/pkg/gui/presentation" + "github.com/jesseduffield/lazycontainer/pkg/gui/types" + "github.com/jesseduffield/lazycontainer/pkg/tasks" + "github.com/jesseduffield/lazycontainer/pkg/utils" "github.com/samber/lo" ) @@ -37,9 +35,6 @@ func (gui *Gui) getNetworksPanel() *panels.SideListPanel[*commands.Network] { }, NoItemsMessage: gui.Tr.NoNetworks, Gui: gui.intoInterface(), - // we're sorting these networks based on whether they have labels defined, - // because those are the ones you typically care about. - // Within that, we also sort them alphabetically Sort: func(a *commands.Network, b *commands.Network) bool { return a.Name < b.Name }, @@ -54,28 +49,14 @@ func (gui *Gui) renderNetworkConfig(network *commands.Network) tasks.TaskFunc { func (gui *Gui) networkConfigStr(network *commands.Network) string { padding := 15 output := "" - output += utils.WithPadding("ID: ", padding) + network.Network.ID + "\n" + output += utils.WithPadding("ID: ", padding) + network.AppleNetwork.ID + "\n" output += utils.WithPadding("Name: ", padding) + network.Name + "\n" - output += utils.WithPadding("Driver: ", padding) + network.Network.Driver + "\n" - output += utils.WithPadding("Scope: ", padding) + network.Network.Scope + "\n" - output += utils.WithPadding("EnabledIPV6: ", padding) + strconv.FormatBool(network.Network.EnableIPv6) + "\n" - output += utils.WithPadding("Internal: ", padding) + strconv.FormatBool(network.Network.Internal) + "\n" - output += utils.WithPadding("Attachable: ", padding) + strconv.FormatBool(network.Network.Attachable) + "\n" - output += utils.WithPadding("Ingress: ", padding) + strconv.FormatBool(network.Network.Ingress) + "\n" - - output += utils.WithPadding("Containers: ", padding) - if len(network.Network.Containers) > 0 { - output += "\n" - for _, v := range network.Network.Containers { - output += utils.FormatMapItem(padding, v.Name, v.EndpointID) - } - } else { - output += "none\n" - } - + output += utils.WithPadding("Mode: ", padding) + network.AppleNetwork.Config.Mode + "\n" + output += utils.WithPadding("State: ", padding) + network.AppleNetwork.State + "\n" + output += utils.WithPadding("IPv4 Subnet: ", padding) + network.AppleNetwork.Status.IPv4Subnet + "\n" + output += utils.WithPadding("IPv4 Gateway: ", padding) + network.AppleNetwork.Status.IPv4Gateway + "\n" output += "\n" - output += utils.WithPadding("Labels: ", padding) + utils.FormatMap(padding, network.Network.Labels) + "\n" - output += utils.WithPadding("Options: ", padding) + utils.FormatMap(padding, network.Network.Options) + output += utils.WithPadding("Labels: ", padding) + utils.FormatMap(padding, network.AppleNetwork.Config.Labels) return output } @@ -89,7 +70,7 @@ func (gui *Gui) reloadNetworks() error { } func (gui *Gui) refreshStateNetworks() error { - networks, err := gui.DockerCommand.RefreshNetworks() + networks, err := gui.ContainerCmd.RefreshNetworks() if err != nil { return err } @@ -113,7 +94,7 @@ func (gui *Gui) handleNetworksRemoveMenu(g *gocui.Gui, v *gocui.View) error { options := []*removeNetworkOption{ { description: gui.Tr.Remove, - command: utils.WithShortSha("docker network rm " + network.Name), + command: utils.WithShortSha("container network rm " + network.Name), }, } @@ -140,7 +121,7 @@ func (gui *Gui) handleNetworksRemoveMenu(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) handlePruneNetworks() error { return gui.createConfirmationPanel(gui.Tr.Confirm, gui.Tr.ConfirmPruneNetworks, func(g *gocui.Gui, v *gocui.View) error { return gui.WithWaitingStatus(gui.Tr.PruningStatus, func() error { - err := gui.DockerCommand.PruneNetworks() + err := gui.ContainerCmd.PruneNetworks() if err != nil { return gui.createErrorPanel(err.Error()) } @@ -155,7 +136,7 @@ func (gui *Gui) handleNetworksCustomCommand(g *gocui.Gui, v *gocui.View) error { return nil } - commandObject := gui.DockerCommand.NewCommandObject(commands.CommandObject{ + commandObject := gui.ContainerCmd.Client.NewCommandObject(commands.CommandObject{ Network: network, }) @@ -173,7 +154,7 @@ func (gui *Gui) handleNetworksBulkCommand(g *gocui.Gui, v *gocui.View) error { } bulkCommands := append(baseBulkCommands, gui.Config.UserConfig.BulkCommands.Networks...) - commandObject := gui.DockerCommand.NewCommandObject(commands.CommandObject{}) + commandObject := gui.ContainerCmd.Client.NewCommandObject(commands.CommandObject{}) return gui.createBulkCommandMenu(bulkCommands, commandObject) } diff --git a/pkg/gui/options_menu_panel.go b/pkg/gui/options_menu_panel.go index 38ba71a5..92021b77 100644 --- a/pkg/gui/options_menu_panel.go +++ b/pkg/gui/options_menu_panel.go @@ -4,7 +4,7 @@ import ( "github.com/samber/lo" "github.com/jesseduffield/gocui" - "github.com/jesseduffield/lazydocker/pkg/gui/types" + "github.com/jesseduffield/lazycontainer/pkg/gui/types" ) func (gui *Gui) getBindings(v *gocui.View) []*Binding { diff --git a/pkg/gui/panels.go b/pkg/gui/panels.go index b92e44e1..49b2ebce 100644 --- a/pkg/gui/panels.go +++ b/pkg/gui/panels.go @@ -1,7 +1,17 @@ package gui -import "github.com/jesseduffield/lazydocker/pkg/gui/panels" +import ( + "github.com/jesseduffield/gocui" + "github.com/jesseduffield/lazycontainer/pkg/gui/panels" +) func (gui *Gui) intoInterface() panels.IGui { return gui } + +func (gui *Gui) FilterString(view *gocui.View) string { + if gui.State.Filter.active && gui.State.Filter.panel != nil && gui.State.Filter.panel.GetView() == view { + return gui.State.Filter.needle + } + return "" +} diff --git a/pkg/gui/panels/context_state.go b/pkg/gui/panels/context_state.go index 36610cff..fa52f825 100644 --- a/pkg/gui/panels/context_state.go +++ b/pkg/gui/panels/context_state.go @@ -1,7 +1,7 @@ package panels import ( - "github.com/jesseduffield/lazydocker/pkg/tasks" + "github.com/jesseduffield/lazycontainer/pkg/tasks" "github.com/samber/lo" ) diff --git a/pkg/gui/panels/side_list_panel.go b/pkg/gui/panels/side_list_panel.go index 26ddc798..92a99d83 100644 --- a/pkg/gui/panels/side_list_panel.go +++ b/pkg/gui/panels/side_list_panel.go @@ -7,8 +7,8 @@ import ( "github.com/go-errors/errors" "github.com/jesseduffield/gocui" - "github.com/jesseduffield/lazydocker/pkg/tasks" - "github.com/jesseduffield/lazydocker/pkg/utils" + "github.com/jesseduffield/lazycontainer/pkg/tasks" + "github.com/jesseduffield/lazycontainer/pkg/utils" "github.com/samber/lo" ) diff --git a/pkg/gui/presentation/container_stats.go b/pkg/gui/presentation/container_stats.go index e3a9b3dc..31de6c94 100644 --- a/pkg/gui/presentation/container_stats.go +++ b/pkg/gui/presentation/container_stats.go @@ -10,9 +10,9 @@ import ( "github.com/fatih/color" "github.com/jesseduffield/asciigraph" - "github.com/jesseduffield/lazydocker/pkg/commands" - "github.com/jesseduffield/lazydocker/pkg/config" - "github.com/jesseduffield/lazydocker/pkg/utils" + "github.com/jesseduffield/lazycontainer/pkg/commands" + "github.com/jesseduffield/lazycontainer/pkg/config" + "github.com/jesseduffield/lazycontainer/pkg/utils" "github.com/mcuadros/go-lookup" "github.com/samber/lo" ) @@ -33,9 +33,9 @@ func RenderStats(userConfig *config.UserConfig, container *commands.Container, v graphs[i] = utils.ColoredString(graph, utils.GetColorAttribute(spec.Color)) } - pidsCount := fmt.Sprintf("PIDs: %d", stats.ClientStats.PidsStats.Current) - dataReceived := fmt.Sprintf("Traffic received: %s", utils.FormatDecimalBytes(stats.ClientStats.Networks.Eth0.RxBytes)) - dataSent := fmt.Sprintf("Traffic sent: %s", utils.FormatDecimalBytes(stats.ClientStats.Networks.Eth0.TxBytes)) + pidsCount := fmt.Sprintf("Processes: %d", stats.ClientStats.NumProcesses) + dataReceived := fmt.Sprintf("Traffic received: %s", utils.FormatDecimalBytes(int(stats.ClientStats.NetworkRxBytes))) + dataSent := fmt.Sprintf("Traffic sent: %s", utils.FormatDecimalBytes(int(stats.ClientStats.NetworkTxBytes))) originalStats, err := utils.MarshalIntoYaml(stats) if err != nil { @@ -53,7 +53,6 @@ func RenderStats(userConfig *config.UserConfig, container *commands.Container, v return contents, nil } -// plotGraph returns the plotted graph based on the graph spec and the stat history func plotGraph(container *commands.Container, spec config.GraphConfig, width int) (string, error) { container.StatsMutex.Lock() defer container.StatsMutex.Unlock() @@ -105,7 +104,6 @@ func plotGraph(container *commands.Container, spec config.GraphConfig, width int ), nil } -// from Dave C's answer at https://stackoverflow.com/questions/20767724/converting-unknown-interface-to-float64-in-golang func getFloat(unk interface{}) (float64, error) { floatType := reflect.TypeOf(float64(0)) stringType := reflect.TypeOf("") diff --git a/pkg/gui/presentation/containers.go b/pkg/gui/presentation/containers.go index 173a1e8a..e844ddf1 100644 --- a/pkg/gui/presentation/containers.go +++ b/pkg/gui/presentation/containers.go @@ -3,14 +3,12 @@ package presentation import ( "fmt" "sort" - "strconv" "strings" - "github.com/docker/docker/api/types/container" "github.com/fatih/color" - "github.com/jesseduffield/lazydocker/pkg/commands" - "github.com/jesseduffield/lazydocker/pkg/config" - "github.com/jesseduffield/lazydocker/pkg/utils" + "github.com/jesseduffield/lazycontainer/pkg/commands" + "github.com/jesseduffield/lazycontainer/pkg/config" + "github.com/jesseduffield/lazycontainer/pkg/utils" "github.com/samber/lo" ) @@ -26,34 +24,36 @@ func GetContainerDisplayStrings(guiConfig *config.GuiConfig, container *commands } func displayContainerImage(container *commands.Container) string { - return strings.TrimPrefix(container.Container.Image, "sha256:") + return strings.TrimPrefix(container.GetImage(), "sha256:") } func displayPorts(c *commands.Container) string { - portStrings := lo.Map(c.Container.Ports, func(port container.Port, _ int) string { - if port.PublicPort == 0 { - return fmt.Sprintf("%d/%s", port.PrivatePort, port.Type) + ports := c.AppleContainer.Configuration.PublishedPorts + portStrings := lo.Map(ports, func(port struct { + HostIP string `json:"hostIP"` + HostPort int `json:"hostPort"` + ContainerPort int `json:"containerPort"` + Protocol string `json:"protocol"` + }, _ int) string { + if port.HostPort == 0 { + return fmt.Sprintf("%d/%s", port.ContainerPort, port.Protocol) } - // docker ps will show '0.0.0.0:80->80/tcp' but we'll show - // '80->80/tcp' instead to save space (unless the IP is something other than - // 0.0.0.0) ipString := "" - if port.IP != "0.0.0.0" { - ipString = port.IP + ":" + if port.HostIP != "0.0.0.0" && port.HostIP != "" { + ipString = port.HostIP + ":" } - return fmt.Sprintf("%s%d->%d/%s", ipString, port.PublicPort, port.PrivatePort, port.Type) + return fmt.Sprintf("%s%d->%d/%s", ipString, port.HostPort, port.ContainerPort, port.Protocol) }) - // sorting because the order of the ports is not deterministic - // and we don't want to have them constantly swapping sort.Strings(portStrings) return strings.Join(portStrings, ", ") } -// getContainerDisplayStatus returns the colored status of the container func getContainerDisplayStatus(guiConfig *config.GuiConfig, c *commands.Container) string { + status := c.GetStatus() + shortStatusMap := map[string]string{ "paused": "P", "exited": "X", @@ -62,6 +62,7 @@ func getContainerDisplayStatus(guiConfig *config.GuiConfig, c *commands.Containe "restarting": "RS", "running": "R", "dead": "D", + "stopped": "S", } iconStatusMap := map[string]rune{ @@ -72,33 +73,34 @@ func getContainerDisplayStatus(guiConfig *config.GuiConfig, c *commands.Containe "restarting": '⟳', "running": '▶', "dead": '!', + "stopped": '■', } var containerState string switch guiConfig.ContainerStatusHealthStyle { case "short": - containerState = shortStatusMap[c.Container.State] + containerState = shortStatusMap[status] case "icon": - containerState = string(iconStatusMap[c.Container.State]) + containerState = string(iconStatusMap[status]) case "long": fallthrough default: - containerState = c.Container.State + containerState = status } return utils.ColoredString(containerState, getContainerColor(c)) } -// GetDisplayStatus returns the exit code if the container has exited, and the health status if the container is running (and has a health check) func getContainerDisplaySubstatus(guiConfig *config.GuiConfig, c *commands.Container) string { if !c.DetailsLoaded() { return "" } - switch c.Container.State { - case "exited": + status := c.GetStatus() + switch status { + case "exited", "stopped": return utils.ColoredString( - fmt.Sprintf("(%s)", strconv.Itoa(c.Details.State.ExitCode)), getContainerColor(c), + fmt.Sprintf("(%d)", 0), getContainerColor(c), ) case "running": return getHealthStatus(guiConfig, c) @@ -108,51 +110,9 @@ func getContainerDisplaySubstatus(guiConfig *config.GuiConfig, c *commands.Conta } func getHealthStatus(guiConfig *config.GuiConfig, c *commands.Container) string { - if !c.DetailsLoaded() { - return "" - } - - healthStatusColorMap := map[string]color.Attribute{ - "healthy": color.FgGreen, - "unhealthy": color.FgRed, - "starting": color.FgYellow, - } - - if c.Details.State.Health == nil { - return "" - } - - shortHealthStatusMap := map[string]string{ - "healthy": "H", - "unhealthy": "U", - "starting": "S", - } - - iconHealthStatusMap := map[string]rune{ - "healthy": '✔', - "unhealthy": '?', - "starting": '…', - } - - var healthStatus string - switch guiConfig.ContainerStatusHealthStyle { - case "short": - healthStatus = shortHealthStatusMap[c.Details.State.Health.Status] - case "icon": - healthStatus = string(iconHealthStatusMap[c.Details.State.Health.Status]) - case "long": - fallthrough - default: - healthStatus = c.Details.State.Health.Status - } - - if healthStatusColor, ok := healthStatusColorMap[c.Details.State.Health.Status]; ok { - return utils.ColoredString(fmt.Sprintf("(%s)", healthStatus), healthStatusColor) - } return "" } -// getDisplayCPUPerc colors the cpu percentage based on how extreme it is func getDisplayCPUPerc(c *commands.Container) string { stats, ok := c.GetLastStats() if !ok { @@ -174,16 +134,11 @@ func getDisplayCPUPerc(c *commands.Container) string { return utils.ColoredString(formattedPercentage, clr) } -// getContainerColor Container color func getContainerColor(c *commands.Container) color.Attribute { - switch c.Container.State { - case "exited": - // This means the colour may be briefly yellow and then switch to red upon starting - // Not sure what a better alternative is. - if !c.DetailsLoaded() || c.Details.State.ExitCode == 0 { - return color.FgYellow - } - return color.FgRed + status := c.GetStatus() + switch status { + case "exited", "stopped": + return color.FgYellow case "created": return color.FgCyan case "running": diff --git a/pkg/gui/presentation/images.go b/pkg/gui/presentation/images.go index a420a85d..253ae115 100644 --- a/pkg/gui/presentation/images.go +++ b/pkg/gui/presentation/images.go @@ -1,14 +1,14 @@ package presentation import ( - "github.com/jesseduffield/lazydocker/pkg/commands" - "github.com/jesseduffield/lazydocker/pkg/utils" + "github.com/jesseduffield/lazycontainer/pkg/commands" + "github.com/jesseduffield/lazycontainer/pkg/utils" ) func GetImageDisplayStrings(image *commands.Image) []string { return []string{ image.Name, image.Tag, - utils.FormatDecimalBytes(int(image.Image.Size)), + utils.FormatDecimalBytes(int(image.AppleImage.Descriptor.Size)), } } diff --git a/pkg/gui/presentation/menu_items.go b/pkg/gui/presentation/menu_items.go index 6febd261..8862cac0 100644 --- a/pkg/gui/presentation/menu_items.go +++ b/pkg/gui/presentation/menu_items.go @@ -1,6 +1,6 @@ package presentation -import "github.com/jesseduffield/lazydocker/pkg/gui/types" +import "github.com/jesseduffield/lazycontainer/pkg/gui/types" func GetMenuItemDisplayStrings(menuItem *types.MenuItem) []string { return menuItem.LabelColumns diff --git a/pkg/gui/presentation/networks.go b/pkg/gui/presentation/networks.go index 88a29fc9..27eb53c6 100644 --- a/pkg/gui/presentation/networks.go +++ b/pkg/gui/presentation/networks.go @@ -1,7 +1,7 @@ package presentation -import "github.com/jesseduffield/lazydocker/pkg/commands" +import "github.com/jesseduffield/lazycontainer/pkg/commands" func GetNetworkDisplayStrings(network *commands.Network) []string { - return []string{network.Network.Driver, network.Name} + return []string{network.AppleNetwork.Config.Mode, network.Name} } diff --git a/pkg/gui/presentation/projects.go b/pkg/gui/presentation/projects.go deleted file mode 100644 index 44d396c9..00000000 --- a/pkg/gui/presentation/projects.go +++ /dev/null @@ -1,7 +0,0 @@ -package presentation - -import "github.com/jesseduffield/lazydocker/pkg/commands" - -func GetProjectDisplayStrings(project *commands.Project) []string { - return []string{project.Name} -} diff --git a/pkg/gui/presentation/services.go b/pkg/gui/presentation/services.go deleted file mode 100644 index 7e781ec1..00000000 --- a/pkg/gui/presentation/services.go +++ /dev/null @@ -1,43 +0,0 @@ -package presentation - -import ( - "github.com/fatih/color" - "github.com/jesseduffield/lazydocker/pkg/commands" - "github.com/jesseduffield/lazydocker/pkg/config" - "github.com/jesseduffield/lazydocker/pkg/utils" -) - -func GetServiceDisplayStrings(guiConfig *config.GuiConfig, service *commands.Service) []string { - if service.Container == nil { - var containerState string - switch guiConfig.ContainerStatusHealthStyle { - case "short": - containerState = "n" - case "icon": - containerState = "." - case "long": - fallthrough - default: - containerState = "none" - } - - return []string{ - utils.ColoredString(containerState, color.FgBlue), - "", - service.Name, - "", - "", - "", - } - } - - container := service.Container - return []string{ - getContainerDisplayStatus(guiConfig, container), - getContainerDisplaySubstatus(guiConfig, container), - service.Name, - getDisplayCPUPerc(container), - utils.ColoredString(displayPorts(container), color.FgYellow), - utils.ColoredString(displayContainerImage(container), color.FgMagenta), - } -} diff --git a/pkg/gui/presentation/volumes.go b/pkg/gui/presentation/volumes.go index c6b90eb1..d6916932 100644 --- a/pkg/gui/presentation/volumes.go +++ b/pkg/gui/presentation/volumes.go @@ -1,7 +1,10 @@ package presentation -import "github.com/jesseduffield/lazydocker/pkg/commands" +import ( + "github.com/jesseduffield/lazycontainer/pkg/commands" + "github.com/jesseduffield/lazycontainer/pkg/utils" +) func GetVolumeDisplayStrings(volume *commands.Volume) []string { - return []string{volume.Volume.Driver, volume.Name} + return []string{utils.FormatBinaryBytes(int(volume.AppleVolume.SizeInBytes)), volume.Name} } diff --git a/pkg/gui/project_panel.go b/pkg/gui/project_panel.go deleted file mode 100644 index ca9acf28..00000000 --- a/pkg/gui/project_panel.go +++ /dev/null @@ -1,230 +0,0 @@ -package gui - -import ( - "bytes" - "context" - "strings" - - "github.com/fatih/color" - "github.com/jesseduffield/gocui" - "github.com/jesseduffield/lazydocker/pkg/commands" - "github.com/jesseduffield/lazydocker/pkg/gui/panels" - "github.com/jesseduffield/lazydocker/pkg/gui/presentation" - "github.com/jesseduffield/lazydocker/pkg/tasks" - "github.com/jesseduffield/lazydocker/pkg/utils" - "github.com/jesseduffield/yaml" -) - -func (gui *Gui) getProjectPanel() *panels.SideListPanel[*commands.Project] { - return &panels.SideListPanel[*commands.Project]{ - ContextState: &panels.ContextState[*commands.Project]{ - GetMainTabs: func() []panels.MainTab[*commands.Project] { - return []panels.MainTab[*commands.Project]{ - { - Key: "logs", - Title: gui.Tr.LogsTitle, - Render: gui.renderAllLogs, - }, - { - Key: "config", - Title: gui.Tr.DockerComposeConfigTitle, - Render: gui.renderDockerComposeConfig, - }, - { - Key: "credits", - Title: gui.Tr.CreditsTitle, - Render: gui.renderCredits, - }, - } - }, - GetItemContextCacheKey: func(project *commands.Project) string { - return "projects-" + project.Name - }, - }, - - ListPanel: panels.ListPanel[*commands.Project]{ - List: panels.NewFilteredList[*commands.Project](), - View: gui.Views.Project, - }, - NoItemsMessage: "", - Gui: gui.intoInterface(), - - Sort: func(a *commands.Project, b *commands.Project) bool { - return a.Name < b.Name - }, - GetTableCells: presentation.GetProjectDisplayStrings, - OnSelect: func(project *commands.Project) error { - // When a different project is selected, re-filter services and - // containers to show only those belonging to the selected project. - return gui.renderContainersAndServices() - }, - } -} - -func (gui *Gui) refreshProject() error { - projects := gui.getDiscoveredProjects() - - // Preserve the current selection across refreshes. On the first refresh, - // select the project specified via -p flag, or fall back to the local project. - selectedName := gui.getSelectedProjectName() - if selectedName == "" { - if gui.Config.ProjectName != "" { - selectedName = gui.Config.ProjectName - } else { - selectedName = gui.DockerCommand.LocalProjectName - } - } - - gui.Panels.Projects.SetItems(projects) - - if selectedName != "" { - for i, p := range gui.Panels.Projects.List.GetItems() { - if p.Name == selectedName { - gui.Panels.Projects.SetSelectedLineIdx(i) - gui.Panels.Projects.Refocus() - break - } - } - } - - return gui.Panels.Projects.RerenderList() -} - -// getDiscoveredProjects returns all docker compose projects by examining container labels. -// The local project (from docker-compose.yml in the current directory) is included if -// it has running containers or if InDockerComposeProject is true. -func (gui *Gui) getDiscoveredProjects() []*commands.Project { - containers := gui.Panels.Containers.List.GetAllItems() - projectNames := gui.DockerCommand.GetProjectNames(containers) - - // If we're in a docker compose project but it has no running containers, - // still include it. We don't fall back to the directory name here to avoid - // briefly flashing the wrong project name on startup. - localName := gui.DockerCommand.LocalProjectName - - if gui.DockerCommand.InDockerComposeProject && localName != "" { - found := false - for _, name := range projectNames { - if name == localName { - found = true - break - } - } - if !found { - projectNames = append([]string{localName}, projectNames...) - } - } - - projects := make([]*commands.Project, len(projectNames)) - for i, name := range projectNames { - projects[i] = &commands.Project{Name: name} - } - - return projects -} - -// getSelectedProjectName returns the name of the currently selected project, -// or empty string if none is selected. -func (gui *Gui) getSelectedProjectName() string { - project, err := gui.Panels.Projects.GetSelectedItem() - if err != nil { - return "" - } - return project.Name -} - -func (gui *Gui) renderCredits(_project *commands.Project) tasks.TaskFunc { - return gui.NewSimpleRenderStringTask(func() string { return gui.creditsStr() }) -} - -func (gui *Gui) creditsStr() string { - var configBuf bytes.Buffer - _ = yaml.NewEncoder(&configBuf, yaml.IncludeOmitted).Encode(gui.Config.UserConfig) - - return strings.Join( - []string{ - lazydockerTitle(), - "Copyright (c) 2019 Jesse Duffield", - "Keybindings: https://github.com/jesseduffield/lazydocker/blob/master/docs/keybindings", - "Config Options: https://github.com/jesseduffield/lazydocker/blob/master/docs/Config.md", - "Raise an Issue: https://github.com/jesseduffield/lazydocker/issues", - utils.ColoredString("Buy Jesse a coffee: https://github.com/sponsors/jesseduffield", color.FgMagenta), // caffeine ain't free - "Here's your lazydocker config when merged in with the defaults (you can open your config by pressing 'o'):", - utils.ColoredYamlString(configBuf.String()), - }, "\n\n") -} - -func (gui *Gui) renderAllLogs(project *commands.Project) tasks.TaskFunc { - return gui.NewTask(TaskOpts{ - Autoscroll: true, - Wrap: gui.Config.UserConfig.Gui.WrapMainPanel, - Func: func(ctx context.Context) { - gui.clearMainView() - - cmd := gui.OSCommand.RunCustomCommand( - utils.ApplyTemplate( - gui.Config.UserConfig.CommandTemplates.AllLogs, - gui.DockerCommand.NewCommandObject(commands.CommandObject{Project: project}), - ), - ) - - cmd.Stdout = gui.Views.Main - cmd.Stderr = gui.Views.Main - - gui.OSCommand.PrepareForChildren(cmd) - _ = cmd.Start() - - go func() { - <-ctx.Done() - if err := gui.OSCommand.Kill(cmd); err != nil { - gui.Log.Error(err) - } - }() - - _ = cmd.Wait() - }, - }) -} - -func (gui *Gui) renderDockerComposeConfig(project *commands.Project) tasks.TaskFunc { - if project != nil && project.Name != gui.DockerCommand.LocalProjectName { - return gui.NewSimpleRenderStringTask(func() string { - return "Compose config is not available for non-local projects" - }) - } - return gui.NewSimpleRenderStringTask(func() string { - return utils.ColoredYamlString(gui.DockerCommand.DockerComposeConfigForProject(project)) - }) -} - -func (gui *Gui) handleOpenConfig(g *gocui.Gui, v *gocui.View) error { - return gui.openFile(gui.Config.ConfigFilename()) -} - -func (gui *Gui) handleEditConfig(g *gocui.Gui, v *gocui.View) error { - return gui.editFile(gui.Config.ConfigFilename()) -} - -func lazydockerTitle() string { - return ` - _ _ _ - | | | | | | - | | __ _ _____ _ __| | ___ ___| | _____ _ __ - | |/ _` + "`" + ` |_ / | | |/ _` + "`" + ` |/ _ \ / __| |/ / _ \ '__| - | | (_| |/ /| |_| | (_| | (_) | (__| < __/ | - |_|\__,_/___|\__, |\__,_|\___/ \___|_|\_\___|_| - __/ | - |___/ -` -} - -// handleViewAllLogs switches to a subprocess viewing all the logs from docker-compose -func (gui *Gui) handleViewAllLogs(g *gocui.Gui, v *gocui.View) error { - project, _ := gui.Panels.Projects.GetSelectedItem() - c, err := gui.DockerCommand.ViewAllLogs(project) - if err != nil { - return gui.createErrorPanel(err.Error()) - } - - return gui.runSubprocess(c) -} diff --git a/pkg/gui/services_panel.go b/pkg/gui/services_panel.go deleted file mode 100644 index fb768a74..00000000 --- a/pkg/gui/services_panel.go +++ /dev/null @@ -1,559 +0,0 @@ -package gui - -import ( - "context" - "fmt" - "time" - - "github.com/fatih/color" - "github.com/jesseduffield/gocui" - "github.com/jesseduffield/lazydocker/pkg/commands" - "github.com/jesseduffield/lazydocker/pkg/config" - "github.com/jesseduffield/lazydocker/pkg/gui/panels" - "github.com/jesseduffield/lazydocker/pkg/gui/presentation" - "github.com/jesseduffield/lazydocker/pkg/gui/types" - "github.com/jesseduffield/lazydocker/pkg/tasks" - "github.com/jesseduffield/lazydocker/pkg/utils" - "github.com/samber/lo" -) - -func (gui *Gui) getServicesPanel() *panels.SideListPanel[*commands.Service] { - return &panels.SideListPanel[*commands.Service]{ - ContextState: &panels.ContextState[*commands.Service]{ - GetMainTabs: func() []panels.MainTab[*commands.Service] { - return []panels.MainTab[*commands.Service]{ - { - Key: "logs", - Title: gui.Tr.LogsTitle, - Render: gui.renderServiceLogs, - }, - { - Key: "stats", - Title: gui.Tr.StatsTitle, - Render: gui.renderServiceStats, - }, - { - Key: "container-env", - Title: gui.Tr.ContainerEnvTitle, - Render: gui.renderServiceContainerEnv, - }, - { - Key: "container-config", - Title: gui.Tr.ContainerConfigTitle, - Render: gui.renderServiceContainerConfig, - }, - { - Key: "top", - Title: gui.Tr.TopTitle, - Render: gui.renderServiceTop, - }, - } - }, - GetItemContextCacheKey: func(service *commands.Service) string { - if service.Container == nil { - return "services-" + service.ID - } - return "services-" + service.ID + "-" + service.Container.ID + "-" + service.Container.Container.State - }, - }, - ListPanel: panels.ListPanel[*commands.Service]{ - List: panels.NewFilteredList[*commands.Service](), - View: gui.Views.Services, - }, - NoItemsMessage: gui.Tr.NoServices, - Gui: gui.intoInterface(), - // sort services first by whether they have a linked container, and second by alphabetical order - Sort: func(a *commands.Service, b *commands.Service) bool { - if a.Container != nil && b.Container == nil { - return true - } - - if a.Container == nil && b.Container != nil { - return false - } - - return a.Name < b.Name - }, - Filter: func(service *commands.Service) bool { - selectedProject := gui.getSelectedProjectName() - if selectedProject == "" { - // Before any project is selected (e.g. startup), default to - // the local project so we don't briefly flash all services. - selectedProject = gui.DockerCommand.LocalProjectName - } - if selectedProject == "" { - return true - } - return service.ProjectName == selectedProject - }, - GetTableCells: func(service *commands.Service) []string { - return presentation.GetServiceDisplayStrings(&gui.Config.UserConfig.Gui, service) - }, - Hide: func() bool { - // Show services panel if there are any compose projects (local or discovered) - return !gui.DockerCommand.InDockerComposeProject && len(gui.Panels.Services.List.GetAllItems()) == 0 - }, - } -} - -func (gui *Gui) renderServiceContainerConfig(service *commands.Service) tasks.TaskFunc { - if service.Container == nil { - return gui.NewSimpleRenderStringTask(func() string { return gui.Tr.NoContainer }) - } - - return gui.renderContainerConfig(service.Container) -} - -func (gui *Gui) renderServiceContainerEnv(service *commands.Service) tasks.TaskFunc { - if service.Container == nil { - return gui.NewSimpleRenderStringTask(func() string { return gui.Tr.NoContainer }) - } - - return gui.renderContainerEnv(service.Container) -} - -func (gui *Gui) renderServiceStats(service *commands.Service) tasks.TaskFunc { - if service.Container == nil { - return gui.NewSimpleRenderStringTask(func() string { return gui.Tr.NoContainer }) - } - - return gui.renderContainerStats(service.Container) -} - -func (gui *Gui) renderServiceTop(service *commands.Service) tasks.TaskFunc { - return gui.NewTickerTask(TickerTaskOpts{ - Func: func(ctx context.Context, notifyStopped chan struct{}) { - contents, err := service.RenderTop(ctx) - if err != nil { - gui.RenderStringMain(err.Error()) - } - - gui.reRenderStringMain(contents) - }, - Duration: time.Second, - Before: func(ctx context.Context) { gui.clearMainView() }, - Wrap: gui.Config.UserConfig.Gui.WrapMainPanel, - Autoscroll: false, - }) -} - -func (gui *Gui) renderServiceLogs(service *commands.Service) tasks.TaskFunc { - if service.Container == nil { - return gui.NewSimpleRenderStringTask(func() string { return gui.Tr.NoContainerForService }) - } - - return gui.renderContainerLogsToMain(service.Container) -} - -type commandOption struct { - description string - command string - onPress func() error -} - -func (r *commandOption) getDisplayStrings() []string { - return []string{r.description, color.New(color.FgCyan).Sprint(r.command)} -} - -// isServiceFromLocalProject returns true if the given service belongs to the -// local compose project (the one whose compose file is in the current directory). -// Compose commands like up/stop/restart only work for local project services. -func (gui *Gui) isServiceFromLocalProject(service *commands.Service) bool { - return service.ProjectName == gui.DockerCommand.LocalProjectName -} - -func (gui *Gui) handleServiceRemoveMenu(g *gocui.Gui, v *gocui.View) error { - service, err := gui.Panels.Services.GetSelectedItem() - if err != nil { - return nil - } - - if !gui.isServiceFromLocalProject(service) { - return gui.createErrorPanel(gui.Tr.CannotManageNonLocalService) - } - - composeCommand := gui.DockerCommand.NewCommandObject(commands.CommandObject{Service: service}).DockerCompose - - options := []*commandOption{ - { - description: gui.Tr.Remove, - command: fmt.Sprintf("%s rm --stop --force %s", composeCommand, service.Name), - }, - { - description: gui.Tr.RemoveWithVolumes, - command: fmt.Sprintf("%s rm --stop --force -v %s", composeCommand, service.Name), - }, - } - - menuItems := lo.Map(options, func(option *commandOption, _ int) *types.MenuItem { - return &types.MenuItem{ - LabelColumns: option.getDisplayStrings(), - OnPress: func() error { - return gui.WithWaitingStatus(gui.Tr.RemovingStatus, func() error { - if err := gui.OSCommand.RunCommand(option.command); err != nil { - return gui.createErrorPanel(err.Error()) - } - - return nil - }) - }, - } - }) - - return gui.Menu(CreateMenuOptions{ - Title: "", - Items: menuItems, - }) -} - -func (gui *Gui) handleServicePause(g *gocui.Gui, v *gocui.View) error { - service, err := gui.Panels.Services.GetSelectedItem() - if err != nil { - return nil - } - if service.Container == nil { - return nil - } - - return gui.PauseContainer(service.Container) -} - -func (gui *Gui) handleServiceStop(g *gocui.Gui, v *gocui.View) error { - service, err := gui.Panels.Services.GetSelectedItem() - if err != nil { - return nil - } - - return gui.createConfirmationPanel(gui.Tr.Confirm, gui.Tr.StopService, func(g *gocui.Gui, v *gocui.View) error { - return gui.WithWaitingStatus(gui.Tr.StoppingStatus, func() error { - if !gui.isServiceFromLocalProject(service) { - if service.Container == nil { - return gui.createErrorPanel(gui.Tr.CannotManageNonLocalService) - } - return service.Container.Stop() - } - if err := service.Stop(); err != nil { - return gui.createErrorPanel(err.Error()) - } - return nil - }) - }, nil) -} - -func (gui *Gui) handleServiceUp(g *gocui.Gui, v *gocui.View) error { - service, err := gui.Panels.Services.GetSelectedItem() - if err != nil { - return nil - } - - if !gui.isServiceFromLocalProject(service) { - return gui.createErrorPanel(gui.Tr.CannotManageNonLocalService) - } - - return gui.WithWaitingStatus(gui.Tr.UppingServiceStatus, func() error { - if err := service.Up(); err != nil { - return gui.createErrorPanel(err.Error()) - } - - return nil - }) -} - -func (gui *Gui) handleServiceRestart(g *gocui.Gui, v *gocui.View) error { - service, err := gui.Panels.Services.GetSelectedItem() - if err != nil { - return nil - } - - return gui.WithWaitingStatus(gui.Tr.RestartingStatus, func() error { - if !gui.isServiceFromLocalProject(service) { - if service.Container == nil { - return gui.createErrorPanel(gui.Tr.CannotManageNonLocalService) - } - return service.Container.Restart() - } - if err := service.Restart(); err != nil { - return gui.createErrorPanel(err.Error()) - } - return nil - }) -} - -func (gui *Gui) handleServiceStart(g *gocui.Gui, v *gocui.View) error { - service, err := gui.Panels.Services.GetSelectedItem() - if err != nil { - return nil - } - - if !gui.isServiceFromLocalProject(service) { - if service.Container == nil { - return gui.createErrorPanel(gui.Tr.CannotManageNonLocalService) - } - return gui.WithWaitingStatus(gui.Tr.StartingStatus, func() error { - return service.Container.Start() - }) - } - - return gui.WithWaitingStatus(gui.Tr.StartingStatus, func() error { - if err := service.Start(); err != nil { - return gui.createErrorPanel(err.Error()) - } - return nil - }) -} - -func (gui *Gui) handleServiceAttach(g *gocui.Gui, v *gocui.View) error { - service, err := gui.Panels.Services.GetSelectedItem() - if err != nil { - return nil - } - - if service.Container == nil { - return gui.createErrorPanel(gui.Tr.NoContainers) - } - - c, err := service.Attach() - if err != nil { - return gui.createErrorPanel(err.Error()) - } - - return gui.runSubprocess(c) -} - -func (gui *Gui) handleServiceRenderLogsToMain(g *gocui.Gui, v *gocui.View) error { - service, err := gui.Panels.Services.GetSelectedItem() - if err != nil { - return nil - } - - c, err := service.ViewLogs() - if err != nil { - return gui.createErrorPanel(err.Error()) - } - - return gui.runSubprocess(c) -} - -func (gui *Gui) handleProjectUp(g *gocui.Gui, v *gocui.View) error { - project, _ := gui.Panels.Projects.GetSelectedItem() - if project != nil && project.Name != gui.DockerCommand.LocalProjectName { - return gui.createErrorPanel(gui.Tr.CannotManageNonLocalService) - } - return gui.createConfirmationPanel(gui.Tr.Confirm, gui.Tr.ConfirmUpProject, func(g *gocui.Gui, v *gocui.View) error { - cmdStr := utils.ApplyTemplate( - gui.Config.UserConfig.CommandTemplates.Up, - gui.DockerCommand.NewCommandObject(commands.CommandObject{Project: project}), - ) - - return gui.WithWaitingStatus(gui.Tr.UppingProjectStatus, func() error { - if err := gui.OSCommand.RunCommand(cmdStr); err != nil { - return gui.createErrorPanel(err.Error()) - } - return nil - }) - }, nil) -} - -func (gui *Gui) handleProjectDown(g *gocui.Gui, v *gocui.View) error { - project, _ := gui.Panels.Projects.GetSelectedItem() - if project != nil && project.Name != gui.DockerCommand.LocalProjectName { - return gui.createErrorPanel(gui.Tr.CannotManageNonLocalService) - } - downCommand := utils.ApplyTemplate( - gui.Config.UserConfig.CommandTemplates.Down, - gui.DockerCommand.NewCommandObject(commands.CommandObject{Project: project}), - ) - - downWithVolumesCommand := utils.ApplyTemplate( - gui.Config.UserConfig.CommandTemplates.DownWithVolumes, - gui.DockerCommand.NewCommandObject(commands.CommandObject{Project: project}), - ) - - options := []*commandOption{ - { - description: gui.Tr.Down, - command: downCommand, - onPress: func() error { - return gui.WithWaitingStatus(gui.Tr.DowningStatus, func() error { - if err := gui.OSCommand.RunCommand(downCommand); err != nil { - return gui.createErrorPanel(err.Error()) - } - return nil - }) - }, - }, - { - description: gui.Tr.DownWithVolumes, - command: downWithVolumesCommand, - onPress: func() error { - return gui.WithWaitingStatus(gui.Tr.DowningStatus, func() error { - if err := gui.OSCommand.RunCommand(downWithVolumesCommand); err != nil { - return gui.createErrorPanel(err.Error()) - } - return nil - }) - }, - }, - } - - menuItems := lo.Map(options, func(option *commandOption, _ int) *types.MenuItem { - return &types.MenuItem{ - LabelColumns: option.getDisplayStrings(), - OnPress: option.onPress, - } - }) - - return gui.Menu(CreateMenuOptions{ - Title: "", - Items: menuItems, - }) -} - -func (gui *Gui) handleServiceRestartMenu(g *gocui.Gui, v *gocui.View) error { - service, err := gui.Panels.Services.GetSelectedItem() - if err != nil { - return nil - } - - if !gui.isServiceFromLocalProject(service) { - return gui.createErrorPanel(gui.Tr.CannotManageNonLocalService) - } - - rebuildCommand := utils.ApplyTemplate( - gui.Config.UserConfig.CommandTemplates.RebuildService, - gui.DockerCommand.NewCommandObject(commands.CommandObject{Service: service}), - ) - - recreateCommand := utils.ApplyTemplate( - gui.Config.UserConfig.CommandTemplates.RecreateService, - gui.DockerCommand.NewCommandObject(commands.CommandObject{Service: service}), - ) - - options := []*commandOption{ - { - description: gui.Tr.Restart, - command: utils.ApplyTemplate( - gui.Config.UserConfig.CommandTemplates.RestartService, - gui.DockerCommand.NewCommandObject(commands.CommandObject{Service: service}), - ), - onPress: func() error { - return gui.WithWaitingStatus(gui.Tr.RestartingStatus, func() error { - if err := service.Restart(); err != nil { - return gui.createErrorPanel(err.Error()) - } - return nil - }) - }, - }, - { - description: gui.Tr.Recreate, - command: utils.ApplyTemplate( - gui.Config.UserConfig.CommandTemplates.RecreateService, - gui.DockerCommand.NewCommandObject(commands.CommandObject{Service: service}), - ), - onPress: func() error { - return gui.WithWaitingStatus(gui.Tr.RestartingStatus, func() error { - if err := gui.OSCommand.RunCommand(recreateCommand); err != nil { - return gui.createErrorPanel(err.Error()) - } - return nil - }) - }, - }, - { - description: gui.Tr.Rebuild, - command: utils.ApplyTemplate( - gui.Config.UserConfig.CommandTemplates.RebuildService, - gui.DockerCommand.NewCommandObject(commands.CommandObject{Service: service}), - ), - onPress: func() error { - return gui.runSubprocess(gui.OSCommand.RunCustomCommand(rebuildCommand)) - }, - }, - } - - menuItems := lo.Map(options, func(option *commandOption, _ int) *types.MenuItem { - return &types.MenuItem{ - LabelColumns: option.getDisplayStrings(), - OnPress: option.onPress, - } - }) - - return gui.Menu(CreateMenuOptions{ - Title: "", - Items: menuItems, - }) -} - -func (gui *Gui) handleServicesCustomCommand(g *gocui.Gui, v *gocui.View) error { - service, err := gui.Panels.Services.GetSelectedItem() - if err != nil { - return nil - } - - commandObject := gui.DockerCommand.NewCommandObject(commands.CommandObject{ - Service: service, - Container: service.Container, - }) - - var customCommands []config.CustomCommand - - customServiceCommands := gui.Config.UserConfig.CustomCommands.Services - // we only include service commands if they have no serviceNames defined or if our service happens to be one of the serviceNames defined -L: - for _, cmd := range customServiceCommands { - if len(cmd.ServiceNames) == 0 { - customCommands = append(customCommands, cmd) - continue L - } - for _, serviceName := range cmd.ServiceNames { - if serviceName == service.Name { - // appending these to the top given they're more likely to be selected - customCommands = append([]config.CustomCommand{cmd}, customCommands...) - continue L - } - } - } - - if service.Container != nil { - customCommands = append(customCommands, gui.Config.UserConfig.CustomCommands.Containers...) - } - - return gui.createCustomCommandMenu(customCommands, commandObject) -} - -func (gui *Gui) handleServicesBulkCommand(g *gocui.Gui, v *gocui.View) error { - project, _ := gui.Panels.Projects.GetSelectedItem() - bulkCommands := gui.Config.UserConfig.BulkCommands.Services - commandObject := gui.DockerCommand.NewCommandObject(commands.CommandObject{Project: project}) - - return gui.createBulkCommandMenu(bulkCommands, commandObject) -} - -func (gui *Gui) handleServicesExecShell(g *gocui.Gui, v *gocui.View) error { - service, err := gui.Panels.Services.GetSelectedItem() - if err != nil { - return nil - } - - container := service.Container - if container == nil { - return gui.createErrorPanel(gui.Tr.NoContainers) - } - - return gui.containerExecShell(container) -} - -func (gui *Gui) handleServicesOpenInBrowserCommand(g *gocui.Gui, v *gocui.View) error { - service, err := gui.Panels.Services.GetSelectedItem() - if err != nil { - return nil - } - - container := service.Container - if container == nil { - return gui.createErrorPanel(gui.Tr.NoContainers) - } - - return gui.openContainerInBrowser(container) -} diff --git a/pkg/gui/sort_container_test.go b/pkg/gui/sort_container_test.go index a8af434c..336db39a 100644 --- a/pkg/gui/sort_container_test.go +++ b/pkg/gui/sort_container_test.go @@ -4,40 +4,31 @@ import ( "sort" "testing" - "github.com/docker/docker/api/types/container" - "github.com/jesseduffield/lazydocker/pkg/commands" + "github.com/jesseduffield/lazycontainer/pkg/commands" "github.com/stretchr/testify/assert" ) func sampleContainers() []*commands.Container { return []*commands.Container{ { - ID: "1", - Name: "1", - Container: container.Summary{ - State: "exited", - }, + ID: "1", + Name: "1", + AppleContainer: commands.AppleContainer{Status: "exited"}, }, { - ID: "2", - Name: "2", - Container: container.Summary{ - State: "running", - }, + ID: "2", + Name: "2", + AppleContainer: commands.AppleContainer{Status: "running"}, }, { - ID: "3", - Name: "3", - Container: container.Summary{ - State: "running", - }, + ID: "3", + Name: "3", + AppleContainer: commands.AppleContainer{Status: "running"}, }, { - ID: "4", - Name: "4", - Container: container.Summary{ - State: "created", - }, + ID: "4", + Name: "4", + AppleContainer: commands.AppleContainer{Status: "created"}, }, } } @@ -45,32 +36,24 @@ func sampleContainers() []*commands.Container { func expectedPerStatusContainers() []*commands.Container { return []*commands.Container{ { - ID: "2", - Name: "2", - Container: container.Summary{ - State: "running", - }, + ID: "2", + Name: "2", + AppleContainer: commands.AppleContainer{Status: "running"}, }, { - ID: "3", - Name: "3", - Container: container.Summary{ - State: "running", - }, + ID: "3", + Name: "3", + AppleContainer: commands.AppleContainer{Status: "running"}, }, { - ID: "1", - Name: "1", - Container: container.Summary{ - State: "exited", - }, + ID: "1", + Name: "1", + AppleContainer: commands.AppleContainer{Status: "exited"}, }, { - ID: "4", - Name: "4", - Container: container.Summary{ - State: "created", - }, + ID: "4", + Name: "4", + AppleContainer: commands.AppleContainer{Status: "created"}, }, } } @@ -78,40 +61,32 @@ func expectedPerStatusContainers() []*commands.Container { func expectedLegacySortedContainers() []*commands.Container { return []*commands.Container{ { - ID: "1", - Name: "1", - Container: container.Summary{ - State: "exited", - }, + ID: "1", + Name: "1", + AppleContainer: commands.AppleContainer{Status: "exited"}, }, { - ID: "2", - Name: "2", - Container: container.Summary{ - State: "running", - }, + ID: "2", + Name: "2", + AppleContainer: commands.AppleContainer{Status: "running"}, }, { - ID: "3", - Name: "3", - Container: container.Summary{ - State: "running", - }, + ID: "3", + Name: "3", + AppleContainer: commands.AppleContainer{Status: "running"}, }, { - ID: "4", - Name: "4", - Container: container.Summary{ - State: "created", - }, + ID: "4", + Name: "4", + AppleContainer: commands.AppleContainer{Status: "created"}, }, } } func assertEqualContainers(t *testing.T, left *commands.Container, right *commands.Container) { t.Helper() - assert.Equal(t, left.Container.State, right.Container.State) - assert.Equal(t, left.Container.ID, right.Container.ID) + assert.Equal(t, left.GetStatus(), right.GetStatus()) + assert.Equal(t, left.ID, right.ID) assert.Equal(t, left.Name, right.Name) } diff --git a/pkg/gui/subprocess.go b/pkg/gui/subprocess.go index b41ac475..40291ace 100644 --- a/pkg/gui/subprocess.go +++ b/pkg/gui/subprocess.go @@ -9,7 +9,7 @@ import ( "strings" "github.com/fatih/color" - "github.com/jesseduffield/lazydocker/pkg/utils" + "github.com/jesseduffield/lazycontainer/pkg/utils" ) func (gui *Gui) runSubprocess(cmd *exec.Cmd) error { diff --git a/pkg/gui/tasks_adapter.go b/pkg/gui/tasks_adapter.go index f85e4723..3a53850d 100644 --- a/pkg/gui/tasks_adapter.go +++ b/pkg/gui/tasks_adapter.go @@ -4,7 +4,7 @@ import ( "context" "time" - "github.com/jesseduffield/lazydocker/pkg/tasks" + "github.com/jesseduffield/lazycontainer/pkg/tasks" ) func (gui *Gui) QueueTask(f func(ctx context.Context)) error { diff --git a/pkg/gui/view_helpers.go b/pkg/gui/view_helpers.go index 6acbb18c..74a84d40 100644 --- a/pkg/gui/view_helpers.go +++ b/pkg/gui/view_helpers.go @@ -6,8 +6,8 @@ import ( "strings" "github.com/jesseduffield/gocui" - "github.com/jesseduffield/lazydocker/pkg/gui/panels" - "github.com/jesseduffield/lazydocker/pkg/utils" + "github.com/jesseduffield/lazycontainer/pkg/gui/panels" + "github.com/jesseduffield/lazycontainer/pkg/utils" "github.com/samber/lo" "github.com/spkg/bom" ) @@ -364,8 +364,6 @@ func (gui *Gui) currentListPanel() (panels.ISideListPanel, bool) { func (gui *Gui) allSidePanels() []panels.ISideListPanel { return []panels.ISideListPanel{ - gui.Panels.Projects, - gui.Panels.Services, gui.Panels.Containers, gui.Panels.Images, gui.Panels.Volumes, diff --git a/pkg/gui/views.go b/pkg/gui/views.go index 95553f5a..b03f8eb8 100644 --- a/pkg/gui/views.go +++ b/pkg/gui/views.go @@ -8,9 +8,6 @@ import ( "github.com/samber/lo" ) -// See https://github.com/xtermjs/xterm.js/issues/4238 -// VSCode is soon to fix this in an upcoming update. -// Once that's done, we can scrap the HIDE_UNDERSCORES variable var ( underscoreEnvChecked bool hideUnderscores bool @@ -26,48 +23,33 @@ func hideUnderScores() bool { } type Views struct { - // side panels - Project *gocui.View - Services *gocui.View Containers *gocui.View Images *gocui.View Volumes *gocui.View Networks *gocui.View - // main panel Main *gocui.View - // bottom line Options *gocui.View Information *gocui.View AppStatus *gocui.View - // text that prompts you to enter text in the Filter view FilterPrefix *gocui.View - // appears next to the SearchPrefix view, it's where you type in the search string Filter *gocui.View - // popups Confirmation *gocui.View Menu *gocui.View - // will cover everything when it appears Limit *gocui.View } type viewNameMapping struct { viewPtr **gocui.View name string - // if true, we handle the position/size of the view in arrangement.go. Otherwise - // we handle it manually. autoPosition bool } func (gui *Gui) orderedViewNameMappings() []viewNameMapping { return []viewNameMapping{ - // first layer. Ordering within this layer does not matter because there are - // no overlapping views - {viewPtr: &gui.Views.Project, name: "project", autoPosition: true}, - {viewPtr: &gui.Views.Services, name: "services", autoPosition: true}, {viewPtr: &gui.Views.Containers, name: "containers", autoPosition: true}, {viewPtr: &gui.Views.Images, name: "images", autoPosition: true}, {viewPtr: &gui.Views.Volumes, name: "volumes", autoPosition: true}, @@ -75,18 +57,15 @@ func (gui *Gui) orderedViewNameMappings() []viewNameMapping { {viewPtr: &gui.Views.Main, name: "main", autoPosition: true}, - // bottom line {viewPtr: &gui.Views.Options, name: "options", autoPosition: true}, {viewPtr: &gui.Views.AppStatus, name: "appStatus", autoPosition: true}, {viewPtr: &gui.Views.Information, name: "information", autoPosition: true}, {viewPtr: &gui.Views.Filter, name: "filter", autoPosition: true}, {viewPtr: &gui.Views.FilterPrefix, name: "filterPrefix", autoPosition: true}, - // popups. {viewPtr: &gui.Views.Menu, name: "menu", autoPosition: false}, {viewPtr: &gui.Views.Confirmation, name: "confirmation", autoPosition: false}, - // this guy will cover everything else when it appears {viewPtr: &gui.Views.Limit, name: "limit", autoPosition: true}, } } @@ -115,41 +94,26 @@ func (gui *Gui) createAllViews() error { selectedLineBgColor := GetGocuiStyle(gui.Config.UserConfig.Gui.Theme.SelectedLineBgColor) gui.Views.Main.Wrap = gui.Config.UserConfig.Gui.WrapMainPanel - // when you run a docker container with the -it flags (interactive mode) it adds carriage returns for some reason. This is not docker's fault, it's an os-level default. gui.Views.Main.IgnoreCarriageReturns = true - gui.Views.Project.Title = gui.Tr.ProjectTitle - gui.Views.Project.TitlePrefix = "[1]" - gui.Views.Project.Highlight = true - gui.Views.Project.SelBgColor = selectedLineBgColor - - gui.Views.Services.Highlight = true - gui.Views.Services.Title = gui.Tr.ServicesTitle - gui.Views.Services.TitlePrefix = "[2]" - gui.Views.Services.SelBgColor = selectedLineBgColor - gui.Views.Containers.Highlight = true gui.Views.Containers.SelBgColor = selectedLineBgColor - if gui.Config.UserConfig.Gui.ShowAllContainers || !gui.DockerCommand.InDockerComposeProject { - gui.Views.Containers.Title = gui.Tr.ContainersTitle - } else { - gui.Views.Containers.Title = gui.Tr.StandaloneContainersTitle - } - gui.Views.Containers.TitlePrefix = "[3]" + gui.Views.Containers.Title = gui.Tr.ContainersTitle + gui.Views.Containers.TitlePrefix = "[1]" gui.Views.Images.Highlight = true gui.Views.Images.Title = gui.Tr.ImagesTitle gui.Views.Images.SelBgColor = selectedLineBgColor - gui.Views.Images.TitlePrefix = "[4]" + gui.Views.Images.TitlePrefix = "[2]" gui.Views.Volumes.Highlight = true gui.Views.Volumes.Title = gui.Tr.VolumesTitle - gui.Views.Volumes.TitlePrefix = "[5]" + gui.Views.Volumes.TitlePrefix = "[3]" gui.Views.Volumes.SelBgColor = selectedLineBgColor gui.Views.Networks.Highlight = true gui.Views.Networks.Title = gui.Tr.NetworksTitle - gui.Views.Networks.TitlePrefix = "[6]" + gui.Views.Networks.TitlePrefix = "[4]" gui.Views.Networks.SelBgColor = selectedLineBgColor gui.Views.Options.Frame = false @@ -212,7 +176,6 @@ func (gui *Gui) popupViewNames() []string { return []string{"confirmation", "menu"} } -// these views have their position and size determined by arrangement.go func (gui *Gui) autoPositionedViewNames() []string { views := lo.Filter(gui.orderedViewNameMappings(), func(viewNameMapping viewNameMapping, _ int) bool { return viewNameMapping.autoPosition diff --git a/pkg/gui/volumes_panel.go b/pkg/gui/volumes_panel.go index 96085949..e796907b 100644 --- a/pkg/gui/volumes_panel.go +++ b/pkg/gui/volumes_panel.go @@ -1,17 +1,15 @@ package gui import ( - "fmt" - "github.com/fatih/color" "github.com/jesseduffield/gocui" - "github.com/jesseduffield/lazydocker/pkg/commands" - "github.com/jesseduffield/lazydocker/pkg/config" - "github.com/jesseduffield/lazydocker/pkg/gui/panels" - "github.com/jesseduffield/lazydocker/pkg/gui/presentation" - "github.com/jesseduffield/lazydocker/pkg/gui/types" - "github.com/jesseduffield/lazydocker/pkg/tasks" - "github.com/jesseduffield/lazydocker/pkg/utils" + "github.com/jesseduffield/lazycontainer/pkg/commands" + "github.com/jesseduffield/lazycontainer/pkg/config" + "github.com/jesseduffield/lazycontainer/pkg/gui/panels" + "github.com/jesseduffield/lazycontainer/pkg/gui/presentation" + "github.com/jesseduffield/lazycontainer/pkg/gui/types" + "github.com/jesseduffield/lazycontainer/pkg/tasks" + "github.com/jesseduffield/lazycontainer/pkg/utils" "github.com/samber/lo" ) @@ -37,16 +35,7 @@ func (gui *Gui) getVolumesPanel() *panels.SideListPanel[*commands.Volume] { }, NoItemsMessage: gui.Tr.NoVolumes, Gui: gui.intoInterface(), - // we're sorting these volumes based on whether they have labels defined, - // because those are the ones you typically care about. - // Within that, we also sort them alphabetically Sort: func(a *commands.Volume, b *commands.Volume) bool { - if len(a.Volume.Labels) == 0 && len(b.Volume.Labels) > 0 { - return false - } - if len(a.Volume.Labels) > 0 && len(b.Volume.Labels) == 0 { - return true - } return a.Name < b.Name }, GetTableCells: presentation.GetVolumeDisplayStrings, @@ -61,26 +50,7 @@ func (gui *Gui) volumeConfigStr(volume *commands.Volume) string { padding := 15 output := "" output += utils.WithPadding("Name: ", padding) + volume.Name + "\n" - output += utils.WithPadding("Driver: ", padding) + volume.Volume.Driver + "\n" - output += utils.WithPadding("Scope: ", padding) + volume.Volume.Scope + "\n" - output += utils.WithPadding("Mountpoint: ", padding) + volume.Volume.Mountpoint + "\n" - output += utils.WithPadding("Labels: ", padding) + utils.FormatMap(padding, volume.Volume.Labels) + "\n" - output += utils.WithPadding("Options: ", padding) + utils.FormatMap(padding, volume.Volume.Options) + "\n" - - output += utils.WithPadding("Status: ", padding) - if volume.Volume.Status != nil { - output += "\n" - for k, v := range volume.Volume.Status { - output += utils.FormatMapItem(padding, k, v) - } - } else { - output += "n/a" - } - - if volume.Volume.UsageData != nil { - output += utils.WithPadding("RefCount: ", padding) + fmt.Sprintf("%d", volume.Volume.UsageData.RefCount) + "\n" - output += utils.WithPadding("Size: ", padding) + utils.FormatBinaryBytes(int(volume.Volume.UsageData.Size)) + "\n" - } + output += utils.WithPadding("Size: ", padding) + utils.FormatBinaryBytes(int(volume.AppleVolume.SizeInBytes)) + "\n" return output } @@ -94,7 +64,7 @@ func (gui *Gui) reloadVolumes() error { } func (gui *Gui) refreshStateVolumes() error { - volumes, err := gui.DockerCommand.RefreshVolumes() + volumes, err := gui.ContainerCmd.RefreshVolumes() if err != nil { return err } @@ -113,19 +83,12 @@ func (gui *Gui) handleVolumesRemoveMenu(g *gocui.Gui, v *gocui.View) error { type removeVolumeOption struct { description string command string - force bool } options := []*removeVolumeOption{ { description: gui.Tr.Remove, - command: utils.WithShortSha("docker volume rm " + volume.Name), - force: false, - }, - { - description: gui.Tr.ForceRemove, - command: utils.WithShortSha("docker volume rm --force " + volume.Name), - force: true, + command: utils.WithShortSha("container volume rm " + volume.Name), }, } @@ -134,7 +97,7 @@ func (gui *Gui) handleVolumesRemoveMenu(g *gocui.Gui, v *gocui.View) error { LabelColumns: []string{option.description, color.New(color.FgRed).Sprint(option.command)}, OnPress: func() error { return gui.WithWaitingStatus(gui.Tr.RemovingStatus, func() error { - if err := volume.Remove(option.force); err != nil { + if err := volume.Remove(); err != nil { return gui.createErrorPanel(err.Error()) } return nil @@ -152,7 +115,7 @@ func (gui *Gui) handleVolumesRemoveMenu(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) handlePruneVolumes() error { return gui.createConfirmationPanel(gui.Tr.Confirm, gui.Tr.ConfirmPruneVolumes, func(g *gocui.Gui, v *gocui.View) error { return gui.WithWaitingStatus(gui.Tr.PruningStatus, func() error { - err := gui.DockerCommand.PruneVolumes() + err := gui.ContainerCmd.PruneVolumes() if err != nil { return gui.createErrorPanel(err.Error()) } @@ -167,7 +130,7 @@ func (gui *Gui) handleVolumesCustomCommand(g *gocui.Gui, v *gocui.View) error { return nil } - commandObject := gui.DockerCommand.NewCommandObject(commands.CommandObject{ + commandObject := gui.ContainerCmd.Client.NewCommandObject(commands.CommandObject{ Volume: volume, }) @@ -185,7 +148,7 @@ func (gui *Gui) handleVolumesBulkCommand(g *gocui.Gui, v *gocui.View) error { } bulkCommands := append(baseBulkCommands, gui.Config.UserConfig.BulkCommands.Volumes...) - commandObject := gui.DockerCommand.NewCommandObject(commands.CommandObject{}) + commandObject := gui.ContainerCmd.Client.NewCommandObject(commands.CommandObject{}) return gui.createBulkCommandMenu(bulkCommands, commandObject) } diff --git a/pkg/i18n/chinese.go b/pkg/i18n/chinese.go index aa125f0b..90e3f26d 100644 --- a/pkg/i18n/chinese.go +++ b/pkg/i18n/chinese.go @@ -16,12 +16,12 @@ func chineseSet() TranslationSet { NoViewMachingNewLineFocusedSwitchStatement: "没有匹配 newLineFocused switch 语句的视图", - ErrorOccurred: "发生错误!请在 https://github.com/jesseduffield/lazydocker/issues 上创建一个问题", + ErrorOccurred: "发生错误!请在 https://github.com/g-battaglia/lazy-apple-container/issues 上创建一个问题", ConnectionFailed: "无法连接到 Docker 客户端。您可能需要重新启动 Docker 客户端", UnattachableContainerError: "容器不支持 attaching。您必须使用“-it”标志运行服务,或者在docker-compose.yml文件中使用`stdin_open: true,tty: true`", WaitingForContainerInfo: "在 Docker 给我们更多关于容器的信息之前,无法继续。请几分钟后重试。", CannotAttachStoppedContainerError: "您不能 attach 到已停止的容器,您需要先启动它(您可以用 'r' 键来执行此操作)(是的,我懒得为您自动执行此操作)(很酷的是,我可以通过错误消息与您进行一对一的通讯)", - CannotAccessDockerSocketError: "无法访问 Docker 套接字:unix:///var/run/docker.sock\n请以 root 用户身份运行 lazydocker 或阅读https://docs.docker.com/install/linux/linux-postinstall/", + CannotAccessDockerSocketError: "无法访问 Docker 套接字:unix:///var/run/docker.sock\n请以 root 用户身份运行 lazyapple 或阅读https://docs.docker.com/install/linux/linux-postinstall/", CannotKillChildError: "等待三秒钟以停止子进程。可能有一个孤儿进程在您的系统上继续运行。", Donate: "捐赠", @@ -37,8 +37,8 @@ func chineseSet() TranslationSet { Menu: "菜单", MenuTitle: "菜单", Scroll: "滚动", - OpenConfig: "打开lazydocker配置", - EditConfig: "编辑lazydocker配置", + OpenConfig: "打开lazyapple配置", + EditConfig: "编辑lazyapple配置", Cancel: "取消", Remove: "移除", HideStopped: "隐藏/显示已停止的容器", @@ -124,7 +124,7 @@ func chineseSet() TranslationSet { ConfirmPruneNetworks: "您确定要删除所有未使用的网络吗?", StopService: "您确定要停止此服务的容器吗?", StopContainer: "您确定要停止此容器吗?", - PressEnterToReturn: "按 enter 返回 lazydocker(您可以在配置文件中设置 `gui.returnImmediately: true` 来禁用此提示)", + PressEnterToReturn: "按 enter 返回 lazyapple(您可以在配置文件中设置 `gui.returnImmediately: true` 来禁用此提示)", No: "否", Yes: "是", diff --git a/pkg/i18n/dutch.go b/pkg/i18n/dutch.go index 8a8601c2..328398db 100644 --- a/pkg/i18n/dutch.go +++ b/pkg/i18n/dutch.go @@ -10,11 +10,11 @@ func dutchSet() TranslationSet { NoViewMachingNewLineFocusedSwitchStatement: "No view matching newLineFocused switch statement", - ErrorOccurred: "Er is iets fout gegaan! Zou je hier een issue aan willen maken: https://github.com/jesseduffield/lazydocker/issues", + ErrorOccurred: "Er is iets fout gegaan! Zou je hier een issue aan willen maken: https://github.com/g-battaglia/lazy-apple-container/issues", ConnectionFailed: "connectie naar de docker client mislukt. Het zou kunnen dat je de docker client moet herstarten", UnattachableContainerError: "Container heeft geen ondersteuning voor vastmaken. Je zou de service met het '-it' argument kunnen draaien of stop dit in je `stdin_open: true, tty: true` docker-compose.yml", CannotAttachStoppedContainerError: "Je kan niet een vastgemaakte container stoppen, je moet het eerst starten (dit kan je doen met de 'r' toets) (ja ik ben te leu om dat voor je te doen automatisch)", - CannotAccessDockerSocketError: "Kan de docker socket niet bereiken: unix:///var/run/docker.sock\nDraai lazydocker als root of lees https://docs.docker.com/install/linux/linux-postinstall/", + CannotAccessDockerSocketError: "Kan de docker socket niet bereiken: unix:///var/run/docker.sock\nDraai lazyapple als root of lees https://docs.docker.com/install/linux/linux-postinstall/", Donate: "Doneer", Confirm: "Bevestigen", @@ -27,8 +27,8 @@ func dutchSet() TranslationSet { Menu: "menu", MenuTitle: "Menu", Scroll: "scroll", - OpenConfig: "open de lazydocker configuratie", - EditConfig: "verander de lazydocker configuratie", + OpenConfig: "open de lazyapple configuratie", + EditConfig: "verander de lazyapple configuratie", Cancel: "annuleren", Remove: "verwijder", HideStopped: "verberg gestopte containers", @@ -92,7 +92,7 @@ func dutchSet() TranslationSet { ConfirmPruneNetworks: "Weet je zeker dat je alle niet gebruikte networks wil vernietigen?", StopService: "Weet je zeker dat je deze service zijn containers wil stoppen?", StopContainer: "Weet je zeker dat je deze container wil stoppen?", - PressEnterToReturn: "Druk op enter om terug te gaan naar lazydocker (Deze popup kan uit gezet worden door in de config dit neer te zetten `gui.returnImmediately: true`)", + PressEnterToReturn: "Druk op enter om terug te gaan naar lazyapple (Deze popup kan uit gezet worden door in de config dit neer te zetten `gui.returnImmediately: true`)", DetachFromContainerShortCut: "Als u wilt loskoppelen van de container, drukt u standaard op ctrl-p en vervolgens op ctrl-q", } } diff --git a/pkg/i18n/english.go b/pkg/i18n/english.go index d86b0c84..b9a3d5a6 100644 --- a/pkg/i18n/english.go +++ b/pkg/i18n/english.go @@ -136,6 +136,14 @@ type TranslationSet struct { FocusImages string FocusVolumes string FocusNetworks string + + Kill string + KillingStatus string + RemoveContainer string + ContainerNotRunning string + NoIp string + NoPorts string + NoStats string } func englishSet() TranslationSet { @@ -154,12 +162,12 @@ func englishSet() TranslationSet { NoViewMachingNewLineFocusedSwitchStatement: "No view matching newLineFocused switch statement", - ErrorOccurred: "An error occurred! Please create an issue at https://github.com/jesseduffield/lazydocker/issues", + ErrorOccurred: "An error occurred! Please create an issue at https://github.com/g-battaglia/lazy-apple-container/issues", ConnectionFailed: "connection to docker client failed. You may need to restart the docker client", UnattachableContainerError: "Container does not support attaching. You must either run the service with the '-it' flag or use `stdin_open: true, tty: true` in the docker-compose.yml file", WaitingForContainerInfo: "Cannot proceed until docker gives us more information about the container. Please retry in a few moments.", CannotAttachStoppedContainerError: "You cannot attach to a stopped container, you need to start it first (which you can actually do with the 'r' key) (yes I'm too lazy to do this automatically for you) (pretty cool that I get to communicate one-on-one with you in the form of an error message though)", - CannotAccessDockerSocketError: "Can't access docker socket at: unix:///var/run/docker.sock\nRun lazydocker as root or read https://docs.docker.com/install/linux/linux-postinstall/", + CannotAccessDockerSocketError: "Can't access docker socket at: unix:///var/run/docker.sock\nRun lazyapple as root or read https://docs.docker.com/install/linux/linux-postinstall/", CannotKillChildError: "Waited three seconds for child process to stop. There may be an orphan process that continues to run on your system.", Donate: "Donate", @@ -175,8 +183,8 @@ func englishSet() TranslationSet { Menu: "menu", MenuTitle: "Menu", Scroll: "scroll", - OpenConfig: "open lazydocker config", - EditConfig: "edit lazydocker config", + OpenConfig: "open lazyapple config", + EditConfig: "edit lazyapple config", Cancel: "cancel", Remove: "remove", HideStopped: "hide/show stopped containers", @@ -242,7 +250,7 @@ func englishSet() TranslationSet { NothingToDisplay: "Nothing to display", NoContainerForService: "No logs to show; service is not associated with a container", CannotDisplayEnvVariables: "Something went wrong while displaying environment variables", - CannotManageNonLocalService: "This service belongs to a different compose project. Run lazydocker from that project's directory to manage it.", + CannotManageNonLocalService: "This service belongs to a different compose project. Run lazyapple from that project's directory to manage it.", NoContainers: "No containers", NoContainer: "No container", @@ -263,7 +271,7 @@ func englishSet() TranslationSet { ConfirmPruneNetworks: "Are you sure you want to prune all unused networks?", StopService: "Are you sure you want to stop this service's containers?", StopContainer: "Are you sure you want to stop this container?", - PressEnterToReturn: "Press enter to return to lazydocker (this prompt can be disabled in your config by setting `gui.returnImmediately: true`)", + PressEnterToReturn: "Press enter to return to lazyapple (this prompt can be disabled in your config by setting `gui.returnImmediately: true`)", DetachFromContainerShortCut: "By default, to detach from the container press ctrl-p then ctrl-q", No: "no", @@ -279,5 +287,13 @@ func englishSet() TranslationSet { FocusImages: "focus images panel", FocusVolumes: "focus volumes panel", FocusNetworks: "focus networks panel", + + Kill: "kill", + KillingStatus: "killing", + RemoveContainer: "remove container", + ContainerNotRunning: "container is not running", + NoIp: "n/a", + NoPorts: "n/a", + NoStats: "No stats available", } } diff --git a/pkg/i18n/french.go b/pkg/i18n/french.go index 29ab5be2..6aa194b6 100644 --- a/pkg/i18n/french.go +++ b/pkg/i18n/french.go @@ -13,13 +13,13 @@ func frenchSet() TranslationSet { NoViewMachingNewLineFocusedSwitchStatement: "Aucune vue correspondant au switch newLineFocused", - ErrorOccurred: "Une erreur s'est produite ! Veuillez créer un rapport d'erreur sur https://github.com/jesseduffield/lazydocker/issues", + ErrorOccurred: "Une erreur s'est produite ! Veuillez créer un rapport d'erreur sur https://github.com/g-battaglia/lazy-apple-container/issues", ConnectionFailed: "Erreur lors de la connexion au client Docker. Essayez de redémarrer votre client Docker", UnattachableContainerError: "Le conteneur ne peut pas être attaché. Vous devez exécuter le service avec le drapeau 'it' ou bien utiliser `stdin_open: true, tty: true` dans votre fichier docker-compose.yml", WaitingForContainerInfo: "Le processus ne peut pas continuer avant que Docker ne fournisse plus d'informations. Veuillez réessayer dans quelques instants.", CannotAttachStoppedContainerError: "Vous ne pouvez pas vous attacher à un conteneur arrêté, vous devez le démarrer en amont (ce que vous pouvez faire avec la touche 'r') (oui, je suis trop paresseux pour le faire automatiquement pour vous) (plutôt cool que je puisse communiquer en tête-à-tête avec vous au travers d'un message d'erreur, cependant)", - CannotAccessDockerSocketError: "Impossible d'accéder au socket Docker à : unix:///var/run/docker.sock\nLancez lazydocker en tant que root ou alors lisez https://docs.docker.com/install/linux/linux-postinstall/", + CannotAccessDockerSocketError: "Impossible d'accéder au socket Docker à : unix:///var/run/docker.sock\nLancez lazyapple en tant que root ou alors lisez https://docs.docker.com/install/linux/linux-postinstall/", CannotKillChildError: "Trois secondes se sont écoulées depuis la demande d'arrêt des processus enfants. Il se peut qu'un processus orphelin continue à tourner sur votre système.", Donate: "Donner", @@ -33,8 +33,8 @@ func frenchSet() TranslationSet { Menu: "menu", MenuTitle: "Menu", Scroll: "faire défiler", - OpenConfig: "ouvrir la configuration lazydocker", - EditConfig: "modifier la configuration lazydocker", + OpenConfig: "ouvrir la configuration lazyapple", + EditConfig: "modifier la configuration lazyapple", Cancel: "annuler", Remove: "supprimer", HideStopped: "cacher/montrer les conteneurs arrêtés", @@ -111,7 +111,7 @@ func frenchSet() TranslationSet { ConfirmPruneNetworks: "Êtes-vous certain de vouloir détruire tous les réseaux non utilisés ?", StopService: "Êtes-vous certain de vouloir arrêter le conteneur de ce service ?", StopContainer: "Êtes-vous certain de vouloir arrêter ce conteneur ?", - PressEnterToReturn: "Appuyez sur Entrée pour revenir à lazydocker (ce message peut être désactivé dans vos configurations en appliquant `gui.returnImmediately: true`)", + PressEnterToReturn: "Appuyez sur Entrée pour revenir à lazyapple (ce message peut être désactivé dans vos configurations en appliquant `gui.returnImmediately: true`)", DetachFromContainerShortCut: "Par défaut, pour se détacher du conteneur appuyez sur CTRL-P puis CTRL-Q", No: "non", diff --git a/pkg/i18n/german.go b/pkg/i18n/german.go index ac23d6b1..fb946b64 100644 --- a/pkg/i18n/german.go +++ b/pkg/i18n/german.go @@ -10,11 +10,11 @@ func germanSet() TranslationSet { NoViewMachingNewLineFocusedSwitchStatement: "No view matching newLineFocused switch statement", - ErrorOccurred: "Es ist ein Fehler aufgetreten! Bitte erstelle ein Issue hier: https://github.com/jesseduffield/lazydocker/issues", + ErrorOccurred: "Es ist ein Fehler aufgetreten! Bitte erstelle ein Issue hier: https://github.com/g-battaglia/lazy-apple-container/issues", ConnectionFailed: "Verbindung zum Docker Client fehlgeschlagen. Du musst ggf. den Docker Client neustarten.", UnattachableContainerError: "Der Container bietet keine Unterstützung für das Anbinden. Du musst den Dienst entweder mit der '-it' Flagge benutzen oder `stdin_open: true, tty: true` in der docker-compose.yml Datei setzen.", CannotAttachStoppedContainerError: "Du kannst keinen angehaltenen Container anbinden. Du musst ihn erst starten (was du tun kannst, indem du 'r' drückst), (ja, ich bin zu faul um das zu automatisieren) (aber ist schon cool, dass ich so eine Konversation durch eine Fehlermeldung mit dir führen kann)", - CannotAccessDockerSocketError: "Kann nicht auf den Socket zugreifen: unix:///var/run/docker.sock\nFühre lazydocker als root aus oder lese https://docs.docker.com/install/linux/linux-postinstall/", + CannotAccessDockerSocketError: "Kann nicht auf den Socket zugreifen: unix:///var/run/docker.sock\nFühre lazyapple als root aus oder lese https://docs.docker.com/install/linux/linux-postinstall/", Donate: "Spenden", Confirm: "Bestätigen", @@ -27,8 +27,8 @@ func germanSet() TranslationSet { Menu: "menü", MenuTitle: "Menü", Scroll: "scrollen", - OpenConfig: "öffne lazydocker Konfiguration", - EditConfig: "bearbeite lazydocker Konfiguration", + OpenConfig: "öffne lazyapple Konfiguration", + EditConfig: "bearbeite lazyapple Konfiguration", Cancel: "abbrechen", Remove: "entfernen", ForceRemove: "Entfernen erzwingen", @@ -91,7 +91,7 @@ func germanSet() TranslationSet { ConfirmPruneNetworks: "Bist du dir sicher, dass du alle unbenutzen Netzwerk entfernen möchtest?", StopService: "Bist du dir sicher, dass du den Dienst dieses Containers anhalten möchtest?", StopContainer: "Bist du dir sicher, dass du den Container anhalten möchtest?", - PressEnterToReturn: "Drücke Eingabe um zu lazydocker zurückzukehren. (Diese Nachfrage kann in Deiner Konfiguration deaktiviert werden, indem du folgenden Wert setzt: `gui.returnImmediately: true`)", + PressEnterToReturn: "Drücke Eingabe um zu lazyapple zurückzukehren. (Diese Nachfrage kann in Deiner Konfiguration deaktiviert werden, indem du folgenden Wert setzt: `gui.returnImmediately: true`)", DetachFromContainerShortCut: "Um sich vom Container zu trennen, drücken Sie standardmäßig ctrl-p ​​und dann ctrl-q", } } diff --git a/pkg/i18n/i18n.go b/pkg/i18n/i18n.go index 2fb447c6..79489578 100644 --- a/pkg/i18n/i18n.go +++ b/pkg/i18n/i18n.go @@ -3,7 +3,7 @@ package i18n import ( "strings" - "github.com/imdario/mergo" + "dario.cat/mergo" "github.com/cloudfoundry/jibber_jabber" "github.com/go-errors/errors" diff --git a/pkg/i18n/polish.go b/pkg/i18n/polish.go index 1025bf47..c7639299 100644 --- a/pkg/i18n/polish.go +++ b/pkg/i18n/polish.go @@ -10,7 +10,7 @@ func polishSet() TranslationSet { NoViewMachingNewLineFocusedSwitchStatement: "Żaden widok nie odpowiada instrukcji przełączenia newLineFocused", - ErrorOccurred: "Wystąpił błąd! Proszę go zgłosić na https://github.com/jesseduffield/lazydocker/issues", + ErrorOccurred: "Wystąpił błąd! Proszę go zgłosić na https://github.com/g-battaglia/lazy-apple-container/issues", ConnectionFailed: "Błąd połączenia z Dockerem. Być może należy go zrestartować.", UnattachableContainerError: "Kontener nie obsługuje przyczepiania (attach). Musisz albo użyć flag '-it', albo `stdin_open: true, tty: true` w pliku docker-compose.yml.", CannotAttachStoppedContainerError: "Nie można przyczepić się do zatrzymanego kontenera, należy go najpierw uruchomić (co można wykonać wciskając przycisk 'r')", @@ -91,7 +91,7 @@ func polishSet() TranslationSet { ConfirmPruneNetworks: "Na pewno wyczyścić wszystkie nieużywane sieci?", StopService: "Na pewno zatrzymać kontenery tego serwisu?", StopContainer: "Na pewno zatrzymać ten kontener?", - PressEnterToReturn: "Wciśnij enter aby powrócić do lazydockera (ten komunikat może być wyłączony w konfiguracji poprzez ustawienie `gui.returnImmediately: true`)", + PressEnterToReturn: "Wciśnij enter aby powrócić do lazyapplea (ten komunikat może być wyłączony w konfiguracji poprzez ustawienie `gui.returnImmediately: true`)", DetachFromContainerShortCut: "Domyślnie, aby odłączyć się od kontenera, naciśnij ctrl-p, a następnie ctrl-q", } } diff --git a/pkg/i18n/portuguese.go b/pkg/i18n/portuguese.go index 36d9bcfd..613b4c69 100644 --- a/pkg/i18n/portuguese.go +++ b/pkg/i18n/portuguese.go @@ -16,12 +16,12 @@ func portugueseSet() TranslationSet { NoViewMachingNewLineFocusedSwitchStatement: "No view matching newLineFocused switch statement", - ErrorOccurred: "Um erro ocorreu! Por favor, crie uma issue em https://github.com/jesseduffield/lazydocker/issues", + ErrorOccurred: "Um erro ocorreu! Por favor, crie uma issue em https://github.com/g-battaglia/lazy-apple-container/issues", ConnectionFailed: "Falha na conexão com o cliente Docker. Você pode precisar reiniciar o seu cliente Docker", UnattachableContainerError: "O contêiner não suporta anexação. Você deve executar o serviço com a flag '-it' ou usar `stdin_open: true, tty: true` no arquivo docker-compose.yml", WaitingForContainerInfo: "Não é possível prosseguir até que o Docker forneça mais informações sobre o contêiner. Por favor, tente novamente em alguns momentos.", CannotAttachStoppedContainerError: "Você não pode anexar a um contêiner parado, você precisa iniciá-lo primeiro (o que você pode fazer com a tecla 'r') (sim, sou preguiçoso demais para fazer isso automaticamente para você) (aliás, bem legal que eu posso me comunicar diretamente com você na forma de uma mensagem de erro)", - CannotAccessDockerSocketError: "Não é possível acessar o sôquete docker em: unix:///var/run/docker.sock\nExecute o lazydocker como root ou leia https://docs.docker.com/install/linux/linux-postinstall/", + CannotAccessDockerSocketError: "Não é possível acessar o sôquete docker em: unix:///var/run/docker.sock\nExecute o lazyapple como root ou leia https://docs.docker.com/install/linux/linux-postinstall/", CannotKillChildError: "Três segundos foram esperarados para que os processos filhos parassem. Pode haver um processo órfão que continua em execução em seu sistema.", Donate: "Doar", @@ -37,8 +37,8 @@ func portugueseSet() TranslationSet { Menu: "menu", MenuTitle: "Menu", Scroll: "rolar", - OpenConfig: "abrir configuração do lazydocker", - EditConfig: "editar configuração do lazydocker", + OpenConfig: "abrir configuração do lazyapple", + EditConfig: "editar configuração do lazyapple", Cancel: "cancelar", Remove: "remover", HideStopped: "ocultar/mostrar contêineres parados", @@ -124,7 +124,7 @@ func portugueseSet() TranslationSet { ConfirmPruneNetworks: "Tem certeza que deseja destruir todas as redes não utilizadas?", StopService: "Tem certeza que deseja parar os contêineres deste serviço?", StopContainer: "Tem certeza que deseja parar este contêiner?", - PressEnterToReturn: "Pressione enter para retornar ao lazydocker (este prompt pode ser desativado em sua configuração definindo `gui.returnImmediately: true`)", + PressEnterToReturn: "Pressione enter para retornar ao lazyapple (este prompt pode ser desativado em sua configuração definindo `gui.returnImmediately: true`)", DetachFromContainerShortCut: "Por padrão, para desanexar do contêiner, pressione ctrl-p e depois ctrl-q", No: "não", diff --git a/pkg/i18n/spanish.go b/pkg/i18n/spanish.go index b9148c3a..62319115 100644 --- a/pkg/i18n/spanish.go +++ b/pkg/i18n/spanish.go @@ -14,11 +14,11 @@ func spanishSet() TranslationSet { RunningCustomCommandStatus: "ejecutando comando personalizado", RunningBulkCommandStatus: "ejecutando comando masivo", - ErrorOccurred: "¡Hubo un error! Por favor crea un issue en https://github.com/jesseduffield/lazydocker/issues", + ErrorOccurred: "¡Hubo un error! Por favor crea un issue en https://github.com/g-battaglia/lazy-apple-container/issues", ConnectionFailed: "Falló la conexión con el docker client. Quizá necesitas reiniciar tu docker client", UnattachableContainerError: "Container does not support attaching. You must either run the service with the '-it' flag or use `stdin_open: true, tty: true` in the docker-compose.yml file", WaitingForContainerInfo: "No podemos proceder hasta que docker nos de más información sobre el contenedor. Inténtalo otra vez en unos segundos.", - CannotAccessDockerSocketError: "No es posible acceder al docker socket en: unix:///var/run/docker.sock\nEjecuta lazydocker como root o lee https://docs.docker.com/install/linux/linux-postinstall/", + CannotAccessDockerSocketError: "No es posible acceder al docker socket en: unix:///var/run/docker.sock\nEjecuta lazyapple como root o lee https://docs.docker.com/install/linux/linux-postinstall/", CannotKillChildError: "Esperamos tres segundos a que el proceso hijo se detenga. Debe de haber un proceso huérfano que continua activo en tu sistema.", Donate: "Donar", @@ -33,8 +33,8 @@ func spanishSet() TranslationSet { Quit: "salir", Menu: "menú", MenuTitle: "Menú", - OpenConfig: "abrir configuración de lazydocker", - EditConfig: "editar configuración de lazydocker", + OpenConfig: "abrir configuración de lazyapple", + EditConfig: "editar configuración de lazyapple", Cancel: "cancelar", Remove: "borrar", HideStopped: "esconder/mostrar contenedores parados", @@ -119,7 +119,7 @@ func spanishSet() TranslationSet { ConfirmPruneNetworks: "¿Realmente quieres limpiar todas las redes sin usar?", StopService: "¿Realmente quieres detener los contenedores de este servicio?", StopContainer: "¿Realmente quieres detener este contenedor?", - PressEnterToReturn: "Presionar [enter] para volver a lazydocker (este mensaje puede ser desactivado en tu configuración poniendo `gui.returnImmediately: true`)", + PressEnterToReturn: "Presionar [enter] para volver a lazyapple (este mensaje puede ser desactivado en tu configuración poniendo `gui.returnImmediately: true`)", No: "no", Yes: "sí", diff --git a/pkg/i18n/turkish.go b/pkg/i18n/turkish.go index fccb3d91..efe60491 100644 --- a/pkg/i18n/turkish.go +++ b/pkg/i18n/turkish.go @@ -10,11 +10,11 @@ func turkishSet() TranslationSet { NoViewMachingNewLineFocusedSwitchStatement: "NewLineFocused anahtar deyimi ile eşleşen görünüm yok", - ErrorOccurred: "Bir hata oluştu! Lütfen https://github.com/jesseduffield/lazydocker/issues adresinden bir hataya ilişkin konu oluşturun", + ErrorOccurred: "Bir hata oluştu! Lütfen https://github.com/g-battaglia/lazy-apple-container/issues adresinden bir hataya ilişkin konu oluşturun", ConnectionFailed: "Docker bağlantısı başarısız oldu. Docker' ı yeniden başlatmanız gerekebilir", UnattachableContainerError: "Konteyner attaching modunda çalışmayı desteklemiyor. Hizmeti '-it' opsiyonu ile çalıştırmanız veya docker-compose.yml dosyasında `stdin_open: true, tty: true` kullanmanız gerekir.", CannotAttachStoppedContainerError: "Durdurulan konteynera bağlanamazsınız, ilk önce başlatmanız gerekir (aslında başlatmayı r tuşu ile yapabilirsiniz) (evet, senin için bunu otomatik olarak yapabilirim fakat çok tembelim) (hata mesajı ile seninle birebir iletişim kurmam çok daha güzel)", - CannotAccessDockerSocketError: "Docker' a şu adresten erişilemiyor : unix:///var/run/docker.sock\n lazydocker' ı root(kök kullanıcı) olarak çalıştır veya şu adresteki adımları takip et : https://docs.docker.com/install/linux/linux-postinstall/", + CannotAccessDockerSocketError: "Docker' a şu adresten erişilemiyor : unix:///var/run/docker.sock\n lazyapple' ı root(kök kullanıcı) olarak çalıştır veya şu adresteki adımları takip et : https://docs.docker.com/install/linux/linux-postinstall/", Donate: "Bağış", Confirm: "Onayla", @@ -27,7 +27,7 @@ func turkishSet() TranslationSet { Menu: "menü", MenuTitle: "Menü", Scroll: "kaydır", - OpenConfig: "lazydocker ayarlarını aç", + OpenConfig: "lazyapple ayarlarını aç", EditConfig: "lazzydocker ayarlarını düzenle", Cancel: "iptal", Remove: "kaldır", @@ -91,7 +91,7 @@ func turkishSet() TranslationSet { ConfirmPruneNetworks: "Kullanılmayan tüm ağları temizlemek istediğinizden emin misiniz?", StopService: "Bu servisin konteynerlerini durdurmak istediğinize emin misiniz?", StopContainer: "Bu konteyneri durdurmak istediğinize emin misiniz?", - PressEnterToReturn: "lazydocker' a geri dönmek için enter tuşuna basın ( Bu uyarı, `gui.return Immediately: true` ayarıyla devre dışı bırakılabilir)", + PressEnterToReturn: "lazyapple' a geri dönmek için enter tuşuna basın ( Bu uyarı, `gui.return Immediately: true` ayarıyla devre dışı bırakılabilir)", DetachFromContainerShortCut: "Varsayılan olarak, kaptan ayırmak için ctrl-p ve ardından ctrl-q tuşlarına basın", } } diff --git a/pkg/log/log.go b/pkg/log/log.go index 232a7bb8..04959aae 100644 --- a/pkg/log/log.go +++ b/pkg/log/log.go @@ -6,7 +6,7 @@ import ( "os" "path/filepath" - "github.com/jesseduffield/lazydocker/pkg/config" + "github.com/jesseduffield/lazycontainer/pkg/config" "github.com/sirupsen/logrus" ) diff --git a/pkg/tasks/tasks.go b/pkg/tasks/tasks.go index 06fac38f..72325b88 100644 --- a/pkg/tasks/tasks.go +++ b/pkg/tasks/tasks.go @@ -5,7 +5,7 @@ import ( "fmt" "time" - "github.com/jesseduffield/lazydocker/pkg/i18n" + "github.com/jesseduffield/lazycontainer/pkg/i18n" "github.com/sasha-s/go-deadlock" "github.com/sirupsen/logrus" ) diff --git a/scripts/cheatsheet/main.go b/scripts/cheatsheet/main.go index 53f72eda..1b87afb0 100644 --- a/scripts/cheatsheet/main.go +++ b/scripts/cheatsheet/main.go @@ -5,7 +5,7 @@ import ( "log" "os" - "github.com/jesseduffield/lazydocker/pkg/cheatsheet" + "github.com/jesseduffield/lazycontainer/pkg/cheatsheet" ) func main() { diff --git a/scripts/translations/get_required_translations.go b/scripts/translations/get_required_translations.go index 9e0dd400..b8df7179 100644 --- a/scripts/translations/get_required_translations.go +++ b/scripts/translations/get_required_translations.go @@ -4,7 +4,7 @@ import ( "fmt" "reflect" - "github.com/jesseduffield/lazydocker/pkg/i18n" + "github.com/jesseduffield/lazycontainer/pkg/i18n" ) func main() { diff --git a/vendor/github.com/imdario/mergo/.deepsource.toml b/vendor/dario.cat/mergo/.deepsource.toml similarity index 72% rename from vendor/github.com/imdario/mergo/.deepsource.toml rename to vendor/dario.cat/mergo/.deepsource.toml index 8a0681af..a8bc979e 100644 --- a/vendor/github.com/imdario/mergo/.deepsource.toml +++ b/vendor/dario.cat/mergo/.deepsource.toml @@ -9,4 +9,4 @@ name = "go" enabled = true [analyzers.meta] - import_path = "github.com/imdario/mergo" \ No newline at end of file + import_path = "dario.cat/mergo" \ No newline at end of file diff --git a/vendor/github.com/imdario/mergo/.gitignore b/vendor/dario.cat/mergo/.gitignore similarity index 95% rename from vendor/github.com/imdario/mergo/.gitignore rename to vendor/dario.cat/mergo/.gitignore index 529c3412..45ad0f1a 100644 --- a/vendor/github.com/imdario/mergo/.gitignore +++ b/vendor/dario.cat/mergo/.gitignore @@ -13,6 +13,9 @@ # Output of the go coverage tool, specifically when used with LiteIDE *.out +# Golang/Intellij +.idea + # Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736 .glide/ diff --git a/vendor/github.com/imdario/mergo/.travis.yml b/vendor/dario.cat/mergo/.travis.yml similarity index 100% rename from vendor/github.com/imdario/mergo/.travis.yml rename to vendor/dario.cat/mergo/.travis.yml diff --git a/vendor/github.com/imdario/mergo/CODE_OF_CONDUCT.md b/vendor/dario.cat/mergo/CODE_OF_CONDUCT.md similarity index 100% rename from vendor/github.com/imdario/mergo/CODE_OF_CONDUCT.md rename to vendor/dario.cat/mergo/CODE_OF_CONDUCT.md diff --git a/vendor/github.com/imdario/mergo/CONTRIBUTING.md b/vendor/dario.cat/mergo/CONTRIBUTING.md similarity index 100% rename from vendor/github.com/imdario/mergo/CONTRIBUTING.md rename to vendor/dario.cat/mergo/CONTRIBUTING.md diff --git a/vendor/dario.cat/mergo/FUNDING.json b/vendor/dario.cat/mergo/FUNDING.json new file mode 100644 index 00000000..0585e1fe --- /dev/null +++ b/vendor/dario.cat/mergo/FUNDING.json @@ -0,0 +1,7 @@ +{ + "drips": { + "ethereum": { + "ownedBy": "0x6160020e7102237aC41bdb156e94401692D76930" + } + } +} diff --git a/vendor/github.com/imdario/mergo/LICENSE b/vendor/dario.cat/mergo/LICENSE similarity index 100% rename from vendor/github.com/imdario/mergo/LICENSE rename to vendor/dario.cat/mergo/LICENSE diff --git a/vendor/github.com/imdario/mergo/README.md b/vendor/dario.cat/mergo/README.md similarity index 65% rename from vendor/github.com/imdario/mergo/README.md rename to vendor/dario.cat/mergo/README.md index ffbbb62c..0e4a59af 100644 --- a/vendor/github.com/imdario/mergo/README.md +++ b/vendor/dario.cat/mergo/README.md @@ -44,77 +44,59 @@ Also a lovely [comune](http://en.wikipedia.org/wiki/Mergo) (municipality) in the ## Status -It is ready for production use. [It is used in several projects by Docker, Google, The Linux Foundation, VMWare, Shopify, Microsoft, etc](https://github.com/imdario/mergo#mergo-in-the-wild). +Mergo is stable and frozen, ready for production. Check a short list of the projects using at large scale it [here](https://github.com/imdario/mergo#mergo-in-the-wild). -### Important note +No new features are accepted. They will be considered for a future v2 that improves the implementation and fixes bugs for corner cases. + +### Important notes + +#### 1.0.0 + +In [1.0.0](//github.com/imdario/mergo/releases/tag/1.0.0) Mergo moves to a vanity URL `dario.cat/mergo`. No more v1 versions will be released. + +If the vanity URL is causing issues in your project due to a dependency pulling Mergo - it isn't a direct dependency in your project - it is recommended to use [replace](https://github.com/golang/go/wiki/Modules#when-should-i-use-the-replace-directive) to pin the version to the last one with the old import URL: + +``` +replace github.com/imdario/mergo => github.com/imdario/mergo v0.3.16 +``` + +#### 0.3.9 Please keep in mind that a problematic PR broke [0.3.9](//github.com/imdario/mergo/releases/tag/0.3.9). I reverted it in [0.3.10](//github.com/imdario/mergo/releases/tag/0.3.10), and I consider it stable but not bug-free. Also, this version adds support for go modules. Keep in mind that in [0.3.2](//github.com/imdario/mergo/releases/tag/0.3.2), Mergo changed `Merge()`and `Map()` signatures to support [transformers](#transformers). I added an optional/variadic argument so that it won't break the existing code. -If you were using Mergo before April 6th, 2015, please check your project works as intended after updating your local copy with ```go get -u github.com/imdario/mergo```. I apologize for any issue caused by its previous behavior and any future bug that Mergo could cause in existing projects after the change (release 0.2.0). +If you were using Mergo before April 6th, 2015, please check your project works as intended after updating your local copy with ```go get -u dario.cat/mergo```. I apologize for any issue caused by its previous behavior and any future bug that Mergo could cause in existing projects after the change (release 0.2.0). ### Donations If Mergo is useful to you, consider buying me a coffee, a beer, or making a monthly donation to allow me to keep building great free software. :heart_eyes: -Buy Me a Coffee at ko-fi.com Donate using Liberapay Become my sponsor ### Mergo in the wild -- [moby/moby](https://github.com/moby/moby) -- [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes) -- [vmware/dispatch](https://github.com/vmware/dispatch) -- [Shopify/themekit](https://github.com/Shopify/themekit) -- [imdario/zas](https://github.com/imdario/zas) -- [matcornic/hermes](https://github.com/matcornic/hermes) -- [OpenBazaar/openbazaar-go](https://github.com/OpenBazaar/openbazaar-go) -- [kataras/iris](https://github.com/kataras/iris) -- [michaelsauter/crane](https://github.com/michaelsauter/crane) -- [go-task/task](https://github.com/go-task/task) -- [sensu/uchiwa](https://github.com/sensu/uchiwa) -- [ory/hydra](https://github.com/ory/hydra) -- [sisatech/vcli](https://github.com/sisatech/vcli) -- [dairycart/dairycart](https://github.com/dairycart/dairycart) -- [projectcalico/felix](https://github.com/projectcalico/felix) -- [resin-os/balena](https://github.com/resin-os/balena) -- [go-kivik/kivik](https://github.com/go-kivik/kivik) -- [Telefonica/govice](https://github.com/Telefonica/govice) -- [supergiant/supergiant](supergiant/supergiant) -- [SergeyTsalkov/brooce](https://github.com/SergeyTsalkov/brooce) -- [soniah/dnsmadeeasy](https://github.com/soniah/dnsmadeeasy) -- [ohsu-comp-bio/funnel](https://github.com/ohsu-comp-bio/funnel) -- [EagerIO/Stout](https://github.com/EagerIO/Stout) -- [lynndylanhurley/defsynth-api](https://github.com/lynndylanhurley/defsynth-api) -- [russross/canvasassignments](https://github.com/russross/canvasassignments) -- [rdegges/cryptly-api](https://github.com/rdegges/cryptly-api) -- [casualjim/exeggutor](https://github.com/casualjim/exeggutor) -- [divshot/gitling](https://github.com/divshot/gitling) -- [RWJMurphy/gorl](https://github.com/RWJMurphy/gorl) -- [andrerocker/deploy42](https://github.com/andrerocker/deploy42) -- [elwinar/rambler](https://github.com/elwinar/rambler) -- [tmaiaroto/gopartman](https://github.com/tmaiaroto/gopartman) -- [jfbus/impressionist](https://github.com/jfbus/impressionist) -- [Jmeyering/zealot](https://github.com/Jmeyering/zealot) -- [godep-migrator/rigger-host](https://github.com/godep-migrator/rigger-host) -- [Dronevery/MultiwaySwitch-Go](https://github.com/Dronevery/MultiwaySwitch-Go) -- [thoas/picfit](https://github.com/thoas/picfit) -- [mantasmatelis/whooplist-server](https://github.com/mantasmatelis/whooplist-server) -- [jnuthong/item_search](https://github.com/jnuthong/item_search) -- [bukalapak/snowboard](https://github.com/bukalapak/snowboard) -- [containerssh/containerssh](https://github.com/containerssh/containerssh) -- [goreleaser/goreleaser](https://github.com/goreleaser/goreleaser) -- [tjpnz/structbot](https://github.com/tjpnz/structbot) +Mergo is used by [thousands](https://deps.dev/go/dario.cat%2Fmergo/v1.0.0/dependents) [of](https://deps.dev/go/github.com%2Fimdario%2Fmergo/v0.3.16/dependents) [projects](https://deps.dev/go/github.com%2Fimdario%2Fmergo/v0.3.12), including: + +* [containerd/containerd](https://github.com/containerd/containerd) +* [datadog/datadog-agent](https://github.com/datadog/datadog-agent) +* [docker/cli/](https://github.com/docker/cli/) +* [goreleaser/goreleaser](https://github.com/goreleaser/goreleaser) +* [go-micro/go-micro](https://github.com/go-micro/go-micro) +* [grafana/loki](https://github.com/grafana/loki) +* [masterminds/sprig](github.com/Masterminds/sprig) +* [moby/moby](https://github.com/moby/moby) +* [slackhq/nebula](https://github.com/slackhq/nebula) +* [volcano-sh/volcano](https://github.com/volcano-sh/volcano) ## Install - go get github.com/imdario/mergo + go get dario.cat/mergo // use in your .go code import ( - "github.com/imdario/mergo" + "dario.cat/mergo" ) ## Usage @@ -135,6 +117,39 @@ if err := mergo.Merge(&dst, src, mergo.WithOverride); err != nil { } ``` +If you need to override pointers, so the source pointer's value is assigned to the destination's pointer, you must use `WithoutDereference`: + +```go +package main + +import ( + "fmt" + + "dario.cat/mergo" +) + +type Foo struct { + A *string + B int64 +} + +func main() { + first := "first" + second := "second" + src := Foo{ + A: &first, + B: 2, + } + + dest := Foo{ + A: &second, + B: 1, + } + + mergo.Merge(&dest, src, mergo.WithOverride, mergo.WithoutDereference) +} +``` + Additionally, you can map a `map[string]interface{}` to a struct (and otherwise, from struct to map), following the same restrictions as in `Merge()`. Keys are capitalized to find each corresponding exported field. ```go @@ -152,7 +167,7 @@ package main import ( "fmt" - "github.com/imdario/mergo" + "dario.cat/mergo" ) type Foo struct { @@ -175,10 +190,6 @@ func main() { } ``` -Note: if test are failing due missing package, please execute: - - go get gopkg.in/yaml.v3 - ### Transformers Transformers allow to merge specific types differently than in the default behavior. In other words, now you can customize how some types are merged. For example, `time.Time` is a struct; it doesn't have zero value but IsZero can return true because it has fields with zero value. How can we merge a non-zero `time.Time`? @@ -188,9 +199,9 @@ package main import ( "fmt" - "github.com/imdario/mergo" - "reflect" - "time" + "dario.cat/mergo" + "reflect" + "time" ) type timeTransformer struct { diff --git a/vendor/github.com/imdario/mergo/SECURITY.md b/vendor/dario.cat/mergo/SECURITY.md similarity index 82% rename from vendor/github.com/imdario/mergo/SECURITY.md rename to vendor/dario.cat/mergo/SECURITY.md index a5de61f7..3788fcc1 100644 --- a/vendor/github.com/imdario/mergo/SECURITY.md +++ b/vendor/dario.cat/mergo/SECURITY.md @@ -4,8 +4,8 @@ | Version | Supported | | ------- | ------------------ | -| 0.3.x | :white_check_mark: | -| < 0.3 | :x: | +| 1.x.x | :white_check_mark: | +| < 1.0 | :x: | ## Security contact information diff --git a/vendor/github.com/imdario/mergo/doc.go b/vendor/dario.cat/mergo/doc.go similarity index 88% rename from vendor/github.com/imdario/mergo/doc.go rename to vendor/dario.cat/mergo/doc.go index fcd985f9..7d96ec05 100644 --- a/vendor/github.com/imdario/mergo/doc.go +++ b/vendor/dario.cat/mergo/doc.go @@ -8,30 +8,36 @@ A helper to merge structs and maps in Golang. Useful for configuration default v Mergo merges same-type structs and maps by setting default values in zero-value fields. Mergo won't merge unexported (private) fields. It will do recursively any exported one. It also won't merge structs inside maps (because they are not addressable using Go reflection). -Status +# Status It is ready for production use. It is used in several projects by Docker, Google, The Linux Foundation, VMWare, Shopify, etc. -Important note +# Important notes + +1.0.0 + +In 1.0.0 Mergo moves to a vanity URL `dario.cat/mergo`. + +0.3.9 Please keep in mind that a problematic PR broke 0.3.9. We reverted it in 0.3.10. We consider 0.3.10 as stable but not bug-free. . Also, this version adds suppot for go modules. Keep in mind that in 0.3.2, Mergo changed Merge() and Map() signatures to support transformers. We added an optional/variadic argument so that it won't break the existing code. -If you were using Mergo before April 6th, 2015, please check your project works as intended after updating your local copy with go get -u github.com/imdario/mergo. I apologize for any issue caused by its previous behavior and any future bug that Mergo could cause in existing projects after the change (release 0.2.0). +If you were using Mergo before April 6th, 2015, please check your project works as intended after updating your local copy with go get -u dario.cat/mergo. I apologize for any issue caused by its previous behavior and any future bug that Mergo could cause in existing projects after the change (release 0.2.0). -Install +# Install Do your usual installation procedure: - go get github.com/imdario/mergo + go get dario.cat/mergo - // use in your .go code - import ( - "github.com/imdario/mergo" - ) + // use in your .go code + import ( + "dario.cat/mergo" + ) -Usage +# Usage You can only merge same-type structs with exported fields initialized as zero value of their type and same-types maps. Mergo won't merge unexported (private) fields but will do recursively any exported one. It won't merge empty structs value as they are zero values too. Also, maps will be merged recursively except for structs inside maps (because they are not addressable using Go reflection). @@ -59,7 +65,7 @@ Here is a nice example: import ( "fmt" - "github.com/imdario/mergo" + "dario.cat/mergo" ) type Foo struct { @@ -81,7 +87,7 @@ Here is a nice example: // {two 2} } -Transformers +# Transformers Transformers allow to merge specific types differently than in the default behavior. In other words, now you can customize how some types are merged. For example, time.Time is a struct; it doesn't have zero value but IsZero can return true because it has fields with zero value. How can we merge a non-zero time.Time? @@ -89,9 +95,9 @@ Transformers allow to merge specific types differently than in the default behav import ( "fmt" - "github.com/imdario/mergo" - "reflect" - "time" + "dario.cat/mergo" + "reflect" + "time" ) type timeTransformer struct { @@ -127,17 +133,16 @@ Transformers allow to merge specific types differently than in the default behav // { 2018-01-12 01:15:00 +0000 UTC m=+0.000000001 } } -Contact me +# Contact me If I can help you, you have an idea or you are using Mergo in your projects, don't hesitate to drop me a line (or a pull request): https://twitter.com/im_dario -About +# About Written by Dario Castañé: https://da.rio.hn -License +# License BSD 3-Clause license, as Go language. - */ package mergo diff --git a/vendor/github.com/imdario/mergo/map.go b/vendor/dario.cat/mergo/map.go similarity index 96% rename from vendor/github.com/imdario/mergo/map.go rename to vendor/dario.cat/mergo/map.go index b50d5c2a..759b4f74 100644 --- a/vendor/github.com/imdario/mergo/map.go +++ b/vendor/dario.cat/mergo/map.go @@ -58,7 +58,7 @@ func deepMap(dst, src reflect.Value, visited map[uintptr]*visit, depth int, conf } fieldName := field.Name fieldName = changeInitialCase(fieldName, unicode.ToLower) - if v, ok := dstMap[fieldName]; !ok || (isEmptyValue(reflect.ValueOf(v), !config.ShouldNotDereference) || overwrite) { + if _, ok := dstMap[fieldName]; !ok || (!isEmptyValue(reflect.ValueOf(src.Field(i).Interface()), !config.ShouldNotDereference) && overwrite) || config.overwriteWithEmptyValue { dstMap[fieldName] = src.Field(i).Interface() } } diff --git a/vendor/github.com/imdario/mergo/merge.go b/vendor/dario.cat/mergo/merge.go similarity index 99% rename from vendor/github.com/imdario/mergo/merge.go rename to vendor/dario.cat/mergo/merge.go index 0ef9b213..fd47c95b 100644 --- a/vendor/github.com/imdario/mergo/merge.go +++ b/vendor/dario.cat/mergo/merge.go @@ -269,7 +269,7 @@ func deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, co if err = deepMerge(dst.Elem(), src.Elem(), visited, depth+1, config); err != nil { return } - } else { + } else if src.Elem().Kind() != reflect.Struct { if overwriteWithEmptySrc || (overwrite && !src.IsNil()) || dst.IsNil() { dst.Set(src) } diff --git a/vendor/github.com/imdario/mergo/mergo.go b/vendor/dario.cat/mergo/mergo.go similarity index 100% rename from vendor/github.com/imdario/mergo/mergo.go rename to vendor/dario.cat/mergo/mergo.go diff --git a/vendor/github.com/Microsoft/go-winio/.gitattributes b/vendor/github.com/Microsoft/go-winio/.gitattributes deleted file mode 100644 index 94f480de..00000000 --- a/vendor/github.com/Microsoft/go-winio/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -* text=auto eol=lf \ No newline at end of file diff --git a/vendor/github.com/Microsoft/go-winio/.gitignore b/vendor/github.com/Microsoft/go-winio/.gitignore deleted file mode 100644 index 815e2066..00000000 --- a/vendor/github.com/Microsoft/go-winio/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -.vscode/ - -*.exe - -# testing -testdata - -# go workspaces -go.work -go.work.sum diff --git a/vendor/github.com/Microsoft/go-winio/.golangci.yml b/vendor/github.com/Microsoft/go-winio/.golangci.yml deleted file mode 100644 index faedfe93..00000000 --- a/vendor/github.com/Microsoft/go-winio/.golangci.yml +++ /dev/null @@ -1,147 +0,0 @@ -linters: - enable: - # style - - containedctx # struct contains a context - - dupl # duplicate code - - errname # erorrs are named correctly - - nolintlint # "//nolint" directives are properly explained - - revive # golint replacement - - unconvert # unnecessary conversions - - wastedassign - - # bugs, performance, unused, etc ... - - contextcheck # function uses a non-inherited context - - errorlint # errors not wrapped for 1.13 - - exhaustive # check exhaustiveness of enum switch statements - - gofmt # files are gofmt'ed - - gosec # security - - nilerr # returns nil even with non-nil error - - thelper # test helpers without t.Helper() - - unparam # unused function params - -issues: - exclude-dirs: - - pkg/etw/sample - - exclude-rules: - # err is very often shadowed in nested scopes - - linters: - - govet - text: '^shadow: declaration of "err" shadows declaration' - - # ignore long lines for skip autogen directives - - linters: - - revive - text: "^line-length-limit: " - source: "^//(go:generate|sys) " - - #TODO: remove after upgrading to go1.18 - # ignore comment spacing for nolint and sys directives - - linters: - - revive - text: "^comment-spacings: no space between comment delimiter and comment text" - source: "//(cspell:|nolint:|sys |todo)" - - # not on go 1.18 yet, so no any - - linters: - - revive - text: "^use-any: since GO 1.18 'interface{}' can be replaced by 'any'" - - # allow unjustified ignores of error checks in defer statements - - linters: - - nolintlint - text: "^directive `//nolint:errcheck` should provide explanation" - source: '^\s*defer ' - - # allow unjustified ignores of error lints for io.EOF - - linters: - - nolintlint - text: "^directive `//nolint:errorlint` should provide explanation" - source: '[=|!]= io.EOF' - - -linters-settings: - exhaustive: - default-signifies-exhaustive: true - govet: - enable-all: true - disable: - # struct order is often for Win32 compat - # also, ignore pointer bytes/GC issues for now until performance becomes an issue - - fieldalignment - nolintlint: - require-explanation: true - require-specific: true - revive: - # revive is more configurable than static check, so likely the preferred alternative to static-check - # (once the perf issue is solved: https://github.com/golangci/golangci-lint/issues/2997) - enable-all-rules: - true - # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md - rules: - # rules with required arguments - - name: argument-limit - disabled: true - - name: banned-characters - disabled: true - - name: cognitive-complexity - disabled: true - - name: cyclomatic - disabled: true - - name: file-header - disabled: true - - name: function-length - disabled: true - - name: function-result-limit - disabled: true - - name: max-public-structs - disabled: true - # geneally annoying rules - - name: add-constant # complains about any and all strings and integers - disabled: true - - name: confusing-naming # we frequently use "Foo()" and "foo()" together - disabled: true - - name: flag-parameter # excessive, and a common idiom we use - disabled: true - - name: unhandled-error # warns over common fmt.Print* and io.Close; rely on errcheck instead - disabled: true - # general config - - name: line-length-limit - arguments: - - 140 - - name: var-naming - arguments: - - [] - - - CID - - CRI - - CTRD - - DACL - - DLL - - DOS - - ETW - - FSCTL - - GCS - - GMSA - - HCS - - HV - - IO - - LCOW - - LDAP - - LPAC - - LTSC - - MMIO - - NT - - OCI - - PMEM - - PWSH - - RX - - SACl - - SID - - SMB - - TX - - VHD - - VHDX - - VMID - - VPCI - - WCOW - - WIM diff --git a/vendor/github.com/Microsoft/go-winio/CODEOWNERS b/vendor/github.com/Microsoft/go-winio/CODEOWNERS deleted file mode 100644 index ae1b4942..00000000 --- a/vendor/github.com/Microsoft/go-winio/CODEOWNERS +++ /dev/null @@ -1 +0,0 @@ - * @microsoft/containerplat diff --git a/vendor/github.com/Microsoft/go-winio/LICENSE b/vendor/github.com/Microsoft/go-winio/LICENSE deleted file mode 100644 index b8b569d7..00000000 --- a/vendor/github.com/Microsoft/go-winio/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Microsoft - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/vendor/github.com/Microsoft/go-winio/README.md b/vendor/github.com/Microsoft/go-winio/README.md deleted file mode 100644 index 7474b4f0..00000000 --- a/vendor/github.com/Microsoft/go-winio/README.md +++ /dev/null @@ -1,89 +0,0 @@ -# go-winio [![Build Status](https://github.com/microsoft/go-winio/actions/workflows/ci.yml/badge.svg)](https://github.com/microsoft/go-winio/actions/workflows/ci.yml) - -This repository contains utilities for efficiently performing Win32 IO operations in -Go. Currently, this is focused on accessing named pipes and other file handles, and -for using named pipes as a net transport. - -This code relies on IO completion ports to avoid blocking IO on system threads, allowing Go -to reuse the thread to schedule another goroutine. This limits support to Windows Vista and -newer operating systems. This is similar to the implementation of network sockets in Go's net -package. - -Please see the LICENSE file for licensing information. - -## Contributing - -This project welcomes contributions and suggestions. -Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that -you have the right to, and actually do, grant us the rights to use your contribution. -For details, visit [Microsoft CLA](https://cla.microsoft.com). - -When you submit a pull request, a CLA-bot will automatically determine whether you need to -provide a CLA and decorate the PR appropriately (e.g., label, comment). -Simply follow the instructions provided by the bot. -You will only need to do this once across all repos using our CLA. - -Additionally, the pull request pipeline requires the following steps to be performed before -mergining. - -### Code Sign-Off - -We require that contributors sign their commits using [`git commit --signoff`][git-commit-s] -to certify they either authored the work themselves or otherwise have permission to use it in this project. - -A range of commits can be signed off using [`git rebase --signoff`][git-rebase-s]. - -Please see [the developer certificate](https://developercertificate.org) for more info, -as well as to make sure that you can attest to the rules listed. -Our CI uses the DCO Github app to ensure that all commits in a given PR are signed-off. - -### Linting - -Code must pass a linting stage, which uses [`golangci-lint`][lint]. -The linting settings are stored in [`.golangci.yaml`](./.golangci.yaml), and can be run -automatically with VSCode by adding the following to your workspace or folder settings: - -```json - "go.lintTool": "golangci-lint", - "go.lintOnSave": "package", -``` - -Additional editor [integrations options are also available][lint-ide]. - -Alternatively, `golangci-lint` can be [installed locally][lint-install] and run from the repo root: - -```shell -# use . or specify a path to only lint a package -# to show all lint errors, use flags "--max-issues-per-linter=0 --max-same-issues=0" -> golangci-lint run ./... -``` - -### Go Generate - -The pipeline checks that auto-generated code, via `go generate`, are up to date. - -This can be done for the entire repo: - -```shell -> go generate ./... -``` - -## Code of Conduct - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). -For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or -contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. - -## Special Thanks - -Thanks to [natefinch][natefinch] for the inspiration for this library. -See [npipe](https://github.com/natefinch/npipe) for another named pipe implementation. - -[lint]: https://golangci-lint.run/ -[lint-ide]: https://golangci-lint.run/usage/integrations/#editor-integration -[lint-install]: https://golangci-lint.run/usage/install/#local-installation - -[git-commit-s]: https://git-scm.com/docs/git-commit#Documentation/git-commit.txt--s -[git-rebase-s]: https://git-scm.com/docs/git-rebase#Documentation/git-rebase.txt---signoff - -[natefinch]: https://github.com/natefinch diff --git a/vendor/github.com/Microsoft/go-winio/SECURITY.md b/vendor/github.com/Microsoft/go-winio/SECURITY.md deleted file mode 100644 index 869fdfe2..00000000 --- a/vendor/github.com/Microsoft/go-winio/SECURITY.md +++ /dev/null @@ -1,41 +0,0 @@ - - -## Security - -Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). - -If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below. - -## Reporting Security Issues - -**Please do not report security vulnerabilities through public GitHub issues.** - -Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). - -If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey). - -You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). - -Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: - - * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) - * Full paths of source file(s) related to the manifestation of the issue - * The location of the affected source code (tag/branch/commit or direct URL) - * Any special configuration required to reproduce the issue - * Step-by-step instructions to reproduce the issue - * Proof-of-concept or exploit code (if possible) - * Impact of the issue, including how an attacker might exploit the issue - -This information will help us triage your report more quickly. - -If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs. - -## Preferred Languages - -We prefer all communications to be in English. - -## Policy - -Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd). - - diff --git a/vendor/github.com/Microsoft/go-winio/backup.go b/vendor/github.com/Microsoft/go-winio/backup.go deleted file mode 100644 index b54341da..00000000 --- a/vendor/github.com/Microsoft/go-winio/backup.go +++ /dev/null @@ -1,287 +0,0 @@ -//go:build windows -// +build windows - -package winio - -import ( - "encoding/binary" - "errors" - "fmt" - "io" - "os" - "runtime" - "unicode/utf16" - - "github.com/Microsoft/go-winio/internal/fs" - "golang.org/x/sys/windows" -) - -//sys backupRead(h windows.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupRead -//sys backupWrite(h windows.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) = BackupWrite - -const ( - BackupData = uint32(iota + 1) - BackupEaData - BackupSecurity - BackupAlternateData - BackupLink - BackupPropertyData - BackupObjectId //revive:disable-line:var-naming ID, not Id - BackupReparseData - BackupSparseBlock - BackupTxfsData -) - -const ( - StreamSparseAttributes = uint32(8) -) - -//nolint:revive // var-naming: ALL_CAPS -const ( - WRITE_DAC = windows.WRITE_DAC - WRITE_OWNER = windows.WRITE_OWNER - ACCESS_SYSTEM_SECURITY = windows.ACCESS_SYSTEM_SECURITY -) - -// BackupHeader represents a backup stream of a file. -type BackupHeader struct { - //revive:disable-next-line:var-naming ID, not Id - Id uint32 // The backup stream ID - Attributes uint32 // Stream attributes - Size int64 // The size of the stream in bytes - Name string // The name of the stream (for BackupAlternateData only). - Offset int64 // The offset of the stream in the file (for BackupSparseBlock only). -} - -type win32StreamID struct { - StreamID uint32 - Attributes uint32 - Size uint64 - NameSize uint32 -} - -// BackupStreamReader reads from a stream produced by the BackupRead Win32 API and produces a series -// of BackupHeader values. -type BackupStreamReader struct { - r io.Reader - bytesLeft int64 -} - -// NewBackupStreamReader produces a BackupStreamReader from any io.Reader. -func NewBackupStreamReader(r io.Reader) *BackupStreamReader { - return &BackupStreamReader{r, 0} -} - -// Next returns the next backup stream and prepares for calls to Read(). It skips the remainder of the current stream if -// it was not completely read. -func (r *BackupStreamReader) Next() (*BackupHeader, error) { - if r.bytesLeft > 0 { //nolint:nestif // todo: flatten this - if s, ok := r.r.(io.Seeker); ok { - // Make sure Seek on io.SeekCurrent sometimes succeeds - // before trying the actual seek. - if _, err := s.Seek(0, io.SeekCurrent); err == nil { - if _, err = s.Seek(r.bytesLeft, io.SeekCurrent); err != nil { - return nil, err - } - r.bytesLeft = 0 - } - } - if _, err := io.Copy(io.Discard, r); err != nil { - return nil, err - } - } - var wsi win32StreamID - if err := binary.Read(r.r, binary.LittleEndian, &wsi); err != nil { - return nil, err - } - hdr := &BackupHeader{ - Id: wsi.StreamID, - Attributes: wsi.Attributes, - Size: int64(wsi.Size), - } - if wsi.NameSize != 0 { - name := make([]uint16, int(wsi.NameSize/2)) - if err := binary.Read(r.r, binary.LittleEndian, name); err != nil { - return nil, err - } - hdr.Name = windows.UTF16ToString(name) - } - if wsi.StreamID == BackupSparseBlock { - if err := binary.Read(r.r, binary.LittleEndian, &hdr.Offset); err != nil { - return nil, err - } - hdr.Size -= 8 - } - r.bytesLeft = hdr.Size - return hdr, nil -} - -// Read reads from the current backup stream. -func (r *BackupStreamReader) Read(b []byte) (int, error) { - if r.bytesLeft == 0 { - return 0, io.EOF - } - if int64(len(b)) > r.bytesLeft { - b = b[:r.bytesLeft] - } - n, err := r.r.Read(b) - r.bytesLeft -= int64(n) - if err == io.EOF { - err = io.ErrUnexpectedEOF - } else if r.bytesLeft == 0 && err == nil { - err = io.EOF - } - return n, err -} - -// BackupStreamWriter writes a stream compatible with the BackupWrite Win32 API. -type BackupStreamWriter struct { - w io.Writer - bytesLeft int64 -} - -// NewBackupStreamWriter produces a BackupStreamWriter on top of an io.Writer. -func NewBackupStreamWriter(w io.Writer) *BackupStreamWriter { - return &BackupStreamWriter{w, 0} -} - -// WriteHeader writes the next backup stream header and prepares for calls to Write(). -func (w *BackupStreamWriter) WriteHeader(hdr *BackupHeader) error { - if w.bytesLeft != 0 { - return fmt.Errorf("missing %d bytes", w.bytesLeft) - } - name := utf16.Encode([]rune(hdr.Name)) - wsi := win32StreamID{ - StreamID: hdr.Id, - Attributes: hdr.Attributes, - Size: uint64(hdr.Size), - NameSize: uint32(len(name) * 2), - } - if hdr.Id == BackupSparseBlock { - // Include space for the int64 block offset - wsi.Size += 8 - } - if err := binary.Write(w.w, binary.LittleEndian, &wsi); err != nil { - return err - } - if len(name) != 0 { - if err := binary.Write(w.w, binary.LittleEndian, name); err != nil { - return err - } - } - if hdr.Id == BackupSparseBlock { - if err := binary.Write(w.w, binary.LittleEndian, hdr.Offset); err != nil { - return err - } - } - w.bytesLeft = hdr.Size - return nil -} - -// Write writes to the current backup stream. -func (w *BackupStreamWriter) Write(b []byte) (int, error) { - if w.bytesLeft < int64(len(b)) { - return 0, fmt.Errorf("too many bytes by %d", int64(len(b))-w.bytesLeft) - } - n, err := w.w.Write(b) - w.bytesLeft -= int64(n) - return n, err -} - -// BackupFileReader provides an io.ReadCloser interface on top of the BackupRead Win32 API. -type BackupFileReader struct { - f *os.File - includeSecurity bool - ctx uintptr -} - -// NewBackupFileReader returns a new BackupFileReader from a file handle. If includeSecurity is true, -// Read will attempt to read the security descriptor of the file. -func NewBackupFileReader(f *os.File, includeSecurity bool) *BackupFileReader { - r := &BackupFileReader{f, includeSecurity, 0} - return r -} - -// Read reads a backup stream from the file by calling the Win32 API BackupRead(). -func (r *BackupFileReader) Read(b []byte) (int, error) { - var bytesRead uint32 - err := backupRead(windows.Handle(r.f.Fd()), b, &bytesRead, false, r.includeSecurity, &r.ctx) - if err != nil { - return 0, &os.PathError{Op: "BackupRead", Path: r.f.Name(), Err: err} - } - runtime.KeepAlive(r.f) - if bytesRead == 0 { - return 0, io.EOF - } - return int(bytesRead), nil -} - -// Close frees Win32 resources associated with the BackupFileReader. It does not close -// the underlying file. -func (r *BackupFileReader) Close() error { - if r.ctx != 0 { - _ = backupRead(windows.Handle(r.f.Fd()), nil, nil, true, false, &r.ctx) - runtime.KeepAlive(r.f) - r.ctx = 0 - } - return nil -} - -// BackupFileWriter provides an io.WriteCloser interface on top of the BackupWrite Win32 API. -type BackupFileWriter struct { - f *os.File - includeSecurity bool - ctx uintptr -} - -// NewBackupFileWriter returns a new BackupFileWriter from a file handle. If includeSecurity is true, -// Write() will attempt to restore the security descriptor from the stream. -func NewBackupFileWriter(f *os.File, includeSecurity bool) *BackupFileWriter { - w := &BackupFileWriter{f, includeSecurity, 0} - return w -} - -// Write restores a portion of the file using the provided backup stream. -func (w *BackupFileWriter) Write(b []byte) (int, error) { - var bytesWritten uint32 - err := backupWrite(windows.Handle(w.f.Fd()), b, &bytesWritten, false, w.includeSecurity, &w.ctx) - if err != nil { - return 0, &os.PathError{Op: "BackupWrite", Path: w.f.Name(), Err: err} - } - runtime.KeepAlive(w.f) - if int(bytesWritten) != len(b) { - return int(bytesWritten), errors.New("not all bytes could be written") - } - return len(b), nil -} - -// Close frees Win32 resources associated with the BackupFileWriter. It does not -// close the underlying file. -func (w *BackupFileWriter) Close() error { - if w.ctx != 0 { - _ = backupWrite(windows.Handle(w.f.Fd()), nil, nil, true, false, &w.ctx) - runtime.KeepAlive(w.f) - w.ctx = 0 - } - return nil -} - -// OpenForBackup opens a file or directory, potentially skipping access checks if the backup -// or restore privileges have been acquired. -// -// If the file opened was a directory, it cannot be used with Readdir(). -func OpenForBackup(path string, access uint32, share uint32, createmode uint32) (*os.File, error) { - h, err := fs.CreateFile(path, - fs.AccessMask(access), - fs.FileShareMode(share), - nil, - fs.FileCreationDisposition(createmode), - fs.FILE_FLAG_BACKUP_SEMANTICS|fs.FILE_FLAG_OPEN_REPARSE_POINT, - 0, - ) - if err != nil { - err = &os.PathError{Op: "open", Path: path, Err: err} - return nil, err - } - return os.NewFile(uintptr(h), path), nil -} diff --git a/vendor/github.com/Microsoft/go-winio/doc.go b/vendor/github.com/Microsoft/go-winio/doc.go deleted file mode 100644 index 1f5bfe2d..00000000 --- a/vendor/github.com/Microsoft/go-winio/doc.go +++ /dev/null @@ -1,22 +0,0 @@ -// This package provides utilities for efficiently performing Win32 IO operations in Go. -// Currently, this package is provides support for genreal IO and management of -// - named pipes -// - files -// - [Hyper-V sockets] -// -// This code is similar to Go's [net] package, and uses IO completion ports to avoid -// blocking IO on system threads, allowing Go to reuse the thread to schedule other goroutines. -// -// This limits support to Windows Vista and newer operating systems. -// -// Additionally, this package provides support for: -// - creating and managing GUIDs -// - writing to [ETW] -// - opening and manageing VHDs -// - parsing [Windows Image files] -// - auto-generating Win32 API code -// -// [Hyper-V sockets]: https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/make-integration-service -// [ETW]: https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/event-tracing-for-windows--etw- -// [Windows Image files]: https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/work-with-windows-images -package winio diff --git a/vendor/github.com/Microsoft/go-winio/ea.go b/vendor/github.com/Microsoft/go-winio/ea.go deleted file mode 100644 index e104dbdf..00000000 --- a/vendor/github.com/Microsoft/go-winio/ea.go +++ /dev/null @@ -1,137 +0,0 @@ -package winio - -import ( - "bytes" - "encoding/binary" - "errors" -) - -type fileFullEaInformation struct { - NextEntryOffset uint32 - Flags uint8 - NameLength uint8 - ValueLength uint16 -} - -var ( - fileFullEaInformationSize = binary.Size(&fileFullEaInformation{}) - - errInvalidEaBuffer = errors.New("invalid extended attribute buffer") - errEaNameTooLarge = errors.New("extended attribute name too large") - errEaValueTooLarge = errors.New("extended attribute value too large") -) - -// ExtendedAttribute represents a single Windows EA. -type ExtendedAttribute struct { - Name string - Value []byte - Flags uint8 -} - -func parseEa(b []byte) (ea ExtendedAttribute, nb []byte, err error) { - var info fileFullEaInformation - err = binary.Read(bytes.NewReader(b), binary.LittleEndian, &info) - if err != nil { - err = errInvalidEaBuffer - return ea, nb, err - } - - nameOffset := fileFullEaInformationSize - nameLen := int(info.NameLength) - valueOffset := nameOffset + int(info.NameLength) + 1 - valueLen := int(info.ValueLength) - nextOffset := int(info.NextEntryOffset) - if valueLen+valueOffset > len(b) || nextOffset < 0 || nextOffset > len(b) { - err = errInvalidEaBuffer - return ea, nb, err - } - - ea.Name = string(b[nameOffset : nameOffset+nameLen]) - ea.Value = b[valueOffset : valueOffset+valueLen] - ea.Flags = info.Flags - if info.NextEntryOffset != 0 { - nb = b[info.NextEntryOffset:] - } - return ea, nb, err -} - -// DecodeExtendedAttributes decodes a list of EAs from a FILE_FULL_EA_INFORMATION -// buffer retrieved from BackupRead, ZwQueryEaFile, etc. -func DecodeExtendedAttributes(b []byte) (eas []ExtendedAttribute, err error) { - for len(b) != 0 { - ea, nb, err := parseEa(b) - if err != nil { - return nil, err - } - - eas = append(eas, ea) - b = nb - } - return eas, err -} - -func writeEa(buf *bytes.Buffer, ea *ExtendedAttribute, last bool) error { - if int(uint8(len(ea.Name))) != len(ea.Name) { - return errEaNameTooLarge - } - if int(uint16(len(ea.Value))) != len(ea.Value) { - return errEaValueTooLarge - } - entrySize := uint32(fileFullEaInformationSize + len(ea.Name) + 1 + len(ea.Value)) - withPadding := (entrySize + 3) &^ 3 - nextOffset := uint32(0) - if !last { - nextOffset = withPadding - } - info := fileFullEaInformation{ - NextEntryOffset: nextOffset, - Flags: ea.Flags, - NameLength: uint8(len(ea.Name)), - ValueLength: uint16(len(ea.Value)), - } - - err := binary.Write(buf, binary.LittleEndian, &info) - if err != nil { - return err - } - - _, err = buf.Write([]byte(ea.Name)) - if err != nil { - return err - } - - err = buf.WriteByte(0) - if err != nil { - return err - } - - _, err = buf.Write(ea.Value) - if err != nil { - return err - } - - _, err = buf.Write([]byte{0, 0, 0}[0 : withPadding-entrySize]) - if err != nil { - return err - } - - return nil -} - -// EncodeExtendedAttributes encodes a list of EAs into a FILE_FULL_EA_INFORMATION -// buffer for use with BackupWrite, ZwSetEaFile, etc. -func EncodeExtendedAttributes(eas []ExtendedAttribute) ([]byte, error) { - var buf bytes.Buffer - for i := range eas { - last := false - if i == len(eas)-1 { - last = true - } - - err := writeEa(&buf, &eas[i], last) - if err != nil { - return nil, err - } - } - return buf.Bytes(), nil -} diff --git a/vendor/github.com/Microsoft/go-winio/file.go b/vendor/github.com/Microsoft/go-winio/file.go deleted file mode 100644 index fe82a180..00000000 --- a/vendor/github.com/Microsoft/go-winio/file.go +++ /dev/null @@ -1,320 +0,0 @@ -//go:build windows -// +build windows - -package winio - -import ( - "errors" - "io" - "runtime" - "sync" - "sync/atomic" - "syscall" - "time" - - "golang.org/x/sys/windows" -) - -//sys cancelIoEx(file windows.Handle, o *windows.Overlapped) (err error) = CancelIoEx -//sys createIoCompletionPort(file windows.Handle, port windows.Handle, key uintptr, threadCount uint32) (newport windows.Handle, err error) = CreateIoCompletionPort -//sys getQueuedCompletionStatus(port windows.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) = GetQueuedCompletionStatus -//sys setFileCompletionNotificationModes(h windows.Handle, flags uint8) (err error) = SetFileCompletionNotificationModes -//sys wsaGetOverlappedResult(h windows.Handle, o *windows.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) = ws2_32.WSAGetOverlappedResult - -var ( - ErrFileClosed = errors.New("file has already been closed") - ErrTimeout = &timeoutError{} -) - -type timeoutError struct{} - -func (*timeoutError) Error() string { return "i/o timeout" } -func (*timeoutError) Timeout() bool { return true } -func (*timeoutError) Temporary() bool { return true } - -type timeoutChan chan struct{} - -var ioInitOnce sync.Once -var ioCompletionPort windows.Handle - -// ioResult contains the result of an asynchronous IO operation. -type ioResult struct { - bytes uint32 - err error -} - -// ioOperation represents an outstanding asynchronous Win32 IO. -type ioOperation struct { - o windows.Overlapped - ch chan ioResult -} - -func initIO() { - h, err := createIoCompletionPort(windows.InvalidHandle, 0, 0, 0xffffffff) - if err != nil { - panic(err) - } - ioCompletionPort = h - go ioCompletionProcessor(h) -} - -// win32File implements Reader, Writer, and Closer on a Win32 handle without blocking in a syscall. -// It takes ownership of this handle and will close it if it is garbage collected. -type win32File struct { - handle windows.Handle - wg sync.WaitGroup - wgLock sync.RWMutex - closing atomic.Bool - socket bool - readDeadline deadlineHandler - writeDeadline deadlineHandler -} - -type deadlineHandler struct { - setLock sync.Mutex - channel timeoutChan - channelLock sync.RWMutex - timer *time.Timer - timedout atomic.Bool -} - -// makeWin32File makes a new win32File from an existing file handle. -func makeWin32File(h windows.Handle) (*win32File, error) { - f := &win32File{handle: h} - ioInitOnce.Do(initIO) - _, err := createIoCompletionPort(h, ioCompletionPort, 0, 0xffffffff) - if err != nil { - return nil, err - } - err = setFileCompletionNotificationModes(h, windows.FILE_SKIP_COMPLETION_PORT_ON_SUCCESS|windows.FILE_SKIP_SET_EVENT_ON_HANDLE) - if err != nil { - return nil, err - } - f.readDeadline.channel = make(timeoutChan) - f.writeDeadline.channel = make(timeoutChan) - return f, nil -} - -// Deprecated: use NewOpenFile instead. -func MakeOpenFile(h syscall.Handle) (io.ReadWriteCloser, error) { - return NewOpenFile(windows.Handle(h)) -} - -func NewOpenFile(h windows.Handle) (io.ReadWriteCloser, error) { - // If we return the result of makeWin32File directly, it can result in an - // interface-wrapped nil, rather than a nil interface value. - f, err := makeWin32File(h) - if err != nil { - return nil, err - } - return f, nil -} - -// closeHandle closes the resources associated with a Win32 handle. -func (f *win32File) closeHandle() { - f.wgLock.Lock() - // Atomically set that we are closing, releasing the resources only once. - if !f.closing.Swap(true) { - f.wgLock.Unlock() - // cancel all IO and wait for it to complete - _ = cancelIoEx(f.handle, nil) - f.wg.Wait() - // at this point, no new IO can start - windows.Close(f.handle) - f.handle = 0 - } else { - f.wgLock.Unlock() - } -} - -// Close closes a win32File. -func (f *win32File) Close() error { - f.closeHandle() - return nil -} - -// IsClosed checks if the file has been closed. -func (f *win32File) IsClosed() bool { - return f.closing.Load() -} - -// prepareIO prepares for a new IO operation. -// The caller must call f.wg.Done() when the IO is finished, prior to Close() returning. -func (f *win32File) prepareIO() (*ioOperation, error) { - f.wgLock.RLock() - if f.closing.Load() { - f.wgLock.RUnlock() - return nil, ErrFileClosed - } - f.wg.Add(1) - f.wgLock.RUnlock() - c := &ioOperation{} - c.ch = make(chan ioResult) - return c, nil -} - -// ioCompletionProcessor processes completed async IOs forever. -func ioCompletionProcessor(h windows.Handle) { - for { - var bytes uint32 - var key uintptr - var op *ioOperation - err := getQueuedCompletionStatus(h, &bytes, &key, &op, windows.INFINITE) - if op == nil { - panic(err) - } - op.ch <- ioResult{bytes, err} - } -} - -// todo: helsaawy - create an asyncIO version that takes a context - -// asyncIO processes the return value from ReadFile or WriteFile, blocking until -// the operation has actually completed. -func (f *win32File) asyncIO(c *ioOperation, d *deadlineHandler, bytes uint32, err error) (int, error) { - if err != windows.ERROR_IO_PENDING { //nolint:errorlint // err is Errno - return int(bytes), err - } - - if f.closing.Load() { - _ = cancelIoEx(f.handle, &c.o) - } - - var timeout timeoutChan - if d != nil { - d.channelLock.Lock() - timeout = d.channel - d.channelLock.Unlock() - } - - var r ioResult - select { - case r = <-c.ch: - err = r.err - if err == windows.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno - if f.closing.Load() { - err = ErrFileClosed - } - } else if err != nil && f.socket { - // err is from Win32. Query the overlapped structure to get the winsock error. - var bytes, flags uint32 - err = wsaGetOverlappedResult(f.handle, &c.o, &bytes, false, &flags) - } - case <-timeout: - _ = cancelIoEx(f.handle, &c.o) - r = <-c.ch - err = r.err - if err == windows.ERROR_OPERATION_ABORTED { //nolint:errorlint // err is Errno - err = ErrTimeout - } - } - - // runtime.KeepAlive is needed, as c is passed via native - // code to ioCompletionProcessor, c must remain alive - // until the channel read is complete. - // todo: (de)allocate *ioOperation via win32 heap functions, instead of needing to KeepAlive? - runtime.KeepAlive(c) - return int(r.bytes), err -} - -// Read reads from a file handle. -func (f *win32File) Read(b []byte) (int, error) { - c, err := f.prepareIO() - if err != nil { - return 0, err - } - defer f.wg.Done() - - if f.readDeadline.timedout.Load() { - return 0, ErrTimeout - } - - var bytes uint32 - err = windows.ReadFile(f.handle, b, &bytes, &c.o) - n, err := f.asyncIO(c, &f.readDeadline, bytes, err) - runtime.KeepAlive(b) - - // Handle EOF conditions. - if err == nil && n == 0 && len(b) != 0 { - return 0, io.EOF - } else if err == windows.ERROR_BROKEN_PIPE { //nolint:errorlint // err is Errno - return 0, io.EOF - } - return n, err -} - -// Write writes to a file handle. -func (f *win32File) Write(b []byte) (int, error) { - c, err := f.prepareIO() - if err != nil { - return 0, err - } - defer f.wg.Done() - - if f.writeDeadline.timedout.Load() { - return 0, ErrTimeout - } - - var bytes uint32 - err = windows.WriteFile(f.handle, b, &bytes, &c.o) - n, err := f.asyncIO(c, &f.writeDeadline, bytes, err) - runtime.KeepAlive(b) - return n, err -} - -func (f *win32File) SetReadDeadline(deadline time.Time) error { - return f.readDeadline.set(deadline) -} - -func (f *win32File) SetWriteDeadline(deadline time.Time) error { - return f.writeDeadline.set(deadline) -} - -func (f *win32File) Flush() error { - return windows.FlushFileBuffers(f.handle) -} - -func (f *win32File) Fd() uintptr { - return uintptr(f.handle) -} - -func (d *deadlineHandler) set(deadline time.Time) error { - d.setLock.Lock() - defer d.setLock.Unlock() - - if d.timer != nil { - if !d.timer.Stop() { - <-d.channel - } - d.timer = nil - } - d.timedout.Store(false) - - select { - case <-d.channel: - d.channelLock.Lock() - d.channel = make(chan struct{}) - d.channelLock.Unlock() - default: - } - - if deadline.IsZero() { - return nil - } - - timeoutIO := func() { - d.timedout.Store(true) - close(d.channel) - } - - now := time.Now() - duration := deadline.Sub(now) - if deadline.After(now) { - // Deadline is in the future, set a timer to wait - d.timer = time.AfterFunc(duration, timeoutIO) - } else { - // Deadline is in the past. Cancel all pending IO now. - timeoutIO() - } - return nil -} diff --git a/vendor/github.com/Microsoft/go-winio/fileinfo.go b/vendor/github.com/Microsoft/go-winio/fileinfo.go deleted file mode 100644 index c860eb99..00000000 --- a/vendor/github.com/Microsoft/go-winio/fileinfo.go +++ /dev/null @@ -1,106 +0,0 @@ -//go:build windows -// +build windows - -package winio - -import ( - "os" - "runtime" - "unsafe" - - "golang.org/x/sys/windows" -) - -// FileBasicInfo contains file access time and file attributes information. -type FileBasicInfo struct { - CreationTime, LastAccessTime, LastWriteTime, ChangeTime windows.Filetime - FileAttributes uint32 - _ uint32 // padding -} - -// alignedFileBasicInfo is a FileBasicInfo, but aligned to uint64 by containing -// uint64 rather than windows.Filetime. Filetime contains two uint32s. uint64 -// alignment is necessary to pass this as FILE_BASIC_INFO. -type alignedFileBasicInfo struct { - CreationTime, LastAccessTime, LastWriteTime, ChangeTime uint64 - FileAttributes uint32 - _ uint32 // padding -} - -// GetFileBasicInfo retrieves times and attributes for a file. -func GetFileBasicInfo(f *os.File) (*FileBasicInfo, error) { - bi := &alignedFileBasicInfo{} - if err := windows.GetFileInformationByHandleEx( - windows.Handle(f.Fd()), - windows.FileBasicInfo, - (*byte)(unsafe.Pointer(bi)), - uint32(unsafe.Sizeof(*bi)), - ); err != nil { - return nil, &os.PathError{Op: "GetFileInformationByHandleEx", Path: f.Name(), Err: err} - } - runtime.KeepAlive(f) - // Reinterpret the alignedFileBasicInfo as a FileBasicInfo so it matches the - // public API of this module. The data may be unnecessarily aligned. - return (*FileBasicInfo)(unsafe.Pointer(bi)), nil -} - -// SetFileBasicInfo sets times and attributes for a file. -func SetFileBasicInfo(f *os.File, bi *FileBasicInfo) error { - // Create an alignedFileBasicInfo based on a FileBasicInfo. The copy is - // suitable to pass to GetFileInformationByHandleEx. - biAligned := *(*alignedFileBasicInfo)(unsafe.Pointer(bi)) - if err := windows.SetFileInformationByHandle( - windows.Handle(f.Fd()), - windows.FileBasicInfo, - (*byte)(unsafe.Pointer(&biAligned)), - uint32(unsafe.Sizeof(biAligned)), - ); err != nil { - return &os.PathError{Op: "SetFileInformationByHandle", Path: f.Name(), Err: err} - } - runtime.KeepAlive(f) - return nil -} - -// FileStandardInfo contains extended information for the file. -// FILE_STANDARD_INFO in WinBase.h -// https://docs.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-file_standard_info -type FileStandardInfo struct { - AllocationSize, EndOfFile int64 - NumberOfLinks uint32 - DeletePending, Directory bool -} - -// GetFileStandardInfo retrieves ended information for the file. -func GetFileStandardInfo(f *os.File) (*FileStandardInfo, error) { - si := &FileStandardInfo{} - if err := windows.GetFileInformationByHandleEx(windows.Handle(f.Fd()), - windows.FileStandardInfo, - (*byte)(unsafe.Pointer(si)), - uint32(unsafe.Sizeof(*si))); err != nil { - return nil, &os.PathError{Op: "GetFileInformationByHandleEx", Path: f.Name(), Err: err} - } - runtime.KeepAlive(f) - return si, nil -} - -// FileIDInfo contains the volume serial number and file ID for a file. This pair should be -// unique on a system. -type FileIDInfo struct { - VolumeSerialNumber uint64 - FileID [16]byte -} - -// GetFileID retrieves the unique (volume, file ID) pair for a file. -func GetFileID(f *os.File) (*FileIDInfo, error) { - fileID := &FileIDInfo{} - if err := windows.GetFileInformationByHandleEx( - windows.Handle(f.Fd()), - windows.FileIdInfo, - (*byte)(unsafe.Pointer(fileID)), - uint32(unsafe.Sizeof(*fileID)), - ); err != nil { - return nil, &os.PathError{Op: "GetFileInformationByHandleEx", Path: f.Name(), Err: err} - } - runtime.KeepAlive(f) - return fileID, nil -} diff --git a/vendor/github.com/Microsoft/go-winio/hvsock.go b/vendor/github.com/Microsoft/go-winio/hvsock.go deleted file mode 100644 index c4fdd9d4..00000000 --- a/vendor/github.com/Microsoft/go-winio/hvsock.go +++ /dev/null @@ -1,582 +0,0 @@ -//go:build windows -// +build windows - -package winio - -import ( - "context" - "errors" - "fmt" - "io" - "net" - "os" - "time" - "unsafe" - - "golang.org/x/sys/windows" - - "github.com/Microsoft/go-winio/internal/socket" - "github.com/Microsoft/go-winio/pkg/guid" -) - -const afHVSock = 34 // AF_HYPERV - -// Well known Service and VM IDs -// https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/make-integration-service#vmid-wildcards - -// HvsockGUIDWildcard is the wildcard VmId for accepting connections from all partitions. -func HvsockGUIDWildcard() guid.GUID { // 00000000-0000-0000-0000-000000000000 - return guid.GUID{} -} - -// HvsockGUIDBroadcast is the wildcard VmId for broadcasting sends to all partitions. -func HvsockGUIDBroadcast() guid.GUID { // ffffffff-ffff-ffff-ffff-ffffffffffff - return guid.GUID{ - Data1: 0xffffffff, - Data2: 0xffff, - Data3: 0xffff, - Data4: [8]uint8{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, - } -} - -// HvsockGUIDLoopback is the Loopback VmId for accepting connections to the same partition as the connector. -func HvsockGUIDLoopback() guid.GUID { // e0e16197-dd56-4a10-9195-5ee7a155a838 - return guid.GUID{ - Data1: 0xe0e16197, - Data2: 0xdd56, - Data3: 0x4a10, - Data4: [8]uint8{0x91, 0x95, 0x5e, 0xe7, 0xa1, 0x55, 0xa8, 0x38}, - } -} - -// HvsockGUIDSiloHost is the address of a silo's host partition: -// - The silo host of a hosted silo is the utility VM. -// - The silo host of a silo on a physical host is the physical host. -func HvsockGUIDSiloHost() guid.GUID { // 36bd0c5c-7276-4223-88ba-7d03b654c568 - return guid.GUID{ - Data1: 0x36bd0c5c, - Data2: 0x7276, - Data3: 0x4223, - Data4: [8]byte{0x88, 0xba, 0x7d, 0x03, 0xb6, 0x54, 0xc5, 0x68}, - } -} - -// HvsockGUIDChildren is the wildcard VmId for accepting connections from the connector's child partitions. -func HvsockGUIDChildren() guid.GUID { // 90db8b89-0d35-4f79-8ce9-49ea0ac8b7cd - return guid.GUID{ - Data1: 0x90db8b89, - Data2: 0xd35, - Data3: 0x4f79, - Data4: [8]uint8{0x8c, 0xe9, 0x49, 0xea, 0xa, 0xc8, 0xb7, 0xcd}, - } -} - -// HvsockGUIDParent is the wildcard VmId for accepting connections from the connector's parent partition. -// Listening on this VmId accepts connection from: -// - Inside silos: silo host partition. -// - Inside hosted silo: host of the VM. -// - Inside VM: VM host. -// - Physical host: Not supported. -func HvsockGUIDParent() guid.GUID { // a42e7cda-d03f-480c-9cc2-a4de20abb878 - return guid.GUID{ - Data1: 0xa42e7cda, - Data2: 0xd03f, - Data3: 0x480c, - Data4: [8]uint8{0x9c, 0xc2, 0xa4, 0xde, 0x20, 0xab, 0xb8, 0x78}, - } -} - -// hvsockVsockServiceTemplate is the Service GUID used for the VSOCK protocol. -func hvsockVsockServiceTemplate() guid.GUID { // 00000000-facb-11e6-bd58-64006a7986d3 - return guid.GUID{ - Data2: 0xfacb, - Data3: 0x11e6, - Data4: [8]uint8{0xbd, 0x58, 0x64, 0x00, 0x6a, 0x79, 0x86, 0xd3}, - } -} - -// An HvsockAddr is an address for a AF_HYPERV socket. -type HvsockAddr struct { - VMID guid.GUID - ServiceID guid.GUID -} - -type rawHvsockAddr struct { - Family uint16 - _ uint16 - VMID guid.GUID - ServiceID guid.GUID -} - -var _ socket.RawSockaddr = &rawHvsockAddr{} - -// Network returns the address's network name, "hvsock". -func (*HvsockAddr) Network() string { - return "hvsock" -} - -func (addr *HvsockAddr) String() string { - return fmt.Sprintf("%s:%s", &addr.VMID, &addr.ServiceID) -} - -// VsockServiceID returns an hvsock service ID corresponding to the specified AF_VSOCK port. -func VsockServiceID(port uint32) guid.GUID { - g := hvsockVsockServiceTemplate() // make a copy - g.Data1 = port - return g -} - -func (addr *HvsockAddr) raw() rawHvsockAddr { - return rawHvsockAddr{ - Family: afHVSock, - VMID: addr.VMID, - ServiceID: addr.ServiceID, - } -} - -func (addr *HvsockAddr) fromRaw(raw *rawHvsockAddr) { - addr.VMID = raw.VMID - addr.ServiceID = raw.ServiceID -} - -// Sockaddr returns a pointer to and the size of this struct. -// -// Implements the [socket.RawSockaddr] interface, and allows use in -// [socket.Bind] and [socket.ConnectEx]. -func (r *rawHvsockAddr) Sockaddr() (unsafe.Pointer, int32, error) { - return unsafe.Pointer(r), int32(unsafe.Sizeof(rawHvsockAddr{})), nil -} - -// Sockaddr interface allows use with `sockets.Bind()` and `.ConnectEx()`. -func (r *rawHvsockAddr) FromBytes(b []byte) error { - n := int(unsafe.Sizeof(rawHvsockAddr{})) - - if len(b) < n { - return fmt.Errorf("got %d, want %d: %w", len(b), n, socket.ErrBufferSize) - } - - copy(unsafe.Slice((*byte)(unsafe.Pointer(r)), n), b[:n]) - if r.Family != afHVSock { - return fmt.Errorf("got %d, want %d: %w", r.Family, afHVSock, socket.ErrAddrFamily) - } - - return nil -} - -// HvsockListener is a socket listener for the AF_HYPERV address family. -type HvsockListener struct { - sock *win32File - addr HvsockAddr -} - -var _ net.Listener = &HvsockListener{} - -// HvsockConn is a connected socket of the AF_HYPERV address family. -type HvsockConn struct { - sock *win32File - local, remote HvsockAddr -} - -var _ net.Conn = &HvsockConn{} - -func newHVSocket() (*win32File, error) { - fd, err := windows.Socket(afHVSock, windows.SOCK_STREAM, 1) - if err != nil { - return nil, os.NewSyscallError("socket", err) - } - f, err := makeWin32File(fd) - if err != nil { - windows.Close(fd) - return nil, err - } - f.socket = true - return f, nil -} - -// ListenHvsock listens for connections on the specified hvsock address. -func ListenHvsock(addr *HvsockAddr) (_ *HvsockListener, err error) { - l := &HvsockListener{addr: *addr} - - var sock *win32File - sock, err = newHVSocket() - if err != nil { - return nil, l.opErr("listen", err) - } - defer func() { - if err != nil { - _ = sock.Close() - } - }() - - sa := addr.raw() - err = socket.Bind(sock.handle, &sa) - if err != nil { - return nil, l.opErr("listen", os.NewSyscallError("socket", err)) - } - err = windows.Listen(sock.handle, 16) - if err != nil { - return nil, l.opErr("listen", os.NewSyscallError("listen", err)) - } - return &HvsockListener{sock: sock, addr: *addr}, nil -} - -func (l *HvsockListener) opErr(op string, err error) error { - return &net.OpError{Op: op, Net: "hvsock", Addr: &l.addr, Err: err} -} - -// Addr returns the listener's network address. -func (l *HvsockListener) Addr() net.Addr { - return &l.addr -} - -// Accept waits for the next connection and returns it. -func (l *HvsockListener) Accept() (_ net.Conn, err error) { - sock, err := newHVSocket() - if err != nil { - return nil, l.opErr("accept", err) - } - defer func() { - if sock != nil { - sock.Close() - } - }() - c, err := l.sock.prepareIO() - if err != nil { - return nil, l.opErr("accept", err) - } - defer l.sock.wg.Done() - - // AcceptEx, per documentation, requires an extra 16 bytes per address. - // - // https://docs.microsoft.com/en-us/windows/win32/api/mswsock/nf-mswsock-acceptex - const addrlen = uint32(16 + unsafe.Sizeof(rawHvsockAddr{})) - var addrbuf [addrlen * 2]byte - - var bytes uint32 - err = windows.AcceptEx(l.sock.handle, sock.handle, &addrbuf[0], 0 /* rxdatalen */, addrlen, addrlen, &bytes, &c.o) - if _, err = l.sock.asyncIO(c, nil, bytes, err); err != nil { - return nil, l.opErr("accept", os.NewSyscallError("acceptex", err)) - } - - conn := &HvsockConn{ - sock: sock, - } - // The local address returned in the AcceptEx buffer is the same as the Listener socket's - // address. However, the service GUID reported by GetSockName is different from the Listeners - // socket, and is sometimes the same as the local address of the socket that dialed the - // address, with the service GUID.Data1 incremented, but othertimes is different. - // todo: does the local address matter? is the listener's address or the actual address appropriate? - conn.local.fromRaw((*rawHvsockAddr)(unsafe.Pointer(&addrbuf[0]))) - conn.remote.fromRaw((*rawHvsockAddr)(unsafe.Pointer(&addrbuf[addrlen]))) - - // initialize the accepted socket and update its properties with those of the listening socket - if err = windows.Setsockopt(sock.handle, - windows.SOL_SOCKET, windows.SO_UPDATE_ACCEPT_CONTEXT, - (*byte)(unsafe.Pointer(&l.sock.handle)), int32(unsafe.Sizeof(l.sock.handle))); err != nil { - return nil, conn.opErr("accept", os.NewSyscallError("setsockopt", err)) - } - - sock = nil - return conn, nil -} - -// Close closes the listener, causing any pending Accept calls to fail. -func (l *HvsockListener) Close() error { - return l.sock.Close() -} - -// HvsockDialer configures and dials a Hyper-V Socket (ie, [HvsockConn]). -type HvsockDialer struct { - // Deadline is the time the Dial operation must connect before erroring. - Deadline time.Time - - // Retries is the number of additional connects to try if the connection times out, is refused, - // or the host is unreachable - Retries uint - - // RetryWait is the time to wait after a connection error to retry - RetryWait time.Duration - - rt *time.Timer // redial wait timer -} - -// Dial the Hyper-V socket at addr. -// -// See [HvsockDialer.Dial] for more information. -func Dial(ctx context.Context, addr *HvsockAddr) (conn *HvsockConn, err error) { - return (&HvsockDialer{}).Dial(ctx, addr) -} - -// Dial attempts to connect to the Hyper-V socket at addr, and returns a connection if successful. -// Will attempt (HvsockDialer).Retries if dialing fails, waiting (HvsockDialer).RetryWait between -// retries. -// -// Dialing can be cancelled either by providing (HvsockDialer).Deadline, or cancelling ctx. -func (d *HvsockDialer) Dial(ctx context.Context, addr *HvsockAddr) (conn *HvsockConn, err error) { - op := "dial" - // create the conn early to use opErr() - conn = &HvsockConn{ - remote: *addr, - } - - if !d.Deadline.IsZero() { - var cancel context.CancelFunc - ctx, cancel = context.WithDeadline(ctx, d.Deadline) - defer cancel() - } - - // preemptive timeout/cancellation check - if err = ctx.Err(); err != nil { - return nil, conn.opErr(op, err) - } - - sock, err := newHVSocket() - if err != nil { - return nil, conn.opErr(op, err) - } - defer func() { - if sock != nil { - sock.Close() - } - }() - - sa := addr.raw() - err = socket.Bind(sock.handle, &sa) - if err != nil { - return nil, conn.opErr(op, os.NewSyscallError("bind", err)) - } - - c, err := sock.prepareIO() - if err != nil { - return nil, conn.opErr(op, err) - } - defer sock.wg.Done() - var bytes uint32 - for i := uint(0); i <= d.Retries; i++ { - err = socket.ConnectEx( - sock.handle, - &sa, - nil, // sendBuf - 0, // sendDataLen - &bytes, - (*windows.Overlapped)(unsafe.Pointer(&c.o))) - _, err = sock.asyncIO(c, nil, bytes, err) - if i < d.Retries && canRedial(err) { - if err = d.redialWait(ctx); err == nil { - continue - } - } - break - } - if err != nil { - return nil, conn.opErr(op, os.NewSyscallError("connectex", err)) - } - - // update the connection properties, so shutdown can be used - if err = windows.Setsockopt( - sock.handle, - windows.SOL_SOCKET, - windows.SO_UPDATE_CONNECT_CONTEXT, - nil, // optvalue - 0, // optlen - ); err != nil { - return nil, conn.opErr(op, os.NewSyscallError("setsockopt", err)) - } - - // get the local name - var sal rawHvsockAddr - err = socket.GetSockName(sock.handle, &sal) - if err != nil { - return nil, conn.opErr(op, os.NewSyscallError("getsockname", err)) - } - conn.local.fromRaw(&sal) - - // one last check for timeout, since asyncIO doesn't check the context - if err = ctx.Err(); err != nil { - return nil, conn.opErr(op, err) - } - - conn.sock = sock - sock = nil - - return conn, nil -} - -// redialWait waits before attempting to redial, resetting the timer as appropriate. -func (d *HvsockDialer) redialWait(ctx context.Context) (err error) { - if d.RetryWait == 0 { - return nil - } - - if d.rt == nil { - d.rt = time.NewTimer(d.RetryWait) - } else { - // should already be stopped and drained - d.rt.Reset(d.RetryWait) - } - - select { - case <-ctx.Done(): - case <-d.rt.C: - return nil - } - - // stop and drain the timer - if !d.rt.Stop() { - <-d.rt.C - } - return ctx.Err() -} - -// assumes error is a plain, unwrapped windows.Errno provided by direct syscall. -func canRedial(err error) bool { - //nolint:errorlint // guaranteed to be an Errno - switch err { - case windows.WSAECONNREFUSED, windows.WSAENETUNREACH, windows.WSAETIMEDOUT, - windows.ERROR_CONNECTION_REFUSED, windows.ERROR_CONNECTION_UNAVAIL: - return true - default: - return false - } -} - -func (conn *HvsockConn) opErr(op string, err error) error { - // translate from "file closed" to "socket closed" - if errors.Is(err, ErrFileClosed) { - err = socket.ErrSocketClosed - } - return &net.OpError{Op: op, Net: "hvsock", Source: &conn.local, Addr: &conn.remote, Err: err} -} - -func (conn *HvsockConn) Read(b []byte) (int, error) { - c, err := conn.sock.prepareIO() - if err != nil { - return 0, conn.opErr("read", err) - } - defer conn.sock.wg.Done() - buf := windows.WSABuf{Buf: &b[0], Len: uint32(len(b))} - var flags, bytes uint32 - err = windows.WSARecv(conn.sock.handle, &buf, 1, &bytes, &flags, &c.o, nil) - n, err := conn.sock.asyncIO(c, &conn.sock.readDeadline, bytes, err) - if err != nil { - var eno windows.Errno - if errors.As(err, &eno) { - err = os.NewSyscallError("wsarecv", eno) - } - return 0, conn.opErr("read", err) - } else if n == 0 { - err = io.EOF - } - return n, err -} - -func (conn *HvsockConn) Write(b []byte) (int, error) { - t := 0 - for len(b) != 0 { - n, err := conn.write(b) - if err != nil { - return t + n, err - } - t += n - b = b[n:] - } - return t, nil -} - -func (conn *HvsockConn) write(b []byte) (int, error) { - c, err := conn.sock.prepareIO() - if err != nil { - return 0, conn.opErr("write", err) - } - defer conn.sock.wg.Done() - buf := windows.WSABuf{Buf: &b[0], Len: uint32(len(b))} - var bytes uint32 - err = windows.WSASend(conn.sock.handle, &buf, 1, &bytes, 0, &c.o, nil) - n, err := conn.sock.asyncIO(c, &conn.sock.writeDeadline, bytes, err) - if err != nil { - var eno windows.Errno - if errors.As(err, &eno) { - err = os.NewSyscallError("wsasend", eno) - } - return 0, conn.opErr("write", err) - } - return n, err -} - -// Close closes the socket connection, failing any pending read or write calls. -func (conn *HvsockConn) Close() error { - return conn.sock.Close() -} - -func (conn *HvsockConn) IsClosed() bool { - return conn.sock.IsClosed() -} - -// shutdown disables sending or receiving on a socket. -func (conn *HvsockConn) shutdown(how int) error { - if conn.IsClosed() { - return socket.ErrSocketClosed - } - - err := windows.Shutdown(conn.sock.handle, how) - if err != nil { - // If the connection was closed, shutdowns fail with "not connected" - if errors.Is(err, windows.WSAENOTCONN) || - errors.Is(err, windows.WSAESHUTDOWN) { - err = socket.ErrSocketClosed - } - return os.NewSyscallError("shutdown", err) - } - return nil -} - -// CloseRead shuts down the read end of the socket, preventing future read operations. -func (conn *HvsockConn) CloseRead() error { - err := conn.shutdown(windows.SHUT_RD) - if err != nil { - return conn.opErr("closeread", err) - } - return nil -} - -// CloseWrite shuts down the write end of the socket, preventing future write operations and -// notifying the other endpoint that no more data will be written. -func (conn *HvsockConn) CloseWrite() error { - err := conn.shutdown(windows.SHUT_WR) - if err != nil { - return conn.opErr("closewrite", err) - } - return nil -} - -// LocalAddr returns the local address of the connection. -func (conn *HvsockConn) LocalAddr() net.Addr { - return &conn.local -} - -// RemoteAddr returns the remote address of the connection. -func (conn *HvsockConn) RemoteAddr() net.Addr { - return &conn.remote -} - -// SetDeadline implements the net.Conn SetDeadline method. -func (conn *HvsockConn) SetDeadline(t time.Time) error { - // todo: implement `SetDeadline` for `win32File` - if err := conn.SetReadDeadline(t); err != nil { - return fmt.Errorf("set read deadline: %w", err) - } - if err := conn.SetWriteDeadline(t); err != nil { - return fmt.Errorf("set write deadline: %w", err) - } - return nil -} - -// SetReadDeadline implements the net.Conn SetReadDeadline method. -func (conn *HvsockConn) SetReadDeadline(t time.Time) error { - return conn.sock.SetReadDeadline(t) -} - -// SetWriteDeadline implements the net.Conn SetWriteDeadline method. -func (conn *HvsockConn) SetWriteDeadline(t time.Time) error { - return conn.sock.SetWriteDeadline(t) -} diff --git a/vendor/github.com/Microsoft/go-winio/internal/fs/doc.go b/vendor/github.com/Microsoft/go-winio/internal/fs/doc.go deleted file mode 100644 index 1f653881..00000000 --- a/vendor/github.com/Microsoft/go-winio/internal/fs/doc.go +++ /dev/null @@ -1,2 +0,0 @@ -// This package contains Win32 filesystem functionality. -package fs diff --git a/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go b/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go deleted file mode 100644 index 0cd9621d..00000000 --- a/vendor/github.com/Microsoft/go-winio/internal/fs/fs.go +++ /dev/null @@ -1,262 +0,0 @@ -//go:build windows - -package fs - -import ( - "golang.org/x/sys/windows" - - "github.com/Microsoft/go-winio/internal/stringbuffer" -) - -//go:generate go run github.com/Microsoft/go-winio/tools/mkwinsyscall -output zsyscall_windows.go fs.go - -// https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew -//sys CreateFile(name string, access AccessMask, mode FileShareMode, sa *windows.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) [failretval==windows.InvalidHandle] = CreateFileW - -const NullHandle windows.Handle = 0 - -// AccessMask defines standard, specific, and generic rights. -// -// Used with CreateFile and NtCreateFile (and co.). -// -// Bitmask: -// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 -// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 -// +---------------+---------------+-------------------------------+ -// |G|G|G|G|Resvd|A| StandardRights| SpecificRights | -// |R|W|E|A| |S| | | -// +-+-------------+---------------+-------------------------------+ -// -// GR Generic Read -// GW Generic Write -// GE Generic Exectue -// GA Generic All -// Resvd Reserved -// AS Access Security System -// -// https://learn.microsoft.com/en-us/windows/win32/secauthz/access-mask -// -// https://learn.microsoft.com/en-us/windows/win32/secauthz/generic-access-rights -// -// https://learn.microsoft.com/en-us/windows/win32/fileio/file-access-rights-constants -type AccessMask = windows.ACCESS_MASK - -//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API. -const ( - // Not actually any. - // - // For CreateFile: "query certain metadata such as file, directory, or device attributes without accessing that file or device" - // https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew#parameters - FILE_ANY_ACCESS AccessMask = 0 - - GENERIC_READ AccessMask = 0x8000_0000 - GENERIC_WRITE AccessMask = 0x4000_0000 - GENERIC_EXECUTE AccessMask = 0x2000_0000 - GENERIC_ALL AccessMask = 0x1000_0000 - ACCESS_SYSTEM_SECURITY AccessMask = 0x0100_0000 - - // Specific Object Access - // from ntioapi.h - - FILE_READ_DATA AccessMask = (0x0001) // file & pipe - FILE_LIST_DIRECTORY AccessMask = (0x0001) // directory - - FILE_WRITE_DATA AccessMask = (0x0002) // file & pipe - FILE_ADD_FILE AccessMask = (0x0002) // directory - - FILE_APPEND_DATA AccessMask = (0x0004) // file - FILE_ADD_SUBDIRECTORY AccessMask = (0x0004) // directory - FILE_CREATE_PIPE_INSTANCE AccessMask = (0x0004) // named pipe - - FILE_READ_EA AccessMask = (0x0008) // file & directory - FILE_READ_PROPERTIES AccessMask = FILE_READ_EA - - FILE_WRITE_EA AccessMask = (0x0010) // file & directory - FILE_WRITE_PROPERTIES AccessMask = FILE_WRITE_EA - - FILE_EXECUTE AccessMask = (0x0020) // file - FILE_TRAVERSE AccessMask = (0x0020) // directory - - FILE_DELETE_CHILD AccessMask = (0x0040) // directory - - FILE_READ_ATTRIBUTES AccessMask = (0x0080) // all - - FILE_WRITE_ATTRIBUTES AccessMask = (0x0100) // all - - FILE_ALL_ACCESS AccessMask = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF) - FILE_GENERIC_READ AccessMask = (STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE) - FILE_GENERIC_WRITE AccessMask = (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE) - FILE_GENERIC_EXECUTE AccessMask = (STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE) - - SPECIFIC_RIGHTS_ALL AccessMask = 0x0000FFFF - - // Standard Access - // from ntseapi.h - - DELETE AccessMask = 0x0001_0000 - READ_CONTROL AccessMask = 0x0002_0000 - WRITE_DAC AccessMask = 0x0004_0000 - WRITE_OWNER AccessMask = 0x0008_0000 - SYNCHRONIZE AccessMask = 0x0010_0000 - - STANDARD_RIGHTS_REQUIRED AccessMask = 0x000F_0000 - - STANDARD_RIGHTS_READ AccessMask = READ_CONTROL - STANDARD_RIGHTS_WRITE AccessMask = READ_CONTROL - STANDARD_RIGHTS_EXECUTE AccessMask = READ_CONTROL - - STANDARD_RIGHTS_ALL AccessMask = 0x001F_0000 -) - -type FileShareMode uint32 - -//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API. -const ( - FILE_SHARE_NONE FileShareMode = 0x00 - FILE_SHARE_READ FileShareMode = 0x01 - FILE_SHARE_WRITE FileShareMode = 0x02 - FILE_SHARE_DELETE FileShareMode = 0x04 - FILE_SHARE_VALID_FLAGS FileShareMode = 0x07 -) - -type FileCreationDisposition uint32 - -//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API. -const ( - // from winbase.h - - CREATE_NEW FileCreationDisposition = 0x01 - CREATE_ALWAYS FileCreationDisposition = 0x02 - OPEN_EXISTING FileCreationDisposition = 0x03 - OPEN_ALWAYS FileCreationDisposition = 0x04 - TRUNCATE_EXISTING FileCreationDisposition = 0x05 -) - -// Create disposition values for NtCreate* -type NTFileCreationDisposition uint32 - -//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API. -const ( - // From ntioapi.h - - FILE_SUPERSEDE NTFileCreationDisposition = 0x00 - FILE_OPEN NTFileCreationDisposition = 0x01 - FILE_CREATE NTFileCreationDisposition = 0x02 - FILE_OPEN_IF NTFileCreationDisposition = 0x03 - FILE_OVERWRITE NTFileCreationDisposition = 0x04 - FILE_OVERWRITE_IF NTFileCreationDisposition = 0x05 - FILE_MAXIMUM_DISPOSITION NTFileCreationDisposition = 0x05 -) - -// CreateFile and co. take flags or attributes together as one parameter. -// Define alias until we can use generics to allow both -// -// https://learn.microsoft.com/en-us/windows/win32/fileio/file-attribute-constants -type FileFlagOrAttribute uint32 - -//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API. -const ( - // from winnt.h - - FILE_FLAG_WRITE_THROUGH FileFlagOrAttribute = 0x8000_0000 - FILE_FLAG_OVERLAPPED FileFlagOrAttribute = 0x4000_0000 - FILE_FLAG_NO_BUFFERING FileFlagOrAttribute = 0x2000_0000 - FILE_FLAG_RANDOM_ACCESS FileFlagOrAttribute = 0x1000_0000 - FILE_FLAG_SEQUENTIAL_SCAN FileFlagOrAttribute = 0x0800_0000 - FILE_FLAG_DELETE_ON_CLOSE FileFlagOrAttribute = 0x0400_0000 - FILE_FLAG_BACKUP_SEMANTICS FileFlagOrAttribute = 0x0200_0000 - FILE_FLAG_POSIX_SEMANTICS FileFlagOrAttribute = 0x0100_0000 - FILE_FLAG_OPEN_REPARSE_POINT FileFlagOrAttribute = 0x0020_0000 - FILE_FLAG_OPEN_NO_RECALL FileFlagOrAttribute = 0x0010_0000 - FILE_FLAG_FIRST_PIPE_INSTANCE FileFlagOrAttribute = 0x0008_0000 -) - -// NtCreate* functions take a dedicated CreateOptions parameter. -// -// https://learn.microsoft.com/en-us/windows/win32/api/Winternl/nf-winternl-ntcreatefile -// -// https://learn.microsoft.com/en-us/windows/win32/devnotes/nt-create-named-pipe-file -type NTCreateOptions uint32 - -//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API. -const ( - // From ntioapi.h - - FILE_DIRECTORY_FILE NTCreateOptions = 0x0000_0001 - FILE_WRITE_THROUGH NTCreateOptions = 0x0000_0002 - FILE_SEQUENTIAL_ONLY NTCreateOptions = 0x0000_0004 - FILE_NO_INTERMEDIATE_BUFFERING NTCreateOptions = 0x0000_0008 - - FILE_SYNCHRONOUS_IO_ALERT NTCreateOptions = 0x0000_0010 - FILE_SYNCHRONOUS_IO_NONALERT NTCreateOptions = 0x0000_0020 - FILE_NON_DIRECTORY_FILE NTCreateOptions = 0x0000_0040 - FILE_CREATE_TREE_CONNECTION NTCreateOptions = 0x0000_0080 - - FILE_COMPLETE_IF_OPLOCKED NTCreateOptions = 0x0000_0100 - FILE_NO_EA_KNOWLEDGE NTCreateOptions = 0x0000_0200 - FILE_DISABLE_TUNNELING NTCreateOptions = 0x0000_0400 - FILE_RANDOM_ACCESS NTCreateOptions = 0x0000_0800 - - FILE_DELETE_ON_CLOSE NTCreateOptions = 0x0000_1000 - FILE_OPEN_BY_FILE_ID NTCreateOptions = 0x0000_2000 - FILE_OPEN_FOR_BACKUP_INTENT NTCreateOptions = 0x0000_4000 - FILE_NO_COMPRESSION NTCreateOptions = 0x0000_8000 -) - -type FileSQSFlag = FileFlagOrAttribute - -//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API. -const ( - // from winbase.h - - SECURITY_ANONYMOUS FileSQSFlag = FileSQSFlag(SecurityAnonymous << 16) - SECURITY_IDENTIFICATION FileSQSFlag = FileSQSFlag(SecurityIdentification << 16) - SECURITY_IMPERSONATION FileSQSFlag = FileSQSFlag(SecurityImpersonation << 16) - SECURITY_DELEGATION FileSQSFlag = FileSQSFlag(SecurityDelegation << 16) - - SECURITY_SQOS_PRESENT FileSQSFlag = 0x0010_0000 - SECURITY_VALID_SQOS_FLAGS FileSQSFlag = 0x001F_0000 -) - -// GetFinalPathNameByHandle flags -// -// https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfinalpathnamebyhandlew#parameters -type GetFinalPathFlag uint32 - -//nolint:revive // SNAKE_CASE is not idiomatic in Go, but aligned with Win32 API. -const ( - GetFinalPathDefaultFlag GetFinalPathFlag = 0x0 - - FILE_NAME_NORMALIZED GetFinalPathFlag = 0x0 - FILE_NAME_OPENED GetFinalPathFlag = 0x8 - - VOLUME_NAME_DOS GetFinalPathFlag = 0x0 - VOLUME_NAME_GUID GetFinalPathFlag = 0x1 - VOLUME_NAME_NT GetFinalPathFlag = 0x2 - VOLUME_NAME_NONE GetFinalPathFlag = 0x4 -) - -// getFinalPathNameByHandle facilitates calling the Windows API GetFinalPathNameByHandle -// with the given handle and flags. It transparently takes care of creating a buffer of the -// correct size for the call. -// -// https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfinalpathnamebyhandlew -func GetFinalPathNameByHandle(h windows.Handle, flags GetFinalPathFlag) (string, error) { - b := stringbuffer.NewWString() - //TODO: can loop infinitely if Win32 keeps returning the same (or a larger) n? - for { - n, err := windows.GetFinalPathNameByHandle(h, b.Pointer(), b.Cap(), uint32(flags)) - if err != nil { - return "", err - } - // If the buffer wasn't large enough, n will be the total size needed (including null terminator). - // Resize and try again. - if n > b.Cap() { - b.ResizeTo(n) - continue - } - // If the buffer is large enough, n will be the size not including the null terminator. - // Convert to a Go string and return. - return b.String(), nil - } -} diff --git a/vendor/github.com/Microsoft/go-winio/internal/fs/security.go b/vendor/github.com/Microsoft/go-winio/internal/fs/security.go deleted file mode 100644 index 81760ac6..00000000 --- a/vendor/github.com/Microsoft/go-winio/internal/fs/security.go +++ /dev/null @@ -1,12 +0,0 @@ -package fs - -// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ne-winnt-security_impersonation_level -type SecurityImpersonationLevel int32 // C default enums underlying type is `int`, which is Go `int32` - -// Impersonation levels -const ( - SecurityAnonymous SecurityImpersonationLevel = 0 - SecurityIdentification SecurityImpersonationLevel = 1 - SecurityImpersonation SecurityImpersonationLevel = 2 - SecurityDelegation SecurityImpersonationLevel = 3 -) diff --git a/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go b/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go deleted file mode 100644 index a94e234c..00000000 --- a/vendor/github.com/Microsoft/go-winio/internal/fs/zsyscall_windows.go +++ /dev/null @@ -1,61 +0,0 @@ -//go:build windows - -// Code generated by 'go generate' using "github.com/Microsoft/go-winio/tools/mkwinsyscall"; DO NOT EDIT. - -package fs - -import ( - "syscall" - "unsafe" - - "golang.org/x/sys/windows" -) - -var _ unsafe.Pointer - -// Do the interface allocations only once for common -// Errno values. -const ( - errnoERROR_IO_PENDING = 997 -) - -var ( - errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) - errERROR_EINVAL error = syscall.EINVAL -) - -// errnoErr returns common boxed Errno values, to prevent -// allocations at runtime. -func errnoErr(e syscall.Errno) error { - switch e { - case 0: - return errERROR_EINVAL - case errnoERROR_IO_PENDING: - return errERROR_IO_PENDING - } - return e -} - -var ( - modkernel32 = windows.NewLazySystemDLL("kernel32.dll") - - procCreateFileW = modkernel32.NewProc("CreateFileW") -) - -func CreateFile(name string, access AccessMask, mode FileShareMode, sa *windows.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) { - var _p0 *uint16 - _p0, err = syscall.UTF16PtrFromString(name) - if err != nil { - return - } - return _CreateFile(_p0, access, mode, sa, createmode, attrs, templatefile) -} - -func _CreateFile(name *uint16, access AccessMask, mode FileShareMode, sa *windows.SecurityAttributes, createmode FileCreationDisposition, attrs FileFlagOrAttribute, templatefile windows.Handle) (handle windows.Handle, err error) { - r0, _, e1 := syscall.SyscallN(procCreateFileW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile)) - handle = windows.Handle(r0) - if handle == windows.InvalidHandle { - err = errnoErr(e1) - } - return -} diff --git a/vendor/github.com/Microsoft/go-winio/internal/socket/rawaddr.go b/vendor/github.com/Microsoft/go-winio/internal/socket/rawaddr.go deleted file mode 100644 index 7e82f9af..00000000 --- a/vendor/github.com/Microsoft/go-winio/internal/socket/rawaddr.go +++ /dev/null @@ -1,20 +0,0 @@ -package socket - -import ( - "unsafe" -) - -// RawSockaddr allows structs to be used with [Bind] and [ConnectEx]. The -// struct must meet the Win32 sockaddr requirements specified here: -// https://docs.microsoft.com/en-us/windows/win32/winsock/sockaddr-2 -// -// Specifically, the struct size must be least larger than an int16 (unsigned short) -// for the address family. -type RawSockaddr interface { - // Sockaddr returns a pointer to the RawSockaddr and its struct size, allowing - // for the RawSockaddr's data to be overwritten by syscalls (if necessary). - // - // It is the callers responsibility to validate that the values are valid; invalid - // pointers or size can cause a panic. - Sockaddr() (unsafe.Pointer, int32, error) -} diff --git a/vendor/github.com/Microsoft/go-winio/internal/socket/socket.go b/vendor/github.com/Microsoft/go-winio/internal/socket/socket.go deleted file mode 100644 index 88580d97..00000000 --- a/vendor/github.com/Microsoft/go-winio/internal/socket/socket.go +++ /dev/null @@ -1,177 +0,0 @@ -//go:build windows - -package socket - -import ( - "errors" - "fmt" - "net" - "sync" - "syscall" - "unsafe" - - "github.com/Microsoft/go-winio/pkg/guid" - "golang.org/x/sys/windows" -) - -//go:generate go run github.com/Microsoft/go-winio/tools/mkwinsyscall -output zsyscall_windows.go socket.go - -//sys getsockname(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) [failretval==socketError] = ws2_32.getsockname -//sys getpeername(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) [failretval==socketError] = ws2_32.getpeername -//sys bind(s windows.Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socketError] = ws2_32.bind - -const socketError = uintptr(^uint32(0)) - -var ( - // todo(helsaawy): create custom error types to store the desired vs actual size and addr family? - - ErrBufferSize = errors.New("buffer size") - ErrAddrFamily = errors.New("address family") - ErrInvalidPointer = errors.New("invalid pointer") - ErrSocketClosed = fmt.Errorf("socket closed: %w", net.ErrClosed) -) - -// todo(helsaawy): replace these with generics, ie: GetSockName[S RawSockaddr](s windows.Handle) (S, error) - -// GetSockName writes the local address of socket s to the [RawSockaddr] rsa. -// If rsa is not large enough, the [windows.WSAEFAULT] is returned. -func GetSockName(s windows.Handle, rsa RawSockaddr) error { - ptr, l, err := rsa.Sockaddr() - if err != nil { - return fmt.Errorf("could not retrieve socket pointer and size: %w", err) - } - - // although getsockname returns WSAEFAULT if the buffer is too small, it does not set - // &l to the correct size, so--apart from doubling the buffer repeatedly--there is no remedy - return getsockname(s, ptr, &l) -} - -// GetPeerName returns the remote address the socket is connected to. -// -// See [GetSockName] for more information. -func GetPeerName(s windows.Handle, rsa RawSockaddr) error { - ptr, l, err := rsa.Sockaddr() - if err != nil { - return fmt.Errorf("could not retrieve socket pointer and size: %w", err) - } - - return getpeername(s, ptr, &l) -} - -func Bind(s windows.Handle, rsa RawSockaddr) (err error) { - ptr, l, err := rsa.Sockaddr() - if err != nil { - return fmt.Errorf("could not retrieve socket pointer and size: %w", err) - } - - return bind(s, ptr, l) -} - -// "golang.org/x/sys/windows".ConnectEx and .Bind only accept internal implementations of the -// their sockaddr interface, so they cannot be used with HvsockAddr -// Replicate functionality here from -// https://cs.opensource.google/go/x/sys/+/master:windows/syscall_windows.go - -// The function pointers to `AcceptEx`, `ConnectEx` and `GetAcceptExSockaddrs` must be loaded at -// runtime via a WSAIoctl call: -// https://docs.microsoft.com/en-us/windows/win32/api/Mswsock/nc-mswsock-lpfn_connectex#remarks - -type runtimeFunc struct { - id guid.GUID - once sync.Once - addr uintptr - err error -} - -func (f *runtimeFunc) Load() error { - f.once.Do(func() { - var s windows.Handle - s, f.err = windows.Socket(windows.AF_INET, windows.SOCK_STREAM, windows.IPPROTO_TCP) - if f.err != nil { - return - } - defer windows.CloseHandle(s) //nolint:errcheck - - var n uint32 - f.err = windows.WSAIoctl(s, - windows.SIO_GET_EXTENSION_FUNCTION_POINTER, - (*byte)(unsafe.Pointer(&f.id)), - uint32(unsafe.Sizeof(f.id)), - (*byte)(unsafe.Pointer(&f.addr)), - uint32(unsafe.Sizeof(f.addr)), - &n, - nil, // overlapped - 0, // completionRoutine - ) - }) - return f.err -} - -var ( - // todo: add `AcceptEx` and `GetAcceptExSockaddrs` - WSAID_CONNECTEX = guid.GUID{ //revive:disable-line:var-naming ALL_CAPS - Data1: 0x25a207b9, - Data2: 0xddf3, - Data3: 0x4660, - Data4: [8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}, - } - - connectExFunc = runtimeFunc{id: WSAID_CONNECTEX} -) - -func ConnectEx( - fd windows.Handle, - rsa RawSockaddr, - sendBuf *byte, - sendDataLen uint32, - bytesSent *uint32, - overlapped *windows.Overlapped, -) error { - if err := connectExFunc.Load(); err != nil { - return fmt.Errorf("failed to load ConnectEx function pointer: %w", err) - } - ptr, n, err := rsa.Sockaddr() - if err != nil { - return err - } - return connectEx(fd, ptr, n, sendBuf, sendDataLen, bytesSent, overlapped) -} - -// BOOL LpfnConnectex( -// [in] SOCKET s, -// [in] const sockaddr *name, -// [in] int namelen, -// [in, optional] PVOID lpSendBuffer, -// [in] DWORD dwSendDataLength, -// [out] LPDWORD lpdwBytesSent, -// [in] LPOVERLAPPED lpOverlapped -// ) - -func connectEx( - s windows.Handle, - name unsafe.Pointer, - namelen int32, - sendBuf *byte, - sendDataLen uint32, - bytesSent *uint32, - overlapped *windows.Overlapped, -) (err error) { - r1, _, e1 := syscall.SyscallN(connectExFunc.addr, - uintptr(s), - uintptr(name), - uintptr(namelen), - uintptr(unsafe.Pointer(sendBuf)), - uintptr(sendDataLen), - uintptr(unsafe.Pointer(bytesSent)), - uintptr(unsafe.Pointer(overlapped)), - ) - - if r1 == 0 { - if e1 != 0 { - err = error(e1) - } else { - err = syscall.EINVAL - } - } - return err -} diff --git a/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go b/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go deleted file mode 100644 index e1504126..00000000 --- a/vendor/github.com/Microsoft/go-winio/internal/socket/zsyscall_windows.go +++ /dev/null @@ -1,69 +0,0 @@ -//go:build windows - -// Code generated by 'go generate' using "github.com/Microsoft/go-winio/tools/mkwinsyscall"; DO NOT EDIT. - -package socket - -import ( - "syscall" - "unsafe" - - "golang.org/x/sys/windows" -) - -var _ unsafe.Pointer - -// Do the interface allocations only once for common -// Errno values. -const ( - errnoERROR_IO_PENDING = 997 -) - -var ( - errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) - errERROR_EINVAL error = syscall.EINVAL -) - -// errnoErr returns common boxed Errno values, to prevent -// allocations at runtime. -func errnoErr(e syscall.Errno) error { - switch e { - case 0: - return errERROR_EINVAL - case errnoERROR_IO_PENDING: - return errERROR_IO_PENDING - } - return e -} - -var ( - modws2_32 = windows.NewLazySystemDLL("ws2_32.dll") - - procbind = modws2_32.NewProc("bind") - procgetpeername = modws2_32.NewProc("getpeername") - procgetsockname = modws2_32.NewProc("getsockname") -) - -func bind(s windows.Handle, name unsafe.Pointer, namelen int32) (err error) { - r1, _, e1 := syscall.SyscallN(procbind.Addr(), uintptr(s), uintptr(name), uintptr(namelen)) - if r1 == socketError { - err = errnoErr(e1) - } - return -} - -func getpeername(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) { - r1, _, e1 := syscall.SyscallN(procgetpeername.Addr(), uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen))) - if r1 == socketError { - err = errnoErr(e1) - } - return -} - -func getsockname(s windows.Handle, name unsafe.Pointer, namelen *int32) (err error) { - r1, _, e1 := syscall.SyscallN(procgetsockname.Addr(), uintptr(s), uintptr(name), uintptr(unsafe.Pointer(namelen))) - if r1 == socketError { - err = errnoErr(e1) - } - return -} diff --git a/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go b/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go deleted file mode 100644 index 42ebc019..00000000 --- a/vendor/github.com/Microsoft/go-winio/internal/stringbuffer/wstring.go +++ /dev/null @@ -1,132 +0,0 @@ -package stringbuffer - -import ( - "sync" - "unicode/utf16" -) - -// TODO: worth exporting and using in mkwinsyscall? - -// Uint16BufferSize is the buffer size in the pool, chosen somewhat arbitrarily to accommodate -// large path strings: -// MAX_PATH (260) + size of volume GUID prefix (49) + null terminator = 310. -const MinWStringCap = 310 - -// use *[]uint16 since []uint16 creates an extra allocation where the slice header -// is copied to heap and then referenced via pointer in the interface header that sync.Pool -// stores. -var pathPool = sync.Pool{ // if go1.18+ adds Pool[T], use that to store []uint16 directly - New: func() interface{} { - b := make([]uint16, MinWStringCap) - return &b - }, -} - -func newBuffer() []uint16 { return *(pathPool.Get().(*[]uint16)) } - -// freeBuffer copies the slice header data, and puts a pointer to that in the pool. -// This avoids taking a pointer to the slice header in WString, which can be set to nil. -func freeBuffer(b []uint16) { pathPool.Put(&b) } - -// WString is a wide string buffer ([]uint16) meant for storing UTF-16 encoded strings -// for interacting with Win32 APIs. -// Sizes are specified as uint32 and not int. -// -// It is not thread safe. -type WString struct { - // type-def allows casting to []uint16 directly, use struct to prevent that and allow adding fields in the future. - - // raw buffer - b []uint16 -} - -// NewWString returns a [WString] allocated from a shared pool with an -// initial capacity of at least [MinWStringCap]. -// Since the buffer may have been previously used, its contents are not guaranteed to be empty. -// -// The buffer should be freed via [WString.Free] -func NewWString() *WString { - return &WString{ - b: newBuffer(), - } -} - -func (b *WString) Free() { - if b.empty() { - return - } - freeBuffer(b.b) - b.b = nil -} - -// ResizeTo grows the buffer to at least c and returns the new capacity, freeing the -// previous buffer back into pool. -func (b *WString) ResizeTo(c uint32) uint32 { - // already sufficient (or n is 0) - if c <= b.Cap() { - return b.Cap() - } - - if c <= MinWStringCap { - c = MinWStringCap - } - // allocate at-least double buffer size, as is done in [bytes.Buffer] and other places - if c <= 2*b.Cap() { - c = 2 * b.Cap() - } - - b2 := make([]uint16, c) - if !b.empty() { - copy(b2, b.b) - freeBuffer(b.b) - } - b.b = b2 - return c -} - -// Buffer returns the underlying []uint16 buffer. -func (b *WString) Buffer() []uint16 { - if b.empty() { - return nil - } - return b.b -} - -// Pointer returns a pointer to the first uint16 in the buffer. -// If the [WString.Free] has already been called, the pointer will be nil. -func (b *WString) Pointer() *uint16 { - if b.empty() { - return nil - } - return &b.b[0] -} - -// String returns the returns the UTF-8 encoding of the UTF-16 string in the buffer. -// -// It assumes that the data is null-terminated. -func (b *WString) String() string { - // Using [windows.UTF16ToString] would require importing "golang.org/x/sys/windows" - // and would make this code Windows-only, which makes no sense. - // So copy UTF16ToString code into here. - // If other windows-specific code is added, switch to [windows.UTF16ToString] - - s := b.b - for i, v := range s { - if v == 0 { - s = s[:i] - break - } - } - return string(utf16.Decode(s)) -} - -// Cap returns the underlying buffer capacity. -func (b *WString) Cap() uint32 { - if b.empty() { - return 0 - } - return b.cap() -} - -func (b *WString) cap() uint32 { return uint32(cap(b.b)) } -func (b *WString) empty() bool { return b == nil || b.cap() == 0 } diff --git a/vendor/github.com/Microsoft/go-winio/pipe.go b/vendor/github.com/Microsoft/go-winio/pipe.go deleted file mode 100644 index a2da6639..00000000 --- a/vendor/github.com/Microsoft/go-winio/pipe.go +++ /dev/null @@ -1,586 +0,0 @@ -//go:build windows -// +build windows - -package winio - -import ( - "context" - "errors" - "fmt" - "io" - "net" - "os" - "runtime" - "time" - "unsafe" - - "golang.org/x/sys/windows" - - "github.com/Microsoft/go-winio/internal/fs" -) - -//sys connectNamedPipe(pipe windows.Handle, o *windows.Overlapped) (err error) = ConnectNamedPipe -//sys createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *windows.SecurityAttributes) (handle windows.Handle, err error) [failretval==windows.InvalidHandle] = CreateNamedPipeW -//sys disconnectNamedPipe(pipe windows.Handle) (err error) = DisconnectNamedPipe -//sys getNamedPipeInfo(pipe windows.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) = GetNamedPipeInfo -//sys getNamedPipeHandleState(pipe windows.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW -//sys ntCreateNamedPipeFile(pipe *windows.Handle, access ntAccessMask, oa *objectAttributes, iosb *ioStatusBlock, share ntFileShareMode, disposition ntFileCreationDisposition, options ntFileOptions, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) = ntdll.NtCreateNamedPipeFile -//sys rtlNtStatusToDosError(status ntStatus) (winerr error) = ntdll.RtlNtStatusToDosErrorNoTeb -//sys rtlDosPathNameToNtPathName(name *uint16, ntName *unicodeString, filePart uintptr, reserved uintptr) (status ntStatus) = ntdll.RtlDosPathNameToNtPathName_U -//sys rtlDefaultNpAcl(dacl *uintptr) (status ntStatus) = ntdll.RtlDefaultNpAcl - -type PipeConn interface { - net.Conn - Disconnect() error - Flush() error -} - -// type aliases for mkwinsyscall code -type ( - ntAccessMask = fs.AccessMask - ntFileShareMode = fs.FileShareMode - ntFileCreationDisposition = fs.NTFileCreationDisposition - ntFileOptions = fs.NTCreateOptions -) - -type ioStatusBlock struct { - Status, Information uintptr -} - -// typedef struct _OBJECT_ATTRIBUTES { -// ULONG Length; -// HANDLE RootDirectory; -// PUNICODE_STRING ObjectName; -// ULONG Attributes; -// PVOID SecurityDescriptor; -// PVOID SecurityQualityOfService; -// } OBJECT_ATTRIBUTES; -// -// https://learn.microsoft.com/en-us/windows/win32/api/ntdef/ns-ntdef-_object_attributes -type objectAttributes struct { - Length uintptr - RootDirectory uintptr - ObjectName *unicodeString - Attributes uintptr - SecurityDescriptor *securityDescriptor - SecurityQoS uintptr -} - -type unicodeString struct { - Length uint16 - MaximumLength uint16 - Buffer uintptr -} - -// typedef struct _SECURITY_DESCRIPTOR { -// BYTE Revision; -// BYTE Sbz1; -// SECURITY_DESCRIPTOR_CONTROL Control; -// PSID Owner; -// PSID Group; -// PACL Sacl; -// PACL Dacl; -// } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR; -// -// https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-security_descriptor -type securityDescriptor struct { - Revision byte - Sbz1 byte - Control uint16 - Owner uintptr - Group uintptr - Sacl uintptr //revive:disable-line:var-naming SACL, not Sacl - Dacl uintptr //revive:disable-line:var-naming DACL, not Dacl -} - -type ntStatus int32 - -func (status ntStatus) Err() error { - if status >= 0 { - return nil - } - return rtlNtStatusToDosError(status) -} - -var ( - // ErrPipeListenerClosed is returned for pipe operations on listeners that have been closed. - ErrPipeListenerClosed = net.ErrClosed - - errPipeWriteClosed = errors.New("pipe has been closed for write") -) - -type win32Pipe struct { - *win32File - path string -} - -var _ PipeConn = (*win32Pipe)(nil) - -type win32MessageBytePipe struct { - win32Pipe - writeClosed bool - readEOF bool -} - -type pipeAddress string - -func (f *win32Pipe) LocalAddr() net.Addr { - return pipeAddress(f.path) -} - -func (f *win32Pipe) RemoteAddr() net.Addr { - return pipeAddress(f.path) -} - -func (f *win32Pipe) SetDeadline(t time.Time) error { - if err := f.SetReadDeadline(t); err != nil { - return err - } - return f.SetWriteDeadline(t) -} - -func (f *win32Pipe) Disconnect() error { - return disconnectNamedPipe(f.win32File.handle) -} - -// CloseWrite closes the write side of a message pipe in byte mode. -func (f *win32MessageBytePipe) CloseWrite() error { - if f.writeClosed { - return errPipeWriteClosed - } - err := f.win32File.Flush() - if err != nil { - return err - } - _, err = f.win32File.Write(nil) - if err != nil { - return err - } - f.writeClosed = true - return nil -} - -// Write writes bytes to a message pipe in byte mode. Zero-byte writes are ignored, since -// they are used to implement CloseWrite(). -func (f *win32MessageBytePipe) Write(b []byte) (int, error) { - if f.writeClosed { - return 0, errPipeWriteClosed - } - if len(b) == 0 { - return 0, nil - } - return f.win32File.Write(b) -} - -// Read reads bytes from a message pipe in byte mode. A read of a zero-byte message on a message -// mode pipe will return io.EOF, as will all subsequent reads. -func (f *win32MessageBytePipe) Read(b []byte) (int, error) { - if f.readEOF { - return 0, io.EOF - } - n, err := f.win32File.Read(b) - if err == io.EOF { //nolint:errorlint - // If this was the result of a zero-byte read, then - // it is possible that the read was due to a zero-size - // message. Since we are simulating CloseWrite with a - // zero-byte message, ensure that all future Read() calls - // also return EOF. - f.readEOF = true - } else if err == windows.ERROR_MORE_DATA { //nolint:errorlint // err is Errno - // ERROR_MORE_DATA indicates that the pipe's read mode is message mode - // and the message still has more bytes. Treat this as a success, since - // this package presents all named pipes as byte streams. - err = nil - } - return n, err -} - -func (pipeAddress) Network() string { - return "pipe" -} - -func (s pipeAddress) String() string { - return string(s) -} - -// tryDialPipe attempts to dial the pipe at `path` until `ctx` cancellation or timeout. -func tryDialPipe(ctx context.Context, path *string, access fs.AccessMask, impLevel PipeImpLevel) (windows.Handle, error) { - for { - select { - case <-ctx.Done(): - return windows.Handle(0), ctx.Err() - default: - h, err := fs.CreateFile(*path, - access, - 0, // mode - nil, // security attributes - fs.OPEN_EXISTING, - fs.FILE_FLAG_OVERLAPPED|fs.SECURITY_SQOS_PRESENT|fs.FileSQSFlag(impLevel), - 0, // template file handle - ) - if err == nil { - return h, nil - } - if err != windows.ERROR_PIPE_BUSY { //nolint:errorlint // err is Errno - return h, &os.PathError{Err: err, Op: "open", Path: *path} - } - // Wait 10 msec and try again. This is a rather simplistic - // view, as we always try each 10 milliseconds. - time.Sleep(10 * time.Millisecond) - } - } -} - -// DialPipe connects to a named pipe by path, timing out if the connection -// takes longer than the specified duration. If timeout is nil, then we use -// a default timeout of 2 seconds. (We do not use WaitNamedPipe.) -func DialPipe(path string, timeout *time.Duration) (net.Conn, error) { - var absTimeout time.Time - if timeout != nil { - absTimeout = time.Now().Add(*timeout) - } else { - absTimeout = time.Now().Add(2 * time.Second) - } - ctx, cancel := context.WithDeadline(context.Background(), absTimeout) - defer cancel() - conn, err := DialPipeContext(ctx, path) - if errors.Is(err, context.DeadlineExceeded) { - return nil, ErrTimeout - } - return conn, err -} - -// DialPipeContext attempts to connect to a named pipe by `path` until `ctx` -// cancellation or timeout. -func DialPipeContext(ctx context.Context, path string) (net.Conn, error) { - return DialPipeAccess(ctx, path, uint32(fs.GENERIC_READ|fs.GENERIC_WRITE)) -} - -// PipeImpLevel is an enumeration of impersonation levels that may be set -// when calling DialPipeAccessImpersonation. -type PipeImpLevel uint32 - -const ( - PipeImpLevelAnonymous = PipeImpLevel(fs.SECURITY_ANONYMOUS) - PipeImpLevelIdentification = PipeImpLevel(fs.SECURITY_IDENTIFICATION) - PipeImpLevelImpersonation = PipeImpLevel(fs.SECURITY_IMPERSONATION) - PipeImpLevelDelegation = PipeImpLevel(fs.SECURITY_DELEGATION) -) - -// DialPipeAccess attempts to connect to a named pipe by `path` with `access` until `ctx` -// cancellation or timeout. -func DialPipeAccess(ctx context.Context, path string, access uint32) (net.Conn, error) { - return DialPipeAccessImpLevel(ctx, path, access, PipeImpLevelAnonymous) -} - -// DialPipeAccessImpLevel attempts to connect to a named pipe by `path` with -// `access` at `impLevel` until `ctx` cancellation or timeout. The other -// DialPipe* implementations use PipeImpLevelAnonymous. -func DialPipeAccessImpLevel(ctx context.Context, path string, access uint32, impLevel PipeImpLevel) (net.Conn, error) { - var err error - var h windows.Handle - h, err = tryDialPipe(ctx, &path, fs.AccessMask(access), impLevel) - if err != nil { - return nil, err - } - - var flags uint32 - err = getNamedPipeInfo(h, &flags, nil, nil, nil) - if err != nil { - return nil, err - } - - f, err := makeWin32File(h) - if err != nil { - windows.Close(h) - return nil, err - } - - // If the pipe is in message mode, return a message byte pipe, which - // supports CloseWrite(). - if flags&windows.PIPE_TYPE_MESSAGE != 0 { - return &win32MessageBytePipe{ - win32Pipe: win32Pipe{win32File: f, path: path}, - }, nil - } - return &win32Pipe{win32File: f, path: path}, nil -} - -type acceptResponse struct { - f *win32File - err error -} - -type win32PipeListener struct { - firstHandle windows.Handle - path string - config PipeConfig - acceptCh chan (chan acceptResponse) - closeCh chan int - doneCh chan int -} - -func makeServerPipeHandle(path string, sd []byte, c *PipeConfig, first bool) (windows.Handle, error) { - path16, err := windows.UTF16FromString(path) - if err != nil { - return 0, &os.PathError{Op: "open", Path: path, Err: err} - } - - var oa objectAttributes - oa.Length = unsafe.Sizeof(oa) - - var ntPath unicodeString - if err := rtlDosPathNameToNtPathName(&path16[0], - &ntPath, - 0, - 0, - ).Err(); err != nil { - return 0, &os.PathError{Op: "open", Path: path, Err: err} - } - defer windows.LocalFree(windows.Handle(ntPath.Buffer)) //nolint:errcheck - oa.ObjectName = &ntPath - oa.Attributes = windows.OBJ_CASE_INSENSITIVE - - // The security descriptor is only needed for the first pipe. - if first { - if sd != nil { - //todo: does `sdb` need to be allocated on the heap, or can go allocate it? - l := uint32(len(sd)) - sdb, err := windows.LocalAlloc(0, l) - if err != nil { - return 0, fmt.Errorf("LocalAlloc for security descriptor with of length %d: %w", l, err) - } - defer windows.LocalFree(windows.Handle(sdb)) //nolint:errcheck - copy((*[0xffff]byte)(unsafe.Pointer(sdb))[:], sd) - oa.SecurityDescriptor = (*securityDescriptor)(unsafe.Pointer(sdb)) - } else { - // Construct the default named pipe security descriptor. - var dacl uintptr - if err := rtlDefaultNpAcl(&dacl).Err(); err != nil { - return 0, fmt.Errorf("getting default named pipe ACL: %w", err) - } - defer windows.LocalFree(windows.Handle(dacl)) //nolint:errcheck - - sdb := &securityDescriptor{ - Revision: 1, - Control: windows.SE_DACL_PRESENT, - Dacl: dacl, - } - oa.SecurityDescriptor = sdb - } - } - - typ := uint32(windows.FILE_PIPE_REJECT_REMOTE_CLIENTS) - if c.MessageMode { - typ |= windows.FILE_PIPE_MESSAGE_TYPE - } - - disposition := fs.FILE_OPEN - access := fs.GENERIC_READ | fs.GENERIC_WRITE | fs.SYNCHRONIZE - if first { - disposition = fs.FILE_CREATE - // By not asking for read or write access, the named pipe file system - // will put this pipe into an initially disconnected state, blocking - // client connections until the next call with first == false. - access = fs.SYNCHRONIZE - } - - timeout := int64(-50 * 10000) // 50ms - - var ( - h windows.Handle - iosb ioStatusBlock - ) - err = ntCreateNamedPipeFile(&h, - access, - &oa, - &iosb, - fs.FILE_SHARE_READ|fs.FILE_SHARE_WRITE, - disposition, - 0, - typ, - 0, - 0, - 0xffffffff, - uint32(c.InputBufferSize), - uint32(c.OutputBufferSize), - &timeout).Err() - if err != nil { - return 0, &os.PathError{Op: "open", Path: path, Err: err} - } - - runtime.KeepAlive(ntPath) - return h, nil -} - -func (l *win32PipeListener) makeServerPipe() (*win32File, error) { - h, err := makeServerPipeHandle(l.path, nil, &l.config, false) - if err != nil { - return nil, err - } - f, err := makeWin32File(h) - if err != nil { - windows.Close(h) - return nil, err - } - return f, nil -} - -func (l *win32PipeListener) makeConnectedServerPipe() (*win32File, error) { - p, err := l.makeServerPipe() - if err != nil { - return nil, err - } - - // Wait for the client to connect. - ch := make(chan error) - go func(p *win32File) { - ch <- connectPipe(p) - }(p) - - select { - case err = <-ch: - if err != nil { - p.Close() - p = nil - } - case <-l.closeCh: - // Abort the connect request by closing the handle. - p.Close() - p = nil - err = <-ch - if err == nil || err == ErrFileClosed { //nolint:errorlint // err is Errno - err = ErrPipeListenerClosed - } - } - return p, err -} - -func (l *win32PipeListener) listenerRoutine() { - closed := false - for !closed { - select { - case <-l.closeCh: - closed = true - case responseCh := <-l.acceptCh: - var ( - p *win32File - err error - ) - for { - p, err = l.makeConnectedServerPipe() - // If the connection was immediately closed by the client, try - // again. - if err != windows.ERROR_NO_DATA { //nolint:errorlint // err is Errno - break - } - } - responseCh <- acceptResponse{p, err} - closed = err == ErrPipeListenerClosed //nolint:errorlint // err is Errno - } - } - windows.Close(l.firstHandle) - l.firstHandle = 0 - // Notify Close() and Accept() callers that the handle has been closed. - close(l.doneCh) -} - -// PipeConfig contain configuration for the pipe listener. -type PipeConfig struct { - // SecurityDescriptor contains a Windows security descriptor in SDDL format. - SecurityDescriptor string - - // MessageMode determines whether the pipe is in byte or message mode. In either - // case the pipe is read in byte mode by default. The only practical difference in - // this implementation is that CloseWrite() is only supported for message mode pipes; - // CloseWrite() is implemented as a zero-byte write, but zero-byte writes are only - // transferred to the reader (and returned as io.EOF in this implementation) - // when the pipe is in message mode. - MessageMode bool - - // InputBufferSize specifies the size of the input buffer, in bytes. - InputBufferSize int32 - - // OutputBufferSize specifies the size of the output buffer, in bytes. - OutputBufferSize int32 -} - -// ListenPipe creates a listener on a Windows named pipe path, e.g. \\.\pipe\mypipe. -// The pipe must not already exist. -func ListenPipe(path string, c *PipeConfig) (net.Listener, error) { - var ( - sd []byte - err error - ) - if c == nil { - c = &PipeConfig{} - } - if c.SecurityDescriptor != "" { - sd, err = SddlToSecurityDescriptor(c.SecurityDescriptor) - if err != nil { - return nil, err - } - } - h, err := makeServerPipeHandle(path, sd, c, true) - if err != nil { - return nil, err - } - l := &win32PipeListener{ - firstHandle: h, - path: path, - config: *c, - acceptCh: make(chan (chan acceptResponse)), - closeCh: make(chan int), - doneCh: make(chan int), - } - go l.listenerRoutine() - return l, nil -} - -func connectPipe(p *win32File) error { - c, err := p.prepareIO() - if err != nil { - return err - } - defer p.wg.Done() - - err = connectNamedPipe(p.handle, &c.o) - _, err = p.asyncIO(c, nil, 0, err) - if err != nil && err != windows.ERROR_PIPE_CONNECTED { //nolint:errorlint // err is Errno - return err - } - return nil -} - -func (l *win32PipeListener) Accept() (net.Conn, error) { - ch := make(chan acceptResponse) - select { - case l.acceptCh <- ch: - response := <-ch - err := response.err - if err != nil { - return nil, err - } - if l.config.MessageMode { - return &win32MessageBytePipe{ - win32Pipe: win32Pipe{win32File: response.f, path: l.path}, - }, nil - } - return &win32Pipe{win32File: response.f, path: l.path}, nil - case <-l.doneCh: - return nil, ErrPipeListenerClosed - } -} - -func (l *win32PipeListener) Close() error { - select { - case l.closeCh <- 1: - <-l.doneCh - case <-l.doneCh: - } - return nil -} - -func (l *win32PipeListener) Addr() net.Addr { - return pipeAddress(l.path) -} diff --git a/vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go b/vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go deleted file mode 100644 index 48ce4e92..00000000 --- a/vendor/github.com/Microsoft/go-winio/pkg/guid/guid.go +++ /dev/null @@ -1,232 +0,0 @@ -// Package guid provides a GUID type. The backing structure for a GUID is -// identical to that used by the golang.org/x/sys/windows GUID type. -// There are two main binary encodings used for a GUID, the big-endian encoding, -// and the Windows (mixed-endian) encoding. See here for details: -// https://en.wikipedia.org/wiki/Universally_unique_identifier#Encoding -package guid - -import ( - "crypto/rand" - "crypto/sha1" //nolint:gosec // not used for secure application - "encoding" - "encoding/binary" - "fmt" - "strconv" -) - -//go:generate go run golang.org/x/tools/cmd/stringer -type=Variant -trimprefix=Variant -linecomment - -// Variant specifies which GUID variant (or "type") of the GUID. It determines -// how the entirety of the rest of the GUID is interpreted. -type Variant uint8 - -// The variants specified by RFC 4122 section 4.1.1. -const ( - // VariantUnknown specifies a GUID variant which does not conform to one of - // the variant encodings specified in RFC 4122. - VariantUnknown Variant = iota - VariantNCS - VariantRFC4122 // RFC 4122 - VariantMicrosoft - VariantFuture -) - -// Version specifies how the bits in the GUID were generated. For instance, a -// version 4 GUID is randomly generated, and a version 5 is generated from the -// hash of an input string. -type Version uint8 - -func (v Version) String() string { - return strconv.FormatUint(uint64(v), 10) -} - -var _ = (encoding.TextMarshaler)(GUID{}) -var _ = (encoding.TextUnmarshaler)(&GUID{}) - -// NewV4 returns a new version 4 (pseudorandom) GUID, as defined by RFC 4122. -func NewV4() (GUID, error) { - var b [16]byte - if _, err := rand.Read(b[:]); err != nil { - return GUID{}, err - } - - g := FromArray(b) - g.setVersion(4) // Version 4 means randomly generated. - g.setVariant(VariantRFC4122) - - return g, nil -} - -// NewV5 returns a new version 5 (generated from a string via SHA-1 hashing) -// GUID, as defined by RFC 4122. The RFC is unclear on the encoding of the name, -// and the sample code treats it as a series of bytes, so we do the same here. -// -// Some implementations, such as those found on Windows, treat the name as a -// big-endian UTF16 stream of bytes. If that is desired, the string can be -// encoded as such before being passed to this function. -func NewV5(namespace GUID, name []byte) (GUID, error) { - b := sha1.New() //nolint:gosec // not used for secure application - namespaceBytes := namespace.ToArray() - b.Write(namespaceBytes[:]) - b.Write(name) - - a := [16]byte{} - copy(a[:], b.Sum(nil)) - - g := FromArray(a) - g.setVersion(5) // Version 5 means generated from a string. - g.setVariant(VariantRFC4122) - - return g, nil -} - -func fromArray(b [16]byte, order binary.ByteOrder) GUID { - var g GUID - g.Data1 = order.Uint32(b[0:4]) - g.Data2 = order.Uint16(b[4:6]) - g.Data3 = order.Uint16(b[6:8]) - copy(g.Data4[:], b[8:16]) - return g -} - -func (g GUID) toArray(order binary.ByteOrder) [16]byte { - b := [16]byte{} - order.PutUint32(b[0:4], g.Data1) - order.PutUint16(b[4:6], g.Data2) - order.PutUint16(b[6:8], g.Data3) - copy(b[8:16], g.Data4[:]) - return b -} - -// FromArray constructs a GUID from a big-endian encoding array of 16 bytes. -func FromArray(b [16]byte) GUID { - return fromArray(b, binary.BigEndian) -} - -// ToArray returns an array of 16 bytes representing the GUID in big-endian -// encoding. -func (g GUID) ToArray() [16]byte { - return g.toArray(binary.BigEndian) -} - -// FromWindowsArray constructs a GUID from a Windows encoding array of bytes. -func FromWindowsArray(b [16]byte) GUID { - return fromArray(b, binary.LittleEndian) -} - -// ToWindowsArray returns an array of 16 bytes representing the GUID in Windows -// encoding. -func (g GUID) ToWindowsArray() [16]byte { - return g.toArray(binary.LittleEndian) -} - -func (g GUID) String() string { - return fmt.Sprintf( - "%08x-%04x-%04x-%04x-%012x", - g.Data1, - g.Data2, - g.Data3, - g.Data4[:2], - g.Data4[2:]) -} - -// FromString parses a string containing a GUID and returns the GUID. The only -// format currently supported is the `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` -// format. -func FromString(s string) (GUID, error) { - if len(s) != 36 { - return GUID{}, fmt.Errorf("invalid GUID %q", s) - } - if s[8] != '-' || s[13] != '-' || s[18] != '-' || s[23] != '-' { - return GUID{}, fmt.Errorf("invalid GUID %q", s) - } - - var g GUID - - data1, err := strconv.ParseUint(s[0:8], 16, 32) - if err != nil { - return GUID{}, fmt.Errorf("invalid GUID %q", s) - } - g.Data1 = uint32(data1) - - data2, err := strconv.ParseUint(s[9:13], 16, 16) - if err != nil { - return GUID{}, fmt.Errorf("invalid GUID %q", s) - } - g.Data2 = uint16(data2) - - data3, err := strconv.ParseUint(s[14:18], 16, 16) - if err != nil { - return GUID{}, fmt.Errorf("invalid GUID %q", s) - } - g.Data3 = uint16(data3) - - for i, x := range []int{19, 21, 24, 26, 28, 30, 32, 34} { - v, err := strconv.ParseUint(s[x:x+2], 16, 8) - if err != nil { - return GUID{}, fmt.Errorf("invalid GUID %q", s) - } - g.Data4[i] = uint8(v) - } - - return g, nil -} - -func (g *GUID) setVariant(v Variant) { - d := g.Data4[0] - switch v { - case VariantNCS: - d = (d & 0x7f) - case VariantRFC4122: - d = (d & 0x3f) | 0x80 - case VariantMicrosoft: - d = (d & 0x1f) | 0xc0 - case VariantFuture: - d = (d & 0x0f) | 0xe0 - case VariantUnknown: - fallthrough - default: - panic(fmt.Sprintf("invalid variant: %d", v)) - } - g.Data4[0] = d -} - -// Variant returns the GUID variant, as defined in RFC 4122. -func (g GUID) Variant() Variant { - b := g.Data4[0] - if b&0x80 == 0 { - return VariantNCS - } else if b&0xc0 == 0x80 { - return VariantRFC4122 - } else if b&0xe0 == 0xc0 { - return VariantMicrosoft - } else if b&0xe0 == 0xe0 { - return VariantFuture - } - return VariantUnknown -} - -func (g *GUID) setVersion(v Version) { - g.Data3 = (g.Data3 & 0x0fff) | (uint16(v) << 12) -} - -// Version returns the GUID version, as defined in RFC 4122. -func (g GUID) Version() Version { - return Version((g.Data3 & 0xF000) >> 12) -} - -// MarshalText returns the textual representation of the GUID. -func (g GUID) MarshalText() ([]byte, error) { - return []byte(g.String()), nil -} - -// UnmarshalText takes the textual representation of a GUID, and unmarhals it -// into this GUID. -func (g *GUID) UnmarshalText(text []byte) error { - g2, err := FromString(string(text)) - if err != nil { - return err - } - *g = g2 - return nil -} diff --git a/vendor/github.com/Microsoft/go-winio/pkg/guid/guid_nonwindows.go b/vendor/github.com/Microsoft/go-winio/pkg/guid/guid_nonwindows.go deleted file mode 100644 index 805bd354..00000000 --- a/vendor/github.com/Microsoft/go-winio/pkg/guid/guid_nonwindows.go +++ /dev/null @@ -1,16 +0,0 @@ -//go:build !windows -// +build !windows - -package guid - -// GUID represents a GUID/UUID. It has the same structure as -// golang.org/x/sys/windows.GUID so that it can be used with functions expecting -// that type. It is defined as its own type as that is only available to builds -// targeted at `windows`. The representation matches that used by native Windows -// code. -type GUID struct { - Data1 uint32 - Data2 uint16 - Data3 uint16 - Data4 [8]byte -} diff --git a/vendor/github.com/Microsoft/go-winio/pkg/guid/guid_windows.go b/vendor/github.com/Microsoft/go-winio/pkg/guid/guid_windows.go deleted file mode 100644 index 27e45ee5..00000000 --- a/vendor/github.com/Microsoft/go-winio/pkg/guid/guid_windows.go +++ /dev/null @@ -1,13 +0,0 @@ -//go:build windows -// +build windows - -package guid - -import "golang.org/x/sys/windows" - -// GUID represents a GUID/UUID. It has the same structure as -// golang.org/x/sys/windows.GUID so that it can be used with functions expecting -// that type. It is defined as its own type so that stringification and -// marshaling can be supported. The representation matches that used by native -// Windows code. -type GUID windows.GUID diff --git a/vendor/github.com/Microsoft/go-winio/pkg/guid/variant_string.go b/vendor/github.com/Microsoft/go-winio/pkg/guid/variant_string.go deleted file mode 100644 index 4076d313..00000000 --- a/vendor/github.com/Microsoft/go-winio/pkg/guid/variant_string.go +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by "stringer -type=Variant -trimprefix=Variant -linecomment"; DO NOT EDIT. - -package guid - -import "strconv" - -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[VariantUnknown-0] - _ = x[VariantNCS-1] - _ = x[VariantRFC4122-2] - _ = x[VariantMicrosoft-3] - _ = x[VariantFuture-4] -} - -const _Variant_name = "UnknownNCSRFC 4122MicrosoftFuture" - -var _Variant_index = [...]uint8{0, 7, 10, 18, 27, 33} - -func (i Variant) String() string { - if i >= Variant(len(_Variant_index)-1) { - return "Variant(" + strconv.FormatInt(int64(i), 10) + ")" - } - return _Variant_name[_Variant_index[i]:_Variant_index[i+1]] -} diff --git a/vendor/github.com/Microsoft/go-winio/privilege.go b/vendor/github.com/Microsoft/go-winio/privilege.go deleted file mode 100644 index d9b90b6e..00000000 --- a/vendor/github.com/Microsoft/go-winio/privilege.go +++ /dev/null @@ -1,196 +0,0 @@ -//go:build windows -// +build windows - -package winio - -import ( - "bytes" - "encoding/binary" - "fmt" - "runtime" - "sync" - "unicode/utf16" - - "golang.org/x/sys/windows" -) - -//sys adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (success bool, err error) [true] = advapi32.AdjustTokenPrivileges -//sys impersonateSelf(level uint32) (err error) = advapi32.ImpersonateSelf -//sys revertToSelf() (err error) = advapi32.RevertToSelf -//sys openThreadToken(thread windows.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) = advapi32.OpenThreadToken -//sys getCurrentThread() (h windows.Handle) = GetCurrentThread -//sys lookupPrivilegeValue(systemName string, name string, luid *uint64) (err error) = advapi32.LookupPrivilegeValueW -//sys lookupPrivilegeName(systemName string, luid *uint64, buffer *uint16, size *uint32) (err error) = advapi32.LookupPrivilegeNameW -//sys lookupPrivilegeDisplayName(systemName string, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) = advapi32.LookupPrivilegeDisplayNameW - -const ( - //revive:disable-next-line:var-naming ALL_CAPS - SE_PRIVILEGE_ENABLED = windows.SE_PRIVILEGE_ENABLED - - //revive:disable-next-line:var-naming ALL_CAPS - ERROR_NOT_ALL_ASSIGNED windows.Errno = windows.ERROR_NOT_ALL_ASSIGNED - - SeBackupPrivilege = "SeBackupPrivilege" - SeRestorePrivilege = "SeRestorePrivilege" - SeSecurityPrivilege = "SeSecurityPrivilege" -) - -var ( - privNames = make(map[string]uint64) - privNameMutex sync.Mutex -) - -// PrivilegeError represents an error enabling privileges. -type PrivilegeError struct { - privileges []uint64 -} - -func (e *PrivilegeError) Error() string { - s := "Could not enable privilege " - if len(e.privileges) > 1 { - s = "Could not enable privileges " - } - for i, p := range e.privileges { - if i != 0 { - s += ", " - } - s += `"` - s += getPrivilegeName(p) - s += `"` - } - return s -} - -// RunWithPrivilege enables a single privilege for a function call. -func RunWithPrivilege(name string, fn func() error) error { - return RunWithPrivileges([]string{name}, fn) -} - -// RunWithPrivileges enables privileges for a function call. -func RunWithPrivileges(names []string, fn func() error) error { - privileges, err := mapPrivileges(names) - if err != nil { - return err - } - runtime.LockOSThread() - defer runtime.UnlockOSThread() - token, err := newThreadToken() - if err != nil { - return err - } - defer releaseThreadToken(token) - err = adjustPrivileges(token, privileges, SE_PRIVILEGE_ENABLED) - if err != nil { - return err - } - return fn() -} - -func mapPrivileges(names []string) ([]uint64, error) { - privileges := make([]uint64, 0, len(names)) - privNameMutex.Lock() - defer privNameMutex.Unlock() - for _, name := range names { - p, ok := privNames[name] - if !ok { - err := lookupPrivilegeValue("", name, &p) - if err != nil { - return nil, err - } - privNames[name] = p - } - privileges = append(privileges, p) - } - return privileges, nil -} - -// EnableProcessPrivileges enables privileges globally for the process. -func EnableProcessPrivileges(names []string) error { - return enableDisableProcessPrivilege(names, SE_PRIVILEGE_ENABLED) -} - -// DisableProcessPrivileges disables privileges globally for the process. -func DisableProcessPrivileges(names []string) error { - return enableDisableProcessPrivilege(names, 0) -} - -func enableDisableProcessPrivilege(names []string, action uint32) error { - privileges, err := mapPrivileges(names) - if err != nil { - return err - } - - p := windows.CurrentProcess() - var token windows.Token - err = windows.OpenProcessToken(p, windows.TOKEN_ADJUST_PRIVILEGES|windows.TOKEN_QUERY, &token) - if err != nil { - return err - } - - defer token.Close() - return adjustPrivileges(token, privileges, action) -} - -func adjustPrivileges(token windows.Token, privileges []uint64, action uint32) error { - var b bytes.Buffer - _ = binary.Write(&b, binary.LittleEndian, uint32(len(privileges))) - for _, p := range privileges { - _ = binary.Write(&b, binary.LittleEndian, p) - _ = binary.Write(&b, binary.LittleEndian, action) - } - prevState := make([]byte, b.Len()) - reqSize := uint32(0) - success, err := adjustTokenPrivileges(token, false, &b.Bytes()[0], uint32(len(prevState)), &prevState[0], &reqSize) - if !success { - return err - } - if err == ERROR_NOT_ALL_ASSIGNED { //nolint:errorlint // err is Errno - return &PrivilegeError{privileges} - } - return nil -} - -func getPrivilegeName(luid uint64) string { - var nameBuffer [256]uint16 - bufSize := uint32(len(nameBuffer)) - err := lookupPrivilegeName("", &luid, &nameBuffer[0], &bufSize) - if err != nil { - return fmt.Sprintf("", luid) - } - - var displayNameBuffer [256]uint16 - displayBufSize := uint32(len(displayNameBuffer)) - var langID uint32 - err = lookupPrivilegeDisplayName("", &nameBuffer[0], &displayNameBuffer[0], &displayBufSize, &langID) - if err != nil { - return fmt.Sprintf("", string(utf16.Decode(nameBuffer[:bufSize]))) - } - - return string(utf16.Decode(displayNameBuffer[:displayBufSize])) -} - -func newThreadToken() (windows.Token, error) { - err := impersonateSelf(windows.SecurityImpersonation) - if err != nil { - return 0, err - } - - var token windows.Token - err = openThreadToken(getCurrentThread(), windows.TOKEN_ADJUST_PRIVILEGES|windows.TOKEN_QUERY, false, &token) - if err != nil { - rerr := revertToSelf() - if rerr != nil { - panic(rerr) - } - return 0, err - } - return token, nil -} - -func releaseThreadToken(h windows.Token) { - err := revertToSelf() - if err != nil { - panic(err) - } - h.Close() -} diff --git a/vendor/github.com/Microsoft/go-winio/reparse.go b/vendor/github.com/Microsoft/go-winio/reparse.go deleted file mode 100644 index 67d1a104..00000000 --- a/vendor/github.com/Microsoft/go-winio/reparse.go +++ /dev/null @@ -1,131 +0,0 @@ -//go:build windows -// +build windows - -package winio - -import ( - "bytes" - "encoding/binary" - "fmt" - "strings" - "unicode/utf16" - "unsafe" -) - -const ( - reparseTagMountPoint = 0xA0000003 - reparseTagSymlink = 0xA000000C -) - -type reparseDataBuffer struct { - ReparseTag uint32 - ReparseDataLength uint16 - Reserved uint16 - SubstituteNameOffset uint16 - SubstituteNameLength uint16 - PrintNameOffset uint16 - PrintNameLength uint16 -} - -// ReparsePoint describes a Win32 symlink or mount point. -type ReparsePoint struct { - Target string - IsMountPoint bool -} - -// UnsupportedReparsePointError is returned when trying to decode a non-symlink or -// mount point reparse point. -type UnsupportedReparsePointError struct { - Tag uint32 -} - -func (e *UnsupportedReparsePointError) Error() string { - return fmt.Sprintf("unsupported reparse point %x", e.Tag) -} - -// DecodeReparsePoint decodes a Win32 REPARSE_DATA_BUFFER structure containing either a symlink -// or a mount point. -func DecodeReparsePoint(b []byte) (*ReparsePoint, error) { - tag := binary.LittleEndian.Uint32(b[0:4]) - return DecodeReparsePointData(tag, b[8:]) -} - -func DecodeReparsePointData(tag uint32, b []byte) (*ReparsePoint, error) { - isMountPoint := false - switch tag { - case reparseTagMountPoint: - isMountPoint = true - case reparseTagSymlink: - default: - return nil, &UnsupportedReparsePointError{tag} - } - nameOffset := 8 + binary.LittleEndian.Uint16(b[4:6]) - if !isMountPoint { - nameOffset += 4 - } - nameLength := binary.LittleEndian.Uint16(b[6:8]) - name := make([]uint16, nameLength/2) - err := binary.Read(bytes.NewReader(b[nameOffset:nameOffset+nameLength]), binary.LittleEndian, &name) - if err != nil { - return nil, err - } - return &ReparsePoint{string(utf16.Decode(name)), isMountPoint}, nil -} - -func isDriveLetter(c byte) bool { - return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') -} - -// EncodeReparsePoint encodes a Win32 REPARSE_DATA_BUFFER structure describing a symlink or -// mount point. -func EncodeReparsePoint(rp *ReparsePoint) []byte { - // Generate an NT path and determine if this is a relative path. - var ntTarget string - relative := false - if strings.HasPrefix(rp.Target, `\\?\`) { - ntTarget = `\??\` + rp.Target[4:] - } else if strings.HasPrefix(rp.Target, `\\`) { - ntTarget = `\??\UNC\` + rp.Target[2:] - } else if len(rp.Target) >= 2 && isDriveLetter(rp.Target[0]) && rp.Target[1] == ':' { - ntTarget = `\??\` + rp.Target - } else { - ntTarget = rp.Target - relative = true - } - - // The paths must be NUL-terminated even though they are counted strings. - target16 := utf16.Encode([]rune(rp.Target + "\x00")) - ntTarget16 := utf16.Encode([]rune(ntTarget + "\x00")) - - size := int(unsafe.Sizeof(reparseDataBuffer{})) - 8 - size += len(ntTarget16)*2 + len(target16)*2 - - tag := uint32(reparseTagMountPoint) - if !rp.IsMountPoint { - tag = reparseTagSymlink - size += 4 // Add room for symlink flags - } - - data := reparseDataBuffer{ - ReparseTag: tag, - ReparseDataLength: uint16(size), - SubstituteNameOffset: 0, - SubstituteNameLength: uint16((len(ntTarget16) - 1) * 2), - PrintNameOffset: uint16(len(ntTarget16) * 2), - PrintNameLength: uint16((len(target16) - 1) * 2), - } - - var b bytes.Buffer - _ = binary.Write(&b, binary.LittleEndian, &data) - if !rp.IsMountPoint { - flags := uint32(0) - if relative { - flags |= 1 - } - _ = binary.Write(&b, binary.LittleEndian, flags) - } - - _ = binary.Write(&b, binary.LittleEndian, ntTarget16) - _ = binary.Write(&b, binary.LittleEndian, target16) - return b.Bytes() -} diff --git a/vendor/github.com/Microsoft/go-winio/sd.go b/vendor/github.com/Microsoft/go-winio/sd.go deleted file mode 100644 index c3685e98..00000000 --- a/vendor/github.com/Microsoft/go-winio/sd.go +++ /dev/null @@ -1,133 +0,0 @@ -//go:build windows -// +build windows - -package winio - -import ( - "errors" - "fmt" - "unsafe" - - "golang.org/x/sys/windows" -) - -//sys lookupAccountName(systemName *uint16, accountName string, sid *byte, sidSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) = advapi32.LookupAccountNameW -//sys lookupAccountSid(systemName *uint16, sid *byte, name *uint16, nameSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) = advapi32.LookupAccountSidW -//sys convertSidToStringSid(sid *byte, str **uint16) (err error) = advapi32.ConvertSidToStringSidW -//sys convertStringSidToSid(str *uint16, sid **byte) (err error) = advapi32.ConvertStringSidToSidW - -type AccountLookupError struct { - Name string - Err error -} - -func (e *AccountLookupError) Error() string { - if e.Name == "" { - return "lookup account: empty account name specified" - } - var s string - switch { - case errors.Is(e.Err, windows.ERROR_INVALID_SID): - s = "the security ID structure is invalid" - case errors.Is(e.Err, windows.ERROR_NONE_MAPPED): - s = "not found" - default: - s = e.Err.Error() - } - return "lookup account " + e.Name + ": " + s -} - -func (e *AccountLookupError) Unwrap() error { return e.Err } - -type SddlConversionError struct { - Sddl string - Err error -} - -func (e *SddlConversionError) Error() string { - return "convert " + e.Sddl + ": " + e.Err.Error() -} - -func (e *SddlConversionError) Unwrap() error { return e.Err } - -// LookupSidByName looks up the SID of an account by name -// -//revive:disable-next-line:var-naming SID, not Sid -func LookupSidByName(name string) (sid string, err error) { - if name == "" { - return "", &AccountLookupError{name, windows.ERROR_NONE_MAPPED} - } - - var sidSize, sidNameUse, refDomainSize uint32 - err = lookupAccountName(nil, name, nil, &sidSize, nil, &refDomainSize, &sidNameUse) - if err != nil && err != windows.ERROR_INSUFFICIENT_BUFFER { //nolint:errorlint // err is Errno - return "", &AccountLookupError{name, err} - } - sidBuffer := make([]byte, sidSize) - refDomainBuffer := make([]uint16, refDomainSize) - err = lookupAccountName(nil, name, &sidBuffer[0], &sidSize, &refDomainBuffer[0], &refDomainSize, &sidNameUse) - if err != nil { - return "", &AccountLookupError{name, err} - } - var strBuffer *uint16 - err = convertSidToStringSid(&sidBuffer[0], &strBuffer) - if err != nil { - return "", &AccountLookupError{name, err} - } - sid = windows.UTF16ToString((*[0xffff]uint16)(unsafe.Pointer(strBuffer))[:]) - _, _ = windows.LocalFree(windows.Handle(unsafe.Pointer(strBuffer))) - return sid, nil -} - -// LookupNameBySid looks up the name of an account by SID -// -//revive:disable-next-line:var-naming SID, not Sid -func LookupNameBySid(sid string) (name string, err error) { - if sid == "" { - return "", &AccountLookupError{sid, windows.ERROR_NONE_MAPPED} - } - - sidBuffer, err := windows.UTF16PtrFromString(sid) - if err != nil { - return "", &AccountLookupError{sid, err} - } - - var sidPtr *byte - if err = convertStringSidToSid(sidBuffer, &sidPtr); err != nil { - return "", &AccountLookupError{sid, err} - } - defer windows.LocalFree(windows.Handle(unsafe.Pointer(sidPtr))) //nolint:errcheck - - var nameSize, refDomainSize, sidNameUse uint32 - err = lookupAccountSid(nil, sidPtr, nil, &nameSize, nil, &refDomainSize, &sidNameUse) - if err != nil && err != windows.ERROR_INSUFFICIENT_BUFFER { //nolint:errorlint // err is Errno - return "", &AccountLookupError{sid, err} - } - - nameBuffer := make([]uint16, nameSize) - refDomainBuffer := make([]uint16, refDomainSize) - err = lookupAccountSid(nil, sidPtr, &nameBuffer[0], &nameSize, &refDomainBuffer[0], &refDomainSize, &sidNameUse) - if err != nil { - return "", &AccountLookupError{sid, err} - } - - name = windows.UTF16ToString(nameBuffer) - return name, nil -} - -func SddlToSecurityDescriptor(sddl string) ([]byte, error) { - sd, err := windows.SecurityDescriptorFromString(sddl) - if err != nil { - return nil, &SddlConversionError{Sddl: sddl, Err: err} - } - b := unsafe.Slice((*byte)(unsafe.Pointer(sd)), sd.Length()) - return b, nil -} - -func SecurityDescriptorToSddl(sd []byte) (string, error) { - if l := int(unsafe.Sizeof(windows.SECURITY_DESCRIPTOR{})); len(sd) < l { - return "", fmt.Errorf("SecurityDescriptor (%d) smaller than expected (%d): %w", len(sd), l, windows.ERROR_INCORRECT_SIZE) - } - s := (*windows.SECURITY_DESCRIPTOR)(unsafe.Pointer(&sd[0])) - return s.String(), nil -} diff --git a/vendor/github.com/Microsoft/go-winio/syscall.go b/vendor/github.com/Microsoft/go-winio/syscall.go deleted file mode 100644 index a6ca111b..00000000 --- a/vendor/github.com/Microsoft/go-winio/syscall.go +++ /dev/null @@ -1,5 +0,0 @@ -//go:build windows - -package winio - -//go:generate go run github.com/Microsoft/go-winio/tools/mkwinsyscall -output zsyscall_windows.go ./*.go diff --git a/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go b/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go deleted file mode 100644 index 89b66eda..00000000 --- a/vendor/github.com/Microsoft/go-winio/zsyscall_windows.go +++ /dev/null @@ -1,378 +0,0 @@ -//go:build windows - -// Code generated by 'go generate' using "github.com/Microsoft/go-winio/tools/mkwinsyscall"; DO NOT EDIT. - -package winio - -import ( - "syscall" - "unsafe" - - "golang.org/x/sys/windows" -) - -var _ unsafe.Pointer - -// Do the interface allocations only once for common -// Errno values. -const ( - errnoERROR_IO_PENDING = 997 -) - -var ( - errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) - errERROR_EINVAL error = syscall.EINVAL -) - -// errnoErr returns common boxed Errno values, to prevent -// allocations at runtime. -func errnoErr(e syscall.Errno) error { - switch e { - case 0: - return errERROR_EINVAL - case errnoERROR_IO_PENDING: - return errERROR_IO_PENDING - } - return e -} - -var ( - modadvapi32 = windows.NewLazySystemDLL("advapi32.dll") - modkernel32 = windows.NewLazySystemDLL("kernel32.dll") - modntdll = windows.NewLazySystemDLL("ntdll.dll") - modws2_32 = windows.NewLazySystemDLL("ws2_32.dll") - - procAdjustTokenPrivileges = modadvapi32.NewProc("AdjustTokenPrivileges") - procConvertSidToStringSidW = modadvapi32.NewProc("ConvertSidToStringSidW") - procConvertStringSidToSidW = modadvapi32.NewProc("ConvertStringSidToSidW") - procImpersonateSelf = modadvapi32.NewProc("ImpersonateSelf") - procLookupAccountNameW = modadvapi32.NewProc("LookupAccountNameW") - procLookupAccountSidW = modadvapi32.NewProc("LookupAccountSidW") - procLookupPrivilegeDisplayNameW = modadvapi32.NewProc("LookupPrivilegeDisplayNameW") - procLookupPrivilegeNameW = modadvapi32.NewProc("LookupPrivilegeNameW") - procLookupPrivilegeValueW = modadvapi32.NewProc("LookupPrivilegeValueW") - procOpenThreadToken = modadvapi32.NewProc("OpenThreadToken") - procRevertToSelf = modadvapi32.NewProc("RevertToSelf") - procBackupRead = modkernel32.NewProc("BackupRead") - procBackupWrite = modkernel32.NewProc("BackupWrite") - procCancelIoEx = modkernel32.NewProc("CancelIoEx") - procConnectNamedPipe = modkernel32.NewProc("ConnectNamedPipe") - procCreateIoCompletionPort = modkernel32.NewProc("CreateIoCompletionPort") - procCreateNamedPipeW = modkernel32.NewProc("CreateNamedPipeW") - procDisconnectNamedPipe = modkernel32.NewProc("DisconnectNamedPipe") - procGetCurrentThread = modkernel32.NewProc("GetCurrentThread") - procGetNamedPipeHandleStateW = modkernel32.NewProc("GetNamedPipeHandleStateW") - procGetNamedPipeInfo = modkernel32.NewProc("GetNamedPipeInfo") - procGetQueuedCompletionStatus = modkernel32.NewProc("GetQueuedCompletionStatus") - procSetFileCompletionNotificationModes = modkernel32.NewProc("SetFileCompletionNotificationModes") - procNtCreateNamedPipeFile = modntdll.NewProc("NtCreateNamedPipeFile") - procRtlDefaultNpAcl = modntdll.NewProc("RtlDefaultNpAcl") - procRtlDosPathNameToNtPathName_U = modntdll.NewProc("RtlDosPathNameToNtPathName_U") - procRtlNtStatusToDosErrorNoTeb = modntdll.NewProc("RtlNtStatusToDosErrorNoTeb") - procWSAGetOverlappedResult = modws2_32.NewProc("WSAGetOverlappedResult") -) - -func adjustTokenPrivileges(token windows.Token, releaseAll bool, input *byte, outputSize uint32, output *byte, requiredSize *uint32) (success bool, err error) { - var _p0 uint32 - if releaseAll { - _p0 = 1 - } - r0, _, e1 := syscall.SyscallN(procAdjustTokenPrivileges.Addr(), uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(input)), uintptr(outputSize), uintptr(unsafe.Pointer(output)), uintptr(unsafe.Pointer(requiredSize))) - success = r0 != 0 - if true { - err = errnoErr(e1) - } - return -} - -func convertSidToStringSid(sid *byte, str **uint16) (err error) { - r1, _, e1 := syscall.SyscallN(procConvertSidToStringSidW.Addr(), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(str))) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func convertStringSidToSid(str *uint16, sid **byte) (err error) { - r1, _, e1 := syscall.SyscallN(procConvertStringSidToSidW.Addr(), uintptr(unsafe.Pointer(str)), uintptr(unsafe.Pointer(sid))) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func impersonateSelf(level uint32) (err error) { - r1, _, e1 := syscall.SyscallN(procImpersonateSelf.Addr(), uintptr(level)) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func lookupAccountName(systemName *uint16, accountName string, sid *byte, sidSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) { - var _p0 *uint16 - _p0, err = syscall.UTF16PtrFromString(accountName) - if err != nil { - return - } - return _lookupAccountName(systemName, _p0, sid, sidSize, refDomain, refDomainSize, sidNameUse) -} - -func _lookupAccountName(systemName *uint16, accountName *uint16, sid *byte, sidSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) { - r1, _, e1 := syscall.SyscallN(procLookupAccountNameW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse))) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func lookupAccountSid(systemName *uint16, sid *byte, name *uint16, nameSize *uint32, refDomain *uint16, refDomainSize *uint32, sidNameUse *uint32) (err error) { - r1, _, e1 := syscall.SyscallN(procLookupAccountSidW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameSize)), uintptr(unsafe.Pointer(refDomain)), uintptr(unsafe.Pointer(refDomainSize)), uintptr(unsafe.Pointer(sidNameUse))) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func lookupPrivilegeDisplayName(systemName string, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) { - var _p0 *uint16 - _p0, err = syscall.UTF16PtrFromString(systemName) - if err != nil { - return - } - return _lookupPrivilegeDisplayName(_p0, name, buffer, size, languageId) -} - -func _lookupPrivilegeDisplayName(systemName *uint16, name *uint16, buffer *uint16, size *uint32, languageId *uint32) (err error) { - r1, _, e1 := syscall.SyscallN(procLookupPrivilegeDisplayNameW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(languageId))) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func lookupPrivilegeName(systemName string, luid *uint64, buffer *uint16, size *uint32) (err error) { - var _p0 *uint16 - _p0, err = syscall.UTF16PtrFromString(systemName) - if err != nil { - return - } - return _lookupPrivilegeName(_p0, luid, buffer, size) -} - -func _lookupPrivilegeName(systemName *uint16, luid *uint64, buffer *uint16, size *uint32) (err error) { - r1, _, e1 := syscall.SyscallN(procLookupPrivilegeNameW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(luid)), uintptr(unsafe.Pointer(buffer)), uintptr(unsafe.Pointer(size))) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func lookupPrivilegeValue(systemName string, name string, luid *uint64) (err error) { - var _p0 *uint16 - _p0, err = syscall.UTF16PtrFromString(systemName) - if err != nil { - return - } - var _p1 *uint16 - _p1, err = syscall.UTF16PtrFromString(name) - if err != nil { - return - } - return _lookupPrivilegeValue(_p0, _p1, luid) -} - -func _lookupPrivilegeValue(systemName *uint16, name *uint16, luid *uint64) (err error) { - r1, _, e1 := syscall.SyscallN(procLookupPrivilegeValueW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid))) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func openThreadToken(thread windows.Handle, accessMask uint32, openAsSelf bool, token *windows.Token) (err error) { - var _p0 uint32 - if openAsSelf { - _p0 = 1 - } - r1, _, e1 := syscall.SyscallN(procOpenThreadToken.Addr(), uintptr(thread), uintptr(accessMask), uintptr(_p0), uintptr(unsafe.Pointer(token))) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func revertToSelf() (err error) { - r1, _, e1 := syscall.SyscallN(procRevertToSelf.Addr()) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func backupRead(h windows.Handle, b []byte, bytesRead *uint32, abort bool, processSecurity bool, context *uintptr) (err error) { - var _p0 *byte - if len(b) > 0 { - _p0 = &b[0] - } - var _p1 uint32 - if abort { - _p1 = 1 - } - var _p2 uint32 - if processSecurity { - _p2 = 1 - } - r1, _, e1 := syscall.SyscallN(procBackupRead.Addr(), uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesRead)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context))) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func backupWrite(h windows.Handle, b []byte, bytesWritten *uint32, abort bool, processSecurity bool, context *uintptr) (err error) { - var _p0 *byte - if len(b) > 0 { - _p0 = &b[0] - } - var _p1 uint32 - if abort { - _p1 = 1 - } - var _p2 uint32 - if processSecurity { - _p2 = 1 - } - r1, _, e1 := syscall.SyscallN(procBackupWrite.Addr(), uintptr(h), uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(unsafe.Pointer(bytesWritten)), uintptr(_p1), uintptr(_p2), uintptr(unsafe.Pointer(context))) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func cancelIoEx(file windows.Handle, o *windows.Overlapped) (err error) { - r1, _, e1 := syscall.SyscallN(procCancelIoEx.Addr(), uintptr(file), uintptr(unsafe.Pointer(o))) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func connectNamedPipe(pipe windows.Handle, o *windows.Overlapped) (err error) { - r1, _, e1 := syscall.SyscallN(procConnectNamedPipe.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(o))) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func createIoCompletionPort(file windows.Handle, port windows.Handle, key uintptr, threadCount uint32) (newport windows.Handle, err error) { - r0, _, e1 := syscall.SyscallN(procCreateIoCompletionPort.Addr(), uintptr(file), uintptr(port), uintptr(key), uintptr(threadCount)) - newport = windows.Handle(r0) - if newport == 0 { - err = errnoErr(e1) - } - return -} - -func createNamedPipe(name string, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *windows.SecurityAttributes) (handle windows.Handle, err error) { - var _p0 *uint16 - _p0, err = syscall.UTF16PtrFromString(name) - if err != nil { - return - } - return _createNamedPipe(_p0, flags, pipeMode, maxInstances, outSize, inSize, defaultTimeout, sa) -} - -func _createNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *windows.SecurityAttributes) (handle windows.Handle, err error) { - r0, _, e1 := syscall.SyscallN(procCreateNamedPipeW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(pipeMode), uintptr(maxInstances), uintptr(outSize), uintptr(inSize), uintptr(defaultTimeout), uintptr(unsafe.Pointer(sa))) - handle = windows.Handle(r0) - if handle == windows.InvalidHandle { - err = errnoErr(e1) - } - return -} - -func disconnectNamedPipe(pipe windows.Handle) (err error) { - r1, _, e1 := syscall.SyscallN(procDisconnectNamedPipe.Addr(), uintptr(pipe)) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func getCurrentThread() (h windows.Handle) { - r0, _, _ := syscall.SyscallN(procGetCurrentThread.Addr()) - h = windows.Handle(r0) - return -} - -func getNamedPipeHandleState(pipe windows.Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) { - r1, _, e1 := syscall.SyscallN(procGetNamedPipeHandleStateW.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize)) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func getNamedPipeInfo(pipe windows.Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) { - r1, _, e1 := syscall.SyscallN(procGetNamedPipeInfo.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(outSize)), uintptr(unsafe.Pointer(inSize)), uintptr(unsafe.Pointer(maxInstances))) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func getQueuedCompletionStatus(port windows.Handle, bytes *uint32, key *uintptr, o **ioOperation, timeout uint32) (err error) { - r1, _, e1 := syscall.SyscallN(procGetQueuedCompletionStatus.Addr(), uintptr(port), uintptr(unsafe.Pointer(bytes)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(o)), uintptr(timeout)) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func setFileCompletionNotificationModes(h windows.Handle, flags uint8) (err error) { - r1, _, e1 := syscall.SyscallN(procSetFileCompletionNotificationModes.Addr(), uintptr(h), uintptr(flags)) - if r1 == 0 { - err = errnoErr(e1) - } - return -} - -func ntCreateNamedPipeFile(pipe *windows.Handle, access ntAccessMask, oa *objectAttributes, iosb *ioStatusBlock, share ntFileShareMode, disposition ntFileCreationDisposition, options ntFileOptions, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (status ntStatus) { - r0, _, _ := syscall.SyscallN(procNtCreateNamedPipeFile.Addr(), uintptr(unsafe.Pointer(pipe)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(share), uintptr(disposition), uintptr(options), uintptr(typ), uintptr(readMode), uintptr(completionMode), uintptr(maxInstances), uintptr(inboundQuota), uintptr(outputQuota), uintptr(unsafe.Pointer(timeout))) - status = ntStatus(r0) - return -} - -func rtlDefaultNpAcl(dacl *uintptr) (status ntStatus) { - r0, _, _ := syscall.SyscallN(procRtlDefaultNpAcl.Addr(), uintptr(unsafe.Pointer(dacl))) - status = ntStatus(r0) - return -} - -func rtlDosPathNameToNtPathName(name *uint16, ntName *unicodeString, filePart uintptr, reserved uintptr) (status ntStatus) { - r0, _, _ := syscall.SyscallN(procRtlDosPathNameToNtPathName_U.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(ntName)), uintptr(filePart), uintptr(reserved)) - status = ntStatus(r0) - return -} - -func rtlNtStatusToDosError(status ntStatus) (winerr error) { - r0, _, _ := syscall.SyscallN(procRtlNtStatusToDosErrorNoTeb.Addr(), uintptr(status)) - if r0 != 0 { - winerr = syscall.Errno(r0) - } - return -} - -func wsaGetOverlappedResult(h windows.Handle, o *windows.Overlapped, bytes *uint32, wait bool, flags *uint32) (err error) { - var _p0 uint32 - if wait { - _p0 = 1 - } - r1, _, e1 := syscall.SyscallN(procWSAGetOverlappedResult.Addr(), uintptr(h), uintptr(unsafe.Pointer(o)), uintptr(unsafe.Pointer(bytes)), uintptr(_p0), uintptr(unsafe.Pointer(flags))) - if r1 == 0 { - err = errnoErr(e1) - } - return -} diff --git a/vendor/github.com/containerd/errdefs/LICENSE b/vendor/github.com/containerd/errdefs/LICENSE deleted file mode 100644 index 584149b6..00000000 --- a/vendor/github.com/containerd/errdefs/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright The containerd Authors - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/containerd/errdefs/README.md b/vendor/github.com/containerd/errdefs/README.md deleted file mode 100644 index bd418c63..00000000 --- a/vendor/github.com/containerd/errdefs/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# errdefs - -A Go package for defining and checking common containerd errors. - -## Project details - -**errdefs** is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE). -As a containerd sub-project, you will find the: - * [Project governance](https://github.com/containerd/project/blob/main/GOVERNANCE.md), - * [Maintainers](https://github.com/containerd/project/blob/main/MAINTAINERS), - * and [Contributing guidelines](https://github.com/containerd/project/blob/main/CONTRIBUTING.md) - -information in our [`containerd/project`](https://github.com/containerd/project) repository. diff --git a/vendor/github.com/containerd/errdefs/errors.go b/vendor/github.com/containerd/errdefs/errors.go deleted file mode 100644 index f654d196..00000000 --- a/vendor/github.com/containerd/errdefs/errors.go +++ /dev/null @@ -1,443 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -// Package errdefs defines the common errors used throughout containerd -// packages. -// -// Use with fmt.Errorf to add context to an error. -// -// To detect an error class, use the IsXXX functions to tell whether an error -// is of a certain type. -package errdefs - -import ( - "context" - "errors" -) - -// Definitions of common error types used throughout containerd. All containerd -// errors returned by most packages will map into one of these errors classes. -// Packages should return errors of these types when they want to instruct a -// client to take a particular action. -// -// These errors map closely to grpc errors. -var ( - ErrUnknown = errUnknown{} - ErrInvalidArgument = errInvalidArgument{} - ErrNotFound = errNotFound{} - ErrAlreadyExists = errAlreadyExists{} - ErrPermissionDenied = errPermissionDenied{} - ErrResourceExhausted = errResourceExhausted{} - ErrFailedPrecondition = errFailedPrecondition{} - ErrConflict = errConflict{} - ErrNotModified = errNotModified{} - ErrAborted = errAborted{} - ErrOutOfRange = errOutOfRange{} - ErrNotImplemented = errNotImplemented{} - ErrInternal = errInternal{} - ErrUnavailable = errUnavailable{} - ErrDataLoss = errDataLoss{} - ErrUnauthenticated = errUnauthorized{} -) - -// cancelled maps to Moby's "ErrCancelled" -type cancelled interface { - Cancelled() -} - -// IsCanceled returns true if the error is due to `context.Canceled`. -func IsCanceled(err error) bool { - return errors.Is(err, context.Canceled) || isInterface[cancelled](err) -} - -type errUnknown struct{} - -func (errUnknown) Error() string { return "unknown" } - -func (errUnknown) Unknown() {} - -func (e errUnknown) WithMessage(msg string) error { - return customMessage{e, msg} -} - -// unknown maps to Moby's "ErrUnknown" -type unknown interface { - Unknown() -} - -// IsUnknown returns true if the error is due to an unknown error, -// unhandled condition or unexpected response. -func IsUnknown(err error) bool { - return errors.Is(err, errUnknown{}) || isInterface[unknown](err) -} - -type errInvalidArgument struct{} - -func (errInvalidArgument) Error() string { return "invalid argument" } - -func (errInvalidArgument) InvalidParameter() {} - -func (e errInvalidArgument) WithMessage(msg string) error { - return customMessage{e, msg} -} - -// invalidParameter maps to Moby's "ErrInvalidParameter" -type invalidParameter interface { - InvalidParameter() -} - -// IsInvalidArgument returns true if the error is due to an invalid argument -func IsInvalidArgument(err error) bool { - return errors.Is(err, ErrInvalidArgument) || isInterface[invalidParameter](err) -} - -// deadlineExceed maps to Moby's "ErrDeadline" -type deadlineExceeded interface { - DeadlineExceeded() -} - -// IsDeadlineExceeded returns true if the error is due to -// `context.DeadlineExceeded`. -func IsDeadlineExceeded(err error) bool { - return errors.Is(err, context.DeadlineExceeded) || isInterface[deadlineExceeded](err) -} - -type errNotFound struct{} - -func (errNotFound) Error() string { return "not found" } - -func (errNotFound) NotFound() {} - -func (e errNotFound) WithMessage(msg string) error { - return customMessage{e, msg} -} - -// notFound maps to Moby's "ErrNotFound" -type notFound interface { - NotFound() -} - -// IsNotFound returns true if the error is due to a missing object -func IsNotFound(err error) bool { - return errors.Is(err, ErrNotFound) || isInterface[notFound](err) -} - -type errAlreadyExists struct{} - -func (errAlreadyExists) Error() string { return "already exists" } - -func (errAlreadyExists) AlreadyExists() {} - -func (e errAlreadyExists) WithMessage(msg string) error { - return customMessage{e, msg} -} - -type alreadyExists interface { - AlreadyExists() -} - -// IsAlreadyExists returns true if the error is due to an already existing -// metadata item -func IsAlreadyExists(err error) bool { - return errors.Is(err, ErrAlreadyExists) || isInterface[alreadyExists](err) -} - -type errPermissionDenied struct{} - -func (errPermissionDenied) Error() string { return "permission denied" } - -func (errPermissionDenied) Forbidden() {} - -func (e errPermissionDenied) WithMessage(msg string) error { - return customMessage{e, msg} -} - -// forbidden maps to Moby's "ErrForbidden" -type forbidden interface { - Forbidden() -} - -// IsPermissionDenied returns true if the error is due to permission denied -// or forbidden (403) response -func IsPermissionDenied(err error) bool { - return errors.Is(err, ErrPermissionDenied) || isInterface[forbidden](err) -} - -type errResourceExhausted struct{} - -func (errResourceExhausted) Error() string { return "resource exhausted" } - -func (errResourceExhausted) ResourceExhausted() {} - -func (e errResourceExhausted) WithMessage(msg string) error { - return customMessage{e, msg} -} - -type resourceExhausted interface { - ResourceExhausted() -} - -// IsResourceExhausted returns true if the error is due to -// a lack of resources or too many attempts. -func IsResourceExhausted(err error) bool { - return errors.Is(err, errResourceExhausted{}) || isInterface[resourceExhausted](err) -} - -type errFailedPrecondition struct{} - -func (e errFailedPrecondition) Error() string { return "failed precondition" } - -func (errFailedPrecondition) FailedPrecondition() {} - -func (e errFailedPrecondition) WithMessage(msg string) error { - return customMessage{e, msg} -} - -type failedPrecondition interface { - FailedPrecondition() -} - -// IsFailedPrecondition returns true if an operation could not proceed due to -// the lack of a particular condition -func IsFailedPrecondition(err error) bool { - return errors.Is(err, errFailedPrecondition{}) || isInterface[failedPrecondition](err) -} - -type errConflict struct{} - -func (errConflict) Error() string { return "conflict" } - -func (errConflict) Conflict() {} - -func (e errConflict) WithMessage(msg string) error { - return customMessage{e, msg} -} - -// conflict maps to Moby's "ErrConflict" -type conflict interface { - Conflict() -} - -// IsConflict returns true if an operation could not proceed due to -// a conflict. -func IsConflict(err error) bool { - return errors.Is(err, errConflict{}) || isInterface[conflict](err) -} - -type errNotModified struct{} - -func (errNotModified) Error() string { return "not modified" } - -func (errNotModified) NotModified() {} - -func (e errNotModified) WithMessage(msg string) error { - return customMessage{e, msg} -} - -// notModified maps to Moby's "ErrNotModified" -type notModified interface { - NotModified() -} - -// IsNotModified returns true if an operation could not proceed due -// to an object not modified from a previous state. -func IsNotModified(err error) bool { - return errors.Is(err, errNotModified{}) || isInterface[notModified](err) -} - -type errAborted struct{} - -func (errAborted) Error() string { return "aborted" } - -func (errAborted) Aborted() {} - -func (e errAborted) WithMessage(msg string) error { - return customMessage{e, msg} -} - -type aborted interface { - Aborted() -} - -// IsAborted returns true if an operation was aborted. -func IsAborted(err error) bool { - return errors.Is(err, errAborted{}) || isInterface[aborted](err) -} - -type errOutOfRange struct{} - -func (errOutOfRange) Error() string { return "out of range" } - -func (errOutOfRange) OutOfRange() {} - -func (e errOutOfRange) WithMessage(msg string) error { - return customMessage{e, msg} -} - -type outOfRange interface { - OutOfRange() -} - -// IsOutOfRange returns true if an operation could not proceed due -// to data being out of the expected range. -func IsOutOfRange(err error) bool { - return errors.Is(err, errOutOfRange{}) || isInterface[outOfRange](err) -} - -type errNotImplemented struct{} - -func (errNotImplemented) Error() string { return "not implemented" } - -func (errNotImplemented) NotImplemented() {} - -func (e errNotImplemented) WithMessage(msg string) error { - return customMessage{e, msg} -} - -// notImplemented maps to Moby's "ErrNotImplemented" -type notImplemented interface { - NotImplemented() -} - -// IsNotImplemented returns true if the error is due to not being implemented -func IsNotImplemented(err error) bool { - return errors.Is(err, errNotImplemented{}) || isInterface[notImplemented](err) -} - -type errInternal struct{} - -func (errInternal) Error() string { return "internal" } - -func (errInternal) System() {} - -func (e errInternal) WithMessage(msg string) error { - return customMessage{e, msg} -} - -// system maps to Moby's "ErrSystem" -type system interface { - System() -} - -// IsInternal returns true if the error returns to an internal or system error -func IsInternal(err error) bool { - return errors.Is(err, errInternal{}) || isInterface[system](err) -} - -type errUnavailable struct{} - -func (errUnavailable) Error() string { return "unavailable" } - -func (errUnavailable) Unavailable() {} - -func (e errUnavailable) WithMessage(msg string) error { - return customMessage{e, msg} -} - -// unavailable maps to Moby's "ErrUnavailable" -type unavailable interface { - Unavailable() -} - -// IsUnavailable returns true if the error is due to a resource being unavailable -func IsUnavailable(err error) bool { - return errors.Is(err, errUnavailable{}) || isInterface[unavailable](err) -} - -type errDataLoss struct{} - -func (errDataLoss) Error() string { return "data loss" } - -func (errDataLoss) DataLoss() {} - -func (e errDataLoss) WithMessage(msg string) error { - return customMessage{e, msg} -} - -// dataLoss maps to Moby's "ErrDataLoss" -type dataLoss interface { - DataLoss() -} - -// IsDataLoss returns true if data during an operation was lost or corrupted -func IsDataLoss(err error) bool { - return errors.Is(err, errDataLoss{}) || isInterface[dataLoss](err) -} - -type errUnauthorized struct{} - -func (errUnauthorized) Error() string { return "unauthorized" } - -func (errUnauthorized) Unauthorized() {} - -func (e errUnauthorized) WithMessage(msg string) error { - return customMessage{e, msg} -} - -// unauthorized maps to Moby's "ErrUnauthorized" -type unauthorized interface { - Unauthorized() -} - -// IsUnauthorized returns true if the error indicates that the user was -// unauthenticated or unauthorized. -func IsUnauthorized(err error) bool { - return errors.Is(err, errUnauthorized{}) || isInterface[unauthorized](err) -} - -func isInterface[T any](err error) bool { - for { - switch x := err.(type) { - case T: - return true - case customMessage: - err = x.err - case interface{ Unwrap() error }: - err = x.Unwrap() - if err == nil { - return false - } - case interface{ Unwrap() []error }: - for _, err := range x.Unwrap() { - if isInterface[T](err) { - return true - } - } - return false - default: - return false - } - } -} - -// customMessage is used to provide a defined error with a custom message. -// The message is not wrapped but can be compared by the `Is(error) bool` interface. -type customMessage struct { - err error - msg string -} - -func (c customMessage) Is(err error) bool { - return c.err == err -} - -func (c customMessage) As(target any) bool { - return errors.As(c.err, target) -} - -func (c customMessage) Error() string { - return c.msg -} diff --git a/vendor/github.com/containerd/errdefs/pkg/LICENSE b/vendor/github.com/containerd/errdefs/pkg/LICENSE deleted file mode 100644 index 584149b6..00000000 --- a/vendor/github.com/containerd/errdefs/pkg/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright The containerd Authors - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/containerd/errdefs/pkg/errhttp/http.go b/vendor/github.com/containerd/errdefs/pkg/errhttp/http.go deleted file mode 100644 index d7cd2b8c..00000000 --- a/vendor/github.com/containerd/errdefs/pkg/errhttp/http.go +++ /dev/null @@ -1,96 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -// Package errhttp provides utility functions for translating errors to -// and from a HTTP context. -// -// The functions ToHTTP and ToNative can be used to map server-side and -// client-side errors to the correct types. -package errhttp - -import ( - "errors" - "net/http" - - "github.com/containerd/errdefs" - "github.com/containerd/errdefs/pkg/internal/cause" -) - -// ToHTTP returns the best status code for the given error -func ToHTTP(err error) int { - switch { - case errdefs.IsNotFound(err): - return http.StatusNotFound - case errdefs.IsInvalidArgument(err): - return http.StatusBadRequest - case errdefs.IsConflict(err): - return http.StatusConflict - case errdefs.IsNotModified(err): - return http.StatusNotModified - case errdefs.IsFailedPrecondition(err): - return http.StatusPreconditionFailed - case errdefs.IsUnauthorized(err): - return http.StatusUnauthorized - case errdefs.IsPermissionDenied(err): - return http.StatusForbidden - case errdefs.IsResourceExhausted(err): - return http.StatusTooManyRequests - case errdefs.IsInternal(err): - return http.StatusInternalServerError - case errdefs.IsNotImplemented(err): - return http.StatusNotImplemented - case errdefs.IsUnavailable(err): - return http.StatusServiceUnavailable - case errdefs.IsUnknown(err): - var unexpected cause.ErrUnexpectedStatus - if errors.As(err, &unexpected) && unexpected.Status >= 200 && unexpected.Status < 600 { - return unexpected.Status - } - return http.StatusInternalServerError - default: - return http.StatusInternalServerError - } -} - -// ToNative returns the error best matching the HTTP status code -func ToNative(statusCode int) error { - switch statusCode { - case http.StatusNotFound: - return errdefs.ErrNotFound - case http.StatusBadRequest: - return errdefs.ErrInvalidArgument - case http.StatusConflict: - return errdefs.ErrConflict - case http.StatusPreconditionFailed: - return errdefs.ErrFailedPrecondition - case http.StatusUnauthorized: - return errdefs.ErrUnauthenticated - case http.StatusForbidden: - return errdefs.ErrPermissionDenied - case http.StatusNotModified: - return errdefs.ErrNotModified - case http.StatusTooManyRequests: - return errdefs.ErrResourceExhausted - case http.StatusInternalServerError: - return errdefs.ErrInternal - case http.StatusNotImplemented: - return errdefs.ErrNotImplemented - case http.StatusServiceUnavailable: - return errdefs.ErrUnavailable - default: - return cause.ErrUnexpectedStatus{Status: statusCode} - } -} diff --git a/vendor/github.com/containerd/errdefs/pkg/internal/cause/cause.go b/vendor/github.com/containerd/errdefs/pkg/internal/cause/cause.go deleted file mode 100644 index d88756bb..00000000 --- a/vendor/github.com/containerd/errdefs/pkg/internal/cause/cause.go +++ /dev/null @@ -1,33 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -// Package cause is used to define root causes for errors -// common to errors packages like grpc and http. -package cause - -import "fmt" - -type ErrUnexpectedStatus struct { - Status int -} - -const UnexpectedStatusPrefix = "unexpected status " - -func (e ErrUnexpectedStatus) Error() string { - return fmt.Sprintf("%s%d", UnexpectedStatusPrefix, e.Status) -} - -func (ErrUnexpectedStatus) Unknown() {} diff --git a/vendor/github.com/containerd/errdefs/resolve.go b/vendor/github.com/containerd/errdefs/resolve.go deleted file mode 100644 index c02d4a73..00000000 --- a/vendor/github.com/containerd/errdefs/resolve.go +++ /dev/null @@ -1,147 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package errdefs - -import "context" - -// Resolve returns the first error found in the error chain which matches an -// error defined in this package or context error. A raw, unwrapped error is -// returned or ErrUnknown if no matching error is found. -// -// This is useful for determining a response code based on the outermost wrapped -// error rather than the original cause. For example, a not found error deep -// in the code may be wrapped as an invalid argument. When determining status -// code from Is* functions, the depth or ordering of the error is not -// considered. -// -// The search order is depth first, a wrapped error returned from any part of -// the chain from `Unwrap() error` will be returned before any joined errors -// as returned by `Unwrap() []error`. -func Resolve(err error) error { - if err == nil { - return nil - } - err = firstError(err) - if err == nil { - err = ErrUnknown - } - return err -} - -func firstError(err error) error { - for { - switch err { - case ErrUnknown, - ErrInvalidArgument, - ErrNotFound, - ErrAlreadyExists, - ErrPermissionDenied, - ErrResourceExhausted, - ErrFailedPrecondition, - ErrConflict, - ErrNotModified, - ErrAborted, - ErrOutOfRange, - ErrNotImplemented, - ErrInternal, - ErrUnavailable, - ErrDataLoss, - ErrUnauthenticated, - context.DeadlineExceeded, - context.Canceled: - return err - } - switch e := err.(type) { - case customMessage: - err = e.err - case unknown: - return ErrUnknown - case invalidParameter: - return ErrInvalidArgument - case notFound: - return ErrNotFound - case alreadyExists: - return ErrAlreadyExists - case forbidden: - return ErrPermissionDenied - case resourceExhausted: - return ErrResourceExhausted - case failedPrecondition: - return ErrFailedPrecondition - case conflict: - return ErrConflict - case notModified: - return ErrNotModified - case aborted: - return ErrAborted - case errOutOfRange: - return ErrOutOfRange - case notImplemented: - return ErrNotImplemented - case system: - return ErrInternal - case unavailable: - return ErrUnavailable - case dataLoss: - return ErrDataLoss - case unauthorized: - return ErrUnauthenticated - case deadlineExceeded: - return context.DeadlineExceeded - case cancelled: - return context.Canceled - case interface{ Unwrap() error }: - err = e.Unwrap() - if err == nil { - return nil - } - case interface{ Unwrap() []error }: - for _, ue := range e.Unwrap() { - if fe := firstError(ue); fe != nil { - return fe - } - } - return nil - case interface{ Is(error) bool }: - for _, target := range []error{ErrUnknown, - ErrInvalidArgument, - ErrNotFound, - ErrAlreadyExists, - ErrPermissionDenied, - ErrResourceExhausted, - ErrFailedPrecondition, - ErrConflict, - ErrNotModified, - ErrAborted, - ErrOutOfRange, - ErrNotImplemented, - ErrInternal, - ErrUnavailable, - ErrDataLoss, - ErrUnauthenticated, - context.DeadlineExceeded, - context.Canceled} { - if e.Is(target) { - return target - } - } - return nil - default: - return nil - } - } -} diff --git a/vendor/github.com/containerd/log/.golangci.yml b/vendor/github.com/containerd/log/.golangci.yml deleted file mode 100644 index a695775d..00000000 --- a/vendor/github.com/containerd/log/.golangci.yml +++ /dev/null @@ -1,30 +0,0 @@ -linters: - enable: - - exportloopref # Checks for pointers to enclosing loop variables - - gofmt - - goimports - - gosec - - ineffassign - - misspell - - nolintlint - - revive - - staticcheck - - tenv # Detects using os.Setenv instead of t.Setenv since Go 1.17 - - unconvert - - unused - - vet - - dupword # Checks for duplicate words in the source code - disable: - - errcheck - -run: - timeout: 5m - skip-dirs: - - api - - cluster - - design - - docs - - docs/man - - releases - - reports - - test # e2e scripts diff --git a/vendor/github.com/containerd/log/LICENSE b/vendor/github.com/containerd/log/LICENSE deleted file mode 100644 index 584149b6..00000000 --- a/vendor/github.com/containerd/log/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright The containerd Authors - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/containerd/log/README.md b/vendor/github.com/containerd/log/README.md deleted file mode 100644 index 00e08498..00000000 --- a/vendor/github.com/containerd/log/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# log - -A Go package providing a common logging interface across containerd repositories and a way for clients to use and configure logging in containerd packages. - -This package is not intended to be used as a standalone logging package outside of the containerd ecosystem and is intended as an interface wrapper around a logging implementation. -In the future this package may be replaced with a common go logging interface. - -## Project details - -**log** is a containerd sub-project, licensed under the [Apache 2.0 license](./LICENSE). -As a containerd sub-project, you will find the: - * [Project governance](https://github.com/containerd/project/blob/main/GOVERNANCE.md), - * [Maintainers](https://github.com/containerd/project/blob/main/MAINTAINERS), - * and [Contributing guidelines](https://github.com/containerd/project/blob/main/CONTRIBUTING.md) - -information in our [`containerd/project`](https://github.com/containerd/project) repository. - diff --git a/vendor/github.com/containerd/log/context.go b/vendor/github.com/containerd/log/context.go deleted file mode 100644 index 20153066..00000000 --- a/vendor/github.com/containerd/log/context.go +++ /dev/null @@ -1,182 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -// Package log provides types and functions related to logging, passing -// loggers through a context, and attaching context to the logger. -// -// # Transitional types -// -// This package contains various types that are aliases for types in [logrus]. -// These aliases are intended for transitioning away from hard-coding logrus -// as logging implementation. Consumers of this package are encouraged to use -// the type-aliases from this package instead of directly using their logrus -// equivalent. -// -// The intent is to replace these aliases with locally defined types and -// interfaces once all consumers are no longer directly importing logrus -// types. -// -// IMPORTANT: due to the transitional purpose of this package, it is not -// guaranteed for the full logrus API to be provided in the future. As -// outlined, these aliases are provided as a step to transition away from -// a specific implementation which, as a result, exposes the full logrus API. -// While no decisions have been made on the ultimate design and interface -// provided by this package, we do not expect carrying "less common" features. -package log - -import ( - "context" - "fmt" - - "github.com/sirupsen/logrus" -) - -// G is a shorthand for [GetLogger]. -// -// We may want to define this locally to a package to get package tagged log -// messages. -var G = GetLogger - -// L is an alias for the standard logger. -var L = &Entry{ - Logger: logrus.StandardLogger(), - // Default is three fields plus a little extra room. - Data: make(Fields, 6), -} - -type loggerKey struct{} - -// Fields type to pass to "WithFields". -type Fields = map[string]any - -// Entry is a logging entry. It contains all the fields passed with -// [Entry.WithFields]. It's finally logged when Trace, Debug, Info, Warn, -// Error, Fatal or Panic is called on it. These objects can be reused and -// passed around as much as you wish to avoid field duplication. -// -// Entry is a transitional type, and currently an alias for [logrus.Entry]. -type Entry = logrus.Entry - -// RFC3339NanoFixed is [time.RFC3339Nano] with nanoseconds padded using -// zeros to ensure the formatted time is always the same number of -// characters. -const RFC3339NanoFixed = "2006-01-02T15:04:05.000000000Z07:00" - -// Level is a logging level. -type Level = logrus.Level - -// Supported log levels. -const ( - // TraceLevel level. Designates finer-grained informational events - // than [DebugLevel]. - TraceLevel Level = logrus.TraceLevel - - // DebugLevel level. Usually only enabled when debugging. Very verbose - // logging. - DebugLevel Level = logrus.DebugLevel - - // InfoLevel level. General operational entries about what's going on - // inside the application. - InfoLevel Level = logrus.InfoLevel - - // WarnLevel level. Non-critical entries that deserve eyes. - WarnLevel Level = logrus.WarnLevel - - // ErrorLevel level. Logs errors that should definitely be noted. - // Commonly used for hooks to send errors to an error tracking service. - ErrorLevel Level = logrus.ErrorLevel - - // FatalLevel level. Logs and then calls "logger.Exit(1)". It exits - // even if the logging level is set to Panic. - FatalLevel Level = logrus.FatalLevel - - // PanicLevel level. This is the highest level of severity. Logs and - // then calls panic with the message passed to Debug, Info, ... - PanicLevel Level = logrus.PanicLevel -) - -// SetLevel sets log level globally. It returns an error if the given -// level is not supported. -// -// level can be one of: -// -// - "trace" ([TraceLevel]) -// - "debug" ([DebugLevel]) -// - "info" ([InfoLevel]) -// - "warn" ([WarnLevel]) -// - "error" ([ErrorLevel]) -// - "fatal" ([FatalLevel]) -// - "panic" ([PanicLevel]) -func SetLevel(level string) error { - lvl, err := logrus.ParseLevel(level) - if err != nil { - return err - } - - L.Logger.SetLevel(lvl) - return nil -} - -// GetLevel returns the current log level. -func GetLevel() Level { - return L.Logger.GetLevel() -} - -// OutputFormat specifies a log output format. -type OutputFormat string - -// Supported log output formats. -const ( - // TextFormat represents the text logging format. - TextFormat OutputFormat = "text" - - // JSONFormat represents the JSON logging format. - JSONFormat OutputFormat = "json" -) - -// SetFormat sets the log output format ([TextFormat] or [JSONFormat]). -func SetFormat(format OutputFormat) error { - switch format { - case TextFormat: - L.Logger.SetFormatter(&logrus.TextFormatter{ - TimestampFormat: RFC3339NanoFixed, - FullTimestamp: true, - }) - return nil - case JSONFormat: - L.Logger.SetFormatter(&logrus.JSONFormatter{ - TimestampFormat: RFC3339NanoFixed, - }) - return nil - default: - return fmt.Errorf("unknown log format: %s", format) - } -} - -// WithLogger returns a new context with the provided logger. Use in -// combination with logger.WithField(s) for great effect. -func WithLogger(ctx context.Context, logger *Entry) context.Context { - return context.WithValue(ctx, loggerKey{}, logger.WithContext(ctx)) -} - -// GetLogger retrieves the current logger from the context. If no logger is -// available, the default logger is returned. -func GetLogger(ctx context.Context) *Entry { - if logger := ctx.Value(loggerKey{}); logger != nil { - return logger.(*Entry) - } - return L.WithContext(ctx) -} diff --git a/vendor/github.com/distribution/reference/.gitattributes b/vendor/github.com/distribution/reference/.gitattributes deleted file mode 100644 index d207b180..00000000 --- a/vendor/github.com/distribution/reference/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.go text eol=lf diff --git a/vendor/github.com/distribution/reference/.gitignore b/vendor/github.com/distribution/reference/.gitignore deleted file mode 100644 index dc07e6b0..00000000 --- a/vendor/github.com/distribution/reference/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Cover profiles -*.out diff --git a/vendor/github.com/distribution/reference/.golangci.yml b/vendor/github.com/distribution/reference/.golangci.yml deleted file mode 100644 index 793f0bb7..00000000 --- a/vendor/github.com/distribution/reference/.golangci.yml +++ /dev/null @@ -1,18 +0,0 @@ -linters: - enable: - - bodyclose - - dupword # Checks for duplicate words in the source code - - gofmt - - goimports - - ineffassign - - misspell - - revive - - staticcheck - - unconvert - - unused - - vet - disable: - - errcheck - -run: - deadline: 2m diff --git a/vendor/github.com/distribution/reference/CODE-OF-CONDUCT.md b/vendor/github.com/distribution/reference/CODE-OF-CONDUCT.md deleted file mode 100644 index 48f6704c..00000000 --- a/vendor/github.com/distribution/reference/CODE-OF-CONDUCT.md +++ /dev/null @@ -1,5 +0,0 @@ -# Code of Conduct - -We follow the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md). - -Please contact the [CNCF Code of Conduct Committee](mailto:conduct@cncf.io) in order to report violations of the Code of Conduct. diff --git a/vendor/github.com/distribution/reference/CONTRIBUTING.md b/vendor/github.com/distribution/reference/CONTRIBUTING.md deleted file mode 100644 index ab219466..00000000 --- a/vendor/github.com/distribution/reference/CONTRIBUTING.md +++ /dev/null @@ -1,114 +0,0 @@ -# Contributing to the reference library - -## Community help - -If you need help, please ask in the [#distribution](https://cloud-native.slack.com/archives/C01GVR8SY4R) channel on CNCF community slack. -[Click here for an invite to the CNCF community slack](https://slack.cncf.io/) - -## Reporting security issues - -The maintainers take security seriously. If you discover a security -issue, please bring it to their attention right away! - -Please **DO NOT** file a public issue, instead send your report privately to -[cncf-distribution-security@lists.cncf.io](mailto:cncf-distribution-security@lists.cncf.io). - -## Reporting an issue properly - -By following these simple rules you will get better and faster feedback on your issue. - - - search the bugtracker for an already reported issue - -### If you found an issue that describes your problem: - - - please read other user comments first, and confirm this is the same issue: a given error condition might be indicative of different problems - you may also find a workaround in the comments - - please refrain from adding "same thing here" or "+1" comments - - you don't need to comment on an issue to get notified of updates: just hit the "subscribe" button - - comment if you have some new, technical and relevant information to add to the case - - __DO NOT__ comment on closed issues or merged PRs. If you think you have a related problem, open up a new issue and reference the PR or issue. - -### If you have not found an existing issue that describes your problem: - - 1. create a new issue, with a succinct title that describes your issue: - - bad title: "It doesn't work with my docker" - - good title: "Private registry push fail: 400 error with E_INVALID_DIGEST" - 2. copy the output of (or similar for other container tools): - - `docker version` - - `docker info` - - `docker exec registry --version` - 3. copy the command line you used to launch your Registry - 4. restart your docker daemon in debug mode (add `-D` to the daemon launch arguments) - 5. reproduce your problem and get your docker daemon logs showing the error - 6. if relevant, copy your registry logs that show the error - 7. provide any relevant detail about your specific Registry configuration (e.g., storage backend used) - 8. indicate if you are using an enterprise proxy, Nginx, or anything else between you and your Registry - -## Contributing Code - -Contributions should be made via pull requests. Pull requests will be reviewed -by one or more maintainers or reviewers and merged when acceptable. - -You should follow the basic GitHub workflow: - - 1. Use your own [fork](https://help.github.com/en/articles/about-forks) - 2. Create your [change](https://github.com/containerd/project/blob/master/CONTRIBUTING.md#successful-changes) - 3. Test your code - 4. [Commit](https://github.com/containerd/project/blob/master/CONTRIBUTING.md#commit-messages) your work, always [sign your commits](https://github.com/containerd/project/blob/master/CONTRIBUTING.md#commit-messages) - 5. Push your change to your fork and create a [Pull Request](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request-from-a-fork) - -Refer to [containerd's contribution guide](https://github.com/containerd/project/blob/master/CONTRIBUTING.md#successful-changes) -for tips on creating a successful contribution. - -## Sign your work - -The sign-off is a simple line at the end of the explanation for the patch. Your -signature certifies that you wrote the patch or otherwise have the right to pass -it on as an open-source patch. The rules are pretty simple: if you can certify -the below (from [developercertificate.org](http://developercertificate.org/)): - -``` -Developer Certificate of Origin -Version 1.1 - -Copyright (C) 2004, 2006 The Linux Foundation and its contributors. -660 York Street, Suite 102, -San Francisco, CA 94110 USA - -Everyone is permitted to copy and distribute verbatim copies of this -license document, but changing it is not allowed. - -Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -(a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -(b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -(c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -(d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. -``` - -Then you just add a line to every git commit message: - - Signed-off-by: Joe Smith - -Use your real name (sorry, no pseudonyms or anonymous contributions.) - -If you set your `user.name` and `user.email` git configs, you can sign your -commit automatically with `git commit -s`. diff --git a/vendor/github.com/distribution/reference/GOVERNANCE.md b/vendor/github.com/distribution/reference/GOVERNANCE.md deleted file mode 100644 index 200045b0..00000000 --- a/vendor/github.com/distribution/reference/GOVERNANCE.md +++ /dev/null @@ -1,144 +0,0 @@ -# distribution/reference Project Governance - -Distribution [Code of Conduct](./CODE-OF-CONDUCT.md) can be found here. - -For specific guidance on practical contribution steps please -see our [CONTRIBUTING.md](./CONTRIBUTING.md) guide. - -## Maintainership - -There are different types of maintainers, with different responsibilities, but -all maintainers have 3 things in common: - -1) They share responsibility in the project's success. -2) They have made a long-term, recurring time investment to improve the project. -3) They spend that time doing whatever needs to be done, not necessarily what -is the most interesting or fun. - -Maintainers are often under-appreciated, because their work is harder to appreciate. -It's easy to appreciate a really cool and technically advanced feature. It's harder -to appreciate the absence of bugs, the slow but steady improvement in stability, -or the reliability of a release process. But those things distinguish a good -project from a great one. - -## Reviewers - -A reviewer is a core role within the project. -They share in reviewing issues and pull requests and their LGTM counts towards the -required LGTM count to merge a code change into the project. - -Reviewers are part of the organization but do not have write access. -Becoming a reviewer is a core aspect in the journey to becoming a maintainer. - -## Adding maintainers - -Maintainers are first and foremost contributors that have shown they are -committed to the long term success of a project. Contributors wanting to become -maintainers are expected to be deeply involved in contributing code, pull -request review, and triage of issues in the project for more than three months. - -Just contributing does not make you a maintainer, it is about building trust -with the current maintainers of the project and being a person that they can -depend on and trust to make decisions in the best interest of the project. - -Periodically, the existing maintainers curate a list of contributors that have -shown regular activity on the project over the prior months. From this list, -maintainer candidates are selected and proposed in a pull request or a -maintainers communication channel. - -After a candidate has been announced to the maintainers, the existing -maintainers are given five business days to discuss the candidate, raise -objections and cast their vote. Votes may take place on the communication -channel or via pull request comment. Candidates must be approved by at least 66% -of the current maintainers by adding their vote on the mailing list. The -reviewer role has the same process but only requires 33% of current maintainers. -Only maintainers of the repository that the candidate is proposed for are -allowed to vote. - -If a candidate is approved, a maintainer will contact the candidate to invite -the candidate to open a pull request that adds the contributor to the -MAINTAINERS file. The voting process may take place inside a pull request if a -maintainer has already discussed the candidacy with the candidate and a -maintainer is willing to be a sponsor by opening the pull request. The candidate -becomes a maintainer once the pull request is merged. - -## Stepping down policy - -Life priorities, interests, and passions can change. If you're a maintainer but -feel you must remove yourself from the list, inform other maintainers that you -intend to step down, and if possible, help find someone to pick up your work. -At the very least, ensure your work can be continued where you left off. - -After you've informed other maintainers, create a pull request to remove -yourself from the MAINTAINERS file. - -## Removal of inactive maintainers - -Similar to the procedure for adding new maintainers, existing maintainers can -be removed from the list if they do not show significant activity on the -project. Periodically, the maintainers review the list of maintainers and their -activity over the last three months. - -If a maintainer has shown insufficient activity over this period, a neutral -person will contact the maintainer to ask if they want to continue being -a maintainer. If the maintainer decides to step down as a maintainer, they -open a pull request to be removed from the MAINTAINERS file. - -If the maintainer wants to remain a maintainer, but is unable to perform the -required duties they can be removed with a vote of at least 66% of the current -maintainers. In this case, maintainers should first propose the change to -maintainers via the maintainers communication channel, then open a pull request -for voting. The voting period is five business days. The voting pull request -should not come as a surpise to any maintainer and any discussion related to -performance must not be discussed on the pull request. - -## How are decisions made? - -Docker distribution is an open-source project with an open design philosophy. -This means that the repository is the source of truth for EVERY aspect of the -project, including its philosophy, design, road map, and APIs. *If it's part of -the project, it's in the repo. If it's in the repo, it's part of the project.* - -As a result, all decisions can be expressed as changes to the repository. An -implementation change is a change to the source code. An API change is a change -to the API specification. A philosophy change is a change to the philosophy -manifesto, and so on. - -All decisions affecting distribution, big and small, follow the same 3 steps: - -* Step 1: Open a pull request. Anyone can do this. - -* Step 2: Discuss the pull request. Anyone can do this. - -* Step 3: Merge or refuse the pull request. Who does this depends on the nature -of the pull request and which areas of the project it affects. - -## Helping contributors with the DCO - -The [DCO or `Sign your work`](./CONTRIBUTING.md#sign-your-work) -requirement is not intended as a roadblock or speed bump. - -Some contributors are not as familiar with `git`, or have used a web -based editor, and thus asking them to `git commit --amend -s` is not the best -way forward. - -In this case, maintainers can update the commits based on clause (c) of the DCO. -The most trivial way for a contributor to allow the maintainer to do this, is to -add a DCO signature in a pull requests's comment, or a maintainer can simply -note that the change is sufficiently trivial that it does not substantially -change the existing contribution - i.e., a spelling change. - -When you add someone's DCO, please also add your own to keep a log. - -## I'm a maintainer. Should I make pull requests too? - -Yes. Nobody should ever push to master directly. All changes should be -made through a pull request. - -## Conflict Resolution - -If you have a technical dispute that you feel has reached an impasse with a -subset of the community, any contributor may open an issue, specifically -calling for a resolution vote of the current core maintainers to resolve the -dispute. The same voting quorums required (2/3) for adding and removing -maintainers will apply to conflict resolution. diff --git a/vendor/github.com/distribution/reference/LICENSE b/vendor/github.com/distribution/reference/LICENSE deleted file mode 100644 index e06d2081..00000000 --- a/vendor/github.com/distribution/reference/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - diff --git a/vendor/github.com/distribution/reference/MAINTAINERS b/vendor/github.com/distribution/reference/MAINTAINERS deleted file mode 100644 index 9e0a60c8..00000000 --- a/vendor/github.com/distribution/reference/MAINTAINERS +++ /dev/null @@ -1,26 +0,0 @@ -# Distribution project maintainers & reviewers -# -# See GOVERNANCE.md for maintainer versus reviewer roles -# -# MAINTAINERS (cncf-distribution-maintainers@lists.cncf.io) -# GitHub ID, Name, Email address -"chrispat","Chris Patterson","chrispat@github.com" -"clarkbw","Bryan Clark","clarkbw@github.com" -"corhere","Cory Snider","csnider@mirantis.com" -"deleteriousEffect","Hayley Swimelar","hswimelar@gitlab.com" -"heww","He Weiwei","hweiwei@vmware.com" -"joaodrp","João Pereira","jpereira@gitlab.com" -"justincormack","Justin Cormack","justin.cormack@docker.com" -"squizzi","Kyle Squizzato","ksquizzato@mirantis.com" -"milosgajdos","Milos Gajdos","milosthegajdos@gmail.com" -"sargun","Sargun Dhillon","sargun@sargun.me" -"wy65701436","Wang Yan","wangyan@vmware.com" -"stevelasker","Steve Lasker","steve.lasker@microsoft.com" -# -# REVIEWERS -# GitHub ID, Name, Email address -"dmcgowan","Derek McGowan","derek@mcgstyle.net" -"stevvooe","Stephen Day","stevvooe@gmail.com" -"thajeztah","Sebastiaan van Stijn","github@gone.nl" -"DavidSpek", "David van der Spek", "vanderspek.david@gmail.com" -"Jamstah", "James Hewitt", "james.hewitt@gmail.com" diff --git a/vendor/github.com/distribution/reference/Makefile b/vendor/github.com/distribution/reference/Makefile deleted file mode 100644 index c78576b7..00000000 --- a/vendor/github.com/distribution/reference/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -# Project packages. -PACKAGES=$(shell go list ./...) - -# Flags passed to `go test` -BUILDFLAGS ?= -TESTFLAGS ?= - -.PHONY: all build test coverage -.DEFAULT: all - -all: build - -build: ## no binaries to build, so just check compilation suceeds - go build ${BUILDFLAGS} ./... - -test: ## run tests - go test ${TESTFLAGS} ./... - -coverage: ## generate coverprofiles from the unit tests - rm -f coverage.txt - go test ${TESTFLAGS} -cover -coverprofile=cover.out ./... - -.PHONY: help -help: - @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_\/%-]+:.*?##/ { printf " \033[36m%-27s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) diff --git a/vendor/github.com/distribution/reference/README.md b/vendor/github.com/distribution/reference/README.md deleted file mode 100644 index 172a02e0..00000000 --- a/vendor/github.com/distribution/reference/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Distribution reference - -Go library to handle references to container images. - - - -[![Build Status](https://github.com/distribution/reference/actions/workflows/test.yml/badge.svg?branch=main&event=push)](https://github.com/distribution/reference/actions?query=workflow%3ACI) -[![GoDoc](https://img.shields.io/badge/go.dev-reference-007d9c?logo=go&logoColor=white&style=flat-square)](https://pkg.go.dev/github.com/distribution/reference) -[![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE) -[![codecov](https://codecov.io/gh/distribution/reference/branch/main/graph/badge.svg)](https://codecov.io/gh/distribution/reference) -[![FOSSA Status](https://app.fossa.com/api/projects/custom%2B162%2Fgithub.com%2Fdistribution%2Freference.svg?type=shield)](https://app.fossa.com/projects/custom%2B162%2Fgithub.com%2Fdistribution%2Freference?ref=badge_shield) - -This repository contains a library for handling references to container images held in container registries. Please see [godoc](https://pkg.go.dev/github.com/distribution/reference) for details. - -## Contribution - -Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to contribute -issues, fixes, and patches to this project. - -## Communication - -For async communication and long running discussions please use issues and pull requests on the github repo. -This will be the best place to discuss design and implementation. - -For sync communication we have a #distribution channel in the [CNCF Slack](https://slack.cncf.io/) -that everyone is welcome to join and chat about development. - -## Licenses - -The distribution codebase is released under the [Apache 2.0 license](LICENSE). diff --git a/vendor/github.com/distribution/reference/SECURITY.md b/vendor/github.com/distribution/reference/SECURITY.md deleted file mode 100644 index aaf983c0..00000000 --- a/vendor/github.com/distribution/reference/SECURITY.md +++ /dev/null @@ -1,7 +0,0 @@ -# Security Policy - -## Reporting a Vulnerability - -The maintainers take security seriously. If you discover a security issue, please bring it to their attention right away! - -Please DO NOT file a public issue, instead send your report privately to cncf-distribution-security@lists.cncf.io. diff --git a/vendor/github.com/distribution/reference/distribution-logo.svg b/vendor/github.com/distribution/reference/distribution-logo.svg deleted file mode 100644 index cc9f4073..00000000 --- a/vendor/github.com/distribution/reference/distribution-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/vendor/github.com/distribution/reference/helpers.go b/vendor/github.com/distribution/reference/helpers.go deleted file mode 100644 index d10c7ef8..00000000 --- a/vendor/github.com/distribution/reference/helpers.go +++ /dev/null @@ -1,42 +0,0 @@ -package reference - -import "path" - -// IsNameOnly returns true if reference only contains a repo name. -func IsNameOnly(ref Named) bool { - if _, ok := ref.(NamedTagged); ok { - return false - } - if _, ok := ref.(Canonical); ok { - return false - } - return true -} - -// FamiliarName returns the familiar name string -// for the given named, familiarizing if needed. -func FamiliarName(ref Named) string { - if nn, ok := ref.(normalizedNamed); ok { - return nn.Familiar().Name() - } - return ref.Name() -} - -// FamiliarString returns the familiar string representation -// for the given reference, familiarizing if needed. -func FamiliarString(ref Reference) string { - if nn, ok := ref.(normalizedNamed); ok { - return nn.Familiar().String() - } - return ref.String() -} - -// FamiliarMatch reports whether ref matches the specified pattern. -// See [path.Match] for supported patterns. -func FamiliarMatch(pattern string, ref Reference) (bool, error) { - matched, err := path.Match(pattern, FamiliarString(ref)) - if namedRef, isNamed := ref.(Named); isNamed && !matched { - matched, _ = path.Match(pattern, FamiliarName(namedRef)) - } - return matched, err -} diff --git a/vendor/github.com/distribution/reference/normalize.go b/vendor/github.com/distribution/reference/normalize.go deleted file mode 100644 index f4128314..00000000 --- a/vendor/github.com/distribution/reference/normalize.go +++ /dev/null @@ -1,255 +0,0 @@ -package reference - -import ( - "fmt" - "strings" - - "github.com/opencontainers/go-digest" -) - -const ( - // legacyDefaultDomain is the legacy domain for Docker Hub (which was - // originally named "the Docker Index"). This domain is still used for - // authentication and image search, which were part of the "v1" Docker - // registry specification. - // - // This domain will continue to be supported, but there are plans to consolidate - // legacy domains to new "canonical" domains. Once those domains are decided - // on, we must update the normalization functions, but preserve compatibility - // with existing installs, clients, and user configuration. - legacyDefaultDomain = "index.docker.io" - - // defaultDomain is the default domain used for images on Docker Hub. - // It is used to normalize "familiar" names to canonical names, for example, - // to convert "ubuntu" to "docker.io/library/ubuntu:latest". - // - // Note that actual domain of Docker Hub's registry is registry-1.docker.io. - // This domain will continue to be supported, but there are plans to consolidate - // legacy domains to new "canonical" domains. Once those domains are decided - // on, we must update the normalization functions, but preserve compatibility - // with existing installs, clients, and user configuration. - defaultDomain = "docker.io" - - // officialRepoPrefix is the namespace used for official images on Docker Hub. - // It is used to normalize "familiar" names to canonical names, for example, - // to convert "ubuntu" to "docker.io/library/ubuntu:latest". - officialRepoPrefix = "library/" - - // defaultTag is the default tag if no tag is provided. - defaultTag = "latest" -) - -// normalizedNamed represents a name which has been -// normalized and has a familiar form. A familiar name -// is what is used in Docker UI. An example normalized -// name is "docker.io/library/ubuntu" and corresponding -// familiar name of "ubuntu". -type normalizedNamed interface { - Named - Familiar() Named -} - -// ParseNormalizedNamed parses a string into a named reference -// transforming a familiar name from Docker UI to a fully -// qualified reference. If the value may be an identifier -// use ParseAnyReference. -func ParseNormalizedNamed(s string) (Named, error) { - if ok := anchoredIdentifierRegexp.MatchString(s); ok { - return nil, fmt.Errorf("invalid repository name (%s), cannot specify 64-byte hexadecimal strings", s) - } - domain, remainder := splitDockerDomain(s) - var remote string - if tagSep := strings.IndexRune(remainder, ':'); tagSep > -1 { - remote = remainder[:tagSep] - } else { - remote = remainder - } - if strings.ToLower(remote) != remote { - return nil, fmt.Errorf("invalid reference format: repository name (%s) must be lowercase", remote) - } - - ref, err := Parse(domain + "/" + remainder) - if err != nil { - return nil, err - } - named, isNamed := ref.(Named) - if !isNamed { - return nil, fmt.Errorf("reference %s has no name", ref.String()) - } - return named, nil -} - -// namedTaggedDigested is a reference that has both a tag and a digest. -type namedTaggedDigested interface { - NamedTagged - Digested -} - -// ParseDockerRef normalizes the image reference following the docker convention, -// which allows for references to contain both a tag and a digest. It returns a -// reference that is either tagged or digested. For references containing both -// a tag and a digest, it returns a digested reference. For example, the following -// reference: -// -// docker.io/library/busybox:latest@sha256:7cc4b5aefd1d0cadf8d97d4350462ba51c694ebca145b08d7d41b41acc8db5aa -// -// Is returned as a digested reference (with the ":latest" tag removed): -// -// docker.io/library/busybox@sha256:7cc4b5aefd1d0cadf8d97d4350462ba51c694ebca145b08d7d41b41acc8db5aa -// -// References that are already "tagged" or "digested" are returned unmodified: -// -// // Already a digested reference -// docker.io/library/busybox@sha256:7cc4b5aefd1d0cadf8d97d4350462ba51c694ebca145b08d7d41b41acc8db5aa -// -// // Already a named reference -// docker.io/library/busybox:latest -func ParseDockerRef(ref string) (Named, error) { - named, err := ParseNormalizedNamed(ref) - if err != nil { - return nil, err - } - if canonical, ok := named.(namedTaggedDigested); ok { - // The reference is both tagged and digested; only return digested. - newNamed, err := WithName(canonical.Name()) - if err != nil { - return nil, err - } - return WithDigest(newNamed, canonical.Digest()) - } - return TagNameOnly(named), nil -} - -// splitDockerDomain splits a repository name to domain and remote-name. -// If no valid domain is found, the default domain is used. Repository name -// needs to be already validated before. -func splitDockerDomain(name string) (domain, remoteName string) { - maybeDomain, maybeRemoteName, ok := strings.Cut(name, "/") - if !ok { - // Fast-path for single element ("familiar" names), such as "ubuntu" - // or "ubuntu:latest". Familiar names must be handled separately, to - // prevent them from being handled as "hostname:port". - // - // Canonicalize them as "docker.io/library/name[:tag]" - - // FIXME(thaJeztah): account for bare "localhost" or "example.com" names, which SHOULD be considered a domain. - return defaultDomain, officialRepoPrefix + name - } - - switch { - case maybeDomain == localhost: - // localhost is a reserved namespace and always considered a domain. - domain, remoteName = maybeDomain, maybeRemoteName - case maybeDomain == legacyDefaultDomain: - // canonicalize the Docker Hub and legacy "Docker Index" domains. - domain, remoteName = defaultDomain, maybeRemoteName - case strings.ContainsAny(maybeDomain, ".:"): - // Likely a domain or IP-address: - // - // - contains a "." (e.g., "example.com" or "127.0.0.1") - // - contains a ":" (e.g., "example:5000", "::1", or "[::1]:5000") - domain, remoteName = maybeDomain, maybeRemoteName - case strings.ToLower(maybeDomain) != maybeDomain: - // Uppercase namespaces are not allowed, so if the first element - // is not lowercase, we assume it to be a domain-name. - domain, remoteName = maybeDomain, maybeRemoteName - default: - // None of the above: it's not a domain, so use the default, and - // use the name input the remote-name. - domain, remoteName = defaultDomain, name - } - - if domain == defaultDomain && !strings.ContainsRune(remoteName, '/') { - // Canonicalize "familiar" names, but only on Docker Hub, not - // on other domains: - // - // "docker.io/ubuntu[:tag]" => "docker.io/library/ubuntu[:tag]" - remoteName = officialRepoPrefix + remoteName - } - - return domain, remoteName -} - -// familiarizeName returns a shortened version of the name familiar -// to the Docker UI. Familiar names have the default domain -// "docker.io" and "library/" repository prefix removed. -// For example, "docker.io/library/redis" will have the familiar -// name "redis" and "docker.io/dmcgowan/myapp" will be "dmcgowan/myapp". -// Returns a familiarized named only reference. -func familiarizeName(named namedRepository) repository { - repo := repository{ - domain: named.Domain(), - path: named.Path(), - } - - if repo.domain == defaultDomain { - repo.domain = "" - // Handle official repositories which have the pattern "library/" - if strings.HasPrefix(repo.path, officialRepoPrefix) { - // TODO(thaJeztah): this check may be too strict, as it assumes the - // "library/" namespace does not have nested namespaces. While this - // is true (currently), technically it would be possible for Docker - // Hub to use those (e.g. "library/distros/ubuntu:latest"). - // See https://github.com/distribution/distribution/pull/3769#issuecomment-1302031785. - if remainder := strings.TrimPrefix(repo.path, officialRepoPrefix); !strings.ContainsRune(remainder, '/') { - repo.path = remainder - } - } - } - return repo -} - -func (r reference) Familiar() Named { - return reference{ - namedRepository: familiarizeName(r.namedRepository), - tag: r.tag, - digest: r.digest, - } -} - -func (r repository) Familiar() Named { - return familiarizeName(r) -} - -func (t taggedReference) Familiar() Named { - return taggedReference{ - namedRepository: familiarizeName(t.namedRepository), - tag: t.tag, - } -} - -func (c canonicalReference) Familiar() Named { - return canonicalReference{ - namedRepository: familiarizeName(c.namedRepository), - digest: c.digest, - } -} - -// TagNameOnly adds the default tag "latest" to a reference if it only has -// a repo name. -func TagNameOnly(ref Named) Named { - if IsNameOnly(ref) { - namedTagged, err := WithTag(ref, defaultTag) - if err != nil { - // Default tag must be valid, to create a NamedTagged - // type with non-validated input the WithTag function - // should be used instead - panic(err) - } - return namedTagged - } - return ref -} - -// ParseAnyReference parses a reference string as a possible identifier, -// full digest, or familiar name. -func ParseAnyReference(ref string) (Reference, error) { - if ok := anchoredIdentifierRegexp.MatchString(ref); ok { - return digestReference("sha256:" + ref), nil - } - if dgst, err := digest.Parse(ref); err == nil { - return digestReference(dgst), nil - } - - return ParseNormalizedNamed(ref) -} diff --git a/vendor/github.com/distribution/reference/reference.go b/vendor/github.com/distribution/reference/reference.go deleted file mode 100644 index 900398bd..00000000 --- a/vendor/github.com/distribution/reference/reference.go +++ /dev/null @@ -1,432 +0,0 @@ -// Package reference provides a general type to represent any way of referencing images within the registry. -// Its main purpose is to abstract tags and digests (content-addressable hash). -// -// Grammar -// -// reference := name [ ":" tag ] [ "@" digest ] -// name := [domain '/'] remote-name -// domain := host [':' port-number] -// host := domain-name | IPv4address | \[ IPv6address \] ; rfc3986 appendix-A -// domain-name := domain-component ['.' domain-component]* -// domain-component := /([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])/ -// port-number := /[0-9]+/ -// path-component := alpha-numeric [separator alpha-numeric]* -// path (or "remote-name") := path-component ['/' path-component]* -// alpha-numeric := /[a-z0-9]+/ -// separator := /[_.]|__|[-]*/ -// -// tag := /[\w][\w.-]{0,127}/ -// -// digest := digest-algorithm ":" digest-hex -// digest-algorithm := digest-algorithm-component [ digest-algorithm-separator digest-algorithm-component ]* -// digest-algorithm-separator := /[+.-_]/ -// digest-algorithm-component := /[A-Za-z][A-Za-z0-9]*/ -// digest-hex := /[0-9a-fA-F]{32,}/ ; At least 128 bit digest value -// -// identifier := /[a-f0-9]{64}/ -package reference - -import ( - "errors" - "fmt" - "strings" - - "github.com/opencontainers/go-digest" -) - -const ( - // RepositoryNameTotalLengthMax is the maximum total number of characters in a repository name. - RepositoryNameTotalLengthMax = 255 - - // NameTotalLengthMax is the maximum total number of characters in a repository name. - // - // Deprecated: use [RepositoryNameTotalLengthMax] instead. - NameTotalLengthMax = RepositoryNameTotalLengthMax -) - -var ( - // ErrReferenceInvalidFormat represents an error while trying to parse a string as a reference. - ErrReferenceInvalidFormat = errors.New("invalid reference format") - - // ErrTagInvalidFormat represents an error while trying to parse a string as a tag. - ErrTagInvalidFormat = errors.New("invalid tag format") - - // ErrDigestInvalidFormat represents an error while trying to parse a string as a tag. - ErrDigestInvalidFormat = errors.New("invalid digest format") - - // ErrNameContainsUppercase is returned for invalid repository names that contain uppercase characters. - ErrNameContainsUppercase = errors.New("repository name must be lowercase") - - // ErrNameEmpty is returned for empty, invalid repository names. - ErrNameEmpty = errors.New("repository name must have at least one component") - - // ErrNameTooLong is returned when a repository name is longer than RepositoryNameTotalLengthMax. - ErrNameTooLong = fmt.Errorf("repository name must not be more than %v characters", RepositoryNameTotalLengthMax) - - // ErrNameNotCanonical is returned when a name is not canonical. - ErrNameNotCanonical = errors.New("repository name must be canonical") -) - -// Reference is an opaque object reference identifier that may include -// modifiers such as a hostname, name, tag, and digest. -type Reference interface { - // String returns the full reference - String() string -} - -// Field provides a wrapper type for resolving correct reference types when -// working with encoding. -type Field struct { - reference Reference -} - -// AsField wraps a reference in a Field for encoding. -func AsField(reference Reference) Field { - return Field{reference} -} - -// Reference unwraps the reference type from the field to -// return the Reference object. This object should be -// of the appropriate type to further check for different -// reference types. -func (f Field) Reference() Reference { - return f.reference -} - -// MarshalText serializes the field to byte text which -// is the string of the reference. -func (f Field) MarshalText() (p []byte, err error) { - return []byte(f.reference.String()), nil -} - -// UnmarshalText parses text bytes by invoking the -// reference parser to ensure the appropriately -// typed reference object is wrapped by field. -func (f *Field) UnmarshalText(p []byte) error { - r, err := Parse(string(p)) - if err != nil { - return err - } - - f.reference = r - return nil -} - -// Named is an object with a full name -type Named interface { - Reference - Name() string -} - -// Tagged is an object which has a tag -type Tagged interface { - Reference - Tag() string -} - -// NamedTagged is an object including a name and tag. -type NamedTagged interface { - Named - Tag() string -} - -// Digested is an object which has a digest -// in which it can be referenced by -type Digested interface { - Reference - Digest() digest.Digest -} - -// Canonical reference is an object with a fully unique -// name including a name with domain and digest -type Canonical interface { - Named - Digest() digest.Digest -} - -// namedRepository is a reference to a repository with a name. -// A namedRepository has both domain and path components. -type namedRepository interface { - Named - Domain() string - Path() string -} - -// Domain returns the domain part of the [Named] reference. -func Domain(named Named) string { - if r, ok := named.(namedRepository); ok { - return r.Domain() - } - domain, _ := splitDomain(named.Name()) - return domain -} - -// Path returns the name without the domain part of the [Named] reference. -func Path(named Named) (name string) { - if r, ok := named.(namedRepository); ok { - return r.Path() - } - _, path := splitDomain(named.Name()) - return path -} - -// splitDomain splits a named reference into a hostname and path string. -// If no valid hostname is found, the hostname is empty and the full value -// is returned as name -func splitDomain(name string) (string, string) { - match := anchoredNameRegexp.FindStringSubmatch(name) - if len(match) != 3 { - return "", name - } - return match[1], match[2] -} - -// Parse parses s and returns a syntactically valid Reference. -// If an error was encountered it is returned, along with a nil Reference. -func Parse(s string) (Reference, error) { - matches := ReferenceRegexp.FindStringSubmatch(s) - if matches == nil { - if s == "" { - return nil, ErrNameEmpty - } - if ReferenceRegexp.FindStringSubmatch(strings.ToLower(s)) != nil { - return nil, ErrNameContainsUppercase - } - return nil, ErrReferenceInvalidFormat - } - - var repo repository - - nameMatch := anchoredNameRegexp.FindStringSubmatch(matches[1]) - if len(nameMatch) == 3 { - repo.domain = nameMatch[1] - repo.path = nameMatch[2] - } else { - repo.domain = "" - repo.path = matches[1] - } - - if len(repo.path) > RepositoryNameTotalLengthMax { - return nil, ErrNameTooLong - } - - ref := reference{ - namedRepository: repo, - tag: matches[2], - } - if matches[3] != "" { - var err error - ref.digest, err = digest.Parse(matches[3]) - if err != nil { - return nil, err - } - } - - r := getBestReferenceType(ref) - if r == nil { - return nil, ErrNameEmpty - } - - return r, nil -} - -// ParseNamed parses s and returns a syntactically valid reference implementing -// the Named interface. The reference must have a name and be in the canonical -// form, otherwise an error is returned. -// If an error was encountered it is returned, along with a nil Reference. -func ParseNamed(s string) (Named, error) { - named, err := ParseNormalizedNamed(s) - if err != nil { - return nil, err - } - if named.String() != s { - return nil, ErrNameNotCanonical - } - return named, nil -} - -// WithName returns a named object representing the given string. If the input -// is invalid ErrReferenceInvalidFormat will be returned. -func WithName(name string) (Named, error) { - match := anchoredNameRegexp.FindStringSubmatch(name) - if match == nil || len(match) != 3 { - return nil, ErrReferenceInvalidFormat - } - - if len(match[2]) > RepositoryNameTotalLengthMax { - return nil, ErrNameTooLong - } - - return repository{ - domain: match[1], - path: match[2], - }, nil -} - -// WithTag combines the name from "name" and the tag from "tag" to form a -// reference incorporating both the name and the tag. -func WithTag(name Named, tag string) (NamedTagged, error) { - if !anchoredTagRegexp.MatchString(tag) { - return nil, ErrTagInvalidFormat - } - var repo repository - if r, ok := name.(namedRepository); ok { - repo.domain = r.Domain() - repo.path = r.Path() - } else { - repo.path = name.Name() - } - if canonical, ok := name.(Canonical); ok { - return reference{ - namedRepository: repo, - tag: tag, - digest: canonical.Digest(), - }, nil - } - return taggedReference{ - namedRepository: repo, - tag: tag, - }, nil -} - -// WithDigest combines the name from "name" and the digest from "digest" to form -// a reference incorporating both the name and the digest. -func WithDigest(name Named, digest digest.Digest) (Canonical, error) { - if !anchoredDigestRegexp.MatchString(digest.String()) { - return nil, ErrDigestInvalidFormat - } - var repo repository - if r, ok := name.(namedRepository); ok { - repo.domain = r.Domain() - repo.path = r.Path() - } else { - repo.path = name.Name() - } - if tagged, ok := name.(Tagged); ok { - return reference{ - namedRepository: repo, - tag: tagged.Tag(), - digest: digest, - }, nil - } - return canonicalReference{ - namedRepository: repo, - digest: digest, - }, nil -} - -// TrimNamed removes any tag or digest from the named reference. -func TrimNamed(ref Named) Named { - repo := repository{} - if r, ok := ref.(namedRepository); ok { - repo.domain, repo.path = r.Domain(), r.Path() - } else { - repo.domain, repo.path = splitDomain(ref.Name()) - } - return repo -} - -func getBestReferenceType(ref reference) Reference { - if ref.Name() == "" { - // Allow digest only references - if ref.digest != "" { - return digestReference(ref.digest) - } - return nil - } - if ref.tag == "" { - if ref.digest != "" { - return canonicalReference{ - namedRepository: ref.namedRepository, - digest: ref.digest, - } - } - return ref.namedRepository - } - if ref.digest == "" { - return taggedReference{ - namedRepository: ref.namedRepository, - tag: ref.tag, - } - } - - return ref -} - -type reference struct { - namedRepository - tag string - digest digest.Digest -} - -func (r reference) String() string { - return r.Name() + ":" + r.tag + "@" + r.digest.String() -} - -func (r reference) Tag() string { - return r.tag -} - -func (r reference) Digest() digest.Digest { - return r.digest -} - -type repository struct { - domain string - path string -} - -func (r repository) String() string { - return r.Name() -} - -func (r repository) Name() string { - if r.domain == "" { - return r.path - } - return r.domain + "/" + r.path -} - -func (r repository) Domain() string { - return r.domain -} - -func (r repository) Path() string { - return r.path -} - -type digestReference digest.Digest - -func (d digestReference) String() string { - return digest.Digest(d).String() -} - -func (d digestReference) Digest() digest.Digest { - return digest.Digest(d) -} - -type taggedReference struct { - namedRepository - tag string -} - -func (t taggedReference) String() string { - return t.Name() + ":" + t.tag -} - -func (t taggedReference) Tag() string { - return t.tag -} - -type canonicalReference struct { - namedRepository - digest digest.Digest -} - -func (c canonicalReference) String() string { - return c.Name() + "@" + c.digest.String() -} - -func (c canonicalReference) Digest() digest.Digest { - return c.digest -} diff --git a/vendor/github.com/distribution/reference/regexp.go b/vendor/github.com/distribution/reference/regexp.go deleted file mode 100644 index 65bc49d7..00000000 --- a/vendor/github.com/distribution/reference/regexp.go +++ /dev/null @@ -1,163 +0,0 @@ -package reference - -import ( - "regexp" - "strings" -) - -// DigestRegexp matches well-formed digests, including algorithm (e.g. "sha256:"). -var DigestRegexp = regexp.MustCompile(digestPat) - -// DomainRegexp matches hostname or IP-addresses, optionally including a port -// number. It defines the structure of potential domain components that may be -// part of image names. This is purposely a subset of what is allowed by DNS to -// ensure backwards compatibility with Docker image names. It may be a subset of -// DNS domain name, an IPv4 address in decimal format, or an IPv6 address between -// square brackets (excluding zone identifiers as defined by [RFC 6874] or special -// addresses such as IPv4-Mapped). -// -// [RFC 6874]: https://www.rfc-editor.org/rfc/rfc6874. -var DomainRegexp = regexp.MustCompile(domainAndPort) - -// IdentifierRegexp is the format for string identifier used as a -// content addressable identifier using sha256. These identifiers -// are like digests without the algorithm, since sha256 is used. -var IdentifierRegexp = regexp.MustCompile(identifier) - -// NameRegexp is the format for the name component of references, including -// an optional domain and port, but without tag or digest suffix. -var NameRegexp = regexp.MustCompile(namePat) - -// ReferenceRegexp is the full supported format of a reference. The regexp -// is anchored and has capturing groups for name, tag, and digest -// components. -var ReferenceRegexp = regexp.MustCompile(referencePat) - -// TagRegexp matches valid tag names. From [docker/docker:graph/tags.go]. -// -// [docker/docker:graph/tags.go]: https://github.com/moby/moby/blob/v1.6.0/graph/tags.go#L26-L28 -var TagRegexp = regexp.MustCompile(tag) - -const ( - // alphanumeric defines the alphanumeric atom, typically a - // component of names. This only allows lower case characters and digits. - alphanumeric = `[a-z0-9]+` - - // separator defines the separators allowed to be embedded in name - // components. This allows one period, one or two underscore and multiple - // dashes. Repeated dashes and underscores are intentionally treated - // differently. In order to support valid hostnames as name components, - // supporting repeated dash was added. Additionally double underscore is - // now allowed as a separator to loosen the restriction for previously - // supported names. - separator = `(?:[._]|__|[-]+)` - - // localhost is treated as a special value for domain-name. Any other - // domain-name without a "." or a ":port" are considered a path component. - localhost = `localhost` - - // domainNameComponent restricts the registry domain component of a - // repository name to start with a component as defined by DomainRegexp. - domainNameComponent = `(?:[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9])` - - // optionalPort matches an optional port-number including the port separator - // (e.g. ":80"). - optionalPort = `(?::[0-9]+)?` - - // tag matches valid tag names. From docker/docker:graph/tags.go. - tag = `[\w][\w.-]{0,127}` - - // digestPat matches well-formed digests, including algorithm (e.g. "sha256:"). - // - // TODO(thaJeztah): this should follow the same rules as https://pkg.go.dev/github.com/opencontainers/go-digest@v1.0.0#DigestRegexp - // so that go-digest defines the canonical format. Note that the go-digest is - // more relaxed: - // - it allows multiple algorithms (e.g. "sha256+b64:") to allow - // future expansion of supported algorithms. - // - it allows the "" value to use urlsafe base64 encoding as defined - // in [rfc4648, section 5]. - // - // [rfc4648, section 5]: https://www.rfc-editor.org/rfc/rfc4648#section-5. - digestPat = `[A-Za-z][A-Za-z0-9]*(?:[-_+.][A-Za-z][A-Za-z0-9]*)*[:][[:xdigit:]]{32,}` - - // identifier is the format for a content addressable identifier using sha256. - // These identifiers are like digests without the algorithm, since sha256 is used. - identifier = `([a-f0-9]{64})` - - // ipv6address are enclosed between square brackets and may be represented - // in many ways, see rfc5952. Only IPv6 in compressed or uncompressed format - // are allowed, IPv6 zone identifiers (rfc6874) or Special addresses such as - // IPv4-Mapped are deliberately excluded. - ipv6address = `\[(?:[a-fA-F0-9:]+)\]` -) - -var ( - // domainName defines the structure of potential domain components - // that may be part of image names. This is purposely a subset of what is - // allowed by DNS to ensure backwards compatibility with Docker image - // names. This includes IPv4 addresses on decimal format. - domainName = domainNameComponent + anyTimes(`\.`+domainNameComponent) - - // host defines the structure of potential domains based on the URI - // Host subcomponent on rfc3986. It may be a subset of DNS domain name, - // or an IPv4 address in decimal format, or an IPv6 address between square - // brackets (excluding zone identifiers as defined by rfc6874 or special - // addresses such as IPv4-Mapped). - host = `(?:` + domainName + `|` + ipv6address + `)` - - // allowed by the URI Host subcomponent on rfc3986 to ensure backwards - // compatibility with Docker image names. - domainAndPort = host + optionalPort - - // anchoredTagRegexp matches valid tag names, anchored at the start and - // end of the matched string. - anchoredTagRegexp = regexp.MustCompile(anchored(tag)) - - // anchoredDigestRegexp matches valid digests, anchored at the start and - // end of the matched string. - anchoredDigestRegexp = regexp.MustCompile(anchored(digestPat)) - - // pathComponent restricts path-components to start with an alphanumeric - // character, with following parts able to be separated by a separator - // (one period, one or two underscore and multiple dashes). - pathComponent = alphanumeric + anyTimes(separator+alphanumeric) - - // remoteName matches the remote-name of a repository. It consists of one - // or more forward slash (/) delimited path-components: - // - // pathComponent[[/pathComponent] ...] // e.g., "library/ubuntu" - remoteName = pathComponent + anyTimes(`/`+pathComponent) - namePat = optional(domainAndPort+`/`) + remoteName - - // anchoredNameRegexp is used to parse a name value, capturing the - // domain and trailing components. - anchoredNameRegexp = regexp.MustCompile(anchored(optional(capture(domainAndPort), `/`), capture(remoteName))) - - referencePat = anchored(capture(namePat), optional(`:`, capture(tag)), optional(`@`, capture(digestPat))) - - // anchoredIdentifierRegexp is used to check or match an - // identifier value, anchored at start and end of string. - anchoredIdentifierRegexp = regexp.MustCompile(anchored(identifier)) -) - -// optional wraps the expression in a non-capturing group and makes the -// production optional. -func optional(res ...string) string { - return `(?:` + strings.Join(res, "") + `)?` -} - -// anyTimes wraps the expression in a non-capturing group that can occur -// any number of times. -func anyTimes(res ...string) string { - return `(?:` + strings.Join(res, "") + `)*` -} - -// capture wraps the expression in a capturing group. -func capture(res ...string) string { - return `(` + strings.Join(res, "") + `)` -} - -// anchored anchors the regular expression by adding start and end delimiters. -func anchored(res ...string) string { - return `^` + strings.Join(res, "") + `$` -} diff --git a/vendor/github.com/distribution/reference/sort.go b/vendor/github.com/distribution/reference/sort.go deleted file mode 100644 index 416c37b0..00000000 --- a/vendor/github.com/distribution/reference/sort.go +++ /dev/null @@ -1,75 +0,0 @@ -/* - Copyright The containerd Authors. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package reference - -import ( - "sort" -) - -// Sort sorts string references preferring higher information references. -// -// The precedence is as follows: -// -// 1. [Named] + [Tagged] + [Digested] (e.g., "docker.io/library/busybox:latest@sha256:") -// 2. [Named] + [Tagged] (e.g., "docker.io/library/busybox:latest") -// 3. [Named] + [Digested] (e.g., "docker.io/library/busybo@sha256:") -// 4. [Named] (e.g., "docker.io/library/busybox") -// 5. [Digested] (e.g., "docker.io@sha256:") -// 6. Parse error -func Sort(references []string) []string { - var prefs []Reference - var bad []string - - for _, ref := range references { - pref, err := ParseAnyReference(ref) - if err != nil { - bad = append(bad, ref) - } else { - prefs = append(prefs, pref) - } - } - sort.Slice(prefs, func(a, b int) bool { - ar := refRank(prefs[a]) - br := refRank(prefs[b]) - if ar == br { - return prefs[a].String() < prefs[b].String() - } - return ar < br - }) - sort.Strings(bad) - var refs []string - for _, pref := range prefs { - refs = append(refs, pref.String()) - } - return append(refs, bad...) -} - -func refRank(ref Reference) uint8 { - if _, ok := ref.(Named); ok { - if _, ok = ref.(Tagged); ok { - if _, ok = ref.(Digested); ok { - return 1 - } - return 2 - } - if _, ok = ref.(Digested); ok { - return 3 - } - return 4 - } - return 5 -} diff --git a/vendor/github.com/docker/cli/AUTHORS b/vendor/github.com/docker/cli/AUTHORS deleted file mode 100644 index ad1abd49..00000000 --- a/vendor/github.com/docker/cli/AUTHORS +++ /dev/null @@ -1,910 +0,0 @@ -# File @generated by scripts/docs/generate-authors.sh. DO NOT EDIT. -# This file lists all contributors to the repository. -# See scripts/docs/generate-authors.sh to make modifications. - -A. Lester Buck III -Aanand Prasad -Aaron L. Xu -Aaron Lehmann -Aaron.L.Xu -Abdur Rehman -Abhinandan Prativadi -Abin Shahab -Abreto FU -Ace Tang -Addam Hardy -Adolfo Ochagavía -Adrian Plata -Adrien Duermael -Adrien Folie -Adyanth Hosavalike -Ahmet Alp Balkan -Aidan Feldman -Aidan Hobson Sayers -AJ Bowen -Akhil Mohan -Akihiro Suda -Akim Demaille -Alan Thompson -Alano Terblanche -Albert Callarisa -Alberto Roura -Albin Kerouanton -Aleksa Sarai -Aleksander Piotrowski -Alessandro Boch -Alex Couture-Beil -Alex Mavrogiannis -Alex Mayer -Alexander Boyd -Alexander Chneerov -Alexander Larsson -Alexander Morozov -Alexander Ryabov -Alexandre González -Alexey Igrychev -Alexis Couvreur -Alfred Landrum -Ali Rostami -Alicia Lauerman -Allen Sun -Alvin Deng -Amen Belayneh -Amey Shrivastava <72866602+AmeyShrivastava@users.noreply.github.com> -Amir Goldstein -Amit Krishnan -Amit Shukla -Amy Lindburg -Anca Iordache -Anda Xu -Andrea Luzzardi -Andreas Köhler -Andres G. Aragoneses -Andres Leon Rangel -Andrew France -Andrew Hsu -Andrew Macpherson -Andrew McDonnell -Andrew Po -Andrew-Zipperer -Andrey Petrov -Andrii Berehuliak -André Martins -Andy Goldstein -Andy Rothfusz -Anil Madhavapeddy -Ankush Agarwal -Anne Henmi -Anton Polonskiy -Antonio Murdaca -Antonis Kalipetis -Anusha Ragunathan -Ao Li -Arash Deshmeh -Arko Dasgupta -Arnaud Porterie -Arnaud Rebillout -Arthur Peka -Ashly Mathew -Ashwini Oruganti -Aslam Ahemad -Azat Khuyiyakhmetov -Bardia Keyoumarsi -Barnaby Gray -Bastiaan Bakker -BastianHofmann -Ben Bodenmiller -Ben Bonnefoy -Ben Creasy -Ben Firshman -Benjamin Boudreau -Benjamin Böhmke -Benjamin Nater -Benoit Sigoure -Bhumika Bayani -Bill Wang -Bin Liu -Bingshen Wang -Bishal Das -Bjorn Neergaard -Boaz Shuster -Boban Acimovic -Bogdan Anton -Boris Pruessmann -Brad Baker -Bradley Cicenas -Brandon Mitchell -Brandon Philips -Brent Salisbury -Bret Fisher -Brian (bex) Exelbierd -Brian Goff -Brian Tracy -Brian Wieder -Bruno Sousa -Bryan Bess -Bryan Boreham -Bryan Murphy -bryfry -Calvin Liu -Cameron Spear -Cao Weiwei -Carlo Mion -Carlos Alexandro Becker -Carlos de Paula -Casey Korver -Ce Gao -Cedric Davies -Cezar Sa Espinola -Chad Faragher -Chao Wang -Charles Chan -Charles Law -Charles Smith -Charlie Drage -Charlotte Mach -ChaYoung You -Chee Hau Lim -Chen Chuanliang -Chen Hanxiao -Chen Mingjie -Chen Qiu -Chris Chinchilla -Chris Couzens -Chris Gavin -Chris Gibson -Chris McKinnel -Chris Snow -Chris Vermilion -Chris Weyl -Christian Persson -Christian Stefanescu -Christophe Robin -Christophe Vidal -Christopher Biscardi -Christopher Crone -Christopher Jones -Christopher Petito <47751006+krissetto@users.noreply.github.com> -Christopher Petito -Christopher Svensson -Christy Norman -Chun Chen -Clinton Kitson -Coenraad Loubser -Colin Hebert -Collin Guarino -Colm Hally -Comical Derskeal <27731088+derskeal@users.noreply.github.com> -Conner Crosby -Corey Farrell -Corey Quon -Cory Bennet -Cory Snider -Craig Osterhout -Craig Wilhite -Cristian Staretu -Daehyeok Mun -Dafydd Crosby -Daisuke Ito -dalanlan -Damien Nadé -Dan Cotora -Danial Gharib -Daniel Artine -Daniel Cassidy -Daniel Dao -Daniel Farrell -Daniel Gasienica -Daniel Goosen -Daniel Helfand -Daniel Hiltgen -Daniel J Walsh -Daniel Nephin -Daniel Norberg -Daniel Watkins -Daniel Zhang -Daniil Nikolenko -Danny Berger -Darren Shepherd -Darren Stahl -Dattatraya Kumbhar -Dave Goodchild -Dave Henderson -Dave Tucker -David Alvarez -David Beitey -David Calavera -David Cramer -David Dooling -David Gageot -David Karlsson -David le Blanc -David Lechner -David Scott -David Sheets -David Williamson -David Xia -David Young -Deng Guangxing -Denis Defreyne -Denis Gladkikh -Denis Ollier -Dennis Docter -dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> -Derek McGowan -Des Preston -Deshi Xiao -Dharmit Shah -Dhawal Yogesh Bhanushali -Dieter Reuter -Dima Stopel -Dimitry Andric -Ding Fei -Diogo Monica -Djordje Lukic -Dmitriy Fishman -Dmitry Gusev -Dmitry Smirnov -Dmitry V. Krivenok -Dominik Braun -Don Kjer -Dong Chen -DongGeon Lee -Doug Davis -Drew Erny -Ed Costello -Ed Morley <501702+edmorley@users.noreply.github.com> -Elango Sivanandam -Eli Uriegas -Eli Uriegas -Elias Faxö -Elliot Luo <956941328@qq.com> -Eric Bode -Eric Curtin -Eric Engestrom -Eric G. Noriega -Eric Rosenberg -Eric Sage -Eric-Olivier Lamey -Erica Windisch -Erik Hollensbe -Erik Humphrey -Erik St. Martin -Essam A. Hassan -Ethan Haynes -Euan Kemp -Eugene Yakubovich -Evan Allrich -Evan Hazlett -Evan Krall -Evan Lezar -Evelyn Xu -Everett Toews -Fabio Falci -Fabrizio Soppelsa -Felix Geyer -Felix Hupfeld -Felix Rabe -fezzik1620 -Filip Jareš -Flavio Crisciani -Florian Klein -Forest Johnson -Foysal Iqbal -François Scala -Fred Lifton -Frederic Hemberger -Frederick F. Kautz IV -Frederik Nordahl Jul Sabroe -Frieder Bluemle -Gabriel Gore -Gabriel Nicolas Avellaneda -Gabriela Georgieva -Gaetan de Villele -Gang Qiao -Gary Schaetz -Genki Takiuchi -George MacRorie -George Margaritis -George Xie -Gianluca Borello -Gildas Cuisinier -Gio d'Amelio -Gleb Stsenov -Goksu Toprak -Gou Rao -Govind Rai -Grace Choi -Graeme Wiebe -Grant Reaber -Greg Pflaum -Gsealy -Guilhem Lettron -Guillaume J. Charmes -Guillaume Le Floch -Guillaume Tardif -gwx296173 -Günther Jungbluth -Hakan Özler -Hao Zhang <21521210@zju.edu.cn> -Harald Albers -Harold Cooper -Harry Zhang -He Simei -Hector S -Helen Xie -Henning Sprang -Henry N -Hernan Garcia -Hongbin Lu -Hu Keping -Huayi Zhang -Hugo Chastel -Hugo Gabriel Eyherabide -huqun -Huu Nguyen -Hyzhou Zhy -Iain Samuel McLean Elder -Ian Campbell -Ian Philpot -Ignacio Capurro -Ilya Dmitrichenko -Ilya Khlopotov -Ilya Sotkov -Ioan Eugen Stan -Isabel Jimenez -Ivan Grcic -Ivan Grund -Ivan Markin -Jacob Atzen -Jacob Tomlinson -Jacopo Rigoli -Jaivish Kothari -Jake Lambert -Jake Sanders -Jake Stokes -Jakub Panek -James Nesbitt -James Turnbull -Jamie Hannaford -Jan Koprowski -Jan Pazdziora -Jan-Jaap Driessen -Jana Radhakrishnan -Jared Hocutt -Jasmine Hegman -Jason Hall -Jason Heiss -Jason Plum -Jay Kamat -Jean Lecordier -Jean Rouge -Jean-Christophe Sirot -Jean-Pierre Huynh -Jeff Lindsay -Jeff Nickoloff -Jeff Silberman -Jennings Zhang -Jeremy Chambers -Jeremy Unruh -Jeremy Yallop -Jeroen Franse -Jesse Adametz -Jessica Frazelle -Jezeniel Zapanta -Jian Zhang -Jie Luo -Jilles Oldenbeuving -Jim Chen -Jim Galasyn -Jim Lin -Jimmy Leger -Jimmy Song -jimmyxian -Jintao Zhang -Joao Fernandes -Joe Abbey -Joe Doliner -Joe Gordon -Joel Handwell -Joey Geiger -Joffrey F -Johan Euphrosine -Johannes 'fish' Ziemke -John Feminella -John Harris -John Howard -John Howard -John Laswell -John Maguire -John Mulhausen -John Starks -John Stephens -John Tims -John V. Martinez -John Willis -Jon Johnson -Jon Zeolla -Jonatas Baldin -Jonathan A. Sternberg -Jonathan Boulle -Jonathan Lee -Jonathan Lomas -Jonathan McCrohan -Jonathan Warriss-Simmons -Jonh Wendell -Jordan Jennings -Jorge Vallecillo -Jose J. Escobar <53836904+jescobar-docker@users.noreply.github.com> -Joseph Kern -Josh Bodah -Josh Chorlton -Josh Hawn -Josh Horwitz -Josh Soref -Julian -Julien Barbier -Julien Kassar -Julien Maitrehenry -Justas Brazauskas -Justin Chadwell -Justin Cormack -Justin Simonelis -Justyn Temme -Jyrki Puttonen -Jérémie Drouet -Jérôme Petazzoni -Jörg Thalheim -Kai Blin -Kai Qiang Wu (Kennan) -Kara Alexandra -Kareem Khazem -Karthik Nayak -Kat Samperi -Kathryn Spiers -Katie McLaughlin -Ke Xu -Kei Ohmura -Keith Hudgins -Kelton Bassingthwaite -Ken Cochrane -Ken ICHIKAWA -Kenfe-Mickaël Laventure -Kevin Alvarez -Kevin Burke -Kevin Feyrer -Kevin Kern -Kevin Kirsche -Kevin Meredith -Kevin Richardson -Kevin Woblick -khaled souf -Kim Eik -Kir Kolyshkin -Kirill A. Korinsky -Kotaro Yoshimatsu -Krasi Georgiev -Kris-Mikael Krister -Kun Zhang -Kunal Kushwaha -Kyle Mitofsky -Lachlan Cooper -Lai Jiangshan -Lars Kellogg-Stedman -Laura Brehm -Laura Frank -Laurent Erignoux -Lee Gaines -Lei Jitang -Lennie -Leo Gallucci -Leonid Skorospelov -Lewis Daly -Li Fu Bang -Li Yi -Li Yi -Liang-Chi Hsieh -Lihua Tang -Lily Guo -Lin Lu -Linus Heckemann -Liping Xue -Liron Levin -liwenqi -lixiaobing10051267 -Lloyd Dewolf -Lorenzo Fontana -Louis Opter -Luca Favatella -Luca Marturana -Lucas Chan -Luis Henrique Mulinari -Luka Hartwig -Lukas Heeren -Lukasz Zajaczkowski -Lydell Manganti -Lénaïc Huard -Ma Shimiao -Mabin -Maciej Kalisz -Madhav Puri -Madhu Venugopal -Madhur Batra -Malte Janduda -Manjunath A Kumatagi -Mansi Nahar -mapk0y -Marc Bihlmaier -Marc Cornellà -Marco Mariani -Marco Spiess -Marco Vedovati -Marcus Martins -Marianna Tessel -Marius Ileana -Marius Meschter -Marius Sturm -Mark Oates -Marsh Macy -Martin Mosegaard Amdisen -Mary Anthony -Mason Fish -Mason Malone -Mateusz Major -Mathias Duedahl <64321057+Lussebullen@users.noreply.github.com> -Mathieu Champlon -Mathieu Rollet -Matt Gucci -Matt Robenolt -Matteo Orefice -Matthew Heon -Matthieu Hauglustaine -Mauro Porras P -Max Shytikov -Max-Julian Pogner -Maxime Petazzoni -Maximillian Fan Xavier -Mei ChunTao -Melroy van den Berg -Metal <2466052+tedhexaflow@users.noreply.github.com> -Micah Zoltu -Michael A. Smith -Michael Bridgen -Michael Crosby -Michael Friis -Michael Irwin -Michael Käufl -Michael Prokop -Michael Scharf -Michael Spetsiotis -Michael Steinert -Michael West -Michal Minář -Michał Czeraszkiewicz -Miguel Angel Alvarez Cabrerizo -Mihai Borobocea -Mihuleacc Sergiu -Mike Brown -Mike Casas -Mike Dalton -Mike Danese -Mike Dillon -Mike Goelzer -Mike MacCana -mikelinjie <294893458@qq.com> -Mikhail Vasin -Milind Chawre -Mindaugas Rukas -Miroslav Gula -Misty Stanley-Jones -Mohammad Banikazemi -Mohammed Aaqib Ansari -Mohini Anne Dsouza -Moorthy RS -Morgan Bauer -Morten Hekkvang -Morten Linderud -Moysés Borges -Mozi <29089388+pzhlkj6612@users.noreply.github.com> -Mrunal Patel -muicoder -Murukesh Mohanan -Muthukumar R -Máximo Cuadros -Mårten Cassel -Nace Oroz -Nahum Shalman -Nalin Dahyabhai -Nao YONASHIRO -Nassim 'Nass' Eddequiouaq -Natalie Parker -Nate Brennand -Nathan Hsieh -Nathan LeClaire -Nathan McCauley -Neil Peterson -Nick Adcock -Nick Santos -Nick Sieger -Nico Stapelbroek -Nicola Kabar -Nicolas Borboën -Nicolas De Loof -Nikhil Chawla -Nikolas Garofil -Nikolay Milovanov -Nir Soffer -Nishant Totla -NIWA Hideyuki -Noah Treuhaft -O.S. Tezer -Oded Arbel -Odin Ugedal -ohmystack -OKA Naoya -Oliver Pomeroy -Olle Jonsson -Olli Janatuinen -Oscar Wieman -Otto Kekäläinen -Ovidio Mallo -Pascal Borreli -Patrick Böänziger -Patrick Daigle <114765035+pdaig@users.noreply.github.com> -Patrick Hemmer -Patrick Lang -Paul -Paul Kehrer -Paul Lietar -Paul Mulders -Paul Seyfert -Paul Weaver -Pavel Pospisil -Paweł Gronowski -Paweł Pokrywka -Paweł Szczekutowicz -Peeyush Gupta -Per Lundberg -Peter Dave Hello -Peter Edge -Peter Hsu -Peter Jaffe -Peter Kehl -Peter Nagy -Peter Salvatore -Peter Waller -Phil Estes -Philip Alexander Etling -Philipp Gillé -Philipp Schmied -Phong Tran -pidster -Pieter E Smit -pixelistik -Pratik Karki -Prayag Verma -Preston Cowley -Pure White -Qiang Huang -Qinglan Peng -QQ喵 -qudongfang -Raghavendra K T -Rahul Kadyan -Rahul Zoldyck -Ravi Shekhar Jethani -Ray Tsang -Reficul -Remy Suen -Renaud Gaubert -Ricardo N Feliciano -Rich Moyse -Richard Chen Zheng <58443436+rchenzheng@users.noreply.github.com> -Richard Mathie -Richard Scothern -Rick Wieman -Ritesh H Shukla -Riyaz Faizullabhoy -Rob Gulewich -Rob Murray -Robert Wallis -Robin Naundorf -Robin Speekenbrink -Roch Feuillade -Rodolfo Ortiz -Rogelio Canedo -Rohan Verma -Roland Kammerer -Roman Dudin -Rory Hunter -Ross Boucher -Rubens Figueiredo -Rui Cao -Rui JingAn -Ryan Belgrave -Ryan Detzel -Ryan Stelly -Ryan Wilson-Perkin -Ryan Zhang -Sainath Grandhi -Sakeven Jiang -Sally O'Malley -Sam Neirinck -Sam Thibault -Samarth Shah -Sambuddha Basu -Sami Tabet -Samuel Cochran -Samuel Karp -Sandro Jäckel -Santhosh Manohar -Sargun Dhillon -Saswat Bhattacharya -Saurabh Kumar -Scott Brenner -Scott Collier -Sean Christopherson -Sean Rodman -Sebastiaan van Stijn -Sergey Tryuber -Serhat Gülçiçek -Sevki Hasirci -Shaun Kaasten -Sheng Yang -Shijiang Wei -Shishir Mahajan -Shoubhik Bose -Shukui Yang -Sian Lerk Lau -Sidhartha Mani -sidharthamani -Silvin Lubecki -Simei He -Simon Ferquel -Simon Heimberg -Sindhu S -Slava Semushin -Solomon Hykes -Song Gao -Spencer Brown -Spring Lee -squeegels -Srini Brahmaroutu -Stefan S. -Stefan Scherer -Stefan Weil -Stephane Jeandeaux -Stephen Day -Stephen Rust -Steve Durrheimer -Steve Richards -Steven Burgess -Stoica-Marcu Floris-Andrei -Subhajit Ghosh -Sun Jianbo -Sune Keller -Sungwon Han -Sunny Gogoi -Sven Dowideit -Sylvain Baubeau -Sébastien HOUZÉ -T K Sourabh -TAGOMORI Satoshi -taiji-tech -Takeshi Koenuma -Takuya Noguchi -Taylor Jones -Teiva Harsanyi -Tejaswini Duggaraju -Tengfei Wang -Teppei Fukuda -Thatcher Peskens -Thibault Coupin -Thomas Gazagnaire -Thomas Krzero -Thomas Leonard -Thomas Léveil -Thomas Riccardi -Thomas Swift -Tianon Gravi -Tianyi Wang -Tibor Vass -Tim Dettrick -Tim Hockin -Tim Sampson -Tim Smith -Tim Waugh -Tim Welsh -Tim Wraight -timfeirg -Timothy Hobbs -Tobias Bradtke -Tobias Gesellchen -Todd Whiteman -Tom Denham -Tom Fotherby -Tom Klingenberg -Tom Milligan -Tom X. Tobin -Tomas Bäckman -Tomas Tomecek -Tomasz Kopczynski -Tomáš Hrčka -Tony Abboud -Tõnis Tiigi -Trapier Marshall -Travis Cline -Tristan Carel -Tycho Andersen -Tycho Andersen -uhayate -Ulrich Bareth -Ulysses Souza -Umesh Yadav -Vaclav Struhar -Valentin Lorentz -Vardan Pogosian -Venkateswara Reddy Bukkasamudram -Veres Lajos -Victor Vieux -Victoria Bialas -Viktor Stanchev -Ville Skyttä -Vimal Raghubir -Vincent Batts -Vincent Bernat -Vincent Demeester -Vincent Woo -Vishnu Kannan -Vivek Goyal -Wang Jie -Wang Lei -Wang Long -Wang Ping -Wang Xing -Wang Yuexiao -Wang Yumu <37442693@qq.com> -Wataru Ishida -Wayne Song -Wen Cheng Ma -Wenzhi Liang -Wes Morgan -Wewang Xiaorenfine -William Henry -Xianglin Gao -Xiaodong Liu -Xiaodong Zhang -Xiaoxi He -Xinbo Weng -Xuecong Liao -Yan Feng -Yanqiang Miao -Yassine Tijani -Yi EungJun -Ying Li -Yong Tang -Yosef Fertel -Yu Peng -Yuan Sun -Yucheng Wu -Yue Zhang -Yunxiang Huang -Zachary Romero -Zander Mackie -zebrilee -Zeel B Patel -Zhang Kun -Zhang Wei -Zhang Wentao -ZhangHang -zhenghenghuo -Zhiwei Liang -Zhou Hao -Zhoulin Xie -Zhu Guihua -Zhuo Zhi -Álex González -Álvaro Lázaro -Átila Camurça Alves -Александр Менщиков <__Singleton__@hackerdom.ru> -徐俊杰 diff --git a/vendor/github.com/docker/cli/LICENSE b/vendor/github.com/docker/cli/LICENSE deleted file mode 100644 index 9c8e20ab..00000000 --- a/vendor/github.com/docker/cli/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright 2013-2017 Docker, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/docker/cli/NOTICE b/vendor/github.com/docker/cli/NOTICE deleted file mode 100644 index 1c40faae..00000000 --- a/vendor/github.com/docker/cli/NOTICE +++ /dev/null @@ -1,19 +0,0 @@ -Docker -Copyright 2012-2017 Docker, Inc. - -This product includes software developed at Docker, Inc. (https://www.docker.com). - -This product contains software (https://github.com/creack/pty) developed -by Keith Rarick, licensed under the MIT License. - -The following is courtesy of our legal counsel: - - -Use and transfer of Docker may be subject to certain restrictions by the -United States and other governments. -It is your responsibility to ensure that your use and/or transfer does not -violate applicable laws. - -For more information, see https://www.bis.doc.gov - -See also https://www.apache.org/dev/crypto.html and/or seek legal counsel. diff --git a/vendor/github.com/docker/cli/cli/config/config.go b/vendor/github.com/docker/cli/cli/config/config.go deleted file mode 100644 index 5a518432..00000000 --- a/vendor/github.com/docker/cli/cli/config/config.go +++ /dev/null @@ -1,172 +0,0 @@ -package config - -import ( - "fmt" - "io" - "os" - "os/user" - "path/filepath" - "runtime" - "strings" - "sync" - - "github.com/docker/cli/cli/config/configfile" - "github.com/docker/cli/cli/config/credentials" - "github.com/docker/cli/cli/config/types" - "github.com/pkg/errors" -) - -const ( - // EnvOverrideConfigDir is the name of the environment variable that can be - // used to override the location of the client configuration files (~/.docker). - // - // It takes priority over the default, but can be overridden by the "--config" - // command line option. - EnvOverrideConfigDir = "DOCKER_CONFIG" - - // ConfigFileName is the name of the client configuration file inside the - // config-directory. - ConfigFileName = "config.json" - configFileDir = ".docker" - contextsDir = "contexts" -) - -var ( - initConfigDir = new(sync.Once) - configDir string -) - -// resetConfigDir is used in testing to reset the "configDir" package variable -// and its sync.Once to force re-lookup between tests. -func resetConfigDir() { - configDir = "" - initConfigDir = new(sync.Once) -} - -// getHomeDir returns the home directory of the current user with the help of -// environment variables depending on the target operating system. -// Returned path should be used with "path/filepath" to form new paths. -// -// On non-Windows platforms, it falls back to nss lookups, if the home -// directory cannot be obtained from environment-variables. -// -// If linking statically with cgo enabled against glibc, ensure the -// osusergo build tag is used. -// -// If needing to do nss lookups, do not disable cgo or set osusergo. -// -// getHomeDir is a copy of [pkg/homedir.Get] to prevent adding docker/docker -// as dependency for consumers that only need to read the config-file. -// -// [pkg/homedir.Get]: https://pkg.go.dev/github.com/docker/docker@v26.1.4+incompatible/pkg/homedir#Get -func getHomeDir() string { - home, _ := os.UserHomeDir() - if home == "" && runtime.GOOS != "windows" { - if u, err := user.Current(); err == nil { - return u.HomeDir - } - } - return home -} - -// Dir returns the directory the configuration file is stored in -func Dir() string { - initConfigDir.Do(func() { - configDir = os.Getenv(EnvOverrideConfigDir) - if configDir == "" { - configDir = filepath.Join(getHomeDir(), configFileDir) - } - }) - return configDir -} - -// ContextStoreDir returns the directory the docker contexts are stored in -func ContextStoreDir() string { - return filepath.Join(Dir(), contextsDir) -} - -// SetDir sets the directory the configuration file is stored in -func SetDir(dir string) { - // trigger the sync.Once to synchronise with Dir() - initConfigDir.Do(func() {}) - configDir = filepath.Clean(dir) -} - -// Path returns the path to a file relative to the config dir -func Path(p ...string) (string, error) { - path := filepath.Join(append([]string{Dir()}, p...)...) - if !strings.HasPrefix(path, Dir()+string(filepath.Separator)) { - return "", errors.Errorf("path %q is outside of root config directory %q", path, Dir()) - } - return path, nil -} - -// LoadFromReader is a convenience function that creates a ConfigFile object from -// a reader. It returns an error if configData is malformed. -func LoadFromReader(configData io.Reader) (*configfile.ConfigFile, error) { - configFile := configfile.ConfigFile{ - AuthConfigs: make(map[string]types.AuthConfig), - } - err := configFile.LoadFromReader(configData) - return &configFile, err -} - -// Load reads the configuration file ([ConfigFileName]) from the given directory. -// If no directory is given, it uses the default [Dir]. A [*configfile.ConfigFile] -// is returned containing the contents of the configuration file, or a default -// struct if no configfile exists in the given location. -// -// Load returns an error if a configuration file exists in the given location, -// but cannot be read, or is malformed. Consumers must handle errors to prevent -// overwriting an existing configuration file. -func Load(configDir string) (*configfile.ConfigFile, error) { - if configDir == "" { - configDir = Dir() - } - return load(configDir) -} - -func load(configDir string) (*configfile.ConfigFile, error) { - filename := filepath.Join(configDir, ConfigFileName) - configFile := configfile.New(filename) - - file, err := os.Open(filename) - if err != nil { - if os.IsNotExist(err) { - // It is OK for no configuration file to be present, in which - // case we return a default struct. - return configFile, nil - } - // Any other error happening when failing to read the file must be returned. - return configFile, errors.Wrap(err, "loading config file") - } - defer file.Close() - err = configFile.LoadFromReader(file) - if err != nil { - err = errors.Wrapf(err, "loading config file: %s: ", filename) - } - return configFile, err -} - -// LoadDefaultConfigFile attempts to load the default config file and returns -// a reference to the ConfigFile struct. If none is found or when failing to load -// the configuration file, it initializes a default ConfigFile struct. If no -// credentials-store is set in the configuration file, it attempts to discover -// the default store to use for the current platform. -// -// Important: LoadDefaultConfigFile prints a warning to stderr when failing to -// load the configuration file, but otherwise ignores errors. Consumers should -// consider using [Load] (and [credentials.DetectDefaultStore]) to detect errors -// when updating the configuration file, to prevent discarding a (malformed) -// configuration file. -func LoadDefaultConfigFile(stderr io.Writer) *configfile.ConfigFile { - configFile, err := load(Dir()) - if err != nil { - // FIXME(thaJeztah): we should not proceed here to prevent overwriting existing (but malformed) config files; see https://github.com/docker/cli/issues/5075 - _, _ = fmt.Fprintln(stderr, "WARNING: Error", err) - } - if !configFile.ContainsAuth() { - configFile.CredentialsStore = credentials.DetectDefaultStore(configFile.CredentialsStore) - } - return configFile -} diff --git a/vendor/github.com/docker/cli/cli/config/configfile/file.go b/vendor/github.com/docker/cli/cli/config/configfile/file.go deleted file mode 100644 index ae9dcb33..00000000 --- a/vendor/github.com/docker/cli/cli/config/configfile/file.go +++ /dev/null @@ -1,354 +0,0 @@ -package configfile - -import ( - "encoding/base64" - "encoding/json" - "io" - "os" - "path/filepath" - "strings" - - "github.com/docker/cli/cli/config/credentials" - "github.com/docker/cli/cli/config/types" - "github.com/pkg/errors" - "github.com/sirupsen/logrus" -) - -// ConfigFile ~/.docker/config.json file info -type ConfigFile struct { - AuthConfigs map[string]types.AuthConfig `json:"auths"` - HTTPHeaders map[string]string `json:"HttpHeaders,omitempty"` - PsFormat string `json:"psFormat,omitempty"` - ImagesFormat string `json:"imagesFormat,omitempty"` - NetworksFormat string `json:"networksFormat,omitempty"` - PluginsFormat string `json:"pluginsFormat,omitempty"` - VolumesFormat string `json:"volumesFormat,omitempty"` - StatsFormat string `json:"statsFormat,omitempty"` - DetachKeys string `json:"detachKeys,omitempty"` - CredentialsStore string `json:"credsStore,omitempty"` - CredentialHelpers map[string]string `json:"credHelpers,omitempty"` - Filename string `json:"-"` // Note: for internal use only - ServiceInspectFormat string `json:"serviceInspectFormat,omitempty"` - ServicesFormat string `json:"servicesFormat,omitempty"` - TasksFormat string `json:"tasksFormat,omitempty"` - SecretFormat string `json:"secretFormat,omitempty"` - ConfigFormat string `json:"configFormat,omitempty"` - NodesFormat string `json:"nodesFormat,omitempty"` - PruneFilters []string `json:"pruneFilters,omitempty"` - Proxies map[string]ProxyConfig `json:"proxies,omitempty"` - Experimental string `json:"experimental,omitempty"` - CurrentContext string `json:"currentContext,omitempty"` - CLIPluginsExtraDirs []string `json:"cliPluginsExtraDirs,omitempty"` - Plugins map[string]map[string]string `json:"plugins,omitempty"` - Aliases map[string]string `json:"aliases,omitempty"` - Features map[string]string `json:"features,omitempty"` -} - -// ProxyConfig contains proxy configuration settings -type ProxyConfig struct { - HTTPProxy string `json:"httpProxy,omitempty"` - HTTPSProxy string `json:"httpsProxy,omitempty"` - NoProxy string `json:"noProxy,omitempty"` - FTPProxy string `json:"ftpProxy,omitempty"` - AllProxy string `json:"allProxy,omitempty"` -} - -// New initializes an empty configuration file for the given filename 'fn' -func New(fn string) *ConfigFile { - return &ConfigFile{ - AuthConfigs: make(map[string]types.AuthConfig), - HTTPHeaders: make(map[string]string), - Filename: fn, - Plugins: make(map[string]map[string]string), - Aliases: make(map[string]string), - } -} - -// LoadFromReader reads the configuration data given and sets up the auth config -// information with given directory and populates the receiver object -func (configFile *ConfigFile) LoadFromReader(configData io.Reader) error { - if err := json.NewDecoder(configData).Decode(configFile); err != nil && !errors.Is(err, io.EOF) { - return err - } - var err error - for addr, ac := range configFile.AuthConfigs { - if ac.Auth != "" { - ac.Username, ac.Password, err = decodeAuth(ac.Auth) - if err != nil { - return err - } - } - ac.Auth = "" - ac.ServerAddress = addr - configFile.AuthConfigs[addr] = ac - } - return nil -} - -// ContainsAuth returns whether there is authentication configured -// in this file or not. -func (configFile *ConfigFile) ContainsAuth() bool { - return configFile.CredentialsStore != "" || - len(configFile.CredentialHelpers) > 0 || - len(configFile.AuthConfigs) > 0 -} - -// GetAuthConfigs returns the mapping of repo to auth configuration -func (configFile *ConfigFile) GetAuthConfigs() map[string]types.AuthConfig { - if configFile.AuthConfigs == nil { - configFile.AuthConfigs = make(map[string]types.AuthConfig) - } - return configFile.AuthConfigs -} - -// SaveToWriter encodes and writes out all the authorization information to -// the given writer -func (configFile *ConfigFile) SaveToWriter(writer io.Writer) error { - // Encode sensitive data into a new/temp struct - tmpAuthConfigs := make(map[string]types.AuthConfig, len(configFile.AuthConfigs)) - for k, authConfig := range configFile.AuthConfigs { - authCopy := authConfig - // encode and save the authstring, while blanking out the original fields - authCopy.Auth = encodeAuth(&authCopy) - authCopy.Username = "" - authCopy.Password = "" - authCopy.ServerAddress = "" - tmpAuthConfigs[k] = authCopy - } - - saveAuthConfigs := configFile.AuthConfigs - configFile.AuthConfigs = tmpAuthConfigs - defer func() { configFile.AuthConfigs = saveAuthConfigs }() - - // User-Agent header is automatically set, and should not be stored in the configuration - for v := range configFile.HTTPHeaders { - if strings.EqualFold(v, "User-Agent") { - delete(configFile.HTTPHeaders, v) - } - } - - data, err := json.MarshalIndent(configFile, "", "\t") - if err != nil { - return err - } - _, err = writer.Write(data) - return err -} - -// Save encodes and writes out all the authorization information -func (configFile *ConfigFile) Save() (retErr error) { - if configFile.Filename == "" { - return errors.Errorf("Can't save config with empty filename") - } - - dir := filepath.Dir(configFile.Filename) - if err := os.MkdirAll(dir, 0o700); err != nil { - return err - } - temp, err := os.CreateTemp(dir, filepath.Base(configFile.Filename)) - if err != nil { - return err - } - defer func() { - temp.Close() - if retErr != nil { - if err := os.Remove(temp.Name()); err != nil { - logrus.WithError(err).WithField("file", temp.Name()).Debug("Error cleaning up temp file") - } - } - }() - - err = configFile.SaveToWriter(temp) - if err != nil { - return err - } - - if err := temp.Close(); err != nil { - return errors.Wrap(err, "error closing temp file") - } - - // Handle situation where the configfile is a symlink - cfgFile := configFile.Filename - if f, err := os.Readlink(cfgFile); err == nil { - cfgFile = f - } - - // Try copying the current config file (if any) ownership and permissions - copyFilePermissions(cfgFile, temp.Name()) - return os.Rename(temp.Name(), cfgFile) -} - -// ParseProxyConfig computes proxy configuration by retrieving the config for the provided host and -// then checking this against any environment variables provided to the container -func (configFile *ConfigFile) ParseProxyConfig(host string, runOpts map[string]*string) map[string]*string { - var cfgKey string - - if _, ok := configFile.Proxies[host]; !ok { - cfgKey = "default" - } else { - cfgKey = host - } - - config := configFile.Proxies[cfgKey] - permitted := map[string]*string{ - "HTTP_PROXY": &config.HTTPProxy, - "HTTPS_PROXY": &config.HTTPSProxy, - "NO_PROXY": &config.NoProxy, - "FTP_PROXY": &config.FTPProxy, - "ALL_PROXY": &config.AllProxy, - } - m := runOpts - if m == nil { - m = make(map[string]*string) - } - for k := range permitted { - if *permitted[k] == "" { - continue - } - if _, ok := m[k]; !ok { - m[k] = permitted[k] - } - if _, ok := m[strings.ToLower(k)]; !ok { - m[strings.ToLower(k)] = permitted[k] - } - } - return m -} - -// encodeAuth creates a base64 encoded string to containing authorization information -func encodeAuth(authConfig *types.AuthConfig) string { - if authConfig.Username == "" && authConfig.Password == "" { - return "" - } - - authStr := authConfig.Username + ":" + authConfig.Password - msg := []byte(authStr) - encoded := make([]byte, base64.StdEncoding.EncodedLen(len(msg))) - base64.StdEncoding.Encode(encoded, msg) - return string(encoded) -} - -// decodeAuth decodes a base64 encoded string and returns username and password -func decodeAuth(authStr string) (string, string, error) { - if authStr == "" { - return "", "", nil - } - - decLen := base64.StdEncoding.DecodedLen(len(authStr)) - decoded := make([]byte, decLen) - authByte := []byte(authStr) - n, err := base64.StdEncoding.Decode(decoded, authByte) - if err != nil { - return "", "", err - } - if n > decLen { - return "", "", errors.Errorf("Something went wrong decoding auth config") - } - userName, password, ok := strings.Cut(string(decoded), ":") - if !ok || userName == "" { - return "", "", errors.Errorf("Invalid auth configuration file") - } - return userName, strings.Trim(password, "\x00"), nil -} - -// GetCredentialsStore returns a new credentials store from the settings in the -// configuration file -func (configFile *ConfigFile) GetCredentialsStore(registryHostname string) credentials.Store { - if helper := getConfiguredCredentialStore(configFile, registryHostname); helper != "" { - return newNativeStore(configFile, helper) - } - return credentials.NewFileStore(configFile) -} - -// var for unit testing. -var newNativeStore = func(configFile *ConfigFile, helperSuffix string) credentials.Store { - return credentials.NewNativeStore(configFile, helperSuffix) -} - -// GetAuthConfig for a repository from the credential store -func (configFile *ConfigFile) GetAuthConfig(registryHostname string) (types.AuthConfig, error) { - return configFile.GetCredentialsStore(registryHostname).Get(registryHostname) -} - -// getConfiguredCredentialStore returns the credential helper configured for the -// given registry, the default credsStore, or the empty string if neither are -// configured. -func getConfiguredCredentialStore(c *ConfigFile, registryHostname string) string { - if c.CredentialHelpers != nil && registryHostname != "" { - if helper, exists := c.CredentialHelpers[registryHostname]; exists { - return helper - } - } - return c.CredentialsStore -} - -// GetAllCredentials returns all of the credentials stored in all of the -// configured credential stores. -func (configFile *ConfigFile) GetAllCredentials() (map[string]types.AuthConfig, error) { - auths := make(map[string]types.AuthConfig) - addAll := func(from map[string]types.AuthConfig) { - for reg, ac := range from { - auths[reg] = ac - } - } - - defaultStore := configFile.GetCredentialsStore("") - newAuths, err := defaultStore.GetAll() - if err != nil { - return nil, err - } - addAll(newAuths) - - // Auth configs from a registry-specific helper should override those from the default store. - for registryHostname := range configFile.CredentialHelpers { - newAuth, err := configFile.GetAuthConfig(registryHostname) - if err != nil { - // TODO(thaJeztah): use context-logger, so that this output can be suppressed (in tests). - logrus.WithError(err).Warnf("Failed to get credentials for registry: %s", registryHostname) - continue - } - auths[registryHostname] = newAuth - } - return auths, nil -} - -// GetFilename returns the file name that this config file is based on. -func (configFile *ConfigFile) GetFilename() string { - return configFile.Filename -} - -// PluginConfig retrieves the requested option for the given plugin. -func (configFile *ConfigFile) PluginConfig(pluginname, option string) (string, bool) { - if configFile.Plugins == nil { - return "", false - } - pluginConfig, ok := configFile.Plugins[pluginname] - if !ok { - return "", false - } - value, ok := pluginConfig[option] - return value, ok -} - -// SetPluginConfig sets the option to the given value for the given -// plugin. Passing a value of "" will remove the option. If removing -// the final config item for a given plugin then also cleans up the -// overall plugin entry. -func (configFile *ConfigFile) SetPluginConfig(pluginname, option, value string) { - if configFile.Plugins == nil { - configFile.Plugins = make(map[string]map[string]string) - } - pluginConfig, ok := configFile.Plugins[pluginname] - if !ok { - pluginConfig = make(map[string]string) - configFile.Plugins[pluginname] = pluginConfig - } - if value != "" { - pluginConfig[option] = value - } else { - delete(pluginConfig, option) - } - if len(pluginConfig) == 0 { - delete(configFile.Plugins, pluginname) - } -} diff --git a/vendor/github.com/docker/cli/cli/config/configfile/file_unix.go b/vendor/github.com/docker/cli/cli/config/configfile/file_unix.go deleted file mode 100644 index 06b811e7..00000000 --- a/vendor/github.com/docker/cli/cli/config/configfile/file_unix.go +++ /dev/null @@ -1,35 +0,0 @@ -//go:build !windows - -package configfile - -import ( - "os" - "syscall" -) - -// copyFilePermissions copies file ownership and permissions from "src" to "dst", -// ignoring any error during the process. -func copyFilePermissions(src, dst string) { - var ( - mode os.FileMode = 0o600 - uid, gid int - ) - - fi, err := os.Stat(src) - if err != nil { - return - } - if fi.Mode().IsRegular() { - mode = fi.Mode() - } - if err := os.Chmod(dst, mode); err != nil { - return - } - - uid = int(fi.Sys().(*syscall.Stat_t).Uid) - gid = int(fi.Sys().(*syscall.Stat_t).Gid) - - if uid > 0 && gid > 0 { - _ = os.Chown(dst, uid, gid) - } -} diff --git a/vendor/github.com/docker/cli/cli/config/configfile/file_windows.go b/vendor/github.com/docker/cli/cli/config/configfile/file_windows.go deleted file mode 100644 index 42fffc39..00000000 --- a/vendor/github.com/docker/cli/cli/config/configfile/file_windows.go +++ /dev/null @@ -1,5 +0,0 @@ -package configfile - -func copyFilePermissions(src, dst string) { - // TODO implement for Windows -} diff --git a/vendor/github.com/docker/cli/cli/config/credentials/credentials.go b/vendor/github.com/docker/cli/cli/config/credentials/credentials.go deleted file mode 100644 index 28d58ec4..00000000 --- a/vendor/github.com/docker/cli/cli/config/credentials/credentials.go +++ /dev/null @@ -1,17 +0,0 @@ -package credentials - -import ( - "github.com/docker/cli/cli/config/types" -) - -// Store is the interface that any credentials store must implement. -type Store interface { - // Erase removes credentials from the store for a given server. - Erase(serverAddress string) error - // Get retrieves credentials from the store for a given server. - Get(serverAddress string) (types.AuthConfig, error) - // GetAll retrieves all the credentials from the store. - GetAll() (map[string]types.AuthConfig, error) - // Store saves credentials in the store. - Store(authConfig types.AuthConfig) error -} diff --git a/vendor/github.com/docker/cli/cli/config/credentials/default_store.go b/vendor/github.com/docker/cli/cli/config/credentials/default_store.go deleted file mode 100644 index a36afc41..00000000 --- a/vendor/github.com/docker/cli/cli/config/credentials/default_store.go +++ /dev/null @@ -1,22 +0,0 @@ -package credentials - -import "os/exec" - -// DetectDefaultStore return the default credentials store for the platform if -// no user-defined store is passed, and the store executable is available. -func DetectDefaultStore(store string) string { - if store != "" { - // use user-defined - return store - } - - platformDefault := defaultCredentialsStore() - if platformDefault == "" { - return "" - } - - if _, err := exec.LookPath(remoteCredentialsPrefix + platformDefault); err != nil { - return "" - } - return platformDefault -} diff --git a/vendor/github.com/docker/cli/cli/config/credentials/default_store_darwin.go b/vendor/github.com/docker/cli/cli/config/credentials/default_store_darwin.go deleted file mode 100644 index 5d42dec6..00000000 --- a/vendor/github.com/docker/cli/cli/config/credentials/default_store_darwin.go +++ /dev/null @@ -1,5 +0,0 @@ -package credentials - -func defaultCredentialsStore() string { - return "osxkeychain" -} diff --git a/vendor/github.com/docker/cli/cli/config/credentials/default_store_linux.go b/vendor/github.com/docker/cli/cli/config/credentials/default_store_linux.go deleted file mode 100644 index a9012c6d..00000000 --- a/vendor/github.com/docker/cli/cli/config/credentials/default_store_linux.go +++ /dev/null @@ -1,13 +0,0 @@ -package credentials - -import ( - "os/exec" -) - -func defaultCredentialsStore() string { - if _, err := exec.LookPath("pass"); err == nil { - return "pass" - } - - return "secretservice" -} diff --git a/vendor/github.com/docker/cli/cli/config/credentials/default_store_unsupported.go b/vendor/github.com/docker/cli/cli/config/credentials/default_store_unsupported.go deleted file mode 100644 index 40c16eb8..00000000 --- a/vendor/github.com/docker/cli/cli/config/credentials/default_store_unsupported.go +++ /dev/null @@ -1,7 +0,0 @@ -//go:build !windows && !darwin && !linux - -package credentials - -func defaultCredentialsStore() string { - return "" -} diff --git a/vendor/github.com/docker/cli/cli/config/credentials/default_store_windows.go b/vendor/github.com/docker/cli/cli/config/credentials/default_store_windows.go deleted file mode 100644 index bb799ca6..00000000 --- a/vendor/github.com/docker/cli/cli/config/credentials/default_store_windows.go +++ /dev/null @@ -1,5 +0,0 @@ -package credentials - -func defaultCredentialsStore() string { - return "wincred" -} diff --git a/vendor/github.com/docker/cli/cli/config/credentials/file_store.go b/vendor/github.com/docker/cli/cli/config/credentials/file_store.go deleted file mode 100644 index 3b895599..00000000 --- a/vendor/github.com/docker/cli/cli/config/credentials/file_store.go +++ /dev/null @@ -1,86 +0,0 @@ -package credentials - -import ( - "net" - "net/url" - "strings" - - "github.com/docker/cli/cli/config/types" -) - -type store interface { - Save() error - GetAuthConfigs() map[string]types.AuthConfig - GetFilename() string -} - -// fileStore implements a credentials store using -// the docker configuration file to keep the credentials in plain text. -type fileStore struct { - file store -} - -// NewFileStore creates a new file credentials store. -func NewFileStore(file store) Store { - return &fileStore{file: file} -} - -// Erase removes the given credentials from the file store. -func (c *fileStore) Erase(serverAddress string) error { - delete(c.file.GetAuthConfigs(), serverAddress) - return c.file.Save() -} - -// Get retrieves credentials for a specific server from the file store. -func (c *fileStore) Get(serverAddress string) (types.AuthConfig, error) { - authConfig, ok := c.file.GetAuthConfigs()[serverAddress] - if !ok { - // Maybe they have a legacy config file, we will iterate the keys converting - // them to the new format and testing - for r, ac := range c.file.GetAuthConfigs() { - if serverAddress == ConvertToHostname(r) { - return ac, nil - } - } - - authConfig = types.AuthConfig{} - } - return authConfig, nil -} - -func (c *fileStore) GetAll() (map[string]types.AuthConfig, error) { - return c.file.GetAuthConfigs(), nil -} - -// Store saves the given credentials in the file store. -func (c *fileStore) Store(authConfig types.AuthConfig) error { - authConfigs := c.file.GetAuthConfigs() - authConfigs[authConfig.ServerAddress] = authConfig - return c.file.Save() -} - -func (c *fileStore) GetFilename() string { - return c.file.GetFilename() -} - -func (c *fileStore) IsFileStore() bool { - return true -} - -// ConvertToHostname converts a registry url which has http|https prepended -// to just an hostname. -// Copied from github.com/docker/docker/registry.ConvertToHostname to reduce dependencies. -func ConvertToHostname(maybeURL string) string { - stripped := maybeURL - if strings.Contains(stripped, "://") { - u, err := url.Parse(stripped) - if err == nil && u.Hostname() != "" { - if u.Port() == "" { - return u.Hostname() - } - return net.JoinHostPort(u.Hostname(), u.Port()) - } - } - hostName, _, _ := strings.Cut(stripped, "/") - return hostName -} diff --git a/vendor/github.com/docker/cli/cli/config/credentials/native_store.go b/vendor/github.com/docker/cli/cli/config/credentials/native_store.go deleted file mode 100644 index b9af145b..00000000 --- a/vendor/github.com/docker/cli/cli/config/credentials/native_store.go +++ /dev/null @@ -1,147 +0,0 @@ -package credentials - -import ( - "github.com/docker/cli/cli/config/types" - "github.com/docker/docker-credential-helpers/client" - "github.com/docker/docker-credential-helpers/credentials" -) - -const ( - remoteCredentialsPrefix = "docker-credential-" //nolint:gosec // ignore G101: Potential hardcoded credentials - tokenUsername = "" -) - -// nativeStore implements a credentials store -// using native keychain to keep credentials secure. -// It piggybacks into a file store to keep users' emails. -type nativeStore struct { - programFunc client.ProgramFunc - fileStore Store -} - -// NewNativeStore creates a new native store that -// uses a remote helper program to manage credentials. -func NewNativeStore(file store, helperSuffix string) Store { - name := remoteCredentialsPrefix + helperSuffix - return &nativeStore{ - programFunc: client.NewShellProgramFunc(name), - fileStore: NewFileStore(file), - } -} - -// Erase removes the given credentials from the native store. -func (c *nativeStore) Erase(serverAddress string) error { - if err := client.Erase(c.programFunc, serverAddress); err != nil { - return err - } - - // Fallback to plain text store to remove email - return c.fileStore.Erase(serverAddress) -} - -// Get retrieves credentials for a specific server from the native store. -func (c *nativeStore) Get(serverAddress string) (types.AuthConfig, error) { - // load user email if it exist or an empty auth config. - auth, _ := c.fileStore.Get(serverAddress) - - creds, err := c.getCredentialsFromStore(serverAddress) - if err != nil { - return auth, err - } - auth.Username = creds.Username - auth.IdentityToken = creds.IdentityToken - auth.Password = creds.Password - auth.ServerAddress = creds.ServerAddress - - return auth, nil -} - -// GetAll retrieves all the credentials from the native store. -func (c *nativeStore) GetAll() (map[string]types.AuthConfig, error) { - auths, err := c.listCredentialsInStore() - if err != nil { - return nil, err - } - - // Emails are only stored in the file store. - // This call can be safely eliminated when emails are removed. - fileConfigs, _ := c.fileStore.GetAll() - - authConfigs := make(map[string]types.AuthConfig) - for registry := range auths { - creds, err := c.getCredentialsFromStore(registry) - if err != nil { - return nil, err - } - ac := fileConfigs[registry] // might contain Email - ac.Username = creds.Username - ac.Password = creds.Password - ac.IdentityToken = creds.IdentityToken - if ac.ServerAddress == "" { - ac.ServerAddress = creds.ServerAddress - } - authConfigs[registry] = ac - } - - return authConfigs, nil -} - -// Store saves the given credentials in the file store. -func (c *nativeStore) Store(authConfig types.AuthConfig) error { - if err := c.storeCredentialsInStore(authConfig); err != nil { - return err - } - authConfig.Username = "" - authConfig.Password = "" - authConfig.IdentityToken = "" - - // Fallback to old credential in plain text to save only the email - return c.fileStore.Store(authConfig) -} - -// storeCredentialsInStore executes the command to store the credentials in the native store. -func (c *nativeStore) storeCredentialsInStore(config types.AuthConfig) error { - creds := &credentials.Credentials{ - ServerURL: config.ServerAddress, - Username: config.Username, - Secret: config.Password, - } - - if config.IdentityToken != "" { - creds.Username = tokenUsername - creds.Secret = config.IdentityToken - } - - return client.Store(c.programFunc, creds) -} - -// getCredentialsFromStore executes the command to get the credentials from the native store. -func (c *nativeStore) getCredentialsFromStore(serverAddress string) (types.AuthConfig, error) { - var ret types.AuthConfig - - creds, err := client.Get(c.programFunc, serverAddress) - if err != nil { - if credentials.IsErrCredentialsNotFound(err) { - // do not return an error if the credentials are not - // in the keychain. Let docker ask for new credentials. - return ret, nil - } - return ret, err - } - - if creds.Username == tokenUsername { - ret.IdentityToken = creds.Secret - } else { - ret.Password = creds.Secret - ret.Username = creds.Username - } - - ret.ServerAddress = serverAddress - return ret, nil -} - -// listCredentialsInStore returns a listing of stored credentials as a map of -// URL -> username. -func (c *nativeStore) listCredentialsInStore() (map[string]string, error) { - return client.List(c.programFunc) -} diff --git a/vendor/github.com/docker/cli/cli/config/types/authconfig.go b/vendor/github.com/docker/cli/cli/config/types/authconfig.go deleted file mode 100644 index 056af6b8..00000000 --- a/vendor/github.com/docker/cli/cli/config/types/authconfig.go +++ /dev/null @@ -1,22 +0,0 @@ -package types - -// AuthConfig contains authorization information for connecting to a Registry -type AuthConfig struct { - Username string `json:"username,omitempty"` - Password string `json:"password,omitempty"` - Auth string `json:"auth,omitempty"` - - // Email is an optional value associated with the username. - // This field is deprecated and will be removed in a later - // version of docker. - Email string `json:"email,omitempty"` - - ServerAddress string `json:"serveraddress,omitempty"` - - // IdentityToken is used to authenticate the user and get - // an access token for the registry. - IdentityToken string `json:"identitytoken,omitempty"` - - // RegistryToken is a bearer token to be sent to a registry - RegistryToken string `json:"registrytoken,omitempty"` -} diff --git a/vendor/github.com/docker/cli/cli/connhelper/commandconn/commandconn.go b/vendor/github.com/docker/cli/cli/connhelper/commandconn/commandconn.go deleted file mode 100644 index cfc2b86a..00000000 --- a/vendor/github.com/docker/cli/cli/connhelper/commandconn/commandconn.go +++ /dev/null @@ -1,289 +0,0 @@ -// Package commandconn provides a net.Conn implementation that can be used for -// proxying (or emulating) stream via a custom command. -// -// For example, to provide an http.Client that can connect to a Docker daemon -// running in a Docker container ("DIND"): -// -// httpClient := &http.Client{ -// Transport: &http.Transport{ -// DialContext: func(ctx context.Context, _network, _addr string) (net.Conn, error) { -// return commandconn.New(ctx, "docker", "exec", "-it", containerID, "docker", "system", "dial-stdio") -// }, -// }, -// } -package commandconn - -import ( - "bytes" - "context" - "fmt" - "io" - "net" - "os" - "os/exec" - "runtime" - "strings" - "sync" - "sync/atomic" - "syscall" - "time" - - "github.com/pkg/errors" - "github.com/sirupsen/logrus" -) - -// New returns net.Conn -func New(_ context.Context, cmd string, args ...string) (net.Conn, error) { - var ( - c commandConn - err error - ) - c.cmd = exec.Command(cmd, args...) - // we assume that args never contains sensitive information - logrus.Debugf("commandconn: starting %s with %v", cmd, args) - c.cmd.Env = os.Environ() - c.cmd.SysProcAttr = &syscall.SysProcAttr{} - setPdeathsig(c.cmd) - createSession(c.cmd) - c.stdin, err = c.cmd.StdinPipe() - if err != nil { - return nil, err - } - c.stdout, err = c.cmd.StdoutPipe() - if err != nil { - return nil, err - } - c.cmd.Stderr = &stderrWriter{ - stderrMu: &c.stderrMu, - stderr: &c.stderr, - debugPrefix: fmt.Sprintf("commandconn (%s):", cmd), - } - c.localAddr = dummyAddr{network: "dummy", s: "dummy-0"} - c.remoteAddr = dummyAddr{network: "dummy", s: "dummy-1"} - return &c, c.cmd.Start() -} - -// commandConn implements net.Conn -type commandConn struct { - cmdMutex sync.Mutex // for cmd, cmdWaitErr - cmd *exec.Cmd - cmdWaitErr error - cmdExited atomic.Bool - stdin io.WriteCloser - stdout io.ReadCloser - stderrMu sync.Mutex // for stderr - stderr bytes.Buffer - stdinClosed atomic.Bool - stdoutClosed atomic.Bool - closing atomic.Bool - localAddr net.Addr - remoteAddr net.Addr -} - -// kill terminates the process. On Windows it kills the process directly, -// whereas on other platforms, a SIGTERM is sent, before forcefully terminating -// the process after 3 seconds. -func (c *commandConn) kill() { - if c.cmdExited.Load() { - return - } - c.cmdMutex.Lock() - var werr error - if runtime.GOOS != "windows" { - werrCh := make(chan error) - go func() { werrCh <- c.cmd.Wait() }() - _ = c.cmd.Process.Signal(syscall.SIGTERM) - select { - case werr = <-werrCh: - case <-time.After(3 * time.Second): - _ = c.cmd.Process.Kill() - werr = <-werrCh - } - } else { - _ = c.cmd.Process.Kill() - werr = c.cmd.Wait() - } - c.cmdWaitErr = werr - c.cmdMutex.Unlock() - c.cmdExited.Store(true) -} - -// handleEOF handles io.EOF errors while reading or writing from the underlying -// command pipes. -// -// When we've received an EOF we expect that the command will -// be terminated soon. As such, we call Wait() on the command -// and return EOF or the error depending on whether the command -// exited with an error. -// -// If Wait() does not return within 10s, an error is returned -func (c *commandConn) handleEOF(err error) error { - if err != io.EOF { - return err - } - - c.cmdMutex.Lock() - defer c.cmdMutex.Unlock() - - var werr error - if c.cmdExited.Load() { - werr = c.cmdWaitErr - } else { - werrCh := make(chan error) - go func() { werrCh <- c.cmd.Wait() }() - select { - case werr = <-werrCh: - c.cmdWaitErr = werr - c.cmdExited.Store(true) - case <-time.After(10 * time.Second): - c.stderrMu.Lock() - stderr := c.stderr.String() - c.stderrMu.Unlock() - return errors.Errorf("command %v did not exit after %v: stderr=%q", c.cmd.Args, err, stderr) - } - } - - if werr == nil { - return err - } - c.stderrMu.Lock() - stderr := c.stderr.String() - c.stderrMu.Unlock() - return errors.Errorf("command %v has exited with %v, make sure the URL is valid, and Docker 18.09 or later is installed on the remote host: stderr=%s", c.cmd.Args, werr, stderr) -} - -func ignorableCloseError(err error) bool { - return strings.Contains(err.Error(), os.ErrClosed.Error()) -} - -func (c *commandConn) Read(p []byte) (int, error) { - n, err := c.stdout.Read(p) - // check after the call to Read, since - // it is blocking, and while waiting on it - // Close might get called - if c.closing.Load() { - // If we're currently closing the connection - // we don't want to call onEOF - return n, err - } - - return n, c.handleEOF(err) -} - -func (c *commandConn) Write(p []byte) (int, error) { - n, err := c.stdin.Write(p) - // check after the call to Write, since - // it is blocking, and while waiting on it - // Close might get called - if c.closing.Load() { - // If we're currently closing the connection - // we don't want to call onEOF - return n, err - } - - return n, c.handleEOF(err) -} - -// CloseRead allows commandConn to implement halfCloser -func (c *commandConn) CloseRead() error { - // NOTE: maybe already closed here - if err := c.stdout.Close(); err != nil && !ignorableCloseError(err) { - return err - } - c.stdoutClosed.Store(true) - - if c.stdinClosed.Load() { - c.kill() - } - - return nil -} - -// CloseWrite allows commandConn to implement halfCloser -func (c *commandConn) CloseWrite() error { - // NOTE: maybe already closed here - if err := c.stdin.Close(); err != nil && !ignorableCloseError(err) { - return err - } - c.stdinClosed.Store(true) - - if c.stdoutClosed.Load() { - c.kill() - } - return nil -} - -// Close is the net.Conn func that gets called -// by the transport when a dial is cancelled -// due to it's context timing out. Any blocked -// Read or Write calls will be unblocked and -// return errors. It will block until the underlying -// command has terminated. -func (c *commandConn) Close() error { - c.closing.Store(true) - defer c.closing.Store(false) - - if err := c.CloseRead(); err != nil { - logrus.Warnf("commandConn.Close: CloseRead: %v", err) - return err - } - if err := c.CloseWrite(); err != nil { - logrus.Warnf("commandConn.Close: CloseWrite: %v", err) - return err - } - - return nil -} - -func (c *commandConn) LocalAddr() net.Addr { - return c.localAddr -} - -func (c *commandConn) RemoteAddr() net.Addr { - return c.remoteAddr -} - -func (c *commandConn) SetDeadline(t time.Time) error { - logrus.Debugf("unimplemented call: SetDeadline(%v)", t) - return nil -} - -func (c *commandConn) SetReadDeadline(t time.Time) error { - logrus.Debugf("unimplemented call: SetReadDeadline(%v)", t) - return nil -} - -func (c *commandConn) SetWriteDeadline(t time.Time) error { - logrus.Debugf("unimplemented call: SetWriteDeadline(%v)", t) - return nil -} - -type dummyAddr struct { - network string - s string -} - -func (d dummyAddr) Network() string { - return d.network -} - -func (d dummyAddr) String() string { - return d.s -} - -type stderrWriter struct { - stderrMu *sync.Mutex - stderr *bytes.Buffer - debugPrefix string -} - -func (w *stderrWriter) Write(p []byte) (int, error) { - logrus.Debugf("%s%s", w.debugPrefix, string(p)) - w.stderrMu.Lock() - if w.stderr.Len() > 4096 { - w.stderr.Reset() - } - n, err := w.stderr.Write(p) - w.stderrMu.Unlock() - return n, err -} diff --git a/vendor/github.com/docker/cli/cli/connhelper/commandconn/pdeathsig_linux.go b/vendor/github.com/docker/cli/cli/connhelper/commandconn/pdeathsig_linux.go deleted file mode 100644 index 1cdd788c..00000000 --- a/vendor/github.com/docker/cli/cli/connhelper/commandconn/pdeathsig_linux.go +++ /dev/null @@ -1,10 +0,0 @@ -package commandconn - -import ( - "os/exec" - "syscall" -) - -func setPdeathsig(cmd *exec.Cmd) { - cmd.SysProcAttr.Pdeathsig = syscall.SIGKILL -} diff --git a/vendor/github.com/docker/cli/cli/connhelper/commandconn/pdeathsig_nolinux.go b/vendor/github.com/docker/cli/cli/connhelper/commandconn/pdeathsig_nolinux.go deleted file mode 100644 index 149349e9..00000000 --- a/vendor/github.com/docker/cli/cli/connhelper/commandconn/pdeathsig_nolinux.go +++ /dev/null @@ -1,9 +0,0 @@ -//go:build !linux - -package commandconn - -import ( - "os/exec" -) - -func setPdeathsig(*exec.Cmd) {} diff --git a/vendor/github.com/docker/cli/cli/connhelper/commandconn/session_unix.go b/vendor/github.com/docker/cli/cli/connhelper/commandconn/session_unix.go deleted file mode 100644 index 3d2cb277..00000000 --- a/vendor/github.com/docker/cli/cli/connhelper/commandconn/session_unix.go +++ /dev/null @@ -1,13 +0,0 @@ -//go:build !windows - -package commandconn - -import ( - "os/exec" -) - -func createSession(cmd *exec.Cmd) { - // for supporting ssh connection helper with ProxyCommand - // https://github.com/docker/cli/issues/1707 - cmd.SysProcAttr.Setsid = true -} diff --git a/vendor/github.com/docker/cli/cli/connhelper/commandconn/session_windows.go b/vendor/github.com/docker/cli/cli/connhelper/commandconn/session_windows.go deleted file mode 100644 index b9260745..00000000 --- a/vendor/github.com/docker/cli/cli/connhelper/commandconn/session_windows.go +++ /dev/null @@ -1,8 +0,0 @@ -package commandconn - -import ( - "os/exec" -) - -func createSession(cmd *exec.Cmd) { -} diff --git a/vendor/github.com/docker/cli/cli/connhelper/connhelper.go b/vendor/github.com/docker/cli/cli/connhelper/connhelper.go deleted file mode 100644 index 1797abae..00000000 --- a/vendor/github.com/docker/cli/cli/connhelper/connhelper.go +++ /dev/null @@ -1,81 +0,0 @@ -// Package connhelper provides helpers for connecting to a remote daemon host with custom logic. -package connhelper - -import ( - "context" - "net" - "net/url" - "strings" - - "github.com/docker/cli/cli/connhelper/commandconn" - "github.com/docker/cli/cli/connhelper/ssh" - "github.com/pkg/errors" -) - -// ConnectionHelper allows to connect to a remote host with custom stream provider binary. -type ConnectionHelper struct { - Dialer func(ctx context.Context, network, addr string) (net.Conn, error) - Host string // dummy URL used for HTTP requests. e.g. "http://docker" -} - -// GetConnectionHelper returns Docker-specific connection helper for the given URL. -// GetConnectionHelper returns nil without error when no helper is registered for the scheme. -// -// ssh://@ URL requires Docker 18.09 or later on the remote host. -func GetConnectionHelper(daemonURL string) (*ConnectionHelper, error) { - return getConnectionHelper(daemonURL, nil) -} - -// GetConnectionHelperWithSSHOpts returns Docker-specific connection helper for -// the given URL, and accepts additional options for ssh connections. It returns -// nil without error when no helper is registered for the scheme. -// -// Requires Docker 18.09 or later on the remote host. -func GetConnectionHelperWithSSHOpts(daemonURL string, sshFlags []string) (*ConnectionHelper, error) { - return getConnectionHelper(daemonURL, sshFlags) -} - -func getConnectionHelper(daemonURL string, sshFlags []string) (*ConnectionHelper, error) { - u, err := url.Parse(daemonURL) - if err != nil { - return nil, err - } - if u.Scheme == "ssh" { - sp, err := ssh.ParseURL(daemonURL) - if err != nil { - return nil, errors.Wrap(err, "ssh host connection is not valid") - } - return &ConnectionHelper{ - Dialer: func(ctx context.Context, network, addr string) (net.Conn, error) { - args := []string{"docker"} - if sp.Path != "" { - args = append(args, "--host", "unix://"+sp.Path) - } - sshFlags = addSSHTimeout(sshFlags) - args = append(args, "system", "dial-stdio") - return commandconn.New(ctx, "ssh", append(sshFlags, sp.Args(args...)...)...) - }, - Host: "http://docker.example.com", - }, nil - } - // Future version may support plugins via ~/.docker/config.json. e.g. "dind" - // See docker/cli#889 for the previous discussion. - return nil, err -} - -// GetCommandConnectionHelper returns Docker-specific connection helper constructed from an arbitrary command. -func GetCommandConnectionHelper(cmd string, flags ...string) (*ConnectionHelper, error) { - return &ConnectionHelper{ - Dialer: func(ctx context.Context, network, addr string) (net.Conn, error) { - return commandconn.New(ctx, cmd, flags...) - }, - Host: "http://docker.example.com", - }, nil -} - -func addSSHTimeout(sshFlags []string) []string { - if !strings.Contains(strings.Join(sshFlags, ""), "ConnectTimeout") { - sshFlags = append(sshFlags, "-o ConnectTimeout=30") - } - return sshFlags -} diff --git a/vendor/github.com/docker/cli/cli/connhelper/ssh/ssh.go b/vendor/github.com/docker/cli/cli/connhelper/ssh/ssh.go deleted file mode 100644 index fb4c9111..00000000 --- a/vendor/github.com/docker/cli/cli/connhelper/ssh/ssh.go +++ /dev/null @@ -1,63 +0,0 @@ -// Package ssh provides the connection helper for ssh:// URL. -package ssh - -import ( - "net/url" - - "github.com/pkg/errors" -) - -// ParseURL parses URL -func ParseURL(daemonURL string) (*Spec, error) { - u, err := url.Parse(daemonURL) - if err != nil { - return nil, err - } - if u.Scheme != "ssh" { - return nil, errors.Errorf("expected scheme ssh, got %q", u.Scheme) - } - - var sp Spec - - if u.User != nil { - sp.User = u.User.Username() - if _, ok := u.User.Password(); ok { - return nil, errors.New("plain-text password is not supported") - } - } - sp.Host = u.Hostname() - if sp.Host == "" { - return nil, errors.Errorf("no host specified") - } - sp.Port = u.Port() - sp.Path = u.Path - if u.RawQuery != "" { - return nil, errors.Errorf("extra query after the host: %q", u.RawQuery) - } - if u.Fragment != "" { - return nil, errors.Errorf("extra fragment after the host: %q", u.Fragment) - } - return &sp, err -} - -// Spec of SSH URL -type Spec struct { - User string - Host string - Port string - Path string -} - -// Args returns args except "ssh" itself combined with optional additional command args -func (sp *Spec) Args(add ...string) []string { - var args []string - if sp.User != "" { - args = append(args, "-l", sp.User) - } - if sp.Port != "" { - args = append(args, "-p", sp.Port) - } - args = append(args, "--", sp.Host) - args = append(args, add...) - return args -} diff --git a/vendor/github.com/docker/cli/cli/context/docker/constants.go b/vendor/github.com/docker/cli/cli/context/docker/constants.go deleted file mode 100644 index 1db5556d..00000000 --- a/vendor/github.com/docker/cli/cli/context/docker/constants.go +++ /dev/null @@ -1,6 +0,0 @@ -package docker - -const ( - // DockerEndpoint is the name of the docker endpoint in a stored context - DockerEndpoint = "docker" -) diff --git a/vendor/github.com/docker/cli/cli/context/docker/load.go b/vendor/github.com/docker/cli/cli/context/docker/load.go deleted file mode 100644 index 700b73c9..00000000 --- a/vendor/github.com/docker/cli/cli/context/docker/load.go +++ /dev/null @@ -1,149 +0,0 @@ -package docker - -import ( - "crypto/tls" - "crypto/x509" - "encoding/pem" - "net" - "net/http" - "time" - - "github.com/docker/cli/cli/connhelper" - "github.com/docker/cli/cli/context" - "github.com/docker/cli/cli/context/store" - "github.com/docker/docker/client" - "github.com/docker/go-connections/tlsconfig" - "github.com/pkg/errors" -) - -// EndpointMeta is a typed wrapper around a context-store generic endpoint describing -// a Docker Engine endpoint, without its tls config -type EndpointMeta = context.EndpointMetaBase - -// Endpoint is a typed wrapper around a context-store generic endpoint describing -// a Docker Engine endpoint, with its tls data -type Endpoint struct { - EndpointMeta - TLSData *context.TLSData -} - -// WithTLSData loads TLS materials for the endpoint -func WithTLSData(s store.Reader, contextName string, m EndpointMeta) (Endpoint, error) { - tlsData, err := context.LoadTLSData(s, contextName, DockerEndpoint) - if err != nil { - return Endpoint{}, err - } - return Endpoint{ - EndpointMeta: m, - TLSData: tlsData, - }, nil -} - -// tlsConfig extracts a context docker endpoint TLS config -func (ep *Endpoint) tlsConfig() (*tls.Config, error) { - if ep.TLSData == nil && !ep.SkipTLSVerify { - // there is no specific tls config - return nil, nil - } - var tlsOpts []func(*tls.Config) - if ep.TLSData != nil && ep.TLSData.CA != nil { - certPool := x509.NewCertPool() - if !certPool.AppendCertsFromPEM(ep.TLSData.CA) { - return nil, errors.New("failed to retrieve context tls info: ca.pem seems invalid") - } - tlsOpts = append(tlsOpts, func(cfg *tls.Config) { - cfg.RootCAs = certPool - }) - } - if ep.TLSData != nil && ep.TLSData.Key != nil && ep.TLSData.Cert != nil { - keyBytes := ep.TLSData.Key - pemBlock, _ := pem.Decode(keyBytes) - if pemBlock == nil { - return nil, errors.New("no valid private key found") - } - if x509.IsEncryptedPEMBlock(pemBlock) { //nolint:staticcheck // SA1019: x509.IsEncryptedPEMBlock is deprecated, and insecure by design - return nil, errors.New("private key is encrypted - support for encrypted private keys has been removed, see https://docs.docker.com/go/deprecated/") - } - - x509cert, err := tls.X509KeyPair(ep.TLSData.Cert, keyBytes) - if err != nil { - return nil, errors.Wrap(err, "failed to retrieve context tls info") - } - tlsOpts = append(tlsOpts, func(cfg *tls.Config) { - cfg.Certificates = []tls.Certificate{x509cert} - }) - } - if ep.SkipTLSVerify { - tlsOpts = append(tlsOpts, func(cfg *tls.Config) { - cfg.InsecureSkipVerify = true - }) - } - return tlsconfig.ClientDefault(tlsOpts...), nil -} - -// ClientOpts returns a slice of Client options to configure an API client with this endpoint -func (ep *Endpoint) ClientOpts() ([]client.Opt, error) { - var result []client.Opt - if ep.Host != "" { - helper, err := connhelper.GetConnectionHelper(ep.Host) - if err != nil { - return nil, err - } - if helper == nil { - tlsConfig, err := ep.tlsConfig() - if err != nil { - return nil, err - } - result = append(result, - withHTTPClient(tlsConfig), - client.WithHost(ep.Host), - ) - } else { - result = append(result, - client.WithHTTPClient(&http.Client{ - // No TLS, and no proxy. - Transport: &http.Transport{ - DialContext: helper.Dialer, - }, - }), - client.WithHost(helper.Host), - client.WithDialContext(helper.Dialer), - ) - } - } - - result = append(result, client.WithVersionFromEnv(), client.WithAPIVersionNegotiation()) - return result, nil -} - -func withHTTPClient(tlsConfig *tls.Config) func(*client.Client) error { - return func(c *client.Client) error { - if tlsConfig == nil { - // Use the default HTTPClient - return nil - } - return client.WithHTTPClient(&http.Client{ - Transport: &http.Transport{ - TLSClientConfig: tlsConfig, - DialContext: (&net.Dialer{ - KeepAlive: 30 * time.Second, - Timeout: 30 * time.Second, - }).DialContext, - }, - CheckRedirect: client.CheckRedirect, - })(c) - } -} - -// EndpointFromContext parses a context docker endpoint metadata into a typed EndpointMeta structure -func EndpointFromContext(metadata store.Metadata) (EndpointMeta, error) { - ep, ok := metadata.Endpoints[DockerEndpoint] - if !ok { - return EndpointMeta{}, errors.New("cannot find docker endpoint in context") - } - typed, ok := ep.(EndpointMeta) - if !ok { - return EndpointMeta{}, errors.Errorf("endpoint %q is not of type EndpointMeta", DockerEndpoint) - } - return typed, nil -} diff --git a/vendor/github.com/docker/cli/cli/context/endpoint.go b/vendor/github.com/docker/cli/cli/context/endpoint.go deleted file mode 100644 index f2735246..00000000 --- a/vendor/github.com/docker/cli/cli/context/endpoint.go +++ /dev/null @@ -1,7 +0,0 @@ -package context - -// EndpointMetaBase contains fields we expect to be common for most context endpoints -type EndpointMetaBase struct { - Host string `json:",omitempty"` - SkipTLSVerify bool -} diff --git a/vendor/github.com/docker/cli/cli/context/store/doc.go b/vendor/github.com/docker/cli/cli/context/store/doc.go deleted file mode 100644 index 705982ae..00000000 --- a/vendor/github.com/docker/cli/cli/context/store/doc.go +++ /dev/null @@ -1,32 +0,0 @@ -// Package store provides a generic way to store credentials to connect to -// virtually any kind of remote system. -// The term `context` comes from the similar feature in Kubernetes kubectl -// config files. -// -// Conceptually, a context is a set of metadata and TLS data, that can be used -// to connect to various endpoints of a remote system. TLS data and metadata -// are stored separately, so that in the future, we will be able to store -// sensitive information in a more secure way, depending on the os we are running -// on (e.g.: on Windows we could use the user Certificate Store, on macOS the -// user Keychain...). -// -// Current implementation is purely file based with the following structure: -// -// ${CONTEXT_ROOT} -// meta/ -// /meta.json: contains context medata (key/value pairs) as -// well as a list of endpoints (themselves containing -// key/value pair metadata). -// tls/ -// /endpoint1/: directory containing TLS data for the endpoint1 -// in the corresponding context. -// -// The context store itself has absolutely no knowledge about what a docker -// endpoint should contain in term of metadata or TLS config. Client code is -// responsible for generating and parsing endpoint metadata and TLS files. The -// multi-endpoints approach of this package allows to combine many different -// endpoints in the same "context". -// -// Context IDs are actually SHA256 hashes of the context name, and are there -// only to avoid dealing with special characters in context names. -package store diff --git a/vendor/github.com/docker/cli/cli/context/store/io_utils.go b/vendor/github.com/docker/cli/cli/context/store/io_utils.go deleted file mode 100644 index 6f854c8e..00000000 --- a/vendor/github.com/docker/cli/cli/context/store/io_utils.go +++ /dev/null @@ -1,29 +0,0 @@ -package store - -import ( - "errors" - "io" -) - -// LimitedReader is a fork of io.LimitedReader to override Read. -type LimitedReader struct { - R io.Reader - N int64 // max bytes remaining -} - -// Read is a fork of io.LimitedReader.Read that returns an error when limit exceeded. -func (l *LimitedReader) Read(p []byte) (n int, err error) { - if l.N < 0 { - return 0, errors.New("read exceeds the defined limit") - } - if l.N == 0 { - return 0, io.EOF - } - // have to cap N + 1 otherwise we won't hit limit err - if int64(len(p)) > l.N+1 { - p = p[0 : l.N+1] - } - n, err = l.R.Read(p) - l.N -= int64(n) - return n, err -} diff --git a/vendor/github.com/docker/cli/cli/context/store/metadatastore.go b/vendor/github.com/docker/cli/cli/context/store/metadatastore.go deleted file mode 100644 index 0c6986fa..00000000 --- a/vendor/github.com/docker/cli/cli/context/store/metadatastore.go +++ /dev/null @@ -1,167 +0,0 @@ -// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16: -//go:build go1.21 - -package store - -import ( - "encoding/json" - "fmt" - "os" - "path/filepath" - "reflect" - "sort" - - "github.com/docker/docker/errdefs" - "github.com/docker/docker/pkg/ioutils" - "github.com/fvbommel/sortorder" - "github.com/pkg/errors" -) - -const ( - metadataDir = "meta" - metaFile = "meta.json" -) - -type metadataStore struct { - root string - config Config -} - -func (s *metadataStore) contextDir(id contextdir) string { - return filepath.Join(s.root, string(id)) -} - -func (s *metadataStore) createOrUpdate(meta Metadata) error { - contextDir := s.contextDir(contextdirOf(meta.Name)) - if err := os.MkdirAll(contextDir, 0o755); err != nil { - return err - } - bytes, err := json.Marshal(&meta) - if err != nil { - return err - } - return ioutils.AtomicWriteFile(filepath.Join(contextDir, metaFile), bytes, 0o644) -} - -func parseTypedOrMap(payload []byte, getter TypeGetter) (any, error) { - if len(payload) == 0 || string(payload) == "null" { - return nil, nil - } - if getter == nil { - var res map[string]any - if err := json.Unmarshal(payload, &res); err != nil { - return nil, err - } - return res, nil - } - typed := getter() - if err := json.Unmarshal(payload, typed); err != nil { - return nil, err - } - return reflect.ValueOf(typed).Elem().Interface(), nil -} - -func (s *metadataStore) get(name string) (Metadata, error) { - m, err := s.getByID(contextdirOf(name)) - if err != nil { - return m, errors.Wrapf(err, "context %q", name) - } - return m, nil -} - -func (s *metadataStore) getByID(id contextdir) (Metadata, error) { - fileName := filepath.Join(s.contextDir(id), metaFile) - bytes, err := os.ReadFile(fileName) - if err != nil { - if errors.Is(err, os.ErrNotExist) { - return Metadata{}, errdefs.NotFound(errors.Wrap(err, "context not found")) - } - return Metadata{}, err - } - var untyped untypedContextMetadata - r := Metadata{ - Endpoints: make(map[string]any), - } - if err := json.Unmarshal(bytes, &untyped); err != nil { - return Metadata{}, fmt.Errorf("parsing %s: %v", fileName, err) - } - r.Name = untyped.Name - if r.Metadata, err = parseTypedOrMap(untyped.Metadata, s.config.contextType); err != nil { - return Metadata{}, fmt.Errorf("parsing %s: %v", fileName, err) - } - for k, v := range untyped.Endpoints { - if r.Endpoints[k], err = parseTypedOrMap(v, s.config.endpointTypes[k]); err != nil { - return Metadata{}, fmt.Errorf("parsing %s: %v", fileName, err) - } - } - return r, err -} - -func (s *metadataStore) remove(name string) error { - if err := os.RemoveAll(s.contextDir(contextdirOf(name))); err != nil { - return errors.Wrapf(err, "failed to remove metadata") - } - return nil -} - -func (s *metadataStore) list() ([]Metadata, error) { - ctxDirs, err := listRecursivelyMetadataDirs(s.root) - if err != nil { - if errors.Is(err, os.ErrNotExist) { - return nil, nil - } - return nil, err - } - res := make([]Metadata, 0, len(ctxDirs)) - for _, dir := range ctxDirs { - c, err := s.getByID(contextdir(dir)) - if err != nil { - if errors.Is(err, os.ErrNotExist) { - continue - } - return nil, errors.Wrap(err, "failed to read metadata") - } - res = append(res, c) - } - sort.Slice(res, func(i, j int) bool { - return sortorder.NaturalLess(res[i].Name, res[j].Name) - }) - return res, nil -} - -func isContextDir(path string) bool { - s, err := os.Stat(filepath.Join(path, metaFile)) - if err != nil { - return false - } - return !s.IsDir() -} - -func listRecursivelyMetadataDirs(root string) ([]string, error) { - fis, err := os.ReadDir(root) - if err != nil { - return nil, err - } - var result []string - for _, fi := range fis { - if fi.IsDir() { - if isContextDir(filepath.Join(root, fi.Name())) { - result = append(result, fi.Name()) - } - subs, err := listRecursivelyMetadataDirs(filepath.Join(root, fi.Name())) - if err != nil { - return nil, err - } - for _, s := range subs { - result = append(result, filepath.Join(fi.Name(), s)) - } - } - } - return result, nil -} - -type untypedContextMetadata struct { - Metadata json.RawMessage `json:"metadata,omitempty"` - Endpoints map[string]json.RawMessage `json:"endpoints,omitempty"` - Name string `json:"name,omitempty"` -} diff --git a/vendor/github.com/docker/cli/cli/context/store/store.go b/vendor/github.com/docker/cli/cli/context/store/store.go deleted file mode 100644 index 066b5769..00000000 --- a/vendor/github.com/docker/cli/cli/context/store/store.go +++ /dev/null @@ -1,507 +0,0 @@ -// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16: -//go:build go1.21 - -package store - -import ( - "archive/tar" - "archive/zip" - "bufio" - "bytes" - _ "crypto/sha256" // ensure ids can be computed - "encoding/json" - "io" - "net/http" - "path" - "path/filepath" - "regexp" - "strings" - - "github.com/docker/docker/errdefs" - "github.com/opencontainers/go-digest" - "github.com/pkg/errors" -) - -const restrictedNamePattern = "^[a-zA-Z0-9][a-zA-Z0-9_.+-]+$" - -var restrictedNameRegEx = regexp.MustCompile(restrictedNamePattern) - -// Store provides a context store for easily remembering endpoints configuration -type Store interface { - Reader - Lister - Writer - StorageInfoProvider -} - -// Reader provides read-only (without list) access to context data -type Reader interface { - GetMetadata(name string) (Metadata, error) - ListTLSFiles(name string) (map[string]EndpointFiles, error) - GetTLSData(contextName, endpointName, fileName string) ([]byte, error) -} - -// Lister provides listing of contexts -type Lister interface { - List() ([]Metadata, error) -} - -// ReaderLister combines Reader and Lister interfaces -type ReaderLister interface { - Reader - Lister -} - -// StorageInfoProvider provides more information about storage details of contexts -type StorageInfoProvider interface { - GetStorageInfo(contextName string) StorageInfo -} - -// Writer provides write access to context data -type Writer interface { - CreateOrUpdate(meta Metadata) error - Remove(name string) error - ResetTLSMaterial(name string, data *ContextTLSData) error - ResetEndpointTLSMaterial(contextName string, endpointName string, data *EndpointTLSData) error -} - -// ReaderWriter combines Reader and Writer interfaces -type ReaderWriter interface { - Reader - Writer -} - -// Metadata contains metadata about a context and its endpoints -type Metadata struct { - Name string `json:",omitempty"` - Metadata any `json:",omitempty"` - Endpoints map[string]any `json:",omitempty"` -} - -// StorageInfo contains data about where a given context is stored -type StorageInfo struct { - MetadataPath string - TLSPath string -} - -// EndpointTLSData represents tls data for a given endpoint -type EndpointTLSData struct { - Files map[string][]byte -} - -// ContextTLSData represents tls data for a whole context -type ContextTLSData struct { - Endpoints map[string]EndpointTLSData -} - -// New creates a store from a given directory. -// If the directory does not exist or is empty, initialize it -func New(dir string, cfg Config) *ContextStore { - metaRoot := filepath.Join(dir, metadataDir) - tlsRoot := filepath.Join(dir, tlsDir) - - return &ContextStore{ - meta: &metadataStore{ - root: metaRoot, - config: cfg, - }, - tls: &tlsStore{ - root: tlsRoot, - }, - } -} - -// ContextStore implements Store. -type ContextStore struct { - meta *metadataStore - tls *tlsStore -} - -// List return all contexts. -func (s *ContextStore) List() ([]Metadata, error) { - return s.meta.list() -} - -// Names return Metadata names for a Lister -func Names(s Lister) ([]string, error) { - if s == nil { - return nil, errors.New("nil lister") - } - list, err := s.List() - if err != nil { - return nil, err - } - names := make([]string, 0, len(list)) - for _, item := range list { - names = append(names, item.Name) - } - return names, nil -} - -// CreateOrUpdate creates or updates metadata for the context. -func (s *ContextStore) CreateOrUpdate(meta Metadata) error { - return s.meta.createOrUpdate(meta) -} - -// Remove deletes the context with the given name, if found. -func (s *ContextStore) Remove(name string) error { - if err := s.meta.remove(name); err != nil { - return errors.Wrapf(err, "failed to remove context %s", name) - } - if err := s.tls.remove(name); err != nil { - return errors.Wrapf(err, "failed to remove context %s", name) - } - return nil -} - -// GetMetadata returns the metadata for the context with the given name. -// It returns an errdefs.ErrNotFound if the context was not found. -func (s *ContextStore) GetMetadata(name string) (Metadata, error) { - return s.meta.get(name) -} - -// ResetTLSMaterial removes TLS data for all endpoints in the context and replaces -// it with the new data. -func (s *ContextStore) ResetTLSMaterial(name string, data *ContextTLSData) error { - if err := s.tls.remove(name); err != nil { - return err - } - if data == nil { - return nil - } - for ep, files := range data.Endpoints { - for fileName, data := range files.Files { - if err := s.tls.createOrUpdate(name, ep, fileName, data); err != nil { - return err - } - } - } - return nil -} - -// ResetEndpointTLSMaterial removes TLS data for the given context and endpoint, -// and replaces it with the new data. -func (s *ContextStore) ResetEndpointTLSMaterial(contextName string, endpointName string, data *EndpointTLSData) error { - if err := s.tls.removeEndpoint(contextName, endpointName); err != nil { - return err - } - if data == nil { - return nil - } - for fileName, data := range data.Files { - if err := s.tls.createOrUpdate(contextName, endpointName, fileName, data); err != nil { - return err - } - } - return nil -} - -// ListTLSFiles returns the list of TLS files present for each endpoint in the -// context. -func (s *ContextStore) ListTLSFiles(name string) (map[string]EndpointFiles, error) { - return s.tls.listContextData(name) -} - -// GetTLSData reads, and returns the content of the given fileName for an endpoint. -// It returns an errdefs.ErrNotFound if the file was not found. -func (s *ContextStore) GetTLSData(contextName, endpointName, fileName string) ([]byte, error) { - return s.tls.getData(contextName, endpointName, fileName) -} - -// GetStorageInfo returns the paths where the Metadata and TLS data are stored -// for the context. -func (s *ContextStore) GetStorageInfo(contextName string) StorageInfo { - return StorageInfo{ - MetadataPath: s.meta.contextDir(contextdirOf(contextName)), - TLSPath: s.tls.contextDir(contextName), - } -} - -// ValidateContextName checks a context name is valid. -func ValidateContextName(name string) error { - if name == "" { - return errors.New("context name cannot be empty") - } - if name == "default" { - return errors.New(`"default" is a reserved context name`) - } - if !restrictedNameRegEx.MatchString(name) { - return errors.Errorf("context name %q is invalid, names are validated against regexp %q", name, restrictedNamePattern) - } - return nil -} - -// Export exports an existing namespace into an opaque data stream -// This stream is actually a tarball containing context metadata and TLS materials, but it does -// not map 1:1 the layout of the context store (don't try to restore it manually without calling store.Import) -func Export(name string, s Reader) io.ReadCloser { - reader, writer := io.Pipe() - go func() { - tw := tar.NewWriter(writer) - defer tw.Close() - defer writer.Close() - meta, err := s.GetMetadata(name) - if err != nil { - writer.CloseWithError(err) - return - } - metaBytes, err := json.Marshal(&meta) - if err != nil { - writer.CloseWithError(err) - return - } - if err = tw.WriteHeader(&tar.Header{ - Name: metaFile, - Mode: 0o644, - Size: int64(len(metaBytes)), - }); err != nil { - writer.CloseWithError(err) - return - } - if _, err = tw.Write(metaBytes); err != nil { - writer.CloseWithError(err) - return - } - tlsFiles, err := s.ListTLSFiles(name) - if err != nil { - writer.CloseWithError(err) - return - } - if err = tw.WriteHeader(&tar.Header{ - Name: "tls", - Mode: 0o700, - Size: 0, - Typeflag: tar.TypeDir, - }); err != nil { - writer.CloseWithError(err) - return - } - for endpointName, endpointFiles := range tlsFiles { - if err = tw.WriteHeader(&tar.Header{ - Name: path.Join("tls", endpointName), - Mode: 0o700, - Size: 0, - Typeflag: tar.TypeDir, - }); err != nil { - writer.CloseWithError(err) - return - } - for _, fileName := range endpointFiles { - data, err := s.GetTLSData(name, endpointName, fileName) - if err != nil { - writer.CloseWithError(err) - return - } - if err = tw.WriteHeader(&tar.Header{ - Name: path.Join("tls", endpointName, fileName), - Mode: 0o600, - Size: int64(len(data)), - }); err != nil { - writer.CloseWithError(err) - return - } - if _, err = tw.Write(data); err != nil { - writer.CloseWithError(err) - return - } - } - } - }() - return reader -} - -const ( - maxAllowedFileSizeToImport int64 = 10 << 20 - zipType string = "application/zip" -) - -func getImportContentType(r *bufio.Reader) (string, error) { - head, err := r.Peek(512) - if err != nil && err != io.EOF { - return "", err - } - - return http.DetectContentType(head), nil -} - -// Import imports an exported context into a store -func Import(name string, s Writer, reader io.Reader) error { - // Buffered reader will not advance the buffer, needed to determine content type - r := bufio.NewReader(reader) - - importContentType, err := getImportContentType(r) - if err != nil { - return err - } - switch importContentType { - case zipType: - return importZip(name, s, r) - default: - // Assume it's a TAR (TAR does not have a "magic number") - return importTar(name, s, r) - } -} - -func isValidFilePath(p string) error { - if p != metaFile && !strings.HasPrefix(p, "tls/") { - return errors.New("unexpected context file") - } - if path.Clean(p) != p { - return errors.New("unexpected path format") - } - if strings.Contains(p, `\`) { - return errors.New(`unexpected '\' in path`) - } - return nil -} - -func importTar(name string, s Writer, reader io.Reader) error { - tr := tar.NewReader(&LimitedReader{R: reader, N: maxAllowedFileSizeToImport}) - tlsData := ContextTLSData{ - Endpoints: map[string]EndpointTLSData{}, - } - var importedMetaFile bool - for { - hdr, err := tr.Next() - if err == io.EOF { - break - } - if err != nil { - return err - } - if hdr.Typeflag != tar.TypeReg { - // skip this entry, only taking files into account - continue - } - if err := isValidFilePath(hdr.Name); err != nil { - return errors.Wrap(err, hdr.Name) - } - if hdr.Name == metaFile { - data, err := io.ReadAll(tr) - if err != nil { - return err - } - meta, err := parseMetadata(data, name) - if err != nil { - return err - } - if err := s.CreateOrUpdate(meta); err != nil { - return err - } - importedMetaFile = true - } else if strings.HasPrefix(hdr.Name, "tls/") { - data, err := io.ReadAll(tr) - if err != nil { - return err - } - if err := importEndpointTLS(&tlsData, hdr.Name, data); err != nil { - return err - } - } - } - if !importedMetaFile { - return errdefs.InvalidParameter(errors.New("invalid context: no metadata found")) - } - return s.ResetTLSMaterial(name, &tlsData) -} - -func importZip(name string, s Writer, reader io.Reader) error { - body, err := io.ReadAll(&LimitedReader{R: reader, N: maxAllowedFileSizeToImport}) - if err != nil { - return err - } - zr, err := zip.NewReader(bytes.NewReader(body), int64(len(body))) - if err != nil { - return err - } - tlsData := ContextTLSData{ - Endpoints: map[string]EndpointTLSData{}, - } - - var importedMetaFile bool - for _, zf := range zr.File { - fi := zf.FileInfo() - if !fi.Mode().IsRegular() { - // skip this entry, only taking regular files into account - continue - } - if err := isValidFilePath(zf.Name); err != nil { - return errors.Wrap(err, zf.Name) - } - if zf.Name == metaFile { - f, err := zf.Open() - if err != nil { - return err - } - - data, err := io.ReadAll(&LimitedReader{R: f, N: maxAllowedFileSizeToImport}) - defer f.Close() - if err != nil { - return err - } - meta, err := parseMetadata(data, name) - if err != nil { - return err - } - if err := s.CreateOrUpdate(meta); err != nil { - return err - } - importedMetaFile = true - } else if strings.HasPrefix(zf.Name, "tls/") { - f, err := zf.Open() - if err != nil { - return err - } - data, err := io.ReadAll(f) - defer f.Close() - if err != nil { - return err - } - err = importEndpointTLS(&tlsData, zf.Name, data) - if err != nil { - return err - } - } - } - if !importedMetaFile { - return errdefs.InvalidParameter(errors.New("invalid context: no metadata found")) - } - return s.ResetTLSMaterial(name, &tlsData) -} - -func parseMetadata(data []byte, name string) (Metadata, error) { - var meta Metadata - if err := json.Unmarshal(data, &meta); err != nil { - return meta, err - } - if err := ValidateContextName(name); err != nil { - return Metadata{}, err - } - meta.Name = name - return meta, nil -} - -func importEndpointTLS(tlsData *ContextTLSData, tlsPath string, data []byte) error { - parts := strings.SplitN(strings.TrimPrefix(tlsPath, "tls/"), "/", 2) - if len(parts) != 2 { - // TLS endpoints require archived file directory with 2 layers - // i.e. tls/{endpointName}/{fileName} - return errors.New("archive format is invalid") - } - - epName := parts[0] - fileName := parts[1] - if _, ok := tlsData.Endpoints[epName]; !ok { - tlsData.Endpoints[epName] = EndpointTLSData{ - Files: map[string][]byte{}, - } - } - tlsData.Endpoints[epName].Files[fileName] = data - return nil -} - -type contextdir string - -func contextdirOf(name string) contextdir { - return contextdir(digest.FromString(name).Encoded()) -} diff --git a/vendor/github.com/docker/cli/cli/context/store/storeconfig.go b/vendor/github.com/docker/cli/cli/context/store/storeconfig.go deleted file mode 100644 index aa516a19..00000000 --- a/vendor/github.com/docker/cli/cli/context/store/storeconfig.go +++ /dev/null @@ -1,56 +0,0 @@ -// FIXME(thaJeztah): remove once we are a module; the go:build directive prevents go from downgrading language version to go1.16: -//go:build go1.21 - -package store - -// TypeGetter is a func used to determine the concrete type of a context or -// endpoint metadata by returning a pointer to an instance of the object -// eg: for a context of type DockerContext, the corresponding TypeGetter should return new(DockerContext) -type TypeGetter func() any - -// NamedTypeGetter is a TypeGetter associated with a name -type NamedTypeGetter struct { - name string - typeGetter TypeGetter -} - -// EndpointTypeGetter returns a NamedTypeGetter with the specified name and getter -func EndpointTypeGetter(name string, getter TypeGetter) NamedTypeGetter { - return NamedTypeGetter{ - name: name, - typeGetter: getter, - } -} - -// Config is used to configure the metadata marshaler of the context ContextStore -type Config struct { - contextType TypeGetter - endpointTypes map[string]TypeGetter -} - -// SetEndpoint set an endpoint typing information -func (c Config) SetEndpoint(name string, getter TypeGetter) { - c.endpointTypes[name] = getter -} - -// ForeachEndpointType calls cb on every endpoint type registered with the Config -func (c Config) ForeachEndpointType(cb func(string, TypeGetter) error) error { - for n, ep := range c.endpointTypes { - if err := cb(n, ep); err != nil { - return err - } - } - return nil -} - -// NewConfig creates a config object -func NewConfig(contextType TypeGetter, endpoints ...NamedTypeGetter) Config { - res := Config{ - contextType: contextType, - endpointTypes: make(map[string]TypeGetter), - } - for _, e := range endpoints { - res.endpointTypes[e.name] = e.typeGetter - } - return res -} diff --git a/vendor/github.com/docker/cli/cli/context/store/tlsstore.go b/vendor/github.com/docker/cli/cli/context/store/tlsstore.go deleted file mode 100644 index ffbbde7c..00000000 --- a/vendor/github.com/docker/cli/cli/context/store/tlsstore.go +++ /dev/null @@ -1,96 +0,0 @@ -package store - -import ( - "os" - "path/filepath" - - "github.com/docker/docker/errdefs" - "github.com/docker/docker/pkg/ioutils" - "github.com/pkg/errors" -) - -const tlsDir = "tls" - -type tlsStore struct { - root string -} - -func (s *tlsStore) contextDir(name string) string { - return filepath.Join(s.root, string(contextdirOf(name))) -} - -func (s *tlsStore) endpointDir(name, endpointName string) string { - return filepath.Join(s.contextDir(name), endpointName) -} - -func (s *tlsStore) createOrUpdate(name, endpointName, filename string, data []byte) error { - parentOfRoot := filepath.Dir(s.root) - if err := os.MkdirAll(parentOfRoot, 0o755); err != nil { - return err - } - endpointDir := s.endpointDir(name, endpointName) - if err := os.MkdirAll(endpointDir, 0o700); err != nil { - return err - } - return ioutils.AtomicWriteFile(filepath.Join(endpointDir, filename), data, 0o600) -} - -func (s *tlsStore) getData(name, endpointName, filename string) ([]byte, error) { - data, err := os.ReadFile(filepath.Join(s.endpointDir(name, endpointName), filename)) - if err != nil { - if os.IsNotExist(err) { - return nil, errdefs.NotFound(errors.Errorf("TLS data for %s/%s/%s does not exist", name, endpointName, filename)) - } - return nil, errors.Wrapf(err, "failed to read TLS data for endpoint %s", endpointName) - } - return data, nil -} - -// remove deletes all TLS data for the given context. -func (s *tlsStore) remove(name string) error { - if err := os.RemoveAll(s.contextDir(name)); err != nil { - return errors.Wrapf(err, "failed to remove TLS data") - } - return nil -} - -func (s *tlsStore) removeEndpoint(name, endpointName string) error { - if err := os.RemoveAll(s.endpointDir(name, endpointName)); err != nil { - return errors.Wrapf(err, "failed to remove TLS data for endpoint %s", endpointName) - } - return nil -} - -func (s *tlsStore) listContextData(name string) (map[string]EndpointFiles, error) { - contextDir := s.contextDir(name) - epFSs, err := os.ReadDir(contextDir) - if err != nil { - if os.IsNotExist(err) { - return map[string]EndpointFiles{}, nil - } - return nil, errors.Wrapf(err, "failed to list TLS files for context %s", name) - } - r := make(map[string]EndpointFiles) - for _, epFS := range epFSs { - if epFS.IsDir() { - fss, err := os.ReadDir(filepath.Join(contextDir, epFS.Name())) - if os.IsNotExist(err) { - continue - } - if err != nil { - return nil, errors.Wrapf(err, "failed to list TLS files for endpoint %s", epFS.Name()) - } - var files EndpointFiles - for _, fs := range fss { - if !fs.IsDir() { - files = append(files, fs.Name()) - } - } - r[epFS.Name()] = files - } - } - return r, nil -} - -// EndpointFiles is a slice of strings representing file names -type EndpointFiles []string diff --git a/vendor/github.com/docker/cli/cli/context/tlsdata.go b/vendor/github.com/docker/cli/cli/context/tlsdata.go deleted file mode 100644 index c758612a..00000000 --- a/vendor/github.com/docker/cli/cli/context/tlsdata.go +++ /dev/null @@ -1,98 +0,0 @@ -package context - -import ( - "os" - - "github.com/docker/cli/cli/context/store" - "github.com/pkg/errors" - "github.com/sirupsen/logrus" -) - -const ( - caKey = "ca.pem" - certKey = "cert.pem" - keyKey = "key.pem" -) - -// TLSData holds ca/cert/key raw data -type TLSData struct { - CA []byte - Key []byte - Cert []byte -} - -// ToStoreTLSData converts TLSData to the store representation -func (data *TLSData) ToStoreTLSData() *store.EndpointTLSData { - if data == nil { - return nil - } - result := store.EndpointTLSData{ - Files: make(map[string][]byte), - } - if data.CA != nil { - result.Files[caKey] = data.CA - } - if data.Cert != nil { - result.Files[certKey] = data.Cert - } - if data.Key != nil { - result.Files[keyKey] = data.Key - } - return &result -} - -// LoadTLSData loads TLS data from the store -func LoadTLSData(s store.Reader, contextName, endpointName string) (*TLSData, error) { - tlsFiles, err := s.ListTLSFiles(contextName) - if err != nil { - return nil, errors.Wrapf(err, "failed to retrieve TLS files for context %q", contextName) - } - if epTLSFiles, ok := tlsFiles[endpointName]; ok { - var tlsData TLSData - for _, f := range epTLSFiles { - data, err := s.GetTLSData(contextName, endpointName, f) - if err != nil { - return nil, errors.Wrapf(err, "failed to retrieve TLS data (%s) for context %q", f, contextName) - } - switch f { - case caKey: - tlsData.CA = data - case certKey: - tlsData.Cert = data - case keyKey: - tlsData.Key = data - default: - logrus.Warnf("unknown file in context %s TLS bundle: %s", contextName, f) - } - } - return &tlsData, nil - } - return nil, nil -} - -// TLSDataFromFiles reads files into a TLSData struct (or returns nil if all paths are empty) -func TLSDataFromFiles(caPath, certPath, keyPath string) (*TLSData, error) { - var ( - ca, cert, key []byte - err error - ) - if caPath != "" { - if ca, err = os.ReadFile(caPath); err != nil { - return nil, err - } - } - if certPath != "" { - if cert, err = os.ReadFile(certPath); err != nil { - return nil, err - } - } - if keyPath != "" { - if key, err = os.ReadFile(keyPath); err != nil { - return nil, err - } - } - if ca == nil && cert == nil && key == nil { - return nil, nil - } - return &TLSData{CA: ca, Cert: cert, Key: key}, nil -} diff --git a/vendor/github.com/docker/docker-credential-helpers/LICENSE b/vendor/github.com/docker/docker-credential-helpers/LICENSE deleted file mode 100644 index 1ea555e2..00000000 --- a/vendor/github.com/docker/docker-credential-helpers/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2016 David Calavera - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/github.com/docker/docker-credential-helpers/client/client.go b/vendor/github.com/docker/docker-credential-helpers/client/client.go deleted file mode 100644 index 7ca5ab72..00000000 --- a/vendor/github.com/docker/docker-credential-helpers/client/client.go +++ /dev/null @@ -1,114 +0,0 @@ -package client - -import ( - "bytes" - "encoding/json" - "fmt" - "strings" - - "github.com/docker/docker-credential-helpers/credentials" -) - -// isValidCredsMessage checks if 'msg' contains invalid credentials error message. -// It returns whether the logs are free of invalid credentials errors and the error if it isn't. -// error values can be errCredentialsMissingServerURL or errCredentialsMissingUsername. -func isValidCredsMessage(msg string) error { - if credentials.IsCredentialsMissingServerURLMessage(msg) { - return credentials.NewErrCredentialsMissingServerURL() - } - if credentials.IsCredentialsMissingUsernameMessage(msg) { - return credentials.NewErrCredentialsMissingUsername() - } - return nil -} - -// Store uses an external program to save credentials. -func Store(program ProgramFunc, creds *credentials.Credentials) error { - cmd := program(credentials.ActionStore) - - buffer := new(bytes.Buffer) - if err := json.NewEncoder(buffer).Encode(creds); err != nil { - return err - } - cmd.Input(buffer) - - out, err := cmd.Output() - if err != nil { - if isValidErr := isValidCredsMessage(string(out)); isValidErr != nil { - err = isValidErr - } - return fmt.Errorf("error storing credentials - err: %v, out: `%s`", err, strings.TrimSpace(string(out))) - } - - return nil -} - -// Get executes an external program to get the credentials from a native store. -func Get(program ProgramFunc, serverURL string) (*credentials.Credentials, error) { - cmd := program(credentials.ActionGet) - cmd.Input(strings.NewReader(serverURL)) - - out, err := cmd.Output() - if err != nil { - if credentials.IsErrCredentialsNotFoundMessage(string(out)) { - return nil, credentials.NewErrCredentialsNotFound() - } - - if isValidErr := isValidCredsMessage(string(out)); isValidErr != nil { - err = isValidErr - } - - return nil, fmt.Errorf("error getting credentials - err: %v, out: `%s`", err, strings.TrimSpace(string(out))) - } - - resp := &credentials.Credentials{ - ServerURL: serverURL, - } - - if err := json.NewDecoder(bytes.NewReader(out)).Decode(resp); err != nil { - return nil, err - } - - return resp, nil -} - -// Erase executes a program to remove the server credentials from the native store. -func Erase(program ProgramFunc, serverURL string) error { - cmd := program(credentials.ActionErase) - cmd.Input(strings.NewReader(serverURL)) - out, err := cmd.Output() - if err != nil { - t := strings.TrimSpace(string(out)) - - if isValidErr := isValidCredsMessage(t); isValidErr != nil { - err = isValidErr - } - - return fmt.Errorf("error erasing credentials - err: %v, out: `%s`", err, t) - } - - return nil -} - -// List executes a program to list server credentials in the native store. -func List(program ProgramFunc) (map[string]string, error) { - cmd := program(credentials.ActionList) - cmd.Input(strings.NewReader("unused")) - out, err := cmd.Output() - if err != nil { - t := strings.TrimSpace(string(out)) - - if isValidErr := isValidCredsMessage(t); isValidErr != nil { - err = isValidErr - } - - return nil, fmt.Errorf("error listing credentials - err: %v, out: `%s`", err, t) - } - - var resp map[string]string - if err = json.NewDecoder(bytes.NewReader(out)).Decode(&resp); err != nil { - return nil, err - } - - return resp, nil -} diff --git a/vendor/github.com/docker/docker-credential-helpers/client/command.go b/vendor/github.com/docker/docker-credential-helpers/client/command.go deleted file mode 100644 index 1936234b..00000000 --- a/vendor/github.com/docker/docker-credential-helpers/client/command.go +++ /dev/null @@ -1,54 +0,0 @@ -package client - -import ( - "io" - "os" - "os/exec" -) - -// Program is an interface to execute external programs. -type Program interface { - Output() ([]byte, error) - Input(in io.Reader) -} - -// ProgramFunc is a type of function that initializes programs based on arguments. -type ProgramFunc func(args ...string) Program - -// NewShellProgramFunc creates programs that are executed in a Shell. -func NewShellProgramFunc(name string) ProgramFunc { - return NewShellProgramFuncWithEnv(name, nil) -} - -// NewShellProgramFuncWithEnv creates programs that are executed in a Shell with environment variables -func NewShellProgramFuncWithEnv(name string, env *map[string]string) ProgramFunc { - return func(args ...string) Program { - return &Shell{cmd: createProgramCmdRedirectErr(name, args, env)} - } -} - -func createProgramCmdRedirectErr(commandName string, args []string, env *map[string]string) *exec.Cmd { - programCmd := exec.Command(commandName, args...) - if env != nil { - for k, v := range *env { - programCmd.Env = append(programCmd.Environ(), k+"="+v) - } - } - programCmd.Stderr = os.Stderr - return programCmd -} - -// Shell invokes shell commands to talk with a remote credentials-helper. -type Shell struct { - cmd *exec.Cmd -} - -// Output returns responses from the remote credentials-helper. -func (s *Shell) Output() ([]byte, error) { - return s.cmd.Output() -} - -// Input sets the input to send to a remote credentials-helper. -func (s *Shell) Input(in io.Reader) { - s.cmd.Stdin = in -} diff --git a/vendor/github.com/docker/docker-credential-helpers/credentials/credentials.go b/vendor/github.com/docker/docker-credential-helpers/credentials/credentials.go deleted file mode 100644 index eac55188..00000000 --- a/vendor/github.com/docker/docker-credential-helpers/credentials/credentials.go +++ /dev/null @@ -1,209 +0,0 @@ -package credentials - -import ( - "bufio" - "bytes" - "encoding/json" - "fmt" - "io" - "os" - "strings" -) - -// Action defines the name of an action (sub-command) supported by a -// credential-helper binary. It is an alias for "string", and mostly -// for convenience. -type Action = string - -// List of actions (sub-commands) supported by credential-helper binaries. -const ( - ActionStore Action = "store" - ActionGet Action = "get" - ActionErase Action = "erase" - ActionList Action = "list" - ActionVersion Action = "version" -) - -// Credentials holds the information shared between docker and the credentials store. -type Credentials struct { - ServerURL string - Username string - Secret string -} - -// isValid checks the integrity of Credentials object such that no credentials lack -// a server URL or a username. -// It returns whether the credentials are valid and the error if it isn't. -// error values can be errCredentialsMissingServerURL or errCredentialsMissingUsername -func (c *Credentials) isValid() (bool, error) { - if len(c.ServerURL) == 0 { - return false, NewErrCredentialsMissingServerURL() - } - - if len(c.Username) == 0 { - return false, NewErrCredentialsMissingUsername() - } - - return true, nil -} - -// CredsLabel holds the way Docker credentials should be labeled as such in credentials stores that allow labelling. -// That label allows to filter out non-Docker credentials too at lookup/search in macOS keychain, -// Windows credentials manager and Linux libsecret. Default value is "Docker Credentials" -var CredsLabel = "Docker Credentials" - -// SetCredsLabel is a simple setter for CredsLabel -func SetCredsLabel(label string) { - CredsLabel = label -} - -// Serve initializes the credentials-helper and parses the action argument. -// This function is designed to be called from a command line interface. -// It uses os.Args[1] as the key for the action. -// It uses os.Stdin as input and os.Stdout as output. -// This function terminates the program with os.Exit(1) if there is an error. -func Serve(helper Helper) { - if len(os.Args) != 2 { - _, _ = fmt.Fprintln(os.Stdout, usage()) - os.Exit(1) - } - - switch os.Args[1] { - case "--version", "-v": - _ = PrintVersion(os.Stdout) - os.Exit(0) - case "--help", "-h": - _, _ = fmt.Fprintln(os.Stdout, usage()) - os.Exit(0) - } - - if err := HandleCommand(helper, os.Args[1], os.Stdin, os.Stdout); err != nil { - _, _ = fmt.Fprintln(os.Stdout, err) - os.Exit(1) - } -} - -func usage() string { - return fmt.Sprintf("Usage: %s ", Name) -} - -// HandleCommand runs a helper to execute a credential action. -func HandleCommand(helper Helper, action Action, in io.Reader, out io.Writer) error { - switch action { - case ActionStore: - return Store(helper, in) - case ActionGet: - return Get(helper, in, out) - case ActionErase: - return Erase(helper, in) - case ActionList: - return List(helper, out) - case ActionVersion: - return PrintVersion(out) - default: - return fmt.Errorf("%s: unknown action: %s", Name, action) - } -} - -// Store uses a helper and an input reader to save credentials. -// The reader must contain the JSON serialization of a Credentials struct. -func Store(helper Helper, reader io.Reader) error { - scanner := bufio.NewScanner(reader) - - buffer := new(bytes.Buffer) - for scanner.Scan() { - buffer.Write(scanner.Bytes()) - } - - if err := scanner.Err(); err != nil && err != io.EOF { - return err - } - - var creds Credentials - if err := json.NewDecoder(buffer).Decode(&creds); err != nil { - return err - } - - if ok, err := creds.isValid(); !ok { - return err - } - - return helper.Add(&creds) -} - -// Get retrieves the credentials for a given server url. -// The reader must contain the server URL to search. -// The writer is used to write the JSON serialization of the credentials. -func Get(helper Helper, reader io.Reader, writer io.Writer) error { - scanner := bufio.NewScanner(reader) - - buffer := new(bytes.Buffer) - for scanner.Scan() { - buffer.Write(scanner.Bytes()) - } - - if err := scanner.Err(); err != nil && err != io.EOF { - return err - } - - serverURL := strings.TrimSpace(buffer.String()) - if len(serverURL) == 0 { - return NewErrCredentialsMissingServerURL() - } - - username, secret, err := helper.Get(serverURL) - if err != nil { - return err - } - - buffer.Reset() - err = json.NewEncoder(buffer).Encode(Credentials{ - ServerURL: serverURL, - Username: username, - Secret: secret, - }) - if err != nil { - return err - } - - _, _ = fmt.Fprint(writer, buffer.String()) - return nil -} - -// Erase removes credentials from the store. -// The reader must contain the server URL to remove. -func Erase(helper Helper, reader io.Reader) error { - scanner := bufio.NewScanner(reader) - - buffer := new(bytes.Buffer) - for scanner.Scan() { - buffer.Write(scanner.Bytes()) - } - - if err := scanner.Err(); err != nil && err != io.EOF { - return err - } - - serverURL := strings.TrimSpace(buffer.String()) - if len(serverURL) == 0 { - return NewErrCredentialsMissingServerURL() - } - - return helper.Delete(serverURL) -} - -// List returns all the serverURLs of keys in -// the OS store as a list of strings -func List(helper Helper, writer io.Writer) error { - accts, err := helper.List() - if err != nil { - return err - } - return json.NewEncoder(writer).Encode(accts) -} - -// PrintVersion outputs the current version. -func PrintVersion(writer io.Writer) error { - _, _ = fmt.Fprintf(writer, "%s (%s) %s\n", Name, Package, Version) - return nil -} diff --git a/vendor/github.com/docker/docker-credential-helpers/credentials/error.go b/vendor/github.com/docker/docker-credential-helpers/credentials/error.go deleted file mode 100644 index 2283d5a4..00000000 --- a/vendor/github.com/docker/docker-credential-helpers/credentials/error.go +++ /dev/null @@ -1,124 +0,0 @@ -package credentials - -import ( - "errors" - "strings" -) - -const ( - // ErrCredentialsNotFound standardizes the not found error, so every helper returns - // the same message and docker can handle it properly. - errCredentialsNotFoundMessage = "credentials not found in native keychain" - - // ErrCredentialsMissingServerURL and ErrCredentialsMissingUsername standardize - // invalid credentials or credentials management operations - errCredentialsMissingServerURLMessage = "no credentials server URL" - errCredentialsMissingUsernameMessage = "no credentials username" -) - -// errCredentialsNotFound represents an error -// raised when credentials are not in the store. -type errCredentialsNotFound struct{} - -// Error returns the standard error message -// for when the credentials are not in the store. -func (errCredentialsNotFound) Error() string { - return errCredentialsNotFoundMessage -} - -// NotFound implements the [ErrNotFound][errdefs.ErrNotFound] interface. -// -// [errdefs.ErrNotFound]: https://pkg.go.dev/github.com/docker/docker@v24.0.1+incompatible/errdefs#ErrNotFound -func (errCredentialsNotFound) NotFound() {} - -// NewErrCredentialsNotFound creates a new error -// for when the credentials are not in the store. -func NewErrCredentialsNotFound() error { - return errCredentialsNotFound{} -} - -// IsErrCredentialsNotFound returns true if the error -// was caused by not having a set of credentials in a store. -func IsErrCredentialsNotFound(err error) bool { - var target errCredentialsNotFound - return errors.As(err, &target) -} - -// IsErrCredentialsNotFoundMessage returns true if the error -// was caused by not having a set of credentials in a store. -// -// This function helps to check messages returned by an -// external program via its standard output. -func IsErrCredentialsNotFoundMessage(err string) bool { - return strings.TrimSpace(err) == errCredentialsNotFoundMessage -} - -// errCredentialsMissingServerURL represents an error raised -// when the credentials object has no server URL or when no -// server URL is provided to a credentials operation requiring -// one. -type errCredentialsMissingServerURL struct{} - -func (errCredentialsMissingServerURL) Error() string { - return errCredentialsMissingServerURLMessage -} - -// InvalidParameter implements the [ErrInvalidParameter][errdefs.ErrInvalidParameter] -// interface. -// -// [errdefs.ErrInvalidParameter]: https://pkg.go.dev/github.com/docker/docker@v24.0.1+incompatible/errdefs#ErrInvalidParameter -func (errCredentialsMissingServerURL) InvalidParameter() {} - -// errCredentialsMissingUsername represents an error raised -// when the credentials object has no username or when no -// username is provided to a credentials operation requiring -// one. -type errCredentialsMissingUsername struct{} - -func (errCredentialsMissingUsername) Error() string { - return errCredentialsMissingUsernameMessage -} - -// InvalidParameter implements the [ErrInvalidParameter][errdefs.ErrInvalidParameter] -// interface. -// -// [errdefs.ErrInvalidParameter]: https://pkg.go.dev/github.com/docker/docker@v24.0.1+incompatible/errdefs#ErrInvalidParameter -func (errCredentialsMissingUsername) InvalidParameter() {} - -// NewErrCredentialsMissingServerURL creates a new error for -// errCredentialsMissingServerURL. -func NewErrCredentialsMissingServerURL() error { - return errCredentialsMissingServerURL{} -} - -// NewErrCredentialsMissingUsername creates a new error for -// errCredentialsMissingUsername. -func NewErrCredentialsMissingUsername() error { - return errCredentialsMissingUsername{} -} - -// IsCredentialsMissingServerURL returns true if the error -// was an errCredentialsMissingServerURL. -func IsCredentialsMissingServerURL(err error) bool { - var target errCredentialsMissingServerURL - return errors.As(err, &target) -} - -// IsCredentialsMissingServerURLMessage checks for an -// errCredentialsMissingServerURL in the error message. -func IsCredentialsMissingServerURLMessage(err string) bool { - return strings.TrimSpace(err) == errCredentialsMissingServerURLMessage -} - -// IsCredentialsMissingUsername returns true if the error -// was an errCredentialsMissingUsername. -func IsCredentialsMissingUsername(err error) bool { - var target errCredentialsMissingUsername - return errors.As(err, &target) -} - -// IsCredentialsMissingUsernameMessage checks for an -// errCredentialsMissingUsername in the error message. -func IsCredentialsMissingUsernameMessage(err string) bool { - return strings.TrimSpace(err) == errCredentialsMissingUsernameMessage -} diff --git a/vendor/github.com/docker/docker-credential-helpers/credentials/helper.go b/vendor/github.com/docker/docker-credential-helpers/credentials/helper.go deleted file mode 100644 index 135acd25..00000000 --- a/vendor/github.com/docker/docker-credential-helpers/credentials/helper.go +++ /dev/null @@ -1,14 +0,0 @@ -package credentials - -// Helper is the interface a credentials store helper must implement. -type Helper interface { - // Add appends credentials to the store. - Add(*Credentials) error - // Delete removes credentials from the store. - Delete(serverURL string) error - // Get retrieves credentials from the store. - // It returns username and secret as strings. - Get(serverURL string) (string, string, error) - // List returns the stored serverURLs and their associated usernames. - List() (map[string]string, error) -} diff --git a/vendor/github.com/docker/docker-credential-helpers/credentials/version.go b/vendor/github.com/docker/docker-credential-helpers/credentials/version.go deleted file mode 100644 index 84377c26..00000000 --- a/vendor/github.com/docker/docker-credential-helpers/credentials/version.go +++ /dev/null @@ -1,16 +0,0 @@ -package credentials - -var ( - // Name is filled at linking time - Name = "" - - // Package is filled at linking time - Package = "github.com/docker/docker-credential-helpers" - - // Version holds the complete version number. Filled in at linking time. - Version = "v0.0.0+unknown" - - // Revision is filled with the VCS (e.g. git) revision being used to build - // the program at linking time. - Revision = "" -) diff --git a/vendor/github.com/docker/docker/AUTHORS b/vendor/github.com/docker/docker/AUTHORS deleted file mode 100644 index c7c64947..00000000 --- a/vendor/github.com/docker/docker/AUTHORS +++ /dev/null @@ -1,2496 +0,0 @@ -# File @generated by hack/generate-authors.sh. DO NOT EDIT. -# This file lists all contributors to the repository. -# See hack/generate-authors.sh to make modifications. - -17neverends -7sunarni <710720732@qq.com> -Aanand Prasad -Aarni Koskela -Aaron Davidson -Aaron Feng -Aaron Hnatiw -Aaron Huslage -Aaron L. Xu -Aaron Lehmann -Aaron Welch -Aaron Yoshitake -Abdur Rehman -Abel Muiño -Abhijeet Kasurde -Abhinandan Prativadi -Abhinav Ajgaonkar -Abhishek Chanda -Abhishek Sharma -Abin Shahab -Abirdcfly -Ada Mancini -Adam Avilla -Adam Dobrawy -Adam Eijdenberg -Adam Kunk -Adam Lamers -Adam Miller -Adam Mills -Adam Pointer -Adam Simon -Adam Singer -Adam Thornton -Adam Walz -Adam Williams -AdamKorcz -Addam Hardy -Aditi Rajagopal -Aditya -Adnan Khan -Adolfo Ochagavía -Adria Casas -Adrian Moisey -Adrian Mouat -Adrian Oprea -Adrien Folie -Adrien Gallouët -Ahmed Kamal -Ahmet Alp Balkan -Aidan Feldman -Aidan Hobson Sayers -AJ Bowen -Ajey Charantimath -ajneu -Akash Gupta -Akhil Mohan -Akihiro Matsushima -Akihiro Suda -Akim Demaille -Akira Koyasu -Akshay Karle -Akshay Moghe -Al Tobey -alambike -Alan Hoyle -Alan Scherger -Alan Thompson -Alano Terblanche -Albert Callarisa -Albert Zhang -Albin Kerouanton -Alec Benson -Alejandro González Hevia -Aleksa Sarai -Aleksandr Chebotov -Aleksandrs Fadins -Alena Prokharchyk -Alessandro Boch -Alessio Biancalana -Alex Chan -Alex Chen -Alex Coventry -Alex Crawford -Alex Ellis -Alex Gaynor -Alex Goodman -Alex Nordlund -Alex Olshansky -Alex Samorukov -Alex Stockinger -Alex Warhawk -Alexander Artemenko -Alexander Boyd -Alexander Larsson -Alexander Midlash -Alexander Morozov -Alexander Polakov -Alexander Shopov -Alexandre Beslic -Alexandre Garnier -Alexandre González -Alexandre Jomin -Alexandru Sfirlogea -Alexei Margasov -Alexey Guskov -Alexey Kotlyarov -Alexey Shamrin -Alexis Ries -Alexis Thomas -Alfred Landrum -Ali Dehghani -Alicia Lauerman -Alihan Demir -Allen Madsen -Allen Sun -almoehi -Alvaro Saurin -Alvin Deng -Alvin Richards -amangoel -Amen Belayneh -Ameya Gawde -Amir Goldstein -AmirBuddy -Amit Bakshi -Amit Krishnan -Amit Shukla -Amr Gawish -Amy Lindburg -Anand Patil -AnandkumarPatel -Anatoly Borodin -Anca Iordache -Anchal Agrawal -Anda Xu -Anders Janmyr -Andre Dublin <81dublin@gmail.com> -Andre Granovsky -Andrea Denisse Gómez -Andrea Luzzardi -Andrea Turli -Andreas Elvers -Andreas Köhler -Andreas Savvides -Andreas Tiefenthaler -Andrei Gherzan -Andrei Ushakov -Andrei Vagin -Andrew Baxter <423qpsxzhh8k3h@s.rendaw.me> -Andrew C. Bodine -Andrew Clay Shafer -Andrew Duckworth -Andrew France -Andrew Gerrand -Andrew Guenther -Andrew He -Andrew Hsu -Andrew Kim -Andrew Kuklewicz -Andrew Macgregor -Andrew Macpherson -Andrew Martin -Andrew McDonnell -Andrew Munsell -Andrew Pennebaker -Andrew Po -Andrew Weiss -Andrew Williams -Andrews Medina -Andrey Kolomentsev -Andrey Petrov -Andrey Stolbovsky -André Martins -Andrés Maldonado -Andy Chambers -andy diller -Andy Goldstein -Andy Kipp -Andy Lindeman -Andy Rothfusz -Andy Smith -Andy Wilson -Andy Zhang -Aneesh Kulkarni -Anes Hasicic -Angel Velazquez -Anil Belur -Anil Madhavapeddy -Anirudh Aithal -Ankit Jain -Ankush Agarwal -Anonmily -Anran Qiao -Anshul Pundir -Anthon van der Neut -Anthony Baire -Anthony Bishopric -Anthony Dahanne -Anthony Sottile -Anton Löfgren -Anton Nikitin -Anton Polonskiy -Anton Tiurin -Antonio Aguilar -Antonio Murdaca -Antonis Kalipetis -Antony Messerli -Anuj Bahuguna -Anuj Varma -Anusha Ragunathan -Anyu Wang -apocas -Arash Deshmeh -arcosx -ArikaChen -Arko Dasgupta -Arnaud Lefebvre -Arnaud Porterie -Arnaud Rebillout -Artem Khramov -Arthur Barr -Arthur Gautier -Artur Meyster -Arun Gupta -Asad Saeeduddin -Asbjørn Enge -Ashly Mathew -Austin Vazquez -averagehuman -Avi Das -Avi Kivity -Avi Miller -Avi Vaid -Azat Khuyiyakhmetov -Bao Yonglei -Bardia Keyoumarsi -Barnaby Gray -Barry Allard -Bartłomiej Piotrowski -Bastiaan Bakker -Bastien Pascard -bdevloed -Bearice Ren -Ben Bonnefoy -Ben Firshman -Ben Golub -Ben Gould -Ben Hall -Ben Langfeld -Ben Lovy -Ben Sargent -Ben Severson -Ben Toews -Ben Wiklund -Benjamin Atkin -Benjamin Baker -Benjamin Boudreau -Benjamin Böhmke -Benjamin Wang -Benjamin Yolken -Benny Ng -Benoit Chesneau -Bernerd Schaefer -Bernhard M. Wiedemann -Bert Goethals -Bertrand Roussel -Bevisy Zhang -Bharath Thiruveedula -Bhiraj Butala -Bhumika Bayani -Bilal Amarni -Bill Wang -Billy Ridgway -Bily Zhang -Bin Liu -Bingshen Wang -Bjorn Neergaard -Blake Geno -Boaz Shuster -bobby abbott -Bojun Zhu -Boqin Qin -Boris Pruessmann -Boshi Lian -Bouke Haarsma -Boyd Hemphill -boynux -Bradley Cicenas -Bradley Wright -Brandon Liu -Brandon Philips -Brandon Rhodes -Brendan Dixon -Brendon Smith -Brennan Kinney <5098581+polarathene@users.noreply.github.com> -Brent Salisbury -Brett Higgins -Brett Kochendorfer -Brett Milford -Brett Randall -Brian (bex) Exelbierd -Brian Bland -Brian DeHamer -Brian Dorsey -Brian Flad -Brian Goff -Brian McCallister -Brian Olsen -Brian Schwind -Brian Shumate -Brian Torres-Gil -Brian Trump -Brice Jaglin -Briehan Lombaard -Brielle Broder -Bruno Bigras -Bruno Binet -Bruno Gazzera -Bruno Renié -Bruno Tavares -Bryan Bess -Bryan Boreham -Bryan Matsuo -Bryan Murphy -Burke Libbey -Byung Kang -Caleb Spare -Calen Pennington -Calvin Liu -Cameron Boehmer -Cameron Sparr -Cameron Spear -Campbell Allen -Candid Dauth -Cao Weiwei -Carl Henrik Lunde -Carl Loa Odin -Carl X. Su -Carlo Mion -Carlos Alexandro Becker -Carlos de Paula -Carlos Sanchez -Carol Fager-Higgins -Cary -Casey Bisson -Catalin Pirvu -Ce Gao -Cedric Davies -Cesar Talledo -Cezar Sa Espinola -Chad Swenson -Chance Zibolski -Chander Govindarajan -Chanhun Jeong -Chao Wang -Charity Kathure -Charles Chan -Charles Hooper -Charles Law -Charles Lindsay -Charles Merriam -Charles Sarrazin -Charles Smith -Charlie Drage -Charlie Lewis -Chase Bolt -ChaYoung You -Chee Hau Lim -Chen Chao -Chen Chuanliang -Chen Hanxiao -Chen Min -Chen Mingjie -Chen Qiu -Cheng-mean Liu -Chengfei Shang -Chengguang Xu -Chengyu Zhu -Chentianze -Chenyang Yan -chenyuzhu -Chetan Birajdar -Chewey -Chia-liang Kao -Chiranjeevi Tirunagari -chli -Cholerae Hu -Chris Alfonso -Chris Armstrong -Chris Dias -Chris Dituri -Chris Fordham -Chris Gavin -Chris Gibson -Chris Khoo -Chris Kreussling (Flatbush Gardener) -Chris McKinnel -Chris McKinnel -Chris Price -Chris Seto -Chris Snow -Chris St. Pierre -Chris Stivers -Chris Swan -Chris Telfer -Chris Wahl -Chris Weyl -Chris White -Christian Becker -Christian Berendt -Christian Brauner -Christian Böhme -Christian Muehlhaeuser -Christian Persson -Christian Rotzoll -Christian Simon -Christian Stefanescu -Christoph Ziebuhr -Christophe Mehay -Christophe Troestler -Christophe Vidal -Christopher Biscardi -Christopher Crone -Christopher Currie -Christopher Jones -Christopher Latham -Christopher Petito -Christopher Rigor -Christy Norman -Chun Chen -Ciro S. Costa -Clayton Coleman -Clint Armstrong -Clinton Kitson -clubby789 -Cody Roseborough -Coenraad Loubser -Colin Dunklau -Colin Hebert -Colin Panisset -Colin Rice -Colin Walters -Collin Guarino -Colm Hally -companycy -Conor Evans -Corbin Coleman -Corey Farrell -Cory Forsyth -Cory Snider -cressie176 -Cristian Ariza -Cristian Staretu -cristiano balducci -Cristina Yenyxe Gonzalez Garcia -Cruceru Calin-Cristian -cui fliter -CUI Wei -Cuong Manh Le -Cyprian Gracz -Cyril F -Da McGrady -Daan van Berkel -Daehyeok Mun -Dafydd Crosby -dalanlan -Damian Smyth -Damien Nadé -Damien Nozay -Damjan Georgievski -Dan Anolik -Dan Buch -Dan Cotora -Dan Feldman -Dan Griffin -Dan Hirsch -Dan Keder -Dan Levy -Dan McPherson -Dan Plamadeala -Dan Stine -Dan Williams -Dani Hodovic -Dani Louca -Daniel Antlinger -Daniel Black -Daniel Dao -Daniel Exner -Daniel Farrell -Daniel Garcia -Daniel Gasienica -Daniel Grunwell -Daniel Guns -Daniel Helfand -Daniel Hiltgen -Daniel J Walsh -Daniel Menet -Daniel Mizyrycki -Daniel Nephin -Daniel Norberg -Daniel Nordberg -Daniel P. Berrangé -Daniel Robinson -Daniel S -Daniel Sweet -Daniel Von Fange -Daniel Watkins -Daniel X Moore -Daniel YC Lin -Daniel Zhang -Daniele Rondina -Danny Berger -Danny Milosavljevic -Danny Yates -Danyal Khaliq -Darren Coxall -Darren Shepherd -Darren Stahl -Dattatraya Kumbhar -Davanum Srinivas -Dave Barboza -Dave Goodchild -Dave Henderson -Dave MacDonald -Dave Tucker -David Anderson -David Bellotti -David Calavera -David Chung -David Corking -David Cramer -David Currie -David Davis -David Dooling -David Gageot -David Gebler -David Glasser -David Karlsson <35727626+dvdksn@users.noreply.github.com> -David Lawrence -David Lechner -David M. Karr -David Mackey -David Manouchehri -David Mat -David Mcanulty -David McKay -David O'Rourke -David P Hilton -David Pelaez -David R. Jenni -David Röthlisberger -David Sheets -David Sissitka -David Trott -David Wang <00107082@163.com> -David Williamson -David Xia -David Young -Davide Ceretti -Dawn Chen -dbdd -dcylabs -Debayan De -Deborah Gertrude Digges -deed02392 -Deep Debroy -Deng Guangxing -Deni Bertovic -Denis Defreyne -Denis Gladkikh -Denis Ollier -Dennis Chen -Dennis Chen -Dennis Docter -Derek -Derek -Derek Ch -Derek McGowan -Deric Crago -Deshi Xiao -Devon Estes -Devvyn Murphy -Dharmit Shah -Dhawal Yogesh Bhanushali -Dhilip Kumars -Diego Romero -Diego Siqueira -Dieter Reuter -Dillon Dixon -Dima Stopel -Dimitri John Ledkov -Dimitris Mandalidis -Dimitris Rozakis -Dimitry Andric -Dinesh Subhraveti -Ding Fei -dingwei -Diogo Monica -DiuDiugirl -Djibril Koné -Djordje Lukic -dkumor -Dmitri Logvinenko -Dmitri Shuralyov -Dmitry Demeshchuk -Dmitry Gusev -Dmitry Kononenko -Dmitry Sharshakov -Dmitry Shyshkin -Dmitry Smirnov -Dmitry V. Krivenok -Dmitry Vorobev -Dmytro Iakovliev -docker-unir[bot] -Dolph Mathews -Dominic Tubach -Dominic Yin -Dominik Dingel -Dominik Finkbeiner -Dominik Honnef -Don Kirkby -Don Kjer -Don Spaulding -Donald Huang -Dong Chen -Donghwa Kim -Donovan Jones -Dorin Geman -Doron Podoleanu -Doug Davis -Doug MacEachern -Doug Tangren -Douglas Curtis -Dr Nic Williams -dragon788 -Dražen Lučanin -Drew Erny -Drew Hubl -Dustin Sallings -Ed Costello -Edmund Wagner -Eiichi Tsukata -Eike Herzbach -Eivin Giske Skaaren -Eivind Uggedal -Elan Ruusamäe -Elango Sivanandam -Elena Morozova -Eli Uriegas -Elias Faxö -Elias Koromilas -Elias Probst -Elijah Zupancic -eluck -Elvir Kuric -Emil Davtyan -Emil Hernvall -Emily Maier -Emily Rose -Emir Ozer -Eng Zer Jun -Enguerran -Enrico Weigelt, metux IT consult -Eohyung Lee -epeterso -er0k -Eric Barch -Eric Curtin -Eric G. Noriega -Eric Hanchrow -Eric Lee -Eric Mountain -Eric Myhre -Eric Paris -Eric Rafaloff -Eric Rosenberg -Eric Sage -Eric Soderstrom -Eric Yang -Eric-Olivier Lamey -Erica Windisch -Erich Cordoba -Erik Bray -Erik Dubbelboer -Erik Hollensbe -Erik Inge Bolsø -Erik Kristensen -Erik Sipsma -Erik Sjölund -Erik St. Martin -Erik Weathers -Erno Hopearuoho -Erwin van der Koogh -Espen Suenson -Ethan Bell -Ethan Mosbaugh -Euan Harris -Euan Kemp -Eugen Krizo -Eugene Yakubovich -Evan Allrich -Evan Carmi -Evan Hazlett -Evan Krall -Evan Lezar -Evan Phoenix -Evan Wies -Evelyn Xu -Everett Toews -Evgeniy Makhrov -Evgeny Shmarnev -Evgeny Vereshchagin -Ewa Czechowska -Eystein Måløy Stenberg -ezbercih -Ezra Silvera -Fabian Kramm -Fabian Lauer -Fabian Raetz -Fabiano Rosas -Fabio Falci -Fabio Kung -Fabio Rapposelli -Fabio Rehm -Fabrizio Regini -Fabrizio Soppelsa -Faiz Khan -falmp -Fangming Fang -Fangyuan Gao <21551127@zju.edu.cn> -fanjiyun -Fareed Dudhia -Fathi Boudra -Federico Gimenez -Felipe Oliveira -Felipe Ruhland -Felix Abecassis -Felix Geisendörfer -Felix Hupfeld -Felix Rabe -Felix Ruess -Felix Schindler -Feng Yan -Fengtu Wang -Ferenc Szabo -Fernando -Fero Volar -Feroz Salam -Ferran Rodenas -Filipe Brandenburger -Filipe Oliveira -Filipe Pina -Flavio Castelli -Flavio Crisciani -Florian -Florian Klein -Florian Maier -Florian Noeding -Florian Schmaus -Florian Weingarten -Florin Asavoaie -Florin Patan -fonglh -Foysal Iqbal -Francesc Campoy -Francesco Degrassi -Francesco Mari -Francis Chuang -Francisco Carriedo -Francisco Souza -Frank Groeneveld -Frank Herrmann -Frank Macreery -Frank Rosquin -Frank Villaro-Dixon -Frank Yang -François Scala -Fred Lifton -Frederick F. Kautz IV -Frederico F. de Oliveira -Frederik Loeffert -Frederik Nordahl Jul Sabroe -Freek Kalter -Frieder Bluemle -frobnicaty <92033765+frobnicaty@users.noreply.github.com> -Frédéric Dalleau -Fu JinLin -Félix Baylac-Jacqué -Félix Cantournet -Gabe Rosenhouse -Gabor Nagy -Gabriel Adrian Samfira -Gabriel Goller -Gabriel L. Somlo -Gabriel Linder -Gabriel Monroy -Gabriel Nicolas Avellaneda -Gabriel Tomitsuka -Gaetan de Villele -Galen Sampson -Gang Qiao -Gareth Rushgrove -Garrett Barboza -Gary Schaetz -Gaurav -Gaurav Singh -Gaël PORTAY -Genki Takiuchi -GennadySpb -Geoff Levand -Geoffrey Bachelet -Geon Kim -George Adams -George Kontridze -George Ma -George MacRorie -George Xie -Georgi Hristozov -Georgy Yakovlev -Gereon Frey -German DZ -Gert van Valkenhoef -Gerwim Feiken -Ghislain Bourgeois -Giampaolo Mancini -Gianluca Borello -Gildas Cuisinier -Giovan Isa Musthofa -gissehel -Giuseppe Mazzotta -Giuseppe Scrivano -Gleb Fotengauer-Malinovskiy -Gleb M Borisov -Glyn Normington -GoBella -Goffert van Gool -Goldwyn Rodrigues -Gopikannan Venugopalsamy -Gosuke Miyashita -Gou Rao -Govinda Fichtner -Grace Choi -Grant Millar -Grant Reaber -Graydon Hoare -Greg Fausak -Greg Pflaum -Greg Stephens -Greg Thornton -Grzegorz Jaśkiewicz -Guilhem Lettron -Guilherme Salgado -Guillaume Dufour -Guillaume J. Charmes -Gunadhya S. <6939749+gunadhya@users.noreply.github.com> -Guoqiang QI -guoxiuyan -Guri -Gurjeet Singh -Guruprasad -Gustav Sinder -gwx296173 -Günter Zöchbauer -Haichao Yang -haikuoliu -haining.cao -Hakan Özler -Hamish Hutchings -Hannes Ljungberg -Hans Kristian Flaatten -Hans Rødtang -Hao Shu Wei -Hao Zhang <21521210@zju.edu.cn> -Harald Albers -Harald Niesche -Harley Laue -Harold Cooper -Harrison Turton -Harry Zhang -Harshal Patil -Harshal Patil -He Simei -He Xiaoxi -He Xin -heartlock <21521209@zju.edu.cn> -Hector Castro -Helen Xie -Henning Sprang -Hiroshi Hatake -Hiroyuki Sasagawa -Hobofan -Hollie Teal -Hong Xu -Hongbin Lu -Hongxu Jia -Honza Pokorny -Hsing-Hui Hsu -Hsing-Yu (David) Chen -hsinko <21551195@zju.edu.cn> -Hu Keping -Hu Tao -Huajin Tong -huang-jl <1046678590@qq.com> -HuanHuan Ye -Huanzhong Zhang -Huayi Zhang -Hugo Barrera -Hugo Duncan -Hugo Marisco <0x6875676f@gmail.com> -Hui Kang -Hunter Blanks -huqun -Huu Nguyen -Hyeongkyu Lee -Hyzhou Zhy -Iago López Galeiras -Ian Bishop -Ian Bull -Ian Calvert -Ian Campbell -Ian Chen -Ian Lee -Ian Main -Ian Philpot -Ian Truslove -Iavael -Icaro Seara -Ignacio Capurro -Igor Dolzhikov -Igor Karpovich -Iliana Weller -Ilkka Laukkanen -Illia Antypenko -Illo Abdulrahim -Ilya Dmitrichenko -Ilya Gusev -Ilya Khlopotov -imalasong <2879499479@qq.com> -imre Fitos -inglesp -Ingo Gottwald -Innovimax -Isaac Dupree -Isabel Jimenez -Isaiah Grace -Isao Jonas -Iskander Sharipov -Ivan Babrou -Ivan Fraixedes -Ivan Grcic -Ivan Markin -J Bruni -J. Nunn -Jack Danger Canty -Jack Laxson -Jack Walker <90711509+j2walker@users.noreply.github.com> -Jacob Atzen -Jacob Edelman -Jacob Tomlinson -Jacob Vallejo -Jacob Wen -Jaime Cepeda -Jaivish Kothari -Jake Champlin -Jake Moshenko -Jake Sanders -Jakub Drahos -Jakub Guzik -James Allen -James Carey -James Carr -James DeFelice -James Harrison Fisher -James Kyburz -James Kyle -James Lal -James Mills -James Nesbitt -James Nugent -James Sanders -James Turnbull -James Watkins-Harvey -Jameson Hyde -Jamie Hannaford -Jamshid Afshar -Jan Breig -Jan Chren -Jan Garcia -Jan Götte -Jan Keromnes -Jan Koprowski -Jan Pazdziora -Jan Toebes -Jan-Gerd Tenberge -Jan-Jaap Driessen -Jana Radhakrishnan -Jannick Fahlbusch -Januar Wayong -Jared Biel -Jared Hocutt -Jaroslav Jindrak -Jaroslaw Zabiello -Jasmine Hegman -Jason A. Donenfeld -Jason Divock -Jason Giedymin -Jason Green -Jason Hall -Jason Heiss -Jason Livesay -Jason McVetta -Jason Plum -Jason Shepherd -Jason Smith -Jason Sommer -Jason Stangroome -Jasper Siepkes -Javier Bassi -jaxgeller -Jay -Jay Kamat -Jay Lim -Jean Rouge -Jean-Baptiste Barth -Jean-Baptiste Dalido -Jean-Christophe Berthon -Jean-Michel Rouet -Jean-Paul Calderone -Jean-Pierre Huynh -Jean-Tiare Le Bigot -Jeeva S. Chelladhurai -Jeff Anderson -Jeff Hajewski -Jeff Johnston -Jeff Lindsay -Jeff Mickey -Jeff Minard -Jeff Nickoloff -Jeff Silberman -Jeff Welch -Jeff Zvier -Jeffrey Bolle -Jeffrey Morgan -Jeffrey van Gogh -Jenny Gebske -Jeongseok Kang -Jeremy Chambers -Jeremy Grosser -Jeremy Huntwork -Jeremy Price -Jeremy Qian -Jeremy Unruh -Jeremy Yallop -Jeroen Franse -Jeroen Jacobs -Jesse Dearing -Jesse Dubay -Jessica Frazelle -Jeyanthinath Muthuram -Jezeniel Zapanta -Jhon Honce -Ji.Zhilong -Jian Liao -Jian Zeng -Jian Zhang -Jiang Jinyang -Jianyong Wu -Jie Luo -Jie Ma -Jihyun Hwang -Jilles Oldenbeuving -Jim Alateras -Jim Carroll -Jim Ehrismann -Jim Galasyn -Jim Lin -Jim Minter -Jim Perrin -Jimmy Cuadra -Jimmy Puckett -Jimmy Song -jinjiadu -Jinsoo Park -Jintao Zhang -Jiri Appl -Jiri Popelka -Jiuyue Ma -Jiří Župka -jjimbo137 <115816493+jjimbo137@users.noreply.github.com> -Joakim Roubert -Joan Grau -Joao Fernandes -Joao Trindade -Joe Beda -Joe Doliner -Joe Ferguson -Joe Gordon -Joe Shaw -Joe Van Dyk -Joel Friedly -Joel Handwell -Joel Hansson -Joel Wurtz -Joey Geiger -Joey Geiger -Joey Gibson -Joffrey F -Johan Euphrosine -Johan Rydberg -Johanan Lieberman -Johannes 'fish' Ziemke -John Costa -John Feminella -John Gardiner Myers -John Gossman -John Harris -John Howard -John Laswell -John Maguire -John Mulhausen -John OBrien III -John Starks -John Stephens -John Tims -John V. Martinez -John Warwick -John Willis -Jon Johnson -Jon Surrell -Jon Wedaman -Jonas Dohse -Jonas Geiler -Jonas Heinrich -Jonas Pfenniger -Jonathan A. Schweder -Jonathan A. Sternberg -Jonathan Boulle -Jonathan Camp -Jonathan Choy -Jonathan Dowland -Jonathan Lebon -Jonathan Lomas -Jonathan McCrohan -Jonathan Mueller -Jonathan Pares -Jonathan Rudenberg -Jonathan Stoppani -Jonh Wendell -Joni Sar -Joost Cassee -Jordan Arentsen -Jordan Jennings -Jordan Sissel -Jordi Massaguer Pla -Jorge Marin -Jorit Kleine-Möllhoff -Jose Diaz-Gonzalez -Joseph Anthony Pasquale Holsten -Joseph Hager -Joseph Kern -Joseph Rothrock -Josh -Josh Bodah -Josh Bonczkowski -Josh Chorlton -Josh Eveleth -Josh Hawn -Josh Horwitz -Josh Poimboeuf -Josh Soref -Josh Wilson -Josiah Kiehl -José Tomás Albornoz -Joyce Jang -JP -JSchltggr -Julian Taylor -Julien Barbier -Julien Bisconti -Julien Bordellier -Julien Dubois -Julien Kassar -Julien Maitrehenry -Julien Pervillé -Julien Pivotto -Julio Guerra -Julio Montes -Jun Du -Jun-Ru Chang -junxu -Jussi Nummelin -Justas Brazauskas -Justen Martin -Justin Chadwell -Justin Cormack -Justin Force -Justin Keller <85903732+jk-vb@users.noreply.github.com> -Justin Menga -Justin Plock -Justin Simonelis -Justin Terry -Justyn Temme -Jyrki Puttonen -Jérémy Leherpeur -Jérôme Petazzoni -Jörg Thalheim -K. Heller -Kai Blin -Kai Qiang Wu (Kennan) -Kaijie Chen -Kaita Nakamura -Kamil Domański -Kamjar Gerami -Kanstantsin Shautsou -Kara Alexandra -Karan Lyons -Kareem Khazem -kargakis -Karl Grzeszczak -Karol Duleba -Karthik Karanth -Karthik Nayak -Kasper Fabæch Brandt -Kate Heddleston -Katie McLaughlin -Kato Kazuyoshi -Katrina Owen -Kawsar Saiyeed -Kay Yan -kayrus -Kazuhiro Sera -Kazuyoshi Kato -Ke Li -Ke Xu -Kei Ohmura -Keith Hudgins -Keli Hu -Ken Bannister -Ken Cochrane -Ken Herner -Ken ICHIKAWA -Ken Reese -Kenfe-Mickaël Laventure -Kenjiro Nakayama -Kent Johnson -Kenta Tada -Kevin "qwazerty" Houdebert -Kevin Alvarez -Kevin Burke -Kevin Clark -Kevin Feyrer -Kevin J. Lynagh -Kevin Jing Qiu -Kevin Kern -Kevin Menard -Kevin Meredith -Kevin P. Kucharczyk -Kevin Parsons -Kevin Richardson -Kevin Shi -Kevin Wallace -Kevin Yap -Keyvan Fatehi -kies -Kim BKC Carlbacker -Kim Eik -Kimbro Staken -Kir Kolyshkin -Kiran Gangadharan -Kirill SIbirev -Kirk Easterson -knappe -Kohei Tsuruta -Koichi Shiraishi -Konrad Kleine -Konrad Ponichtera -Konstantin Gribov -Konstantin L -Konstantin Pelykh -Kostadin Plachkov -kpcyrd -Krasi Georgiev -Krasimir Georgiev -Kris-Mikael Krister -Kristian Haugene -Kristian Heljas -Kristina Zabunova -Krystian Wojcicki -Kunal Kushwaha -Kunal Tyagi -Kyle Conroy -Kyle Linden -Kyle Squizzato -Kyle Wuolle -kyu -Lachlan Coote -Lai Jiangshan -Lajos Papp -Lakshan Perera -Lalatendu Mohanty -Lance Chen -Lance Kinley -Lars Andringa -Lars Butler -Lars Kellogg-Stedman -Lars R. Damerow -Lars-Magnus Skog -Laszlo Meszaros -Laura Brehm -Laura Frank -Laurent Bernaille -Laurent Erignoux -Laurent Goderre -Laurie Voss -Leandro Motta Barros -Leandro Siqueira -Lee Calcote -Lee Chao <932819864@qq.com> -Lee, Meng-Han -Lei Gong -Lei Jitang -Leiiwang -Len Weincier -Lennie -Leo Gallucci -Leonardo Nodari -Leonardo Taccari -Leszek Kowalski -Levi Blackstone -Levi Gross -Levi Harrison -Lewis Daly -Lewis Marshall -Lewis Peckover -Li Yi -Liam Macgillavry -Liana Lo -Liang Mingqiang -Liang-Chi Hsieh -liangwei -Liao Qingwei -Lifubang -Lihua Tang -Lily Guo -limeidan -Lin Lu -LingFaKe -Linus Heckemann -Liran Tal -Liron Levin -Liu Bo -Liu Hua -liwenqi -lixiaobing10051267 -Liz Zhang -LIZAO LI -Lizzie Dixon <_@lizzie.io> -Lloyd Dewolf -Lokesh Mandvekar -longliqiang88 <394564827@qq.com> -Lorenz Leutgeb -Lorenzo Fontana -Lotus Fenn -Louis Delossantos -Louis Opter -Luboslav Pivarc -Luca Favatella -Luca Marturana -Luca Orlandi -Luca-Bogdan Grigorescu -Lucas Chan -Lucas Chi -Lucas Molas -Lucas Silvestre -Luciano Mores -Luis Henrique Mulinari -Luis Martínez de Bartolomé Izquierdo -Luiz Svoboda -Lukas Heeren -Lukas Waslowski -lukaspustina -Lukasz Zajaczkowski -Luke Marsden -Lyn -Lynda O'Leary -Lénaïc Huard -Ma Müller -Ma Shimiao -Mabin -Madhan Raj Mookkandy -Madhav Puri -Madhu Venugopal -Mageee -maggie44 <64841595+maggie44@users.noreply.github.com> -Mahesh Tiyyagura -malnick -Malte Janduda -Manfred Touron -Manfred Zabarauskas -Manjunath A Kumatagi -Mansi Nahar -Manuel Meurer -Manuel Rüger -Manuel Woelker -mapk0y -Marat Radchenko -Marc Abramowitz -Marc Kuo -Marc Tamsky -Marcel Edmund Franke -Marcelo Horacio Fortino -Marcelo Salazar -Marco Hennings -Marcus Cobden -Marcus Farkas -Marcus Linke -Marcus Martins -Marcus Ramberg -Marek Goldmann -Marian Marinov -Marianna Tessel -Mario Loriedo -Marius Gundersen -Marius Sturm -Marius Voila -Mark Allen -Mark Feit -Mark Jeromin -Mark McGranaghan -Mark McKinstry -Mark Milstein -Mark Oates -Mark Parker -Mark Vainomaa -Mark West -Markan Patel -Marko Mikulicic -Marko Tibold -Markus Fix -Markus Kortlang -Martijn Dwars -Martijn van Oosterhout -Martin Braun -Martin Dojcak -Martin Honermeyer -Martin Jirku -Martin Kelly -Martin Mosegaard Amdisen -Martin Muzatko -Martin Redmond -Maru Newby -Mary Anthony -Masahito Zembutsu -Masato Ohba -Masayuki Morita -Mason Malone -Mateusz Sulima -Mathias Monnerville -Mathieu Champlon -Mathieu Le Marec - Pasquet -Mathieu Parent -Mathieu Paturel -Matt Apperson -Matt Bachmann -Matt Bajor -Matt Bentley -Matt Haggard -Matt Hoyle -Matt McCormick -Matt Moore -Matt Morrison <3maven@gmail.com> -Matt Richardson -Matt Rickard -Matt Robenolt -Matt Schurenko -Matt Williams -Matthew Heon -Matthew Lapworth -Matthew Mayer -Matthew Mosesohn -Matthew Mueller -Matthew Riley -Matthias Klumpp -Matthias Kühnle -Matthias Rampke -Matthieu Fronton -Matthieu Hauglustaine -Matthieu MOREL -Mattias Jernberg -Mauricio Garavaglia -mauriyouth -Max Harmathy -Max Shytikov -Max Timchenko -Maxim Fedchyshyn -Maxim Ivanov -Maxim Kulkin -Maxim Treskin -Maxime Petazzoni -Maximiliano Maccanti -Maxwell -Meaglith Ma -meejah -Megan Kostick -Mehul Kar -Mei ChunTao -Mengdi Gao -Menghui Chen -Mert Yazıcıoğlu -mgniu -Micah Zoltu -Michael A. Smith -Michael Beskin -Michael Bridgen -Michael Brown -Michael Chiang -Michael Crosby -Michael Currie -Michael Friis -Michael Gorsuch -Michael Grauer -Michael Holzheu -Michael Hudson-Doyle -Michael Huettermann -Michael Irwin -Michael Kebe -Michael Kuehn -Michael Käufl -Michael Neale -Michael Nussbaum -Michael Prokop -Michael Scharf -Michael Spetsiotis -Michael Stapelberg -Michael Steinert -Michael Thies -Michael Weidmann -Michael West -Michael Zhao -Michal Fojtik -Michal Gebauer -Michal Jemala -Michal Kostrzewa -Michal Minář -Michal Rostecki -Michal Wieczorek -Michaël Pailloncy -Michał Czeraszkiewicz -Michał Gryko -Michał Kosek -Michiel de Jong -Mickaël Fortunato -Mickaël Remars -Miguel Angel Fernández -Miguel Morales -Miguel Perez -Mihai Borobocea -Mihuleacc Sergiu -Mikael Davranche -Mike Brown -Mike Bush -Mike Casas -Mike Chelen -Mike Danese -Mike Dillon -Mike Dougherty -Mike Estes -Mike Gaffney -Mike Goelzer -Mike Leone -Mike Lundy -Mike MacCana -Mike Naberezny -Mike Snitzer -Mike Sul -mikelinjie <294893458@qq.com> -Mikhail Sobolev -Miklos Szegedi -Milas Bowman -Milind Chawre -Miloslav Trmač -mingqing -Mingzhen Feng -Misty Stanley-Jones -Mitch Capper -Mizuki Urushida -mlarcher -Mohammad Banikazemi -Mohammad Nasirifar -Mohammed Aaqib Ansari -Mohd Sadiq -Mohit Soni -Moorthy RS -Morgan Bauer -Morgante Pell -Morgy93 -Morten Siebuhr -Morton Fox -Moysés Borges -mrfly -Mrunal Patel -Muayyad Alsadi -Muhammad Zohaib Aslam -Mustafa Akın -Muthukumar R -Myeongjoon Kim -Máximo Cuadros -Médi-Rémi Hashim -Nace Oroz -Nahum Shalman -Nakul Pathak -Nalin Dahyabhai -Nan Monnand Deng -Naoki Orii -Natalie Parker -Natanael Copa -Natasha Jarus -Nate Brennand -Nate Eagleson -Nate Jones -Nathan Baulch -Nathan Carlson -Nathan Herald -Nathan Hsieh -Nathan Kleyn -Nathan LeClaire -Nathan McCauley -Nathan Williams -Naveed Jamil -Neal McBurnett -Neil Horman -Neil Peterson -Nelson Chen -Neyazul Haque -Nghia Tran -Niall O'Higgins -Nicholas E. Rabenau -Nick Adcock -Nick DeCoursin -Nick Irvine -Nick Neisen -Nick Parker -Nick Payne -Nick Russo -Nick Santos -Nick Stenning -Nick Stinemates -Nick Wood -NickrenREN -Nicola Kabar -Nicolas Borboën -Nicolas De Loof -Nicolas Dudebout -Nicolas Goy -Nicolas Kaiser -Nicolas Sterchele -Nicolas V Castet -Nicolás Hock Isaza -Niel Drummond -Nigel Poulton -Nik Nyby -Nikhil Chawla -NikolaMandic -Nikolas Garofil -Nikolay Edigaryev -Nikolay Milovanov -ningmingxiao -Nirmal Mehta -Nishant Totla -NIWA Hideyuki -Noah Meyerhans -Noah Treuhaft -NobodyOnSE -noducks -Nolan Darilek -Nolan Miles -Noriki Nakamura -nponeccop -Nurahmadie -Nuutti Kotivuori -nzwsch -O.S. Tezer -objectified -Octol1ttle -Odin Ugedal -Oguz Bilgic -Oh Jinkyun -Ohad Schneider -ohmystack -Ole Reifschneider -Oliver Neal -Oliver Reason -Olivier Gambier -Olle Jonsson -Olli Janatuinen -Olly Pomeroy -Omri Shiv -Onur Filiz -Oriol Francès -Oscar Bonilla <6f6231@gmail.com> -oscar.chen <2972789494@qq.com> -Oskar Niburski -Otto Kekäläinen -Ouyang Liduo -Ovidio Mallo -Panagiotis Moustafellos -Paolo G. Giarrusso -Pascal -Pascal Bach -Pascal Borreli -Pascal Hartig -Patrick Böänziger -Patrick Devine -Patrick Haas -Patrick Hemmer -Patrick St. laurent -Patrick Stapleton -Patrik Cyvoct -Patrik Leifert -pattichen -Paul "TBBle" Hampson -Paul -paul -Paul Annesley -Paul Bellamy -Paul Bowsher -Paul Furtado -Paul Hammond -Paul Jimenez -Paul Kehrer -Paul Lietar -Paul Liljenberg -Paul Morie -Paul Nasrat -Paul Seiffert -Paul Weaver -Paulo Gomes -Paulo Ribeiro -Pavel Lobashov -Pavel Matěja -Pavel Pletenev -Pavel Pospisil -Pavel Sutyrin -Pavel Tikhomirov -Pavlos Ratis -Pavol Vargovcik -Pawel Konczalski -Paweł Gronowski -payall4u -Peeyush Gupta -Peggy Li -Pei Su -Peng Tao -Penghan Wang -Per Weijnitz -perhapszzy@sina.com -Pete Woods -Peter Bourgon -Peter Braden -Peter Bücker -Peter Choi -Peter Dave Hello -Peter Edge -Peter Ericson -Peter Esbensen -Peter Jaffe -Peter Kang -Peter Malmgren -Peter Salvatore -Peter Volpe -Peter Waller -Petr Švihlík -Petros Angelatos -Phil -Phil Estes -Phil Sphicas -Phil Spitler -Philip Alexander Etling -Philip K. Warren -Philip Monroe -Philipp Fruck -Philipp Gillé -Philipp Wahala -Philipp Weissensteiner -Phillip Alexander -phineas -pidster -Piergiuliano Bossi -Pierre -Pierre Carrier -Pierre Dal-Pra -Pierre Wacrenier -Pierre-Alain RIVIERE -pinglanlu -Piotr Bogdan -Piotr Karbowski -Porjo -Poul Kjeldager Sørensen -Pradeep Chhetri -Pradip Dhara -Pradipta Kr. Banerjee -Prasanna Gautam -Pratik Karki -Prayag Verma -Priya Wadhwa -Projjol Banerji -Przemek Hejman -Puneet Pruthi -Pure White -pysqz -Qiang Huang -Qin TianHuan -Qinglan Peng -Quan Tian -qudongfang -Quentin Brossard -Quentin Perez -Quentin Tayssier -r0n22 -Rachit Sharma -Radostin Stoyanov -Rafael Fernández López -Rafal Jeczalik -Rafe Colton -Raghavendra K T -Raghuram Devarakonda -Raja Sami -Rajat Pandit -Rajdeep Dua -Ralf Sippl -Ralle -Ralph Bean -Ramkumar Ramachandra -Ramon Brooker -Ramon van Alteren -RaviTeja Pothana -Ray Tsang -ReadmeCritic -realityone -Recursive Madman -Reficul -Regan McCooey -Remi Rampin -Remy Suen -Renato Riccieri Santos Zannon -Renaud Gaubert -Rhys Hiltner -Ri Xu -Ricardo N Feliciano -Rich Horwood -Rich Moyse -Rich Seymour -Richard Burnison -Richard Hansen -Richard Harvey -Richard Mathie -Richard Metzler -Richard Scothern -Richo Healey -Rick Bradley -Rick van de Loo -Rick Wieman -Rik Nijessen -Riku Voipio -Riley Guerin -Ritesh H Shukla -Riyaz Faizullabhoy -Rob Cowsill <42620235+rcowsill@users.noreply.github.com> -Rob Gulewich -Rob Murray -Rob Vesse -Robert Bachmann -Robert Bittle -Robert Obryk -Robert Schneider -Robert Shade -Robert Stern -Robert Sturla -Robert Terhaar -Robert Wallis -Robert Wang -Roberto G. Hashioka -Roberto Muñoz Fernández -Robin Naundorf -Robin Schneider -Robin Speekenbrink -Robin Thoni -robpc -Rodolfo Carvalho -Rodrigo Campos -Rodrigo Vaz -Roel Van Nyen -Roger Peppe -Rohit Jnagal -Rohit Kadam -Rohit Kapur -Rojin George -Roland Huß -Roland Kammerer -Roland Moriz -Roma Sokolov -Roman Dudin -Roman Mazur -Roman Strashkin -Roman Volosatovs -Roman Zabaluev -Ron Smits -Ron Williams -Rong Gao -Rong Zhang -Rongxiang Song -Rony Weng -root -root -root -root -Rory Hunter -Rory McCune -Ross Boucher -Rovanion Luckey -Roy Reznik -Royce Remer -Rozhnov Alexandr -Rudolph Gottesheim -Rui Cao -Rui JingAn -Rui Lopes -Ruilin Li -Runshen Zhu -Russ Magee -Ryan Abrams -Ryan Anderson -Ryan Aslett -Ryan Barry -Ryan Belgrave -Ryan Campbell -Ryan Detzel -Ryan Fowler -Ryan Liu -Ryan McLaughlin -Ryan O'Donnell -Ryan Seto -Ryan Shea -Ryan Simmen -Ryan Stelly -Ryan Thomas -Ryan Trauntvein -Ryan Wallner -Ryan Zhang -ryancooper7 -RyanDeng -Ryo Nakao -Ryoga Saito -Régis Behmo -Rémy Greinhofer -s. rannou -Sabin Basyal -Sachin Joshi -Sagar Hani -Sainath Grandhi -Sakeven Jiang -Salahuddin Khan -Sally O'Malley -Sam Abed -Sam Alba -Sam Bailey -Sam J Sharpe -Sam Neirinck -Sam Reis -Sam Rijs -Sam Thibault -Sam Whited -Sambuddha Basu -Sami Wagiaalla -Samuel Andaya -Samuel Dion-Girardeau -Samuel Karp -Samuel PHAN -sanchayanghosh -Sandeep Bansal -Sankar சங்கர் -Sanket Saurav -Santhosh Manohar -sapphiredev -Sargun Dhillon -Sascha Andres -Sascha Grunert -SataQiu -Satnam Singh -Satoshi Amemiya -Satoshi Tagomori -Scott Bessler -Scott Collier -Scott Johnston -Scott Moser -Scott Percival -Scott Stamp -Scott Walls -sdreyesg -Sean Christopherson -Sean Cronin -Sean Lee -Sean McIntyre -Sean OMeara -Sean P. Kane -Sean Rodman -Sebastiaan van Steenis -Sebastiaan van Stijn -Sebastian Höffner -Sebastian Radloff -Sebastian Thomschke -Sebastien Goasguen -Senthil Kumar Selvaraj -Senthil Kumaran -SeongJae Park -Seongyeol Lim -Serge Hallyn -Sergey Alekseev -Sergey Evstifeev -Sergii Kabashniuk -Sergio Lopez -Serhat Gülçiçek -Serhii Nakon -SeungUkLee -Sevki Hasirci -Shane Canon -Shane da Silva -Shaun Kaasten -Shaun Thompson -shaunol -Shawn Landden -Shawn Siefkas -shawnhe -Shayan Pooya -Shayne Wang -Shekhar Gulati -Sheng Yang -Shengbo Song -Shengjing Zhu -Shev Yan -Shih-Yuan Lee -Shihao Xia -Shijiang Wei -Shijun Qin -Shishir Mahajan -Shoubhik Bose -Shourya Sarcar -Shreenidhi Shedi -Shu-Wai Chow -shuai-z -Shukui Yang -Sian Lerk Lau -Siarhei Rasiukevich -Sidhartha Mani -sidharthamani -Silas Sewell -Silvan Jegen -Simão Reis -Simon Barendse -Simon Eskildsen -Simon Ferquel -Simon Leinen -Simon Menke -Simon Taranto -Simon Vikstrom -Sindhu S -Sjoerd Langkemper -skanehira -Smark Meng -Solganik Alexander -Solomon Hykes -Song Gao -Soshi Katsuta -Sotiris Salloumis -Soulou -Spencer Brown -Spencer Smith -Spike Curtis -Sridatta Thatipamala -Sridhar Ratnakumar -Srini Brahmaroutu -Srinivasan Srivatsan -Staf Wagemakers -Stanislav Bondarenko -Stanislav Levin -Steeve Morin -Stefan Berger -Stefan Gehrig -Stefan J. Wernli -Stefan Praszalowicz -Stefan S. -Stefan Scherer -Stefan Staudenmeyer -Stefan Weil -Steffen Butzer -Stephan Henningsen -Stephan Spindler -Stephen Benjamin -Stephen Crosby -Stephen Day -Stephen Drake -Stephen Rust -Steve Desmond -Steve Dougherty -Steve Durrheimer -Steve Francia -Steve Koch -Steven Burgess -Steven Erenst -Steven Hartland -Steven Iveson -Steven Merrill -Steven Richards -Steven Taylor -Stéphane Este-Gracias -Stig Larsson -Su Wang -Subhajit Ghosh -Sujith Haridasan -Sun Gengze <690388648@qq.com> -Sun Jianbo -Sune Keller -Sunny Gogoi -Suryakumar Sudar -Sven Dowideit -Swapnil Daingade -Sylvain Baubeau -Sylvain Bellemare -Sébastien -Sébastien HOUZÉ -Sébastien Luttringer -Sébastien Stormacq -Sören Tempel -Tabakhase -Tadej Janež -Tadeusz Dudkiewicz -Takuto Sato -tang0th -Tangi Colin -Tatsuki Sugiura -Tatsushi Inagaki -Taylan Isikdemir -Taylor Jones -tcpdumppy <847462026@qq.com> -Ted M. Young -Tehmasp Chaudhri -Tejaswini Duggaraju -Tejesh Mehta -Terry Chu -terryding77 <550147740@qq.com> -Thatcher Peskens -theadactyl -Thell 'Bo' Fowler -Thermionix -Thiago Alves Silva -Thijs Terlouw -Thomas Bikeev -Thomas Frössman -Thomas Gazagnaire -Thomas Graf -Thomas Grainger -Thomas Hansen -Thomas Ledos -Thomas Leonard -Thomas Léveil -Thomas Orozco -Thomas Riccardi -Thomas Schroeter -Thomas Sjögren -Thomas Swift -Thomas Tanaka -Thomas Texier -Ti Zhou -Tiago Seabra -Tianon Gravi -Tianyi Wang -Tibor Vass -Tiffany Jernigan -Tiffany Low -Till Claassen -Till Wegmüller -Tim -Tim Bart -Tim Bosse -Tim Dettrick -Tim Düsterhus -Tim Hockin -Tim Potter -Tim Ruffles -Tim Smith -Tim Terhorst -Tim Wagner -Tim Wang -Tim Waugh -Tim Wraight -Tim Zju <21651152@zju.edu.cn> -timchenxiaoyu <837829664@qq.com> -timfeirg -Timo Rothenpieler -Timothy Hobbs -tjwebb123 -tobe -Tobias Bieniek -Tobias Bradtke -Tobias Gesellchen -Tobias Klauser -Tobias Munk -Tobias Pfandzelter -Tobias Schmidt -Tobias Schwab -Todd Crane -Todd Lunter -Todd Whiteman -Toli Kuznets -Tom Barlow -Tom Booth -Tom Denham -Tom Fotherby -Tom Howe -Tom Hulihan -Tom Maaswinkel -Tom Parker -Tom Sweeney -Tom Wilkie -Tom X. Tobin -Tom Zhao -Tomas Janousek -Tomas Kral -Tomas Tomecek -Tomasz Kopczynski -Tomasz Lipinski -Tomasz Nurkiewicz -Tomek Mańko -Tommaso Visconti -Tomoya Tabuchi -Tomáš Hrčka -Tomáš Virtus -tonic -Tonny Xu -Tony Abboud -Tony Daws -Tony Miller -toogley -Torstein Husebø -Toshiaki Makita -Tõnis Tiigi -Trace Andreason -tracylihui <793912329@qq.com> -Trapier Marshall -Travis Cline -Travis Thieman -Trent Ogren -Trevor -Trevor Pounds -Trevor Sullivan -Trishna Guha -Tristan Carel -Troy Denton -Tudor Brindus -Ty Alexander -Tycho Andersen -Tyler Brock -Tyler Brown -Tzu-Jung Lee -uhayate -Ulysse Carion -Umesh Yadav -Utz Bacher -vagrant -Vaidas Jablonskis -Valentin Kulesh -vanderliang -Velko Ivanov -Veres Lajos -Victor Algaze -Victor Coisne -Victor Costan -Victor I. Wood -Victor Lyuboslavsky -Victor Marmol -Victor Palma -Victor Toni -Victor Vieux -Victoria Bialas -Vijaya Kumar K -Vikas Choudhary -Vikram bir Singh -Viktor Stanchev -Viktor Vojnovski -VinayRaghavanKS -Vincent Batts -Vincent Bernat -Vincent Boulineau -Vincent Demeester -Vincent Giersch -Vincent Mayers -Vincent Woo -Vinod Kulkarni -Vishal Doshi -Vishnu Kannan -Vitaly Ostrosablin -Vitor Anjos -Vitor Monteiro -Vivek Agarwal -Vivek Dasgupta -Vivek Goyal -Vladimir Bulyga -Vladimir Kirillov -Vladimir Pouzanov -Vladimir Rutsky -Vladimir Varankin -VladimirAus -Vladislav Kolesnikov -Vlastimil Zeman -Vojtech Vitek (V-Teq) -voloder <110066198+voloder@users.noreply.github.com> -Walter Leibbrandt -Walter Stanish -Wang Chao -Wang Guoliang -Wang Jie -Wang Long -Wang Ping -Wang Xing -Wang Yuexiao -Wang Yumu <37442693@qq.com> -wanghuaiqing -Ward Vandewege -WarheadsSE -Wassim Dhif -Wataru Ishida -Wayne Chang -Wayne Song -weebney -Weerasak Chongnguluam -Wei Fu -Wei Wu -Wei-Ting Kuo -weipeng -weiyan -Weiyang Zhu -Wen Cheng Ma -Wendel Fleming -Wenjun Tang -Wenkai Yin -wenlxie -Wenxuan Zhao -Wenyu You <21551128@zju.edu.cn> -Wenzhi Liang -Wes Morgan -Wesley Pettit -Wewang Xiaorenfine -Wiktor Kwapisiewicz -Will Dietz -Will Rouesnel -Will Weaver -willhf -William Delanoue -William Henry -William Hubbs -William Martin -William Riancho -William Thurston -Wilson Júnior -Wing-Kam Wong -WiseTrem -Wolfgang Nagele -Wolfgang Powisch -Wonjun Kim -WuLonghui -xamyzhao -Xia Wu -Xian Chaobo -Xianglin Gao -Xianjie -Xianlu Bird -Xiao YongBiao -Xiao Zhang -XiaoBing Jiang -Xiaodong Liu -Xiaodong Zhang -Xiaohua Ding -Xiaoxi He -Xiaoxu Chen -Xiaoyu Zhang -xichengliudui <1693291525@qq.com> -xiekeyang -Ximo Guanter Gonzálbez -xin.li -Xinbo Weng -Xinfeng Liu -Xinzi Zhou -Xiuming Chen -Xuecong Liao -xuzhaokui -Yadnyawalkya Tale -Yahya -yalpul -YAMADA Tsuyoshi -Yamasaki Masahide -Yamazaki Masashi -Yan Feng -Yan Zhu -Yang Bai -Yang Li -Yang Pengfei -yangchenliang -Yann Autissier -Yanqiang Miao -Yao Zaiyong -Yash Murty -Yassine Tijani -Yasunori Mahata -Yazhong Liu -Yestin Sun -Yi EungJun -Yibai Zhang -Yihang Ho -Ying Li -Yohei Ueda -Yong Tang -Yongxin Li -Yongzhi Pan -Yosef Fertel -You-Sheng Yang (楊有勝) -youcai -Youcef YEKHLEF -Youfu Zhang -YR Chen -Yu Changchun -Yu Chengxia -Yu Peng -Yu-Ju Hong -Yuan Sun -Yuanhong Peng -Yue Zhang -Yufei Xiong -Yuhao Fang -Yuichiro Kaneko -YujiOshima -Yunxiang Huang -Yurii Rashkovskii -Yusuf Tarık Günaydın -Yves Blusseau <90z7oey02@sneakemail.com> -Yves Junqueira -Zac Dover -Zach Borboa -Zach Gershman -Zachary Jaffee -Zain Memon -Zaiste! -Zane DeGraffenried -Zefan Li -Zen Lin(Zhinan Lin) -Zhang Kun -Zhang Wei -Zhang Wentao -zhangguanzhang -ZhangHang -zhangxianwei -Zhenan Ye <21551168@zju.edu.cn> -zhenghenghuo -Zhenhai Gao -Zhenkun Bi -ZhiPeng Lu -zhipengzuo -Zhou Hao -Zhoulin Xie -Zhu Guihua -Zhu Kunjia -Zhuoyun Wei -Ziheng Liu -Zilin Du -zimbatm -Ziming Dong -ZJUshuaizhou <21551191@zju.edu.cn> -zmarouf -Zoltan Tombol -Zou Yu -zqh -Zuhayr Elahi -Zunayed Ali -Álvaro Lázaro -Átila Camurça Alves -吴小白 <296015668@qq.com> -尹吉峰 -屈骏 -徐俊杰 -慕陶 -搏通 -黄艳红00139573 -정재영 diff --git a/vendor/github.com/docker/docker/LICENSE b/vendor/github.com/docker/docker/LICENSE deleted file mode 100644 index 6d8d58fb..00000000 --- a/vendor/github.com/docker/docker/LICENSE +++ /dev/null @@ -1,191 +0,0 @@ - - Apache License - Version 2.0, January 2004 - https://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright 2013-2018 Docker, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/vendor/github.com/docker/docker/NOTICE b/vendor/github.com/docker/docker/NOTICE deleted file mode 100644 index 58b19b6d..00000000 --- a/vendor/github.com/docker/docker/NOTICE +++ /dev/null @@ -1,19 +0,0 @@ -Docker -Copyright 2012-2017 Docker, Inc. - -This product includes software developed at Docker, Inc. (https://www.docker.com). - -This product contains software (https://github.com/creack/pty) developed -by Keith Rarick, licensed under the MIT License. - -The following is courtesy of our legal counsel: - - -Use and transfer of Docker may be subject to certain restrictions by the -United States and other governments. -It is your responsibility to ensure that your use and/or transfer does not -violate applicable laws. - -For more information, please see https://www.bis.doc.gov - -See also https://www.apache.org/dev/crypto.html and/or seek legal counsel. diff --git a/vendor/github.com/docker/docker/api/README.md b/vendor/github.com/docker/docker/api/README.md deleted file mode 100644 index 381f1988..00000000 --- a/vendor/github.com/docker/docker/api/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# Working on the Engine API - -The Engine API is an HTTP API used by the command-line client to communicate with the daemon. It can also be used by third-party software to control the daemon. - -It consists of various components in this repository: - -- `api/swagger.yaml` A Swagger definition of the API. -- `api/types/` Types shared by both the client and server, representing various objects, options, responses, etc. Most are written manually, but some are automatically generated from the Swagger definition. See [#27919](https://github.com/docker/docker/issues/27919) for progress on this. -- `cli/` The command-line client. -- `client/` The Go client used by the command-line client. It can also be used by third-party Go programs. -- `daemon/` The daemon, which serves the API. - -## Swagger definition - -The API is defined by the [Swagger](http://swagger.io/specification/) definition in `api/swagger.yaml`. This definition can be used to: - -1. Automatically generate documentation. -2. Automatically generate the Go server and client. (A work-in-progress.) -3. Provide a machine readable version of the API for introspecting what it can do, automatically generating clients for other languages, etc. - -## Updating the API documentation - -The API documentation is generated entirely from `api/swagger.yaml`. If you make updates to the API, edit this file to represent the change in the documentation. - -The file is split into two main sections: - -- `definitions`, which defines re-usable objects used in requests and responses -- `paths`, which defines the API endpoints (and some inline objects which don't need to be reusable) - -To make an edit, first look for the endpoint you want to edit under `paths`, then make the required edits. Endpoints may reference reusable objects with `$ref`, which can be found in the `definitions` section. - -There is hopefully enough example material in the file for you to copy a similar pattern from elsewhere in the file (e.g. adding new fields or endpoints), but for the full reference, see the [Swagger specification](https://github.com/docker/docker/issues/27919). - -`swagger.yaml` is validated by `hack/validate/swagger` to ensure it is a valid Swagger definition. This is useful when making edits to ensure you are doing the right thing. - -## Viewing the API documentation - -When you make edits to `swagger.yaml`, you may want to check the generated API documentation to ensure it renders correctly. - -Run `make swagger-docs` and a preview will be running at `http://localhost:9000`. Some of the styling may be incorrect, but you'll be able to ensure that it is generating the correct documentation. - -The production documentation is generated by vendoring `swagger.yaml` into [docker/docker.github.io](https://github.com/docker/docker.github.io). diff --git a/vendor/github.com/docker/docker/api/common.go b/vendor/github.com/docker/docker/api/common.go deleted file mode 100644 index 702d3dca..00000000 --- a/vendor/github.com/docker/docker/api/common.go +++ /dev/null @@ -1,20 +0,0 @@ -package api - -// Common constants for daemon and client. -const ( - // DefaultVersion of the current REST API. - DefaultVersion = "1.51" - - // MinSupportedAPIVersion is the minimum API version that can be supported - // by the API server, specified as "major.minor". Note that the daemon - // may be configured with a different minimum API version, as returned - // in [github.com/docker/docker/api/types.Version.MinAPIVersion]. - // - // API requests for API versions lower than the configured version produce - // an error. - MinSupportedAPIVersion = "1.24" - - // NoBaseImageSpecifier is the symbol used by the FROM - // command to specify that no base image is to be used. - NoBaseImageSpecifier = "scratch" -) diff --git a/vendor/github.com/docker/docker/api/swagger-gen.yaml b/vendor/github.com/docker/docker/api/swagger-gen.yaml deleted file mode 100644 index f07a0273..00000000 --- a/vendor/github.com/docker/docker/api/swagger-gen.yaml +++ /dev/null @@ -1,12 +0,0 @@ - -layout: - models: - - name: definition - source: asset:model - target: "{{ joinFilePath .Target .ModelPackage }}" - file_name: "{{ (snakize (pascalize .Name)) }}.go" - operations: - - name: handler - source: asset:serverOperation - target: "{{ joinFilePath .Target .APIPackage .Package }}" - file_name: "{{ (snakize (pascalize .Name)) }}.go" diff --git a/vendor/github.com/docker/docker/api/swagger.yaml b/vendor/github.com/docker/docker/api/swagger.yaml deleted file mode 100644 index feb42e80..00000000 --- a/vendor/github.com/docker/docker/api/swagger.yaml +++ /dev/null @@ -1,13379 +0,0 @@ -# A Swagger 2.0 (a.k.a. OpenAPI) definition of the Engine API. -# -# This is used for generating API documentation and the types used by the -# client/server. See api/README.md for more information. -# -# Some style notes: -# - This file is used by ReDoc, which allows GitHub Flavored Markdown in -# descriptions. -# - There is no maximum line length, for ease of editing and pretty diffs. -# - operationIds are in the format "NounVerb", with a singular noun. - -swagger: "2.0" -schemes: - - "http" - - "https" -produces: - - "application/json" - - "text/plain" -consumes: - - "application/json" - - "text/plain" -basePath: "/v1.51" -info: - title: "Docker Engine API" - version: "1.51" - x-logo: - url: "https://docs.docker.com/assets/images/logo-docker-main.png" - description: | - The Engine API is an HTTP API served by Docker Engine. It is the API the - Docker client uses to communicate with the Engine, so everything the Docker - client can do can be done with the API. - - Most of the client's commands map directly to API endpoints (e.g. `docker ps` - is `GET /containers/json`). The notable exception is running containers, - which consists of several API calls. - - # Errors - - The API uses standard HTTP status codes to indicate the success or failure - of the API call. The body of the response will be JSON in the following - format: - - ``` - { - "message": "page not found" - } - ``` - - # Versioning - - The API is usually changed in each release, so API calls are versioned to - ensure that clients don't break. To lock to a specific version of the API, - you prefix the URL with its version, for example, call `/v1.30/info` to use - the v1.30 version of the `/info` endpoint. If the API version specified in - the URL is not supported by the daemon, a HTTP `400 Bad Request` error message - is returned. - - If you omit the version-prefix, the current version of the API (v1.50) is used. - For example, calling `/info` is the same as calling `/v1.51/info`. Using the - API without a version-prefix is deprecated and will be removed in a future release. - - Engine releases in the near future should support this version of the API, - so your client will continue to work even if it is talking to a newer Engine. - - The API uses an open schema model, which means the server may add extra properties - to responses. Likewise, the server will ignore any extra query parameters and - request body properties. When you write clients, you need to ignore additional - properties in responses to ensure they do not break when talking to newer - daemons. - - - # Authentication - - Authentication for registries is handled client side. The client has to send - authentication details to various endpoints that need to communicate with - registries, such as `POST /images/(name)/push`. These are sent as - `X-Registry-Auth` header as a [base64url encoded](https://tools.ietf.org/html/rfc4648#section-5) - (JSON) string with the following structure: - - ``` - { - "username": "string", - "password": "string", - "serveraddress": "string" - } - ``` - - The `serveraddress` is a domain/IP without a protocol. Throughout this - structure, double quotes are required. - - If you have already got an identity token from the [`/auth` endpoint](#operation/SystemAuth), - you can just pass this instead of credentials: - - ``` - { - "identitytoken": "9cbaf023786cd7..." - } - ``` - -# The tags on paths define the menu sections in the ReDoc documentation, so -# the usage of tags must make sense for that: -# - They should be singular, not plural. -# - There should not be too many tags, or the menu becomes unwieldy. For -# example, it is preferable to add a path to the "System" tag instead of -# creating a tag with a single path in it. -# - The order of tags in this list defines the order in the menu. -tags: - # Primary objects - - name: "Container" - x-displayName: "Containers" - description: | - Create and manage containers. - - name: "Image" - x-displayName: "Images" - - name: "Network" - x-displayName: "Networks" - description: | - Networks are user-defined networks that containers can be attached to. - See the [networking documentation](https://docs.docker.com/network/) - for more information. - - name: "Volume" - x-displayName: "Volumes" - description: | - Create and manage persistent storage that can be attached to containers. - - name: "Exec" - x-displayName: "Exec" - description: | - Run new commands inside running containers. Refer to the - [command-line reference](https://docs.docker.com/engine/reference/commandline/exec/) - for more information. - - To exec a command in a container, you first need to create an exec instance, - then start it. These two API endpoints are wrapped up in a single command-line - command, `docker exec`. - - # Swarm things - - name: "Swarm" - x-displayName: "Swarm" - description: | - Engines can be clustered together in a swarm. Refer to the - [swarm mode documentation](https://docs.docker.com/engine/swarm/) - for more information. - - name: "Node" - x-displayName: "Nodes" - description: | - Nodes are instances of the Engine participating in a swarm. Swarm mode - must be enabled for these endpoints to work. - - name: "Service" - x-displayName: "Services" - description: | - Services are the definitions of tasks to run on a swarm. Swarm mode must - be enabled for these endpoints to work. - - name: "Task" - x-displayName: "Tasks" - description: | - A task is a container running on a swarm. It is the atomic scheduling unit - of swarm. Swarm mode must be enabled for these endpoints to work. - - name: "Secret" - x-displayName: "Secrets" - description: | - Secrets are sensitive data that can be used by services. Swarm mode must - be enabled for these endpoints to work. - - name: "Config" - x-displayName: "Configs" - description: | - Configs are application configurations that can be used by services. Swarm - mode must be enabled for these endpoints to work. - # System things - - name: "Plugin" - x-displayName: "Plugins" - - name: "System" - x-displayName: "System" - -definitions: - Port: - type: "object" - description: "An open port on a container" - required: [PrivatePort, Type] - properties: - IP: - type: "string" - format: "ip-address" - description: "Host IP address that the container's port is mapped to" - PrivatePort: - type: "integer" - format: "uint16" - x-nullable: false - description: "Port on the container" - PublicPort: - type: "integer" - format: "uint16" - description: "Port exposed on the host" - Type: - type: "string" - x-nullable: false - enum: ["tcp", "udp", "sctp"] - example: - PrivatePort: 8080 - PublicPort: 80 - Type: "tcp" - - MountPoint: - type: "object" - description: | - MountPoint represents a mount point configuration inside the container. - This is used for reporting the mountpoints in use by a container. - properties: - Type: - description: | - The mount type: - - - `bind` a mount of a file or directory from the host into the container. - - `volume` a docker volume with the given `Name`. - - `image` a docker image - - `tmpfs` a `tmpfs`. - - `npipe` a named pipe from the host into the container. - - `cluster` a Swarm cluster volume - type: "string" - enum: - - "bind" - - "volume" - - "image" - - "tmpfs" - - "npipe" - - "cluster" - example: "volume" - Name: - description: | - Name is the name reference to the underlying data defined by `Source` - e.g., the volume name. - type: "string" - example: "myvolume" - Source: - description: | - Source location of the mount. - - For volumes, this contains the storage location of the volume (within - `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains - the source (host) part of the bind-mount. For `tmpfs` mount points, this - field is empty. - type: "string" - example: "/var/lib/docker/volumes/myvolume/_data" - Destination: - description: | - Destination is the path relative to the container root (`/`) where - the `Source` is mounted inside the container. - type: "string" - example: "/usr/share/nginx/html/" - Driver: - description: | - Driver is the volume driver used to create the volume (if it is a volume). - type: "string" - example: "local" - Mode: - description: | - Mode is a comma separated list of options supplied by the user when - creating the bind/volume mount. - - The default is platform-specific (`"z"` on Linux, empty on Windows). - type: "string" - example: "z" - RW: - description: | - Whether the mount is mounted writable (read-write). - type: "boolean" - example: true - Propagation: - description: | - Propagation describes how mounts are propagated from the host into the - mount point, and vice-versa. Refer to the [Linux kernel documentation](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt) - for details. This field is not used on Windows. - type: "string" - example: "" - - DeviceMapping: - type: "object" - description: "A device mapping between the host and container" - properties: - PathOnHost: - type: "string" - PathInContainer: - type: "string" - CgroupPermissions: - type: "string" - example: - PathOnHost: "/dev/deviceName" - PathInContainer: "/dev/deviceName" - CgroupPermissions: "mrw" - - DeviceRequest: - type: "object" - description: "A request for devices to be sent to device drivers" - properties: - Driver: - type: "string" - example: "nvidia" - Count: - type: "integer" - example: -1 - DeviceIDs: - type: "array" - items: - type: "string" - example: - - "0" - - "1" - - "GPU-fef8089b-4820-abfc-e83e-94318197576e" - Capabilities: - description: | - A list of capabilities; an OR list of AND lists of capabilities. - type: "array" - items: - type: "array" - items: - type: "string" - example: - # gpu AND nvidia AND compute - - ["gpu", "nvidia", "compute"] - Options: - description: | - Driver-specific options, specified as a key/value pairs. These options - are passed directly to the driver. - type: "object" - additionalProperties: - type: "string" - - ThrottleDevice: - type: "object" - properties: - Path: - description: "Device path" - type: "string" - Rate: - description: "Rate" - type: "integer" - format: "int64" - minimum: 0 - - Mount: - type: "object" - properties: - Target: - description: "Container path." - type: "string" - Source: - description: "Mount source (e.g. a volume name, a host path)." - type: "string" - Type: - description: | - The mount type. Available types: - - - `bind` Mounts a file or directory from the host into the container. Must exist prior to creating the container. - - `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed. - - `image` Mounts an image. - - `tmpfs` Create a tmpfs with the given options. The mount source cannot be specified for tmpfs. - - `npipe` Mounts a named pipe from the host into the container. Must exist prior to creating the container. - - `cluster` a Swarm cluster volume - type: "string" - enum: - - "bind" - - "volume" - - "image" - - "tmpfs" - - "npipe" - - "cluster" - ReadOnly: - description: "Whether the mount should be read-only." - type: "boolean" - Consistency: - description: "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`." - type: "string" - BindOptions: - description: "Optional configuration for the `bind` type." - type: "object" - properties: - Propagation: - description: "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`." - type: "string" - enum: - - "private" - - "rprivate" - - "shared" - - "rshared" - - "slave" - - "rslave" - NonRecursive: - description: "Disable recursive bind mount." - type: "boolean" - default: false - CreateMountpoint: - description: "Create mount point on host if missing" - type: "boolean" - default: false - ReadOnlyNonRecursive: - description: | - Make the mount non-recursively read-only, but still leave the mount recursive - (unless NonRecursive is set to `true` in conjunction). - - Added in v1.44, before that version all read-only mounts were - non-recursive by default. To match the previous behaviour this - will default to `true` for clients on versions prior to v1.44. - type: "boolean" - default: false - ReadOnlyForceRecursive: - description: "Raise an error if the mount cannot be made recursively read-only." - type: "boolean" - default: false - VolumeOptions: - description: "Optional configuration for the `volume` type." - type: "object" - properties: - NoCopy: - description: "Populate volume with data from the target." - type: "boolean" - default: false - Labels: - description: "User-defined key/value metadata." - type: "object" - additionalProperties: - type: "string" - DriverConfig: - description: "Map of driver specific options" - type: "object" - properties: - Name: - description: "Name of the driver to use to create the volume." - type: "string" - Options: - description: "key/value map of driver specific options." - type: "object" - additionalProperties: - type: "string" - Subpath: - description: "Source path inside the volume. Must be relative without any back traversals." - type: "string" - example: "dir-inside-volume/subdirectory" - ImageOptions: - description: "Optional configuration for the `image` type." - type: "object" - properties: - Subpath: - description: "Source path inside the image. Must be relative without any back traversals." - type: "string" - example: "dir-inside-image/subdirectory" - TmpfsOptions: - description: "Optional configuration for the `tmpfs` type." - type: "object" - properties: - SizeBytes: - description: "The size for the tmpfs mount in bytes." - type: "integer" - format: "int64" - Mode: - description: "The permission mode for the tmpfs mount in an integer." - type: "integer" - Options: - description: | - The options to be passed to the tmpfs mount. An array of arrays. - Flag options should be provided as 1-length arrays. Other types - should be provided as as 2-length arrays, where the first item is - the key and the second the value. - type: "array" - items: - type: "array" - minItems: 1 - maxItems: 2 - items: - type: "string" - example: - [["noexec"]] - - RestartPolicy: - description: | - The behavior to apply when the container exits. The default is not to - restart. - - An ever increasing delay (double the previous delay, starting at 100ms) is - added before each restart to prevent flooding the server. - type: "object" - properties: - Name: - type: "string" - description: | - - Empty string means not to restart - - `no` Do not automatically restart - - `always` Always restart - - `unless-stopped` Restart always except when the user has manually stopped the container - - `on-failure` Restart only when the container exit code is non-zero - enum: - - "" - - "no" - - "always" - - "unless-stopped" - - "on-failure" - MaximumRetryCount: - type: "integer" - description: | - If `on-failure` is used, the number of times to retry before giving up. - - Resources: - description: "A container's resources (cgroups config, ulimits, etc)" - type: "object" - properties: - # Applicable to all platforms - CpuShares: - description: | - An integer value representing this container's relative CPU weight - versus other containers. - type: "integer" - Memory: - description: "Memory limit in bytes." - type: "integer" - format: "int64" - default: 0 - # Applicable to UNIX platforms - CgroupParent: - description: | - Path to `cgroups` under which the container's `cgroup` is created. If - the path is not absolute, the path is considered to be relative to the - `cgroups` path of the init process. Cgroups are created if they do not - already exist. - type: "string" - BlkioWeight: - description: "Block IO weight (relative weight)." - type: "integer" - minimum: 0 - maximum: 1000 - BlkioWeightDevice: - description: | - Block IO weight (relative device weight) in the form: - - ``` - [{"Path": "device_path", "Weight": weight}] - ``` - type: "array" - items: - type: "object" - properties: - Path: - type: "string" - Weight: - type: "integer" - minimum: 0 - BlkioDeviceReadBps: - description: | - Limit read rate (bytes per second) from a device, in the form: - - ``` - [{"Path": "device_path", "Rate": rate}] - ``` - type: "array" - items: - $ref: "#/definitions/ThrottleDevice" - BlkioDeviceWriteBps: - description: | - Limit write rate (bytes per second) to a device, in the form: - - ``` - [{"Path": "device_path", "Rate": rate}] - ``` - type: "array" - items: - $ref: "#/definitions/ThrottleDevice" - BlkioDeviceReadIOps: - description: | - Limit read rate (IO per second) from a device, in the form: - - ``` - [{"Path": "device_path", "Rate": rate}] - ``` - type: "array" - items: - $ref: "#/definitions/ThrottleDevice" - BlkioDeviceWriteIOps: - description: | - Limit write rate (IO per second) to a device, in the form: - - ``` - [{"Path": "device_path", "Rate": rate}] - ``` - type: "array" - items: - $ref: "#/definitions/ThrottleDevice" - CpuPeriod: - description: "The length of a CPU period in microseconds." - type: "integer" - format: "int64" - CpuQuota: - description: | - Microseconds of CPU time that the container can get in a CPU period. - type: "integer" - format: "int64" - CpuRealtimePeriod: - description: | - The length of a CPU real-time period in microseconds. Set to 0 to - allocate no time allocated to real-time tasks. - type: "integer" - format: "int64" - CpuRealtimeRuntime: - description: | - The length of a CPU real-time runtime in microseconds. Set to 0 to - allocate no time allocated to real-time tasks. - type: "integer" - format: "int64" - CpusetCpus: - description: | - CPUs in which to allow execution (e.g., `0-3`, `0,1`). - type: "string" - example: "0-3" - CpusetMems: - description: | - Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only - effective on NUMA systems. - type: "string" - Devices: - description: "A list of devices to add to the container." - type: "array" - items: - $ref: "#/definitions/DeviceMapping" - DeviceCgroupRules: - description: "a list of cgroup rules to apply to the container" - type: "array" - items: - type: "string" - example: "c 13:* rwm" - DeviceRequests: - description: | - A list of requests for devices to be sent to device drivers. - type: "array" - items: - $ref: "#/definitions/DeviceRequest" - KernelMemoryTCP: - description: | - Hard limit for kernel TCP buffer memory (in bytes). Depending on the - OCI runtime in use, this option may be ignored. It is no longer supported - by the default (runc) runtime. - - This field is omitted when empty. - - **Deprecated**: This field is deprecated as kernel 6.12 has deprecated `memory.kmem.tcp.limit_in_bytes` field - for cgroups v1. This field will be removed in a future release. - type: "integer" - format: "int64" - MemoryReservation: - description: "Memory soft limit in bytes." - type: "integer" - format: "int64" - MemorySwap: - description: | - Total memory limit (memory + swap). Set as `-1` to enable unlimited - swap. - type: "integer" - format: "int64" - MemorySwappiness: - description: | - Tune a container's memory swappiness behavior. Accepts an integer - between 0 and 100. - type: "integer" - format: "int64" - minimum: 0 - maximum: 100 - NanoCpus: - description: "CPU quota in units of 10-9 CPUs." - type: "integer" - format: "int64" - OomKillDisable: - description: "Disable OOM Killer for the container." - type: "boolean" - Init: - description: | - Run an init inside the container that forwards signals and reaps - processes. This field is omitted if empty, and the default (as - configured on the daemon) is used. - type: "boolean" - x-nullable: true - PidsLimit: - description: | - Tune a container's PIDs limit. Set `0` or `-1` for unlimited, or `null` - to not change. - type: "integer" - format: "int64" - x-nullable: true - Ulimits: - description: | - A list of resource limits to set in the container. For example: - - ``` - {"Name": "nofile", "Soft": 1024, "Hard": 2048} - ``` - type: "array" - items: - type: "object" - properties: - Name: - description: "Name of ulimit" - type: "string" - Soft: - description: "Soft limit" - type: "integer" - Hard: - description: "Hard limit" - type: "integer" - # Applicable to Windows - CpuCount: - description: | - The number of usable CPUs (Windows only). - - On Windows Server containers, the processor resource controls are - mutually exclusive. The order of precedence is `CPUCount` first, then - `CPUShares`, and `CPUPercent` last. - type: "integer" - format: "int64" - CpuPercent: - description: | - The usable percentage of the available CPUs (Windows only). - - On Windows Server containers, the processor resource controls are - mutually exclusive. The order of precedence is `CPUCount` first, then - `CPUShares`, and `CPUPercent` last. - type: "integer" - format: "int64" - IOMaximumIOps: - description: "Maximum IOps for the container system drive (Windows only)" - type: "integer" - format: "int64" - IOMaximumBandwidth: - description: | - Maximum IO in bytes per second for the container system drive - (Windows only). - type: "integer" - format: "int64" - - Limit: - description: | - An object describing a limit on resources which can be requested by a task. - type: "object" - properties: - NanoCPUs: - type: "integer" - format: "int64" - example: 4000000000 - MemoryBytes: - type: "integer" - format: "int64" - example: 8272408576 - Pids: - description: | - Limits the maximum number of PIDs in the container. Set `0` for unlimited. - type: "integer" - format: "int64" - default: 0 - example: 100 - - ResourceObject: - description: | - An object describing the resources which can be advertised by a node and - requested by a task. - type: "object" - properties: - NanoCPUs: - type: "integer" - format: "int64" - example: 4000000000 - MemoryBytes: - type: "integer" - format: "int64" - example: 8272408576 - GenericResources: - $ref: "#/definitions/GenericResources" - - GenericResources: - description: | - User-defined resources can be either Integer resources (e.g, `SSD=3`) or - String resources (e.g, `GPU=UUID1`). - type: "array" - items: - type: "object" - properties: - NamedResourceSpec: - type: "object" - properties: - Kind: - type: "string" - Value: - type: "string" - DiscreteResourceSpec: - type: "object" - properties: - Kind: - type: "string" - Value: - type: "integer" - format: "int64" - example: - - DiscreteResourceSpec: - Kind: "SSD" - Value: 3 - - NamedResourceSpec: - Kind: "GPU" - Value: "UUID1" - - NamedResourceSpec: - Kind: "GPU" - Value: "UUID2" - - HealthConfig: - description: "A test to perform to check that the container is healthy." - type: "object" - properties: - Test: - description: | - The test to perform. Possible values are: - - - `[]` inherit healthcheck from image or parent image - - `["NONE"]` disable healthcheck - - `["CMD", args...]` exec arguments directly - - `["CMD-SHELL", command]` run command with system's default shell - type: "array" - items: - type: "string" - Interval: - description: | - The time to wait between checks in nanoseconds. It should be 0 or at - least 1000000 (1 ms). 0 means inherit. - type: "integer" - format: "int64" - Timeout: - description: | - The time to wait before considering the check to have hung. It should - be 0 or at least 1000000 (1 ms). 0 means inherit. - type: "integer" - format: "int64" - Retries: - description: | - The number of consecutive failures needed to consider a container as - unhealthy. 0 means inherit. - type: "integer" - StartPeriod: - description: | - Start period for the container to initialize before starting - health-retries countdown in nanoseconds. It should be 0 or at least - 1000000 (1 ms). 0 means inherit. - type: "integer" - format: "int64" - StartInterval: - description: | - The time to wait between checks in nanoseconds during the start period. - It should be 0 or at least 1000000 (1 ms). 0 means inherit. - type: "integer" - format: "int64" - - Health: - description: | - Health stores information about the container's healthcheck results. - type: "object" - x-nullable: true - properties: - Status: - description: | - Status is one of `none`, `starting`, `healthy` or `unhealthy` - - - "none" Indicates there is no healthcheck - - "starting" Starting indicates that the container is not yet ready - - "healthy" Healthy indicates that the container is running correctly - - "unhealthy" Unhealthy indicates that the container has a problem - type: "string" - enum: - - "none" - - "starting" - - "healthy" - - "unhealthy" - example: "healthy" - FailingStreak: - description: "FailingStreak is the number of consecutive failures" - type: "integer" - example: 0 - Log: - type: "array" - description: | - Log contains the last few results (oldest first) - items: - $ref: "#/definitions/HealthcheckResult" - - HealthcheckResult: - description: | - HealthcheckResult stores information about a single run of a healthcheck probe - type: "object" - x-nullable: true - properties: - Start: - description: | - Date and time at which this check started in - [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. - type: "string" - format: "date-time" - example: "2020-01-04T10:44:24.496525531Z" - End: - description: | - Date and time at which this check ended in - [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds. - type: "string" - format: "dateTime" - example: "2020-01-04T10:45:21.364524523Z" - ExitCode: - description: | - ExitCode meanings: - - - `0` healthy - - `1` unhealthy - - `2` reserved (considered unhealthy) - - other values: error running probe - type: "integer" - example: 0 - Output: - description: "Output from last check" - type: "string" - - HostConfig: - description: "Container configuration that depends on the host we are running on" - allOf: - - $ref: "#/definitions/Resources" - - type: "object" - properties: - # Applicable to all platforms - Binds: - type: "array" - description: | - A list of volume bindings for this container. Each volume binding - is a string in one of these forms: - - - `host-src:container-dest[:options]` to bind-mount a host path - into the container. Both `host-src`, and `container-dest` must - be an _absolute_ path. - - `volume-name:container-dest[:options]` to bind-mount a volume - managed by a volume driver into the container. `container-dest` - must be an _absolute_ path. - - `options` is an optional, comma-delimited list of: - - - `nocopy` disables automatic copying of data from the container - path to the volume. The `nocopy` flag only applies to named volumes. - - `[ro|rw]` mounts a volume read-only or read-write, respectively. - If omitted or set to `rw`, volumes are mounted read-write. - - `[z|Z]` applies SELinux labels to allow or deny multiple containers - to read and write to the same volume. - - `z`: a _shared_ content label is applied to the content. This - label indicates that multiple containers can share the volume - content, for both reading and writing. - - `Z`: a _private unshared_ label is applied to the content. - This label indicates that only the current container can use - a private volume. Labeling systems such as SELinux require - proper labels to be placed on volume content that is mounted - into a container. Without a label, the security system can - prevent a container's processes from using the content. By - default, the labels set by the host operating system are not - modified. - - `[[r]shared|[r]slave|[r]private]` specifies mount - [propagation behavior](https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt). - This only applies to bind-mounted volumes, not internal volumes - or named volumes. Mount propagation requires the source mount - point (the location where the source directory is mounted in the - host operating system) to have the correct propagation properties. - For shared volumes, the source mount point must be set to `shared`. - For slave volumes, the mount must be set to either `shared` or - `slave`. - items: - type: "string" - ContainerIDFile: - type: "string" - description: "Path to a file where the container ID is written" - example: "" - LogConfig: - type: "object" - description: "The logging configuration for this container" - properties: - Type: - description: |- - Name of the logging driver used for the container or "none" - if logging is disabled. - type: "string" - enum: - - "local" - - "json-file" - - "syslog" - - "journald" - - "gelf" - - "fluentd" - - "awslogs" - - "splunk" - - "etwlogs" - - "none" - Config: - description: |- - Driver-specific configuration options for the logging driver. - type: "object" - additionalProperties: - type: "string" - example: - "max-file": "5" - "max-size": "10m" - NetworkMode: - type: "string" - description: | - Network mode to use for this container. Supported standard values - are: `bridge`, `host`, `none`, and `container:`. Any - other value is taken as a custom network's name to which this - container should connect to. - PortBindings: - $ref: "#/definitions/PortMap" - RestartPolicy: - $ref: "#/definitions/RestartPolicy" - AutoRemove: - type: "boolean" - description: | - Automatically remove the container when the container's process - exits. This has no effect if `RestartPolicy` is set. - VolumeDriver: - type: "string" - description: "Driver that this container uses to mount volumes." - VolumesFrom: - type: "array" - description: | - A list of volumes to inherit from another container, specified in - the form `[:]`. - items: - type: "string" - Mounts: - description: | - Specification for mounts to be added to the container. - type: "array" - items: - $ref: "#/definitions/Mount" - ConsoleSize: - type: "array" - description: | - Initial console size, as an `[height, width]` array. - x-nullable: true - minItems: 2 - maxItems: 2 - items: - type: "integer" - minimum: 0 - example: [80, 64] - Annotations: - type: "object" - description: | - Arbitrary non-identifying metadata attached to container and - provided to the runtime when the container is started. - additionalProperties: - type: "string" - - # Applicable to UNIX platforms - CapAdd: - type: "array" - description: | - A list of kernel capabilities to add to the container. Conflicts - with option 'Capabilities'. - items: - type: "string" - CapDrop: - type: "array" - description: | - A list of kernel capabilities to drop from the container. Conflicts - with option 'Capabilities'. - items: - type: "string" - CgroupnsMode: - type: "string" - enum: - - "private" - - "host" - description: | - cgroup namespace mode for the container. Possible values are: - - - `"private"`: the container runs in its own private cgroup namespace - - `"host"`: use the host system's cgroup namespace - - If not specified, the daemon default is used, which can either be `"private"` - or `"host"`, depending on daemon version, kernel support and configuration. - Dns: - type: "array" - description: "A list of DNS servers for the container to use." - items: - type: "string" - DnsOptions: - type: "array" - description: "A list of DNS options." - items: - type: "string" - DnsSearch: - type: "array" - description: "A list of DNS search domains." - items: - type: "string" - ExtraHosts: - type: "array" - description: | - A list of hostnames/IP mappings to add to the container's `/etc/hosts` - file. Specified in the form `["hostname:IP"]`. - items: - type: "string" - GroupAdd: - type: "array" - description: | - A list of additional groups that the container process will run as. - items: - type: "string" - IpcMode: - type: "string" - description: | - IPC sharing mode for the container. Possible values are: - - - `"none"`: own private IPC namespace, with /dev/shm not mounted - - `"private"`: own private IPC namespace - - `"shareable"`: own private IPC namespace, with a possibility to share it with other containers - - `"container:"`: join another (shareable) container's IPC namespace - - `"host"`: use the host system's IPC namespace - - If not specified, daemon default is used, which can either be `"private"` - or `"shareable"`, depending on daemon version and configuration. - Cgroup: - type: "string" - description: "Cgroup to use for the container." - Links: - type: "array" - description: | - A list of links for the container in the form `container_name:alias`. - items: - type: "string" - OomScoreAdj: - type: "integer" - description: | - An integer value containing the score given to the container in - order to tune OOM killer preferences. - example: 500 - PidMode: - type: "string" - description: | - Set the PID (Process) Namespace mode for the container. It can be - either: - - - `"container:"`: joins another container's PID namespace - - `"host"`: use the host's PID namespace inside the container - Privileged: - type: "boolean" - description: |- - Gives the container full access to the host. - PublishAllPorts: - type: "boolean" - description: | - Allocates an ephemeral host port for all of a container's - exposed ports. - - Ports are de-allocated when the container stops and allocated when - the container starts. The allocated port might be changed when - restarting the container. - - The port is selected from the ephemeral port range that depends on - the kernel. For example, on Linux the range is defined by - `/proc/sys/net/ipv4/ip_local_port_range`. - ReadonlyRootfs: - type: "boolean" - description: "Mount the container's root filesystem as read only." - SecurityOpt: - type: "array" - description: | - A list of string values to customize labels for MLS systems, such - as SELinux. - items: - type: "string" - StorageOpt: - type: "object" - description: | - Storage driver options for this container, in the form `{"size": "120G"}`. - additionalProperties: - type: "string" - Tmpfs: - type: "object" - description: | - A map of container directories which should be replaced by tmpfs - mounts, and their corresponding mount options. For example: - - ``` - { "/run": "rw,noexec,nosuid,size=65536k" } - ``` - additionalProperties: - type: "string" - UTSMode: - type: "string" - description: "UTS namespace to use for the container." - UsernsMode: - type: "string" - description: | - Sets the usernamespace mode for the container when usernamespace - remapping option is enabled. - ShmSize: - type: "integer" - format: "int64" - description: | - Size of `/dev/shm` in bytes. If omitted, the system uses 64MB. - minimum: 0 - Sysctls: - type: "object" - x-nullable: true - description: |- - A list of kernel parameters (sysctls) to set in the container. - - This field is omitted if not set. - additionalProperties: - type: "string" - example: - "net.ipv4.ip_forward": "1" - Runtime: - type: "string" - x-nullable: true - description: |- - Runtime to use with this container. - # Applicable to Windows - Isolation: - type: "string" - description: | - Isolation technology of the container. (Windows only) - enum: - - "default" - - "process" - - "hyperv" - - "" - MaskedPaths: - type: "array" - description: | - The list of paths to be masked inside the container (this overrides - the default set of paths). - items: - type: "string" - example: - - "/proc/asound" - - "/proc/acpi" - - "/proc/kcore" - - "/proc/keys" - - "/proc/latency_stats" - - "/proc/timer_list" - - "/proc/timer_stats" - - "/proc/sched_debug" - - "/proc/scsi" - - "/sys/firmware" - - "/sys/devices/virtual/powercap" - ReadonlyPaths: - type: "array" - description: | - The list of paths to be set as read-only inside the container - (this overrides the default set of paths). - items: - type: "string" - example: - - "/proc/bus" - - "/proc/fs" - - "/proc/irq" - - "/proc/sys" - - "/proc/sysrq-trigger" - - ContainerConfig: - description: | - Configuration for a container that is portable between hosts. - type: "object" - properties: - Hostname: - description: | - The hostname to use for the container, as a valid RFC 1123 hostname. - type: "string" - example: "439f4e91bd1d" - Domainname: - description: | - The domain name to use for the container. - type: "string" - User: - description: |- - Commands run as this user inside the container. If omitted, commands - run as the user specified in the image the container was started from. - - Can be either user-name or UID, and optional group-name or GID, - separated by a colon (`[<:group-name|GID>]`). - type: "string" - example: "123:456" - AttachStdin: - description: "Whether to attach to `stdin`." - type: "boolean" - default: false - AttachStdout: - description: "Whether to attach to `stdout`." - type: "boolean" - default: true - AttachStderr: - description: "Whether to attach to `stderr`." - type: "boolean" - default: true - ExposedPorts: - description: | - An object mapping ports to an empty object in the form: - - `{"/": {}}` - type: "object" - x-nullable: true - additionalProperties: - type: "object" - enum: - - {} - default: {} - example: { - "80/tcp": {}, - "443/tcp": {} - } - Tty: - description: | - Attach standard streams to a TTY, including `stdin` if it is not closed. - type: "boolean" - default: false - OpenStdin: - description: "Open `stdin`" - type: "boolean" - default: false - StdinOnce: - description: "Close `stdin` after one attached client disconnects" - type: "boolean" - default: false - Env: - description: | - A list of environment variables to set inside the container in the - form `["VAR=value", ...]`. A variable without `=` is removed from the - environment, rather than to have an empty value. - type: "array" - items: - type: "string" - example: - - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - Cmd: - description: | - Command to run specified as a string or an array of strings. - type: "array" - items: - type: "string" - example: ["/bin/sh"] - Healthcheck: - $ref: "#/definitions/HealthConfig" - ArgsEscaped: - description: "Command is already escaped (Windows only)" - type: "boolean" - default: false - example: false - x-nullable: true - Image: - description: | - The name (or reference) of the image to use when creating the container, - or which was used when the container was created. - type: "string" - example: "example-image:1.0" - Volumes: - description: | - An object mapping mount point paths inside the container to empty - objects. - type: "object" - additionalProperties: - type: "object" - enum: - - {} - default: {} - WorkingDir: - description: "The working directory for commands to run in." - type: "string" - example: "/public/" - Entrypoint: - description: | - The entry point for the container as a string or an array of strings. - - If the array consists of exactly one empty string (`[""]`) then the - entry point is reset to system default (i.e., the entry point used by - docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). - type: "array" - items: - type: "string" - example: [] - NetworkDisabled: - description: "Disable networking for the container." - type: "boolean" - x-nullable: true - MacAddress: - description: | - MAC address of the container. - - Deprecated: this field is deprecated in API v1.44 and up. Use EndpointSettings.MacAddress instead. - type: "string" - x-nullable: true - OnBuild: - description: | - `ONBUILD` metadata that were defined in the image's `Dockerfile`. - type: "array" - x-nullable: true - items: - type: "string" - example: [] - Labels: - description: "User-defined key/value metadata." - type: "object" - additionalProperties: - type: "string" - example: - com.example.some-label: "some-value" - com.example.some-other-label: "some-other-value" - StopSignal: - description: | - Signal to stop a container as a string or unsigned integer. - type: "string" - example: "SIGTERM" - x-nullable: true - StopTimeout: - description: "Timeout to stop a container in seconds." - type: "integer" - default: 10 - x-nullable: true - Shell: - description: | - Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. - type: "array" - x-nullable: true - items: - type: "string" - example: ["/bin/sh", "-c"] - - ImageConfig: - description: | - Configuration of the image. These fields are used as defaults - when starting a container from the image. - type: "object" - properties: - User: - description: "The user that commands are run as inside the container." - type: "string" - example: "web:web" - ExposedPorts: - description: | - An object mapping ports to an empty object in the form: - - `{"/": {}}` - type: "object" - x-nullable: true - additionalProperties: - type: "object" - enum: - - {} - default: {} - example: { - "80/tcp": {}, - "443/tcp": {} - } - Env: - description: | - A list of environment variables to set inside the container in the - form `["VAR=value", ...]`. A variable without `=` is removed from the - environment, rather than to have an empty value. - type: "array" - items: - type: "string" - example: - - "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - Cmd: - description: | - Command to run specified as a string or an array of strings. - type: "array" - items: - type: "string" - example: ["/bin/sh"] - Healthcheck: - $ref: "#/definitions/HealthConfig" - ArgsEscaped: - description: "Command is already escaped (Windows only)" - type: "boolean" - default: false - example: false - x-nullable: true - Volumes: - description: | - An object mapping mount point paths inside the container to empty - objects. - type: "object" - additionalProperties: - type: "object" - enum: - - {} - default: {} - example: - "/app/data": {} - "/app/config": {} - WorkingDir: - description: "The working directory for commands to run in." - type: "string" - example: "/public/" - Entrypoint: - description: | - The entry point for the container as a string or an array of strings. - - If the array consists of exactly one empty string (`[""]`) then the - entry point is reset to system default (i.e., the entry point used by - docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`). - type: "array" - items: - type: "string" - example: [] - OnBuild: - description: | - `ONBUILD` metadata that were defined in the image's `Dockerfile`. - type: "array" - x-nullable: true - items: - type: "string" - example: [] - Labels: - description: "User-defined key/value metadata." - type: "object" - additionalProperties: - type: "string" - example: - com.example.some-label: "some-value" - com.example.some-other-label: "some-other-value" - StopSignal: - description: | - Signal to stop a container as a string or unsigned integer. - type: "string" - example: "SIGTERM" - x-nullable: true - Shell: - description: | - Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell. - type: "array" - x-nullable: true - items: - type: "string" - example: ["/bin/sh", "-c"] - - NetworkingConfig: - description: | - NetworkingConfig represents the container's networking configuration for - each of its interfaces. - It is used for the networking configs specified in the `docker create` - and `docker network connect` commands. - type: "object" - properties: - EndpointsConfig: - description: | - A mapping of network name to endpoint configuration for that network. - The endpoint configuration can be left empty to connect to that - network with no particular endpoint configuration. - type: "object" - additionalProperties: - $ref: "#/definitions/EndpointSettings" - example: - # putting an example here, instead of using the example values from - # /definitions/EndpointSettings, because EndpointSettings contains - # operational data returned when inspecting a container that we don't - # accept here. - EndpointsConfig: - isolated_nw: - IPAMConfig: - IPv4Address: "172.20.30.33" - IPv6Address: "2001:db8:abcd::3033" - LinkLocalIPs: - - "169.254.34.68" - - "fe80::3468" - MacAddress: "02:42:ac:12:05:02" - Links: - - "container_1" - - "container_2" - Aliases: - - "server_x" - - "server_y" - database_nw: {} - - NetworkSettings: - description: "NetworkSettings exposes the network settings in the API" - type: "object" - properties: - Bridge: - description: | - Name of the default bridge interface when dockerd's --bridge flag is set. - - Deprecated: This field is only set when the daemon is started with the --bridge flag specified. - type: "string" - example: "docker0" - SandboxID: - description: SandboxID uniquely represents a container's network stack. - type: "string" - example: "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" - HairpinMode: - description: | - Indicates if hairpin NAT should be enabled on the virtual interface. - - Deprecated: This field is never set and will be removed in a future release. - type: "boolean" - example: false - LinkLocalIPv6Address: - description: | - IPv6 unicast address using the link-local prefix. - - Deprecated: This field is never set and will be removed in a future release. - type: "string" - example: "" - LinkLocalIPv6PrefixLen: - description: | - Prefix length of the IPv6 unicast address. - - Deprecated: This field is never set and will be removed in a future release. - type: "integer" - example: "" - Ports: - $ref: "#/definitions/PortMap" - SandboxKey: - description: SandboxKey is the full path of the netns handle - type: "string" - example: "/var/run/docker/netns/8ab54b426c38" - - SecondaryIPAddresses: - description: "Deprecated: This field is never set and will be removed in a future release." - type: "array" - items: - $ref: "#/definitions/Address" - x-nullable: true - - SecondaryIPv6Addresses: - description: "Deprecated: This field is never set and will be removed in a future release." - type: "array" - items: - $ref: "#/definitions/Address" - x-nullable: true - - # TODO properties below are part of DefaultNetworkSettings, which is - # marked as deprecated since Docker 1.9 and to be removed in Docker v17.12 - EndpointID: - description: | - EndpointID uniquely represents a service endpoint in a Sandbox. - -

    nU%^tg*bOgcZJrkwA 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%0Ao-({;jZ}>g*lwD8R<>4e=BG+Br&@Q;5*q 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®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

    FUdk0vH0@aB@Z( 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

  2. eU@U!&``{JtJkwRaDP7n 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%0DqE0F&<|)N4!jb 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%0AxCd3XHlzD4+e)Ie}B-ZVq(2dQ;$aK7X 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

    dLq3@(U63Pqp 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%0D9A0Qcm!jH@ZklZ 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